From 09ee1cb743c8e9a1c513722b02d7b454ab8545b2 Mon Sep 17 00:00:00 2001
From: SajjadMahmoody <117562560+SajjadMahmoody@users.noreply.github.com>
Date: Fri, 3 Apr 2026 17:25:17 +0330
Subject: [PATCH] feat: initial project setup with Laravel 12 and Filament v4
---
.editorconfig | 18 +
.env.example | 73 +
.gitattributes | 11 +
.gitignore | 47 +-
app/Casts/JalaliDatetime.php | 33 +
app/Filament/Exports/RoleExporter.php | 42 +
app/Filament/Exports/UserExporter.php | 42 +
app/Filament/Pages/Auth/Login.php | 49 +
app/Filament/Pages/Dashboard.php | 22 +
app/Filament/Pages/SmsLogsPage.php | 337 +
app/Filament/Pages/SyncPage.php | 126 +
app/Filament/Resources/DoctorResource.php | 290 +
.../DoctorResource/Pages/CreateDoctor.php | 18 +
.../DoctorResource/Pages/EditDoctor.php | 26 +
.../DoctorResource/Pages/ListDoctors.php | 22 +
app/Filament/Resources/MedicationResource.php | 202 +
.../Pages/CreateMedication.php | 21 +
.../Pages/EditMedication.php | 29 +
.../Pages/ListMedications.php | 25 +
app/Filament/Resources/OsurgAuditResource.php | 110 +
.../Pages/ListOsurgAudits.php | 18 +
.../Resources/OsurgInitialResource.php | 264 +
.../Pages/CreateOsurgInitial.php | 18 +
.../Pages/EditOsurgInitial.php | 26 +
.../Pages/ListOsurgInitials.php | 22 +
.../Resources/PatientIllnessResource.php | 278 +
.../Pages/CreatePatientIllness.php | 18 +
.../Pages/EditPatientIllness.php | 26 +
.../Pages/ListPatientIllnesses.php | 22 +
app/Filament/Resources/PatientResource.php | 998 ++
.../PatientResource/Pages/CreatePatient.php | 21 +
.../PatientResource/Pages/EditPatient.php | 53 +
.../PatientResource/Pages/ListPatients.php | 25 +
.../VisitsRelationManager.php | 202 +
.../Resources/PaymentTypeResource.php | 271 +
.../Pages/CreatePaymentType.php | 18 +
.../Pages/EditPaymentType.php | 26 +
.../Pages/ListPaymentTypes.php | 22 +
.../Resources/PrescriptionResource.php | 373 +
.../Pages/CreatePrescription.php | 49 +
.../Pages/EditPrescription.php | 59 +
.../Pages/ListPrescriptions.php | 22 +
app/Filament/Resources/RoleResource.php | 335 +
.../RoleResource/Pages/CreateRole.php | 18 +
.../Resources/RoleResource/Pages/EditRole.php | 26 +
.../RoleResource/Pages/ListRoles.php | 13 +
.../Resources/RoleResource/Pages/ViewRole.php | 13 +
.../Resources/SurgeryAppointmentResource.php | 194 +
.../Pages/CreateSurgeryAppointment.php | 90 +
.../Pages/EditSurgeryAppointment.php | 112 +
.../Pages/ListSurgeryAppointments.php | 22 +
.../Resources/SurgeryCenterResource.php | 291 +
.../Pages/CreateSurgeryCenter.php | 18 +
.../Pages/EditSurgeryCenter.php | 26 +
.../Pages/ListSurgeryCenters.php | 22 +
app/Filament/Resources/TreatmentResource.php | 277 +
.../Pages/CreateTreatment.php | 18 +
.../TreatmentResource/Pages/EditTreatment.php | 26 +
.../Pages/ListTreatments.php | 22 +
app/Filament/Resources/UserResource.php | 279 +
.../UserResource/Pages/CreateUser.php | 18 +
.../Resources/UserResource/Pages/EditUser.php | 26 +
.../UserResource/Pages/ListUsers.php | 22 +
app/Filament/Resources/VisitResource.php | 406 +
.../VisitResource/Pages/CreateVisit.php | 26 +
.../VisitResource/Pages/EditVisit.php | 34 +
.../VisitResource/Pages/ListVisits.php | 22 +
app/Http/Controllers/Controller.php | 8 +
.../PrescriptionPrintController.php | 64 +
app/Http/Controllers/SyncController.php | 85 +
app/Http/Middleware/SetLocale.php | 21 +
app/Livewire/SettingsDropdown.php | 46 +
app/Models/Doctor.php | 31 +
app/Models/Medication.php | 33 +
app/Models/OsurgInitial.php | 35 +
app/Models/Patient.php | 105 +
app/Models/PatientIllness.php | 29 +
app/Models/PaymentType.php | 26 +
app/Models/Prescription.php | 49 +
app/Models/SurgeryAppointment.php | 50 +
app/Models/SurgeryCenter.php | 28 +
app/Models/SyncLog.php | 53 +
app/Models/Treatment.php | 27 +
app/Models/User.php | 71 +
app/Models/Visit.php | 80 +
app/Observers/SyncObserver.php | 72 +
app/Policies/DoctorPolicy.php | 70 +
app/Policies/MedicationPolicy.php | 70 +
app/Policies/OsurgInitialPolicy.php | 70 +
app/Policies/PatientIllnessPolicy.php | 70 +
app/Policies/PatientPolicy.php | 70 +
app/Policies/PaymentTypePolicy.php | 70 +
app/Policies/PrescriptionPolicy.php | 70 +
app/Policies/RolePolicy.php | 70 +
app/Policies/SurgeryAppointmentPolicy.php | 70 +
app/Policies/SurgeryCenterPolicy.php | 70 +
app/Policies/SyncLogPolicy.php | 70 +
app/Policies/TreatmentPolicy.php | 70 +
app/Policies/UserPolicy.php | 67 +
app/Policies/VisitPolicy.php | 69 +
app/Providers/AppServiceProvider.php | 48 +
app/Providers/Filament/AdminPanelProvider.php | 129 +
app/Providers/NativeAppServiceProvider.php | 64 +
app/Services/PdfService.php | 76 +
app/Services/SyncService.php | 324 +
app/Traits/HasUserStamps.php | 26 +
artisan | 18 +
bootstrap/app.php | 19 +
bootstrap/cache/.gitignore | 2 +
bootstrap/providers.php | 6 +
composer.json | 103 +
composer.lock | 12110 ++++++++++++++++
config/app.php | 128 +
config/auth.php | 117 +
config/cache.php | 117 +
config/database.php | 184 +
config/dompdf.php | 301 +
config/filament-shield.php | 263 +
config/filesystems.php | 80 +
config/livewire.php | 186 +
config/logging.php | 132 +
config/mail.php | 118 +
config/nativephp.php | 177 +
config/permission.php | 202 +
config/queue.php | 129 +
config/services.php | 38 +
config/session.php | 217 +
config/sms.php | 7 +
config/sync.php | 7 +
database/.gitignore | 1 +
database/factories/UserFactory.php | 32 +
.../0001_01_01_000000_create_users_table.php | 46 +
.../0001_01_01_000001_create_cache_table.php | 31 +
.../0001_01_01_000002_create_jobs_table.php | 55 +
..._03_14_123609_create_permission_tables.php | 130 +
...3_15_210542_create_notifications_table.php | 27 +
...2026_03_15_210543_create_imports_table.php | 30 +
...2026_03_15_210544_create_exports_table.php | 30 +
...210545_create_failed_import_rows_table.php | 25 +
...2026_03_16_000001_create_doctors_table.php | 25 +
...3_16_000002_create_payment_types_table.php | 25 +
...16_000003_create_patient_illness_table.php | 24 +
...6_03_16_000004_create_treatments_table.php | 25 +
...16_000005_create_surgery_centers_table.php | 27 +
...026_03_17_000001_create_patients_table.php | 60 +
...0002_add_user_stamps_to_patients_table.php | 23 +
..._000003_update_patient_illness_columns.php | 28 +
..._03_17_000004_create_medications_table.php | 31 +
...026_03_17_100000_create_sync_log_table.php | 27 +
..._17_200000_create_osurg_initials_table.php | 24 +
...3_18_000001_create_prescriptions_table.php | 28 +
...0001_create_surgery_appointments_table.php | 29 +
...add_user_stamps_to_prescriptions_table.php | 25 +
...urgery_appointment_from_patients_table.php | 22 +
..._medication_ids_to_prescriptions_table.php | 24 +
.../2026_03_28_000001_create_visits_table.php | 38 +
database/seeders/DatabaseSeeder.php | 25 +
database/seeders/DoctorSeeder.php | 28 +
database/seeders/MedicationSeeder.php | 37 +
database/seeders/OsurgInitialSeeder.php | 97 +
database/seeders/PatientIllnessSeeder.php | 39 +
database/seeders/PaymentTypeSeeder.php | 29 +
database/seeders/SurgeryCenterSeeder.php | 30 +
database/seeders/TreatmentSeeder.php | 42 +
database/seeders/UserSeeder.php | 53 +
lang/en/doctors.php | 11 +
lang/en/medications.php | 18 +
lang/en/navigation.php | 123 +
lang/en/osurg_initials.php | 10 +
lang/en/patient_illness.php | 14 +
lang/en/patients.php | 84 +
lang/en/payment_types.php | 11 +
lang/en/prescriptions.php | 27 +
lang/en/surgery_appointments.php | 15 +
lang/en/surgery_centers.php | 13 +
lang/en/sync_log.php | 13 +
lang/en/table.php | 8 +
lang/en/treatments.php | 11 +
lang/en/users.php | 11 +
lang/en/visits.php | 28 +
lang/fa/doctors.php | 11 +
lang/fa/medications.php | 18 +
lang/fa/navigation.php | 122 +
lang/fa/osurg_initials.php | 10 +
lang/fa/patient_illness.php | 14 +
lang/fa/patients.php | 84 +
lang/fa/payment_types.php | 11 +
lang/fa/prescriptions.php | 27 +
lang/fa/surgery_appointments.php | 15 +
lang/fa/surgery_centers.php | 13 +
lang/fa/sync_log.php | 13 +
lang/fa/table.php | 8 +
lang/fa/treatments.php | 11 +
lang/fa/users.php | 11 +
lang/fa/visits.php | 28 +
package-lock.json | 2653 ++++
package.json | 25 +
phpunit.xml | 36 +
public/.htaccess | 25 +
public/css/filament/filament/app.css | 2 +
public/favicon.ico | 0
public/favicon.svg | 6 +
.../fonts/filament/filament/inter/index.css | 1 +
...er-cyrillic-ext-wght-normal-IYF56FF6.woff2 | Bin 0 -> 25960 bytes
.../inter-cyrillic-wght-normal-JEOLYBOO.woff2 | Bin 0 -> 18748 bytes
...inter-greek-ext-wght-normal-EOVOK2B5.woff2 | Bin 0 -> 11232 bytes
.../inter-greek-wght-normal-IRE366VL.woff2 | Bin 0 -> 18996 bytes
...inter-latin-ext-wght-normal-HA22NDSG.woff2 | Bin 0 -> 85068 bytes
.../inter-latin-wght-normal-NRMW37G5.woff2 | Bin 0 -> 48256 bytes
...nter-vietnamese-wght-normal-CE5GGD3W.woff2 | Bin 0 -> 10252 bytes
public/images/prescription_admission_bg.jpg | Bin 0 -> 89910 bytes
public/images/prescription_bg.jpg | Bin 0 -> 46378 bytes
public/index.php | 17 +
.../components/jalali-datetime-picker.js | 67 +
public/js/audio-speed.js | 92 +
public/js/filament/actions/actions.js | 1 +
public/js/filament/filament/app.js | 1 +
public/js/filament/filament/echo.js | 13 +
.../forms/components/checkbox-list.js | 1 +
.../filament/forms/components/code-editor.js | 38 +
.../filament/forms/components/color-picker.js | 1 +
.../forms/components/date-time-picker.js | 1 +
.../filament/forms/components/file-upload.js | 123 +
.../js/filament/forms/components/key-value.js | 1 +
.../forms/components/markdown-editor.js | 51 +
.../filament/forms/components/rich-editor.js | 144 +
public/js/filament/forms/components/select.js | 11 +
public/js/filament/forms/components/slider.js | 1 +
.../filament/forms/components/tags-input.js | 1 +
.../js/filament/forms/components/textarea.js | 1 +
.../filament/notifications/notifications.js | 1 +
.../js/filament/schemas/components/actions.js | 1 +
public/js/filament/schemas/components/tabs.js | 1 +
.../js/filament/schemas/components/wizard.js | 1 +
public/js/filament/schemas/schemas.js | 1 +
public/js/filament/support/support.js | 46 +
.../tables/components/columns/checkbox.js | 1 +
.../tables/components/columns/select.js | 11 +
.../tables/components/columns/text-input.js | 1 +
.../tables/components/columns/toggle.js | 1 +
public/js/filament/tables/tables.js | 1 +
.../js/filament/widgets/components/chart.js | 30 +
.../components/stats-overview/stat/chart.js | 22 +
public/robots.txt | 2 +
register-fonts.php | 30 +
resources/css/app.css | 18 +
resources/css/filament/admin/theme.css | 201 +
resources/css/panel.css | 3 +
resources/css/vazirmatn.css | 4 +
resources/js/app.js | 1 +
resources/js/bootstrap.js | 3 +
.../views/components/confirm-modal.blade.php | 89 +
.../components/navigation-card.blade.php | 56 +
.../components/persian-datetime.blade.php | 48 +
.../components/settings-dropdown.blade.php | 248 +
resources/views/exports/doctors-pdf.blade.php | 103 +
.../exports/osurg-initials-pdf.blade.php | 99 +
.../exports/patient-illness-pdf.blade.php | 48 +
.../views/exports/patients-pdf.blade.php | 52 +
.../views/exports/payment-types-pdf.blade.php | 50 +
.../views/exports/prescriptions-pdf.blade.php | 50 +
resources/views/exports/roles-pdf.blade.php | 101 +
.../exports/surgery-centers-pdf.blade.php | 50 +
.../views/exports/treatments-pdf.blade.php | 50 +
resources/views/exports/users-pdf.blade.php | 101 +
resources/views/exports/visits-pdf.blade.php | 62 +
.../views/filament/pages/dashboard.blade.php | 190 +
.../views/filament/pages/sms-logs.blade.php | 39 +
.../views/filament/pages/sync-page.blade.php | 61 +
.../filament/patient-files-modal.blade.php | 108 +
.../livewire/settings-dropdown.blade.php | 227 +
resources/views/prints/patient-lab.blade.php | 232 +
.../prints/prescription-admission.blade.php | 263 +
resources/views/prints/prescription.blade.php | 313 +
.../views/prints/surgery-admission.blade.php | 273 +
.../components/pagination/index.blade.php | 209 +
routes/api.php | 11 +
routes/console.php | 8 +
routes/web.php | 53 +
scripts/fix-storage.bat | 20 +
scripts/fix-task.ps1 | 36 +
scripts/fix_storage.php | 117 +
scripts/ftp-server.php | 278 +
scripts/install.bat | 75 +
scripts/matab-tray.cs | 97 +
scripts/setup-autostart.bat | 30 +
scripts/start-ftp-server.vbs | 65 +
scripts/start-ftp.bat | 33 +
scripts/start-now.bat | 18 +
scripts/start-server.vbs | 89 +
scripts/stop-server.bat | 5 +
scripts/test-ftp.php | 110 +
src-tauri/Cargo.toml | 23 +
src-tauri/build.rs | 3 +
src-tauri/capabilities/default.json | 9 +
src-tauri/icons/icon.ico | 0
src-tauri/src/lib.rs | 7 +
src-tauri/src/main.rs | 6 +
src-tauri/tauri.conf.json | 42 +
storage/app/.gitignore | 4 +
storage/app/private/.gitignore | 2 +
storage/app/public/.gitignore | 2 +
storage/fonts/DejaVuSans-Bold.ufm.json | 10762 ++++++++++++++
storage/fonts/DejaVuSans.ufm.json | 10770 ++++++++++++++
storage/fonts/installed-fonts.json | 6 +
storage/fonts/tahoma.ttf | Bin 0 -> 948860 bytes
..._bold_1842a4e45eb7b0090668cee2b120a2ed.ttf | Bin 0 -> 877632 bytes
..._bold_1842a4e45eb7b0090668cee2b120a2ed.ufm | 3797 +++++
..._1842a4e45eb7b0090668cee2b120a2ed.ufm.json | 7572 ++++++++++
...ormal_c6fb41e607832db494de9aa7a1293092.ttf | Bin 0 -> 948860 bytes
...ormal_c6fb41e607832db494de9aa7a1293092.ufm | 3801 +++++
..._c6fb41e607832db494de9aa7a1293092.ufm.json | 7572 ++++++++++
storage/fonts/tahomabd.ttf | Bin 0 -> 877632 bytes
storage/framework/.gitignore | 9 +
storage/framework/cache/.gitignore | 3 +
storage/framework/cache/data/.gitignore | 2 +
storage/framework/sessions/.gitignore | 2 +
storage/framework/testing/.gitignore | 2 +
storage/framework/views/.gitignore | 2 +
storage/logs/.gitignore | 2 +
tests/Feature/ExampleTest.php | 14 +
tests/TestCase.php | 10 +
tests/Unit/ExampleTest.php | 13 +
vite.config.js | 18 +
324 files changed, 78304 insertions(+), 23 deletions(-)
create mode 100644 .editorconfig
create mode 100644 .env.example
create mode 100644 .gitattributes
create mode 100644 app/Casts/JalaliDatetime.php
create mode 100644 app/Filament/Exports/RoleExporter.php
create mode 100644 app/Filament/Exports/UserExporter.php
create mode 100644 app/Filament/Pages/Auth/Login.php
create mode 100644 app/Filament/Pages/Dashboard.php
create mode 100644 app/Filament/Pages/SmsLogsPage.php
create mode 100644 app/Filament/Pages/SyncPage.php
create mode 100644 app/Filament/Resources/DoctorResource.php
create mode 100644 app/Filament/Resources/DoctorResource/Pages/CreateDoctor.php
create mode 100644 app/Filament/Resources/DoctorResource/Pages/EditDoctor.php
create mode 100644 app/Filament/Resources/DoctorResource/Pages/ListDoctors.php
create mode 100644 app/Filament/Resources/MedicationResource.php
create mode 100644 app/Filament/Resources/MedicationResource/Pages/CreateMedication.php
create mode 100644 app/Filament/Resources/MedicationResource/Pages/EditMedication.php
create mode 100644 app/Filament/Resources/MedicationResource/Pages/ListMedications.php
create mode 100644 app/Filament/Resources/OsurgAuditResource.php
create mode 100644 app/Filament/Resources/OsurgAuditResource/Pages/ListOsurgAudits.php
create mode 100644 app/Filament/Resources/OsurgInitialResource.php
create mode 100644 app/Filament/Resources/OsurgInitialResource/Pages/CreateOsurgInitial.php
create mode 100644 app/Filament/Resources/OsurgInitialResource/Pages/EditOsurgInitial.php
create mode 100644 app/Filament/Resources/OsurgInitialResource/Pages/ListOsurgInitials.php
create mode 100644 app/Filament/Resources/PatientIllnessResource.php
create mode 100644 app/Filament/Resources/PatientIllnessResource/Pages/CreatePatientIllness.php
create mode 100644 app/Filament/Resources/PatientIllnessResource/Pages/EditPatientIllness.php
create mode 100644 app/Filament/Resources/PatientIllnessResource/Pages/ListPatientIllnesses.php
create mode 100644 app/Filament/Resources/PatientResource.php
create mode 100644 app/Filament/Resources/PatientResource/Pages/CreatePatient.php
create mode 100644 app/Filament/Resources/PatientResource/Pages/EditPatient.php
create mode 100644 app/Filament/Resources/PatientResource/Pages/ListPatients.php
create mode 100644 app/Filament/Resources/PatientResource/RelationManagers/VisitsRelationManager.php
create mode 100644 app/Filament/Resources/PaymentTypeResource.php
create mode 100644 app/Filament/Resources/PaymentTypeResource/Pages/CreatePaymentType.php
create mode 100644 app/Filament/Resources/PaymentTypeResource/Pages/EditPaymentType.php
create mode 100644 app/Filament/Resources/PaymentTypeResource/Pages/ListPaymentTypes.php
create mode 100644 app/Filament/Resources/PrescriptionResource.php
create mode 100644 app/Filament/Resources/PrescriptionResource/Pages/CreatePrescription.php
create mode 100644 app/Filament/Resources/PrescriptionResource/Pages/EditPrescription.php
create mode 100644 app/Filament/Resources/PrescriptionResource/Pages/ListPrescriptions.php
create mode 100644 app/Filament/Resources/RoleResource.php
create mode 100644 app/Filament/Resources/RoleResource/Pages/CreateRole.php
create mode 100644 app/Filament/Resources/RoleResource/Pages/EditRole.php
create mode 100644 app/Filament/Resources/RoleResource/Pages/ListRoles.php
create mode 100644 app/Filament/Resources/RoleResource/Pages/ViewRole.php
create mode 100644 app/Filament/Resources/SurgeryAppointmentResource.php
create mode 100644 app/Filament/Resources/SurgeryAppointmentResource/Pages/CreateSurgeryAppointment.php
create mode 100644 app/Filament/Resources/SurgeryAppointmentResource/Pages/EditSurgeryAppointment.php
create mode 100644 app/Filament/Resources/SurgeryAppointmentResource/Pages/ListSurgeryAppointments.php
create mode 100644 app/Filament/Resources/SurgeryCenterResource.php
create mode 100644 app/Filament/Resources/SurgeryCenterResource/Pages/CreateSurgeryCenter.php
create mode 100644 app/Filament/Resources/SurgeryCenterResource/Pages/EditSurgeryCenter.php
create mode 100644 app/Filament/Resources/SurgeryCenterResource/Pages/ListSurgeryCenters.php
create mode 100644 app/Filament/Resources/TreatmentResource.php
create mode 100644 app/Filament/Resources/TreatmentResource/Pages/CreateTreatment.php
create mode 100644 app/Filament/Resources/TreatmentResource/Pages/EditTreatment.php
create mode 100644 app/Filament/Resources/TreatmentResource/Pages/ListTreatments.php
create mode 100644 app/Filament/Resources/UserResource.php
create mode 100644 app/Filament/Resources/UserResource/Pages/CreateUser.php
create mode 100644 app/Filament/Resources/UserResource/Pages/EditUser.php
create mode 100644 app/Filament/Resources/UserResource/Pages/ListUsers.php
create mode 100644 app/Filament/Resources/VisitResource.php
create mode 100644 app/Filament/Resources/VisitResource/Pages/CreateVisit.php
create mode 100644 app/Filament/Resources/VisitResource/Pages/EditVisit.php
create mode 100644 app/Filament/Resources/VisitResource/Pages/ListVisits.php
create mode 100644 app/Http/Controllers/Controller.php
create mode 100644 app/Http/Controllers/PrescriptionPrintController.php
create mode 100644 app/Http/Controllers/SyncController.php
create mode 100644 app/Http/Middleware/SetLocale.php
create mode 100644 app/Livewire/SettingsDropdown.php
create mode 100644 app/Models/Doctor.php
create mode 100644 app/Models/Medication.php
create mode 100644 app/Models/OsurgInitial.php
create mode 100644 app/Models/Patient.php
create mode 100644 app/Models/PatientIllness.php
create mode 100644 app/Models/PaymentType.php
create mode 100644 app/Models/Prescription.php
create mode 100644 app/Models/SurgeryAppointment.php
create mode 100644 app/Models/SurgeryCenter.php
create mode 100644 app/Models/SyncLog.php
create mode 100644 app/Models/Treatment.php
create mode 100644 app/Models/User.php
create mode 100644 app/Models/Visit.php
create mode 100644 app/Observers/SyncObserver.php
create mode 100644 app/Policies/DoctorPolicy.php
create mode 100644 app/Policies/MedicationPolicy.php
create mode 100644 app/Policies/OsurgInitialPolicy.php
create mode 100644 app/Policies/PatientIllnessPolicy.php
create mode 100644 app/Policies/PatientPolicy.php
create mode 100644 app/Policies/PaymentTypePolicy.php
create mode 100644 app/Policies/PrescriptionPolicy.php
create mode 100644 app/Policies/RolePolicy.php
create mode 100644 app/Policies/SurgeryAppointmentPolicy.php
create mode 100644 app/Policies/SurgeryCenterPolicy.php
create mode 100644 app/Policies/SyncLogPolicy.php
create mode 100644 app/Policies/TreatmentPolicy.php
create mode 100644 app/Policies/UserPolicy.php
create mode 100644 app/Policies/VisitPolicy.php
create mode 100644 app/Providers/AppServiceProvider.php
create mode 100644 app/Providers/Filament/AdminPanelProvider.php
create mode 100644 app/Providers/NativeAppServiceProvider.php
create mode 100644 app/Services/PdfService.php
create mode 100644 app/Services/SyncService.php
create mode 100644 app/Traits/HasUserStamps.php
create mode 100644 artisan
create mode 100644 bootstrap/app.php
create mode 100644 bootstrap/cache/.gitignore
create mode 100644 bootstrap/providers.php
create mode 100644 composer.json
create mode 100644 composer.lock
create mode 100644 config/app.php
create mode 100644 config/auth.php
create mode 100644 config/cache.php
create mode 100644 config/database.php
create mode 100644 config/dompdf.php
create mode 100644 config/filament-shield.php
create mode 100644 config/filesystems.php
create mode 100644 config/livewire.php
create mode 100644 config/logging.php
create mode 100644 config/mail.php
create mode 100644 config/nativephp.php
create mode 100644 config/permission.php
create mode 100644 config/queue.php
create mode 100644 config/services.php
create mode 100644 config/session.php
create mode 100644 config/sms.php
create mode 100644 config/sync.php
create mode 100644 database/.gitignore
create mode 100644 database/factories/UserFactory.php
create mode 100644 database/migrations/0001_01_01_000000_create_users_table.php
create mode 100644 database/migrations/0001_01_01_000001_create_cache_table.php
create mode 100644 database/migrations/0001_01_01_000002_create_jobs_table.php
create mode 100644 database/migrations/2026_03_14_123609_create_permission_tables.php
create mode 100644 database/migrations/2026_03_15_210542_create_notifications_table.php
create mode 100644 database/migrations/2026_03_15_210543_create_imports_table.php
create mode 100644 database/migrations/2026_03_15_210544_create_exports_table.php
create mode 100644 database/migrations/2026_03_15_210545_create_failed_import_rows_table.php
create mode 100644 database/migrations/2026_03_16_000001_create_doctors_table.php
create mode 100644 database/migrations/2026_03_16_000002_create_payment_types_table.php
create mode 100644 database/migrations/2026_03_16_000003_create_patient_illness_table.php
create mode 100644 database/migrations/2026_03_16_000004_create_treatments_table.php
create mode 100644 database/migrations/2026_03_16_000005_create_surgery_centers_table.php
create mode 100644 database/migrations/2026_03_17_000001_create_patients_table.php
create mode 100644 database/migrations/2026_03_17_000002_add_user_stamps_to_patients_table.php
create mode 100644 database/migrations/2026_03_17_000003_update_patient_illness_columns.php
create mode 100644 database/migrations/2026_03_17_000004_create_medications_table.php
create mode 100644 database/migrations/2026_03_17_100000_create_sync_log_table.php
create mode 100644 database/migrations/2026_03_17_200000_create_osurg_initials_table.php
create mode 100644 database/migrations/2026_03_18_000001_create_prescriptions_table.php
create mode 100644 database/migrations/2026_03_18_000001_create_surgery_appointments_table.php
create mode 100644 database/migrations/2026_03_18_000002_add_user_stamps_to_prescriptions_table.php
create mode 100644 database/migrations/2026_03_18_000002_remove_has_surgery_appointment_from_patients_table.php
create mode 100644 database/migrations/2026_03_18_000003_add_medication_ids_to_prescriptions_table.php
create mode 100644 database/migrations/2026_03_28_000001_create_visits_table.php
create mode 100644 database/seeders/DatabaseSeeder.php
create mode 100644 database/seeders/DoctorSeeder.php
create mode 100644 database/seeders/MedicationSeeder.php
create mode 100644 database/seeders/OsurgInitialSeeder.php
create mode 100644 database/seeders/PatientIllnessSeeder.php
create mode 100644 database/seeders/PaymentTypeSeeder.php
create mode 100644 database/seeders/SurgeryCenterSeeder.php
create mode 100644 database/seeders/TreatmentSeeder.php
create mode 100644 database/seeders/UserSeeder.php
create mode 100644 lang/en/doctors.php
create mode 100644 lang/en/medications.php
create mode 100644 lang/en/navigation.php
create mode 100644 lang/en/osurg_initials.php
create mode 100644 lang/en/patient_illness.php
create mode 100644 lang/en/patients.php
create mode 100644 lang/en/payment_types.php
create mode 100644 lang/en/prescriptions.php
create mode 100644 lang/en/surgery_appointments.php
create mode 100644 lang/en/surgery_centers.php
create mode 100644 lang/en/sync_log.php
create mode 100644 lang/en/table.php
create mode 100644 lang/en/treatments.php
create mode 100644 lang/en/users.php
create mode 100644 lang/en/visits.php
create mode 100644 lang/fa/doctors.php
create mode 100644 lang/fa/medications.php
create mode 100644 lang/fa/navigation.php
create mode 100644 lang/fa/osurg_initials.php
create mode 100644 lang/fa/patient_illness.php
create mode 100644 lang/fa/patients.php
create mode 100644 lang/fa/payment_types.php
create mode 100644 lang/fa/prescriptions.php
create mode 100644 lang/fa/surgery_appointments.php
create mode 100644 lang/fa/surgery_centers.php
create mode 100644 lang/fa/sync_log.php
create mode 100644 lang/fa/table.php
create mode 100644 lang/fa/treatments.php
create mode 100644 lang/fa/users.php
create mode 100644 lang/fa/visits.php
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 phpunit.xml
create mode 100644 public/.htaccess
create mode 100644 public/css/filament/filament/app.css
create mode 100644 public/favicon.ico
create mode 100644 public/favicon.svg
create mode 100644 public/fonts/filament/filament/inter/index.css
create mode 100644 public/fonts/filament/filament/inter/inter-cyrillic-ext-wght-normal-IYF56FF6.woff2
create mode 100644 public/fonts/filament/filament/inter/inter-cyrillic-wght-normal-JEOLYBOO.woff2
create mode 100644 public/fonts/filament/filament/inter/inter-greek-ext-wght-normal-EOVOK2B5.woff2
create mode 100644 public/fonts/filament/filament/inter/inter-greek-wght-normal-IRE366VL.woff2
create mode 100644 public/fonts/filament/filament/inter/inter-latin-ext-wght-normal-HA22NDSG.woff2
create mode 100644 public/fonts/filament/filament/inter/inter-latin-wght-normal-NRMW37G5.woff2
create mode 100644 public/fonts/filament/filament/inter/inter-vietnamese-wght-normal-CE5GGD3W.woff2
create mode 100644 public/images/prescription_admission_bg.jpg
create mode 100644 public/images/prescription_bg.jpg
create mode 100644 public/index.php
create mode 100644 public/js/ariaieboy/jalali/components/jalali-datetime-picker.js
create mode 100644 public/js/audio-speed.js
create mode 100644 public/js/filament/actions/actions.js
create mode 100644 public/js/filament/filament/app.js
create mode 100644 public/js/filament/filament/echo.js
create mode 100644 public/js/filament/forms/components/checkbox-list.js
create mode 100644 public/js/filament/forms/components/code-editor.js
create mode 100644 public/js/filament/forms/components/color-picker.js
create mode 100644 public/js/filament/forms/components/date-time-picker.js
create mode 100644 public/js/filament/forms/components/file-upload.js
create mode 100644 public/js/filament/forms/components/key-value.js
create mode 100644 public/js/filament/forms/components/markdown-editor.js
create mode 100644 public/js/filament/forms/components/rich-editor.js
create mode 100644 public/js/filament/forms/components/select.js
create mode 100644 public/js/filament/forms/components/slider.js
create mode 100644 public/js/filament/forms/components/tags-input.js
create mode 100644 public/js/filament/forms/components/textarea.js
create mode 100644 public/js/filament/notifications/notifications.js
create mode 100644 public/js/filament/schemas/components/actions.js
create mode 100644 public/js/filament/schemas/components/tabs.js
create mode 100644 public/js/filament/schemas/components/wizard.js
create mode 100644 public/js/filament/schemas/schemas.js
create mode 100644 public/js/filament/support/support.js
create mode 100644 public/js/filament/tables/components/columns/checkbox.js
create mode 100644 public/js/filament/tables/components/columns/select.js
create mode 100644 public/js/filament/tables/components/columns/text-input.js
create mode 100644 public/js/filament/tables/components/columns/toggle.js
create mode 100644 public/js/filament/tables/tables.js
create mode 100644 public/js/filament/widgets/components/chart.js
create mode 100644 public/js/filament/widgets/components/stats-overview/stat/chart.js
create mode 100644 public/robots.txt
create mode 100644 register-fonts.php
create mode 100644 resources/css/app.css
create mode 100644 resources/css/filament/admin/theme.css
create mode 100644 resources/css/panel.css
create mode 100644 resources/css/vazirmatn.css
create mode 100644 resources/js/app.js
create mode 100644 resources/js/bootstrap.js
create mode 100644 resources/views/components/confirm-modal.blade.php
create mode 100644 resources/views/components/navigation-card.blade.php
create mode 100644 resources/views/components/persian-datetime.blade.php
create mode 100644 resources/views/components/settings-dropdown.blade.php
create mode 100644 resources/views/exports/doctors-pdf.blade.php
create mode 100644 resources/views/exports/osurg-initials-pdf.blade.php
create mode 100644 resources/views/exports/patient-illness-pdf.blade.php
create mode 100644 resources/views/exports/patients-pdf.blade.php
create mode 100644 resources/views/exports/payment-types-pdf.blade.php
create mode 100644 resources/views/exports/prescriptions-pdf.blade.php
create mode 100644 resources/views/exports/roles-pdf.blade.php
create mode 100644 resources/views/exports/surgery-centers-pdf.blade.php
create mode 100644 resources/views/exports/treatments-pdf.blade.php
create mode 100644 resources/views/exports/users-pdf.blade.php
create mode 100644 resources/views/exports/visits-pdf.blade.php
create mode 100644 resources/views/filament/pages/dashboard.blade.php
create mode 100644 resources/views/filament/pages/sms-logs.blade.php
create mode 100644 resources/views/filament/pages/sync-page.blade.php
create mode 100644 resources/views/filament/patient-files-modal.blade.php
create mode 100644 resources/views/livewire/settings-dropdown.blade.php
create mode 100644 resources/views/prints/patient-lab.blade.php
create mode 100644 resources/views/prints/prescription-admission.blade.php
create mode 100644 resources/views/prints/prescription.blade.php
create mode 100644 resources/views/prints/surgery-admission.blade.php
create mode 100644 resources/views/vendor/filament/components/pagination/index.blade.php
create mode 100644 routes/api.php
create mode 100644 routes/console.php
create mode 100644 routes/web.php
create mode 100644 scripts/fix-storage.bat
create mode 100644 scripts/fix-task.ps1
create mode 100644 scripts/fix_storage.php
create mode 100644 scripts/ftp-server.php
create mode 100644 scripts/install.bat
create mode 100644 scripts/matab-tray.cs
create mode 100644 scripts/setup-autostart.bat
create mode 100644 scripts/start-ftp-server.vbs
create mode 100644 scripts/start-ftp.bat
create mode 100644 scripts/start-now.bat
create mode 100644 scripts/start-server.vbs
create mode 100644 scripts/stop-server.bat
create mode 100644 scripts/test-ftp.php
create mode 100644 src-tauri/Cargo.toml
create mode 100644 src-tauri/build.rs
create mode 100644 src-tauri/capabilities/default.json
create mode 100644 src-tauri/icons/icon.ico
create mode 100644 src-tauri/src/lib.rs
create mode 100644 src-tauri/src/main.rs
create mode 100644 src-tauri/tauri.conf.json
create mode 100644 storage/app/.gitignore
create mode 100644 storage/app/private/.gitignore
create mode 100644 storage/app/public/.gitignore
create mode 100644 storage/fonts/DejaVuSans-Bold.ufm.json
create mode 100644 storage/fonts/DejaVuSans.ufm.json
create mode 100644 storage/fonts/installed-fonts.json
create mode 100644 storage/fonts/tahoma.ttf
create mode 100644 storage/fonts/tahoma_bold_1842a4e45eb7b0090668cee2b120a2ed.ttf
create mode 100644 storage/fonts/tahoma_bold_1842a4e45eb7b0090668cee2b120a2ed.ufm
create mode 100644 storage/fonts/tahoma_bold_1842a4e45eb7b0090668cee2b120a2ed.ufm.json
create mode 100644 storage/fonts/tahoma_normal_c6fb41e607832db494de9aa7a1293092.ttf
create mode 100644 storage/fonts/tahoma_normal_c6fb41e607832db494de9aa7a1293092.ufm
create mode 100644 storage/fonts/tahoma_normal_c6fb41e607832db494de9aa7a1293092.ufm.json
create mode 100644 storage/fonts/tahomabd.ttf
create mode 100644 storage/framework/.gitignore
create mode 100644 storage/framework/cache/.gitignore
create mode 100644 storage/framework/cache/data/.gitignore
create mode 100644 storage/framework/sessions/.gitignore
create mode 100644 storage/framework/testing/.gitignore
create mode 100644 storage/framework/views/.gitignore
create mode 100644 storage/logs/.gitignore
create mode 100644 tests/Feature/ExampleTest.php
create mode 100644 tests/TestCase.php
create mode 100644 tests/Unit/ExampleTest.php
create mode 100644 vite.config.js
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..a186cd2
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,18 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 4
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false
+
+[*.{yml,yaml}]
+indent_size = 2
+
+[compose.yaml]
+indent_size = 4
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..fcb5f60
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,73 @@
+APP_NAME=Laravel
+APP_ENV=local
+APP_KEY=base64:Cwol1ZZBqRAY2Em+k6lDh8PvD2RkmfSCSR5c3t+ypjg=
+APP_DEBUG=true
+
+APP_LOCALE=fa
+APP_FALLBACK_LOCALE=en
+APP_FAKER_LOCALE=en_US
+
+APP_MAINTENANCE_DRIVER=file
+# APP_MAINTENANCE_STORE=database
+
+# PHP_CLI_SERVER_WORKERS=4
+
+BCRYPT_ROUNDS=12
+
+LOG_CHANNEL=stack
+LOG_STACK=single
+LOG_DEPRECATIONS_CHANNEL=null
+LOG_LEVEL=debug
+
+DB_CONNECTION=sqlite
+# DB_HOST=127.0.0.1
+# DB_PORT=3306
+# DB_DATABASE=laravel
+# DB_USERNAME=root
+# DB_PASSWORD=
+
+SESSION_DRIVER=database
+SESSION_LIFETIME=120
+SESSION_ENCRYPT=false
+SESSION_PATH=/
+SESSION_DOMAIN=null
+
+BROADCAST_CONNECTION=log
+FILESYSTEM_DISK=local
+QUEUE_CONNECTION=database
+
+CACHE_STORE=database
+# CACHE_PREFIX=
+
+MEMCACHED_HOST=127.0.0.1
+
+REDIS_CLIENT=phpredis
+REDIS_HOST=127.0.0.1
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
+MAIL_MAILER=log
+MAIL_SCHEME=null
+MAIL_HOST=127.0.0.1
+MAIL_PORT=2525
+MAIL_USERNAME=null
+MAIL_PASSWORD=null
+MAIL_FROM_ADDRESS="hello@example.com"
+MAIL_FROM_NAME="${APP_NAME}"
+
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+AWS_DEFAULT_REGION=us-east-1
+AWS_BUCKET=
+AWS_USE_PATH_STYLE_ENDPOINT=false
+
+VITE_APP_NAME="${APP_NAME}"
+
+APP_URL=http://localhost:8000
+
+SYNC_PEER_IP=192.168.1.8
+SYNC_PEER_PORT=8000
+SYNC_TOKEN=matab-secret-2026
+
+SMS_API_URL=http://94.101.184.91/api/sms
+SMS_API_KEY=surgery-sms-2024
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..fcb21d3
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,11 @@
+* text=auto eol=lf
+
+*.blade.php diff=html
+*.css diff=css
+*.html diff=html
+*.md diff=markdown
+*.php diff=php
+
+/.github export-ignore
+CHANGELOG.md export-ignore
+.styleci.yml export-ignore
diff --git a/.gitignore b/.gitignore
index 9d5dff3..ede3b0c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,25 +1,26 @@
-# ---> Laravel
-/vendor/
-node_modules/
-npm-debug.log
-yarn-error.log
-
-# Laravel 4 specific
-bootstrap/compiled.php
-app/storage/
-
-# Laravel 5 & Lumen specific
-public/storage
-public/hot
-
-# Laravel 5 & Lumen specific with changed public path
-public_html/storage
-public_html/hot
-
-storage/*.key
+*.log
+.DS_Store
+/scripts/php/
+/.claude
.env
-Homestead.yaml
-Homestead.json
-/.vagrant
+.env.backup
+.env.production
+.phpactor.json
.phpunit.result.cache
-
+/.fleet
+/.idea
+/.nova
+/.phpunit.cache
+/.vscode
+/.zed
+/auth.json
+/node_modules
+/public/build
+/public/hot
+/public/storage
+/storage/*.key
+/storage/pail
+/vendor
+Homestead.json
+Homestead.yaml
+Thumbs.db
diff --git a/app/Casts/JalaliDatetime.php b/app/Casts/JalaliDatetime.php
new file mode 100644
index 0000000..e351c75
--- /dev/null
+++ b/app/Casts/JalaliDatetime.php
@@ -0,0 +1,33 @@
+format($this->format);
+ } catch (\Throwable $e) {
+ return $value;
+ }
+ }
+
+ public function set(Model $model, string $key, mixed $value, array $attributes): mixed
+ {
+ return $value;
+ }
+}
diff --git a/app/Filament/Exports/RoleExporter.php b/app/Filament/Exports/RoleExporter.php
new file mode 100644
index 0000000..1fbbfe1
--- /dev/null
+++ b/app/Filament/Exports/RoleExporter.php
@@ -0,0 +1,42 @@
+label('ID'),
+ ExportColumn::make('name')
+ ->label(__('filament-shield::filament-shield.column.name')),
+ ExportColumn::make('guard_name')
+ ->label(__('filament-shield::filament-shield.column.guard_name')),
+ ExportColumn::make('permissions_count')
+ ->label(__('filament-shield::filament-shield.column.permissions'))
+ ->counts('permissions'),
+ ExportColumn::make('updated_at')
+ ->label(__('filament-shield::filament-shield.column.updated_at')),
+ ];
+ }
+
+ public static function getCompletedNotificationBody(Export $export): string
+ {
+ $body = 'Your role export has completed and ' . Number::format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
+
+ if ($failedRowsCount = $export->getFailedRowsCount()) {
+ $body .= ' ' . Number::format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
+ }
+
+ return $body;
+ }
+}
diff --git a/app/Filament/Exports/UserExporter.php b/app/Filament/Exports/UserExporter.php
new file mode 100644
index 0000000..ce398f8
--- /dev/null
+++ b/app/Filament/Exports/UserExporter.php
@@ -0,0 +1,42 @@
+label('ID'),
+ ExportColumn::make('name')
+ ->label(__('users.fields.name')),
+ ExportColumn::make('username')
+ ->label(__('users.fields.username')),
+ ExportColumn::make('roles.name')
+ ->label(__('users.fields.roles'))
+ ->listAsJson(),
+ ExportColumn::make('created_at')
+ ->label(__('users.fields.created_at')),
+ ];
+ }
+
+ public static function getCompletedNotificationBody(Export $export): string
+ {
+ $body = 'Your user export has completed and ' . Number::format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
+
+ if ($failedRowsCount = $export->getFailedRowsCount()) {
+ $body .= ' ' . Number::format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
+ }
+
+ return $body;
+ }
+}
diff --git a/app/Filament/Pages/Auth/Login.php b/app/Filament/Pages/Auth/Login.php
new file mode 100644
index 0000000..c98bbd0
--- /dev/null
+++ b/app/Filament/Pages/Auth/Login.php
@@ -0,0 +1,49 @@
+components([
+ TextInput::make('username')
+ ->label('نام کاربری')
+ ->required()
+ ->maxLength(255)
+ ->autocomplete('username')
+ ->autofocus()
+ ->validationMessages([
+ 'required' => 'وارد کردن نام کاربری الزامی است.',
+ 'max' => 'نام کاربری نباید بیشتر از ۲۵۵ کاراکتر باشد.',
+ ]),
+ $this->getPasswordFormComponent()
+ ->validationMessages([
+ 'required' => 'وارد کردن رمز عبور الزامی است.',
+ ]),
+ $this->getRememberFormComponent(),
+ ]);
+ }
+
+ protected function getCredentialsFromFormData(#[SensitiveParameter] array $data): array
+ {
+ return [
+ 'username' => $data['username'],
+ 'password' => $data['password'],
+ ];
+ }
+
+ protected function throwFailureValidationException(): never
+ {
+ throw ValidationException::withMessages([
+ 'data.username' => __('filament-panels::auth/pages/login.messages.failed'),
+ ]);
+ }
+}
\ No newline at end of file
diff --git a/app/Filament/Pages/Dashboard.php b/app/Filament/Pages/Dashboard.php
new file mode 100644
index 0000000..55f7117
--- /dev/null
+++ b/app/Filament/Pages/Dashboard.php
@@ -0,0 +1,22 @@
+user()->can('View:SmsLogsPage');
+ }
+
+ public static function getNavigationIcon(): \BackedEnum|string|null
+ {
+ return 'heroicon-o-chat-bubble-left-ellipsis';
+ }
+
+ public static function getNavigationGroup(): ?string
+ {
+ return __('navigation.groups.settings');
+ }
+
+ public static function getNavigationLabel(): string
+ {
+ return __('navigation.sms_logs.label');
+ }
+
+ public function getTitle(): string
+ {
+ return __('navigation.sms_logs.title');
+ }
+
+ public array $stats = ['patients' => 0, 'total' => 0, 'sent' => 0, 'pending' => 0, 'failed' => 0];
+
+ public function table(Table $table): Table
+ {
+ return $table
+ ->records(fn (array $filters, ?string $search, int $page, int $recordsPerPage) =>
+ $this->fetchRecords($filters, $search, $page, $recordsPerPage)
+ )
+ ->columns([
+
+ Tables\Columns\TextColumn::make('message_type')
+ ->label('نوع پیام')
+ ->getStateUsing(fn (array $record): string => $record['message_type'] ?? '')
+ ->formatStateUsing(fn (string $state): string => match ($state) {
+ 'initial' => 'پیام اولیه',
+ 'reminder_7days' => 'یادآوری ۷ روز',
+ 'reminder_3days' => 'یادآوری ۳ روز',
+ 'reminder_after_registration' => 'یادآوری پس از ثبت',
+ 'day_of_surgery' => 'روز عمل',
+ default => $state,
+ })
+ ->badge()
+ ->color(fn (string $state): string => match ($state) {
+ 'initial' => 'info',
+ 'day_of_surgery' => 'success',
+ 'reminder_3days' => 'pink',
+ default => 'warning',
+ }),
+
+ Tables\Columns\TextColumn::make('status')
+ ->label('وضعیت')
+ ->getStateUsing(fn (array $record): string => $record['status'] ?? '')
+ ->formatStateUsing(fn (string $state): string => match ($state) {
+ 'sent' => 'ارسال شده',
+ 'pending' => 'در انتظار',
+ 'failed' => 'ناموفق',
+ default => $state,
+ })
+ ->badge()
+ ->color(fn (string $state): string => match ($state) {
+ 'sent' => 'success',
+ 'pending' => 'warning',
+ 'failed' => 'danger',
+ default => 'gray',
+ }),
+
+ Tables\Columns\TextColumn::make('scheduled_at')
+ ->label('زمانبندی شده')
+ ->getStateUsing(fn (array $record): string => $this->toJalali($record['scheduled_at'] ?? null)),
+
+ Tables\Columns\TextColumn::make('sent_at')
+ ->label('زمان ارسال')
+ ->getStateUsing(fn (array $record): string => $this->toJalali($record['sent_at'] ?? null)),
+
+ ])
+ ->groups([
+ Group::make('patient_key')
+ ->titlePrefixedWithLabel(false)
+ ->getTitleFromRecordUsing(fn (array $record): string => $record['patient_name'] ?? '-')
+ ->getDescriptionFromRecordUsing(fn (array $record): string =>
+ ($record['phone_number'] ?? '') .
+ ($record['surgery_date']
+ ? ' | تاریخ عمل: ' . $this->toJalali($record['surgery_date'], 'Y/m/d')
+ : '')
+ )
+ ->collapsible(),
+ ])
+ ->defaultGroup('patient_key')
+ ->collapsedGroupsByDefault()
+ ->groupingSettingsHidden()
+ ->filters([
+ Tables\Filters\SelectFilter::make('status')
+ ->label('وضعیت')
+ ->options([
+ 'sent' => 'ارسال شده',
+ 'pending' => 'در انتظار',
+ 'failed' => 'ناموفق',
+ ]),
+
+ Tables\Filters\Filter::make('patient_name')
+ ->label('نام بیمار')
+ ->form([
+ TextInput::make('patient_name')
+ ->label('نام بیمار')
+ ->placeholder('جستجو...'),
+ ])
+ ->indicateUsing(fn (array $data): ?string => filled($data['patient_name'] ?? null)
+ ? 'نام: ' . $data['patient_name']
+ : null),
+
+ Tables\Filters\Filter::make('phone_number')
+ ->label('شماره موبایل')
+ ->form([
+ TextInput::make('phone_number')
+ ->label('شماره موبایل')
+ ->placeholder('09...'),
+ ])
+ ->indicateUsing(fn (array $data): ?string => filled($data['phone_number'] ?? null)
+ ? 'موبایل: ' . $data['phone_number']
+ : null),
+ ])
+ ->recordActions([
+ FilamentAction::make('delete_message')
+ ->label('حذف پیام')
+ ->icon('heroicon-o-trash')
+ ->color('danger')
+ ->requiresConfirmation()
+ ->modalHeading('حذف پیام')
+ ->modalDescription('آیا از حذف این پیام مطمئن هستید؟')
+ ->modalSubmitActionLabel('بله، حذف شود')
+ ->action(fn (array $record) => $this->deleteSingleMessage((int) $record['id'])),
+
+ FilamentAction::make('delete_patient')
+ ->label('حذف همه پیامهای بیمار')
+ ->icon('heroicon-o-user-minus')
+ ->color('danger')
+ ->outlined()
+ ->requiresConfirmation()
+ ->modalHeading('حذف همه پیامهای بیمار')
+ ->modalDescription('آیا از حذف تمام پیامهای این بیمار مطمئن هستید؟')
+ ->modalSubmitActionLabel('بله، حذف شود')
+ ->action(fn (array $record) => $this->deletePatientMessages(
+ $record['phone_number'],
+ $record['surgery_date']
+ )),
+ ])
+ ->paginationPageOptions([5, 10, 25, 50]);
+ }
+
+ protected function fetchRecords(
+ array $filters,
+ ?string $search,
+ int $page,
+ int $recordsPerPage,
+ ): LengthAwarePaginator {
+
+ $query = array_filter([
+ 'status' => $filters['status']['value'] ?? null,
+ 'patientName' => $filters['patient_name']['patient_name'] ?? $search,
+ 'phoneNumber' => $filters['phone_number']['phone_number'] ?? null,
+ 'limit' => 500,
+ ]);
+
+ try {
+ $response = Http::timeout(15)
+ ->withHeader('X-API-Key', \App\Models\OsurgInitial::val('sms_api_key', config('sms.api_key')))
+ ->get(\App\Models\OsurgInitial::val('sms_api_url', config('sms.api_url')) . '/sms-logs-grouped', $query);
+
+ if ($response->failed() || ! ($response->json('success') ?? false)) {
+ \Illuminate\Support\Facades\Log::warning('SmsLogsPage: API returned failure', [
+ 'status' => $response->status(),
+ 'body' => $response->body(),
+ 'api_url' => \App\Models\OsurgInitial::val('sms_api_url', config('sms.api_url')),
+ ]);
+ Notification::make()
+ ->title('خطا در دریافت لاگهای پیامک')
+ ->body('کد: ' . $response->status() . ' | ' . ($response->json('message') ?? $response->body()))
+ ->danger()
+ ->send();
+ return new LengthAwarePaginator([], 0, $recordsPerPage, $page);
+ }
+
+ $grouped = $response->json('data') ?? [];
+
+ $this->recalcStats($grouped);
+
+ $totalPatients = count($grouped);
+ $patientsOnPage = array_slice($grouped, ($page - 1) * $recordsPerPage, $recordsPerPage);
+
+ $rows = [];
+ foreach ($patientsOnPage as $patient) {
+ $patientKey = ($patient['phone_number'] ?? '') . '|' . ($patient['surgery_date'] ?? '');
+
+ foreach ($patient['messages'] ?? [] as $msg) {
+ $rows[] = [
+ 'id' => $msg['id'],
+ 'patient_key' => $patientKey,
+ 'patient_name' => $patient['patient_name'] ?? '-',
+ 'phone_number' => $patient['phone_number'] ?? '',
+ 'surgery_date' => $patient['surgery_date'] ?? '',
+ 'message_type' => $msg['message_type'] ?? '',
+ 'status' => $msg['status'] ?? '',
+ 'scheduled_at' => $msg['scheduled_at'] ?? null,
+ 'sent_at' => $msg['sent_at'] ?? null,
+ ];
+ }
+ }
+
+ return new LengthAwarePaginator(
+ items: $rows,
+ total: $totalPatients,
+ perPage: $recordsPerPage,
+ currentPage: $page,
+ );
+
+ } catch (\Throwable $e) {
+ \Illuminate\Support\Facades\Log::error('SmsLogsPage: API exception', [
+ 'error' => $e->getMessage(),
+ 'api_url' => \App\Models\OsurgInitial::val('sms_api_url', config('sms.api_url')),
+ ]);
+ Notification::make()
+ ->title('خطا در اتصال به سرویس پیامک')
+ ->body($e->getMessage())
+ ->danger()
+ ->send();
+ return new LengthAwarePaginator([], 0, $recordsPerPage, $page);
+ }
+ }
+
+ public function deleteSingleMessage(int $id): void
+ {
+ try {
+ $response = Http::timeout(10)
+ ->withHeader('X-API-Key', \App\Models\OsurgInitial::val('sms_api_key', config('sms.api_key')))
+ ->delete(\App\Models\OsurgInitial::val('sms_api_url', config('sms.api_url')) . '/sms-logs/' . $id);
+
+ if ($response->json('success') ?? false) {
+ Notification::make()->title('پیام حذف شد')->success()->send();
+ $this->resetTable();
+ } else {
+ Notification::make()->title($response->json('message') ?? 'خطا در حذف پیام')->danger()->send();
+ }
+ } catch (\Throwable $e) {
+ Notification::make()->title('خطا: ' . $e->getMessage())->danger()->send();
+ }
+ }
+
+ public function deletePatientMessages(string $phoneNumber, string $surgeryDate): void
+ {
+ try {
+ $response = Http::timeout(10)
+ ->withHeader('X-API-Key', \App\Models\OsurgInitial::val('sms_api_key', config('sms.api_key')))
+ ->post(\App\Models\OsurgInitial::val('sms_api_url', config('sms.api_url')) . '/sms-logs/delete-patient', [
+ 'phoneNumber' => $phoneNumber,
+ 'surgeryDate' => $surgeryDate,
+ ]);
+
+ if ($response->json('success') ?? false) {
+ Notification::make()->title('همه پیامهای بیمار حذف شد')->success()->send();
+ $this->resetTable();
+ } else {
+ Notification::make()->title($response->json('message') ?? 'خطا در حذف پیامها')->danger()->send();
+ }
+ } catch (\Throwable $e) {
+ Notification::make()->title('خطا: ' . $e->getMessage())->danger()->send();
+ }
+ }
+
+ public function toJalali(?string $dateStr, string $format = 'Y/m/d H:i'): string
+ {
+ if (! $dateStr) {
+ return '-';
+ }
+ try {
+ return Jalalian::fromCarbon(
+ Carbon::parse($dateStr, 'UTC')->setTimezone('Asia/Tehran')
+ )->format($format);
+ } catch (\Throwable) {
+ return $dateStr;
+ }
+ }
+
+ private function recalcStats(array $grouped): void
+ {
+ $total = $sent = $pending = $failed = 0;
+
+ foreach ($grouped as $p) {
+ $total += $p['stats']['total'] ?? 0;
+ $sent += $p['stats']['sent'] ?? 0;
+ $pending += $p['stats']['pending'] ?? 0;
+ $failed += $p['stats']['failed'] ?? 0;
+ }
+
+ $this->stats = [
+ 'patients' => count($grouped),
+ 'total' => $total,
+ 'sent' => $sent,
+ 'pending' => $pending,
+ 'failed' => $failed,
+ ];
+ }
+}
diff --git a/app/Filament/Pages/SyncPage.php b/app/Filament/Pages/SyncPage.php
new file mode 100644
index 0000000..3b88403
--- /dev/null
+++ b/app/Filament/Pages/SyncPage.php
@@ -0,0 +1,126 @@
+user()->can('View:SyncPage');
+ }
+
+ public static function shouldRegisterNavigation(): bool
+ {
+ return false;
+ }
+
+ public static function getNavigationIcon(): \BackedEnum|string|null
+ {
+ return 'heroicon-o-arrows-right-left';
+ }
+
+ public static function getNavigationGroup(): ?string
+ {
+ return __('navigation.groups.system');
+ }
+
+ public string $report = '';
+
+ public static function getNavigationLabel(): string
+ {
+ return __('navigation.sync.label');
+ }
+
+ public function getTitle(): string
+ {
+ return __('navigation.sync.title');
+ }
+
+ public function getPendingCount(): int
+ {
+ return SyncLog::changesSince(SyncLog::lastSyncId())->count();
+ }
+
+ public function getLastSyncTime(): string
+ {
+ $last = SyncLog::where('action', 'synced')->latest('id')->first();
+ if (! $last) {
+ return __('navigation.sync.never');
+ }
+
+ return Jalalian::fromCarbon($last->datetime->timezone('Asia/Tehran'))->format('Y/m/d H:i:s');
+ }
+
+ protected function getHeaderActions(): array
+ {
+ return [
+ Action::make('sync')
+ ->label(__('navigation.sync.sync_with_peer'))
+ ->icon('heroicon-o-arrows-right-left')
+ ->color('primary')
+ ->requiresConfirmation()
+ ->modalHeading(__('navigation.sync.confirm_heading'))
+ ->modalDescription(__('navigation.sync.confirm_description'))
+ ->modalSubmitActionLabel(__('navigation.sync.confirm_button'))
+ ->action('runSync'),
+
+ Action::make('backup')
+ ->label(__('navigation.backup.label'))
+ ->icon('heroicon-o-arrow-down-tray')
+ ->color('success')
+ ->action('downloadBackup'),
+ ];
+ }
+
+ public function runSync(): void
+ {
+ $service = SyncService::fromConfig();
+
+ if (! $service->isConfigured()) {
+ Notification::make()
+ ->title(__('navigation.sync.error_title'))
+ ->body(__('navigation.sync.error_not_configured'))
+ ->danger()
+ ->send();
+ return;
+ }
+
+ $result = $service->sync();
+
+ $this->report = implode("\n", $result['report']);
+
+ Notification::make()
+ ->title($result['success'] ? __('navigation.sync.success') : __('navigation.sync.failed'))
+ ->body(__('navigation.sync.see_report'))
+ ->color($result['success'] ? 'success' : 'warning')
+ ->send();
+ }
+
+ public function downloadBackup(): \Symfony\Component\HttpFoundation\StreamedResponse
+ {
+ $data = [
+ 'exported_at' => now()->toDateTimeString(),
+ 'last_sync_id' => SyncLog::lastSyncId(),
+ 'changes' => SyncLog::all()->toArray(),
+ ];
+
+ $filename = 'matab-backup-' . now()->format('Y-m-d_H-i-s') . '.json';
+
+ return response()->streamDownload(function () use ($data) {
+ echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
+ }, $filename, ['Content-Type' => 'application/json']);
+ }
+}
diff --git a/app/Filament/Resources/DoctorResource.php b/app/Filament/Resources/DoctorResource.php
new file mode 100644
index 0000000..9923831
--- /dev/null
+++ b/app/Filament/Resources/DoctorResource.php
@@ -0,0 +1,290 @@
+ $record->last_name,
+ ];
+ }
+
+ public static function getNavigationIcon(): \BackedEnum|string|null
+ {
+ return 'heroicon-o-user-circle';
+ }
+ public static function getNavigationGroup(): ?string
+ {
+ return __('navigation.groups.clinic');
+ }
+
+ public static function getNavigationSort(): ?int
+ {
+ return 1;
+ }
+
+
+ public static function getNavigationLabel(): string
+ {
+ return __('navigation.doctors.title');
+ }
+
+ public static function getModelLabel(): string
+ {
+ return __('navigation.doctors.singular');
+ }
+
+ public static function getPluralModelLabel(): string
+ {
+ return __('navigation.doctors.title');
+ }
+
+ public static function form(Schema $schema): Schema
+ {
+ return $schema
+ ->components([
+ Grid::make()
+ ->schema([
+ Section::make()
+ ->schema([
+ TextInput::make('first_name')
+ ->label(__('doctors.fields.first_name'))
+ ->required()
+ ->maxLength(50),
+
+ TextInput::make('last_name')
+ ->label(__('doctors.fields.last_name'))
+ ->required()
+ ->maxLength(50),
+
+ TextInput::make('speciality')
+ ->label(__('doctors.fields.speciality'))
+ ->maxLength(100),
+
+ TextInput::make('license_id')
+ ->label(__('doctors.fields.license_id'))
+ ->maxLength(50),
+ ])
+ ->columns(2)
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('createAnother')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create_another.label'))
+ ->action('createAnother')
+ ->keyBindings(['mod+shift+s'])
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ TextColumn::make('first_name')
+ ->label(__('doctors.fields.first_name'))
+ ->weight(FontWeight::Medium)
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('last_name')
+ ->label(__('doctors.fields.last_name'))
+ ->weight(FontWeight::Medium)
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('speciality')
+ ->label(__('doctors.fields.speciality'))
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('license_id')
+ ->label(__('doctors.fields.license_id'))
+ ->badge()
+ ->color('primary'),
+
+ TextColumn::make('created_at')
+ ->label(__('doctors.fields.created_at'))
+ ->sortable(),
+ ])
+ ->defaultSort('last_name')
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ BulkAction::make('export_excel_selected')
+ ->label(__('table.export_excel_selected'))
+ ->icon('heroicon-o-table-cells')
+ ->color('success')
+ ->action(function (Collection $records) {
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('doctors.fields.first_name'),
+ __('doctors.fields.last_name'),
+ __('doctors.fields.speciality'),
+ __('doctors.fields.license_id'),
+ __('doctors.fields.created_at'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->first_name,
+ $record->last_name,
+ $record->speciality,
+ $record->license_id,
+ $record->created_at,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'doctors-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+ ]),
+
+ ActionGroup::make([
+ Action::make('export_excel')
+ ->label(__('table.export_excel'))
+ ->color('success')
+ ->icon('heroicon-o-table-cells')
+ ->action(function () {
+ $records = Doctor::all();
+
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('doctors.fields.first_name'),
+ __('doctors.fields.last_name'),
+ __('doctors.fields.speciality'),
+ __('doctors.fields.license_id'),
+ __('doctors.fields.created_at'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->first_name,
+ $record->last_name,
+ $record->speciality,
+ $record->license_id,
+ $record->created_at,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'doctors-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+
+ Action::make('export_pdf')
+ ->label(__('table.export_pdf'))
+ ->color('danger')
+ ->icon('heroicon-o-document-arrow-down')
+ ->action(function () {
+ $records = Doctor::all();
+
+ return PdfService::download(
+ 'exports.doctors-pdf',
+ ['records' => $records],
+ 'doctors-' . now()->format('Y-m-d') . '.pdf',
+ );
+ }),
+ ])
+ ->label(__('table.export'))
+ ->color('orange')
+ ->button(),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListDoctors::route('/'),
+ 'create' => Pages\CreateDoctor::route('/create'),
+ 'edit' => Pages\EditDoctor::route('/{record}/edit'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/DoctorResource/Pages/CreateDoctor.php b/app/Filament/Resources/DoctorResource/Pages/CreateDoctor.php
new file mode 100644
index 0000000..ab81ddd
--- /dev/null
+++ b/app/Filament/Resources/DoctorResource/Pages/CreateDoctor.php
@@ -0,0 +1,18 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/MedicationResource.php b/app/Filament/Resources/MedicationResource.php
new file mode 100644
index 0000000..77b21ea
--- /dev/null
+++ b/app/Filament/Resources/MedicationResource.php
@@ -0,0 +1,202 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make(__('medications.sections.info'))
+ ->schema([
+ TextInput::make('name')
+ ->label(__('medications.fields.name'))
+ ->required()
+ ->maxLength(255),
+
+ TextInput::make('dosage_form')
+ ->label(__('medications.fields.dosage_form'))
+ ->maxLength(50)
+ ->placeholder('Tab, Cap, Amp, Drop, Serum, Cream ...'),
+
+ TextInput::make('strength')
+ ->label(__('medications.fields.strength'))
+ ->maxLength(100)
+ ->placeholder('500mg, 5mg/5ml ...'),
+
+ TextInput::make('quantity')
+ ->label(__('medications.fields.quantity'))
+ ->numeric()
+ ->minValue(0),
+
+ TextInput::make('timing')
+ ->label(__('medications.fields.timing'))
+ ->maxLength(100)
+ ->placeholder('q8h, q12h, q24h ...'),
+
+ Textarea::make('notes')
+ ->label(__('medications.fields.notes'))
+ ->rows(2)
+ ->columnSpanFull(),
+
+ Toggle::make('is_default')
+ ->label(__('medications.fields.is_default')),
+
+ Toggle::make('is_active')
+ ->label(__('medications.fields.is_active'))
+ ->default(true),
+ ])
+ ->columns(3)
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('createAnother')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create_another.label'))
+ ->action('createAnother')
+ ->keyBindings(['mod+shift+s'])
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ TextColumn::make('name')
+ ->label(__('medications.fields.name'))
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('dosage_form')
+ ->label(__('medications.fields.dosage_form'))
+ ->badge()
+ ->placeholder('-'),
+
+ TextColumn::make('strength')
+ ->label(__('medications.fields.strength'))
+ ->placeholder('-'),
+
+ TextColumn::make('quantity')
+ ->label(__('medications.fields.quantity'))
+ ->placeholder('-'),
+
+ TextColumn::make('timing')
+ ->label(__('medications.fields.timing'))
+ ->placeholder('-'),
+
+ IconColumn::make('is_default')
+ ->label(__('medications.fields.is_default'))
+ ->boolean(),
+
+ IconColumn::make('is_active')
+ ->label(__('medications.fields.is_active'))
+ ->boolean(),
+
+ TextColumn::make('created_at')
+ ->label(__('medications.fields.created_at'))
+ ->sortable(),
+ ])
+ ->defaultSort('name')
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ \Filament\Actions\BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ ]),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListMedications::route('/'),
+ 'create' => Pages\CreateMedication::route('/create'),
+ 'edit' => Pages\EditMedication::route('/{record}/edit'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/MedicationResource/Pages/CreateMedication.php b/app/Filament/Resources/MedicationResource/Pages/CreateMedication.php
new file mode 100644
index 0000000..79150c0
--- /dev/null
+++ b/app/Filament/Resources/MedicationResource/Pages/CreateMedication.php
@@ -0,0 +1,21 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/OsurgAuditResource.php b/app/Filament/Resources/OsurgAuditResource.php
new file mode 100644
index 0000000..944e057
--- /dev/null
+++ b/app/Filament/Resources/OsurgAuditResource.php
@@ -0,0 +1,110 @@
+columns([
+ TextColumn::make('id')
+ ->label(__('sync_log.fields.id'))
+ ->sortable(),
+
+ TextColumn::make('datetime')
+ ->label(__('sync_log.fields.datetime'))
+ ->sortable()
+ ->formatStateUsing(function ($state) {
+ if (! $state) {
+ return '-';
+ }
+ try {
+ $date = \Carbon\Carbon::parse($state);
+ return Jalalian::fromCarbon($date)->format('Y/m/d - H:i');
+ } catch (\Exception $e) {
+ return $state;
+ }
+ }),
+
+ TextColumn::make('ip')
+ ->label(__('sync_log.fields.ip'))
+ ->searchable(),
+
+ TextColumn::make('user')
+ ->label(__('sync_log.fields.user'))
+ ->searchable(),
+
+ TextColumn::make('table_name')
+ ->label(__('sync_log.fields.table_name'))
+ ->searchable(),
+
+ TextColumn::make('action')
+ ->label(__('sync_log.fields.action'))
+ ->badge()
+ ->searchable()
+ ->color(fn (string $state): string => match ($state) {
+ 'created' => 'success',
+ 'updated' => 'warning',
+ 'deleted' => 'danger',
+ 'synced' => 'gray',
+ default => 'primary',
+ }),
+
+ TextColumn::make('record_id')
+ ->label(__('sync_log.fields.record_id')),
+ ])
+ ->defaultSort('id', 'desc');
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListOsurgAudits::route('/'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/OsurgAuditResource/Pages/ListOsurgAudits.php b/app/Filament/Resources/OsurgAuditResource/Pages/ListOsurgAudits.php
new file mode 100644
index 0000000..e0d8b86
--- /dev/null
+++ b/app/Filament/Resources/OsurgAuditResource/Pages/ListOsurgAudits.php
@@ -0,0 +1,18 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make()
+ ->schema([
+ TextInput::make('init_parameter')
+ ->label(__('osurg_initials.fields.init_parameter'))
+ ->required()
+ ->maxLength(50)
+ ->unique(table: OsurgInitial::class, column: 'init_parameter', ignoreRecord: true),
+
+ TextInput::make('init_value')
+ ->label(__('osurg_initials.fields.init_value'))
+ ->maxLength(50),
+
+ FileUpload::make('attachment')
+ ->label(__('osurg_initials.fields.attachment'))
+ ->disk('public')
+ ->directory('initials')
+ ->image()
+ ->imagePreviewHeight('120')
+ ->columnSpanFull(),
+ ])
+ ->columns(2)
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('createAnother')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create_another.label'))
+ ->action('createAnother')
+ ->keyBindings(['mod+shift+s'])
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ TextColumn::make('init_parameter')
+ ->label(__('osurg_initials.fields.init_parameter'))
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('init_value')
+ ->label(__('osurg_initials.fields.init_value'))
+ ->searchable()
+ ->placeholder('—'),
+
+ ImageColumn::make('attachment')
+ ->label(__('osurg_initials.fields.attachment'))
+ ->disk('public')
+ ->square()
+ ->size(48),
+
+ TextColumn::make('created_at')
+ ->label(__('osurg_initials.fields.created_at'))
+ ->sortable(),
+ ])
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ BulkAction::make('export_excel_selected')
+ ->label(__('table.export_excel_selected'))
+ ->icon('heroicon-o-table-cells')
+ ->color('success')
+ ->action(function (Collection $records) {
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('osurg_initials.fields.init_parameter'),
+ __('osurg_initials.fields.init_value'),
+ __('osurg_initials.fields.created_at'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->init_parameter,
+ $record->init_value,
+ $record->created_at,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'osurg-initials-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+ ]),
+
+ ActionGroup::make([
+ Action::make('export_excel')
+ ->label(__('table.export_excel'))
+ ->color('success')
+ ->icon('heroicon-o-table-cells')
+ ->action(function () {
+ $records = OsurgInitial::all();
+
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('osurg_initials.fields.init_parameter'),
+ __('osurg_initials.fields.init_value'),
+ __('osurg_initials.fields.created_at'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->init_parameter,
+ $record->init_value,
+ $record->created_at,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'osurg-initials-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+
+ Action::make('export_pdf')
+ ->label(__('table.export_pdf'))
+ ->color('danger')
+ ->icon('heroicon-o-document-arrow-down')
+ ->action(function () {
+ $records = OsurgInitial::all();
+
+ return PdfService::download(
+ 'exports.osurg-initials-pdf',
+ ['records' => $records],
+ 'osurg-initials-' . now()->format('Y-m-d') . '.pdf',
+ );
+ }),
+ ])
+ ->label(__('table.export'))
+ ->color('orange')
+ ->button(),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListOsurgInitials::route('/'),
+ 'create' => Pages\CreateOsurgInitial::route('/create'),
+ 'edit' => Pages\EditOsurgInitial::route('/{record}/edit'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/OsurgInitialResource/Pages/CreateOsurgInitial.php b/app/Filament/Resources/OsurgInitialResource/Pages/CreateOsurgInitial.php
new file mode 100644
index 0000000..b2fce49
--- /dev/null
+++ b/app/Filament/Resources/OsurgInitialResource/Pages/CreateOsurgInitial.php
@@ -0,0 +1,18 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/PatientIllnessResource.php b/app/Filament/Resources/PatientIllnessResource.php
new file mode 100644
index 0000000..768fe3b
--- /dev/null
+++ b/app/Filament/Resources/PatientIllnessResource.php
@@ -0,0 +1,278 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make()
+ ->schema([
+ TextInput::make('illness')
+ ->label(__('patient_illness.fields.illness'))
+ ->required()
+ ->maxLength(200)
+ ->columnSpanFull(),
+
+ Select::make('row_no')
+ ->label(__('patient_illness.fields.row_no'))
+ ->options([
+ 1 => __('patient_illness.row_options.first'),
+ 2 => __('patient_illness.row_options.second'),
+ ])
+ ->required(),
+
+ TextInput::make('priority')
+ ->label(__('patient_illness.fields.priority'))
+ ->numeric()
+ ->minValue(1),
+ ])
+ ->columns(2)
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('createAnother')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create_another.label'))
+ ->action('createAnother')
+ ->keyBindings(['mod+shift+s'])
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ TextColumn::make('illness')
+ ->label(__('patient_illness.fields.illness'))
+ ->weight(FontWeight::Medium)
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('row_no')
+ ->label(__('patient_illness.fields.row_no'))
+ ->badge()
+ ->color('gray')
+ ->formatStateUsing(fn (int $state): string => $state === 1
+ ? __('patient_illness.row_options.first')
+ : __('patient_illness.row_options.second'))
+ ->sortable(),
+
+ TextColumn::make('priority')
+ ->label(__('patient_illness.fields.priority'))
+ ->badge()
+ ->color('primary')
+ ->sortable(),
+ ])
+ ->reorderable('priority')
+ ->defaultSort('priority')
+ ->groups([
+ Group::make('row_no')
+ ->label(__('patient_illness.fields.row_no'))
+ ->getTitleFromRecordUsing(fn (PatientIllness $record): string => $record->row_no === 1
+ ? __('patient_illness.row_options.first')
+ : __('patient_illness.row_options.second')),
+ ])
+ ->defaultGroup('row_no')
+ ->groupingSettingsHidden()
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ BulkAction::make('export_excel_selected')
+ ->label(__('table.export_excel_selected'))
+ ->icon('heroicon-o-table-cells')
+ ->color('success')
+ ->action(function (Collection $records) {
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('patient_illness.fields.illness'),
+ __('patient_illness.fields.row_no'),
+ __('patient_illness.fields.priority'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->illness,
+ $record->row_no,
+ $record->priority,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'patient-illness-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+ ]),
+
+ ActionGroup::make([
+ Action::make('export_excel')
+ ->label(__('table.export_excel'))
+ ->color('success')
+ ->icon('heroicon-o-table-cells')
+ ->action(function () {
+ $records = PatientIllness::orderBy('row_no')->orderBy('priority')->get();
+
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('patient_illness.fields.illness'),
+ __('patient_illness.fields.row_no'),
+ __('patient_illness.fields.priority'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->illness,
+ $record->row_no,
+ $record->priority,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'patient-illness-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+
+ Action::make('export_pdf')
+ ->label(__('table.export_pdf'))
+ ->color('danger')
+ ->icon('heroicon-o-document-arrow-down')
+ ->action(function () {
+ $records = PatientIllness::orderBy('row_no')->orderBy('priority')->get();
+
+ return PdfService::download(
+ 'exports.patient-illness-pdf',
+ ['records' => $records],
+ 'patient-illness-' . now()->format('Y-m-d') . '.pdf',
+ );
+ }),
+ ])
+ ->label(__('table.export'))
+ ->color('orange')
+ ->button(),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListPatientIllnesses::route('/'),
+ 'create' => Pages\CreatePatientIllness::route('/create'),
+ 'edit' => Pages\EditPatientIllness::route('/{record}/edit'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/PatientIllnessResource/Pages/CreatePatientIllness.php b/app/Filament/Resources/PatientIllnessResource/Pages/CreatePatientIllness.php
new file mode 100644
index 0000000..ee54b80
--- /dev/null
+++ b/app/Filament/Resources/PatientIllnessResource/Pages/CreatePatientIllness.php
@@ -0,0 +1,18 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/PatientResource.php b/app/Filament/Resources/PatientResource.php
new file mode 100644
index 0000000..2bbd9a6
--- /dev/null
+++ b/app/Filament/Resources/PatientResource.php
@@ -0,0 +1,998 @@
+ $record->last_name,
+ ];
+ }
+
+ public static function getNavigationIcon(): \BackedEnum|string|null
+ {
+ return 'heroicon-o-user-group';
+ }
+ public static function getNavigationGroup(): ?string
+ {
+ return __('navigation.groups.patients');
+ }
+
+ public static function getNavigationSort(): ?int
+ {
+ return 1;
+ }
+
+
+ public static function getNavigationLabel(): string
+ {
+ return __('navigation.patients.title');
+ }
+
+ public static function getModelLabel(): string
+ {
+ return __('navigation.patients.singular');
+ }
+
+ public static function getPluralModelLabel(): string
+ {
+ return __('navigation.patients.title');
+ }
+
+ public static function form(Schema $schema): Schema
+ {
+ $yesNo = [
+ 'بله' => 'بله',
+ 'خیر' => 'خیر',
+ ];
+
+ return $schema
+ ->components([
+ Grid::make()
+ ->schema([
+
+ Section::make(__('patients.sections.patient_info'))
+ ->schema([
+ TextInput::make('first_name')
+ ->label(__('patients.fields.first_name'))
+ ->required()
+ ->validationMessages([
+ 'required' => __('patients.validation.first_name_required'),
+ ])
+ ->maxLength(50),
+
+ TextInput::make('last_name')
+ ->label(__('patients.fields.last_name'))
+ ->required()
+ ->validationMessages([
+ 'required' => __('patients.validation.last_name_required'),
+ ])
+ ->maxLength(50),
+
+ TextInput::make('father_name')
+ ->label(__('patients.fields.father_name'))
+ ->required()
+ ->validationMessages([
+ 'required' => __('patients.validation.father_name_required'),
+ ])
+ ->maxLength(50),
+
+ TextInput::make('icno')
+ ->label(__('patients.fields.icno'))
+ ->required()
+ ->maxLength(11),
+
+ TextInput::make('hand_phone')
+ ->label(__('patients.fields.hand_phone'))
+ ->required()
+ ->validationMessages([
+ 'required' => __('patients.validation.hand_phone_required'),
+ ])
+ ->maxLength(50),
+
+ TextInput::make('age')
+ ->label(__('patients.fields.age'))
+ ->numeric()
+ ->minValue(0),
+
+ DatePicker::make('birth_date')
+ ->label(__('patients.fields.birth_date'))
+ ->jalali(),
+
+ Radio::make('gender')
+ ->label(__('patients.fields.gender'))
+ ->options(['مرد' => 'مرد', 'زن' => 'زن'])
+ ->inline(),
+
+ Radio::make('marital_status')
+ ->label(__('patients.fields.marital_status'))
+ ->options(['مجرد' => 'مجرد', 'متاهل' => 'متاهل'])
+ ->inline(),
+
+ TextInput::make('insurance_no')
+ ->label(__('patients.fields.insurance_no'))
+ ->maxLength(50),
+
+ TextInput::make('insurance')
+ ->label(__('patients.fields.insurance'))
+ ->maxLength(50),
+
+ TextInput::make('education')
+ ->label(__('patients.fields.education'))
+ ->maxLength(50),
+
+ TextInput::make('job')
+ ->label(__('patients.fields.job'))
+ ->maxLength(50),
+
+ TextInput::make('home_phone')
+ ->label(__('patients.fields.home_phone'))
+ ->maxLength(50),
+
+ TextInput::make('work_phone')
+ ->label(__('patients.fields.work_phone'))
+ ->maxLength(50),
+
+ TextInput::make('other_phone')
+ ->label(__('patients.fields.other_phone'))
+ ->maxLength(50),
+
+ Textarea::make('home_address')
+ ->label(__('patients.fields.home_address'))
+ ->rows(2)
+ ->columnSpan(2),
+
+ Textarea::make('work_address')
+ ->label(__('patients.fields.work_address'))
+ ->rows(2)
+ ->columnSpan(2),
+
+ TextInput::make('refered_by')
+ ->label(__('patients.fields.refered_by'))
+ ->maxLength(50),
+
+ TextInput::make('doc_id')
+ ->label(__('patients.fields.doc_id'))
+ ->maxLength(50),
+
+ Textarea::make('referal_reason')
+ ->label(__('patients.fields.referal_reason'))
+ ->rows(2)
+ ->columnSpan(2),
+ ])
+ ->columns(4)
+ ->columnSpanFull(),
+
+ Section::make(__('patients.sections.illness'))
+ ->schema([
+ CheckboxList::make('current_illness_1')
+ ->label(__('patients.fields.current_illness_1'))
+ ->options(fn () => \Illuminate\Support\Facades\Cache::remember(
+ 'illness_options_1',
+ now()->addDay(),
+ fn () => PatientIllness::where('row_no', 1)->orderBy('priority')->pluck('illness', 'illness')->toArray()
+ )),
+
+ CheckboxList::make('current_illness_2')
+ ->label(__('patients.fields.current_illness_2'))
+ ->options(fn () => \Illuminate\Support\Facades\Cache::remember(
+ 'illness_options_2',
+ now()->addDay(),
+ fn () => PatientIllness::where('row_no', 2)->orderBy('priority')->pluck('illness', 'illness')->toArray()
+ )),
+
+ TextInput::make('blood_sugar')
+ ->label(__('patients.fields.blood_sugar'))
+ ->numeric(),
+
+ TextInput::make('blood_pressure')
+ ->label(__('patients.fields.blood_pressure'))
+ ->numeric(),
+
+ Radio::make('is_undercare')
+ ->label(__('patients.fields.is_undercare'))
+ ->options($yesNo)
+ ->inline(),
+
+ TextInput::make('undercare_reason')
+ ->label(__('patients.fields.undercare_reason'))
+ ->maxLength(50),
+
+ Radio::make('is_usingdrug')
+ ->label(__('patients.fields.is_usingdrug'))
+ ->options($yesNo)
+ ->inline(),
+
+ TextInput::make('underdrug_reason')
+ ->label(__('patients.fields.underdrug_reason'))
+ ->maxLength(50),
+
+ CheckboxList::make('has_alergyto')
+ ->label(__('patients.fields.has_alergyto'))
+ ->options([
+ 'پنی سیلین' => 'پنی سیلین',
+ 'داروی بی حسی' => 'داروی بی حسی',
+ 'مواد غذایی و دارویی دیگر' => 'مواد غذایی و دارویی دیگر',
+ ])
+ ->columns(3),
+
+ TextInput::make('alergy_reason')
+ ->label(__('patients.fields.alergy_reason'))
+ ->maxLength(50),
+
+ Textarea::make('description')
+ ->label(__('patients.fields.description'))
+ ->rows(2)
+ ->columnSpanFull(),
+ ])
+ ->columns(2)
+ ->columnSpanFull(),
+
+ Section::make(__('patients.sections.surgery_notes'))
+ ->schema([
+ RichEditor::make('surgery_before')
+ ->label(__('patients.fields.surgery_before'))
+ ->extraInputAttributes(['style' => 'min-height: 150px']),
+
+ RichEditor::make('sergery_after')
+ ->label(__('patients.fields.sergery_after'))
+ ->extraInputAttributes(['style' => 'min-height: 150px']),
+ ])
+ ->columns(2)
+ ->columnSpanFull(),
+
+ Section::make(__('patients.sections.media'))
+ ->schema([
+ FileUpload::make('photos_before')
+ ->label(__('patients.fields.photos_before'))
+ ->multiple()
+ ->image()
+ ->disk('public')
+ ->directory('surgery_photos/before')
+ ->downloadable()
+ ->openable(),
+
+ FileUpload::make('photos_after')
+ ->label(__('patients.fields.photos_after'))
+ ->multiple()
+ ->image()
+ ->disk('public')
+ ->directory('surgery_photos/after')
+ ->downloadable()
+ ->openable(),
+
+ FileUpload::make('videos')
+ ->label(__('patients.fields.videos'))
+ ->multiple()
+ ->disk('public')
+ ->directory('surgery_photos/videos')
+ ->acceptedFileTypes(['video/mp4', 'video/quicktime', 'video/x-msvideo', 'video/x-matroska', 'video/webm', 'audio/mpeg', 'audio/mp3', 'audio/wav', 'audio/ogg', 'audio/aac'])
+ ->downloadable(),
+
+ FileUpload::make('audio_files')
+ ->label(__('patients.fields.audio_files'))
+ ->multiple()
+ ->disk('public')
+ ->directory('audio_files')
+ ->acceptedFileTypes(['audio/mpeg', 'audio/mp3', 'audio/wav', 'audio/ogg', 'audio/mp4', 'audio/aac'])
+ ->downloadable(),
+
+ ])
+ ->columns(2)
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('createAnother')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create_another.label'))
+ ->action('createAnother')
+ ->keyBindings(['mod+shift+s'])
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->modifyQueryUsing(fn ($query) => $query->with(['creator', 'updator', 'surgeryAppointment']))
+ ->deferLoading()
+ ->columns([
+ TextColumn::make('first_name')
+ ->label(__('patients.fields.first_name'))
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('last_name')
+ ->label(__('patients.fields.last_name'))
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('hand_phone')
+ ->label(__('patients.fields.hand_phone'))
+ ->placeholder('-'),
+
+ TextColumn::make('home_phone')
+ ->label(__('patients.fields.home_phone'))
+ ->placeholder('-'),
+
+ TextColumn::make('creator.name')
+ ->label(__('patients.fields.created_by'))
+ ->placeholder('-'),
+
+ TextColumn::make('updator.name')
+ ->label(__('patients.fields.updated_by'))
+ ->placeholder('-'),
+
+ TextColumn::make('updated_at')
+ ->label(__('patients.fields.updated_at'))
+ ->sortable()
+ ->placeholder('-'),
+
+ TextColumn::make('refered_by')
+ ->label(__('patients.fields.refered_by'))
+ ->placeholder('-'),
+
+ TextColumn::make('surgery_before')
+ ->label(__('patients.fields.surgery_before'))
+ ->width('150px')
+ ->extraAttributes(fn (Patient $record): array =>
+ empty(strip_tags($record->surgery_before ?? ''))
+ ? ['class' => 'pointer-events-none']
+ : []
+ )
+ ->formatStateUsing(function ($state) {
+ $text = strip_tags($state ?? '');
+ if (! $text) {
+ return '-';
+ }
+ if (mb_strlen($text) > 30) {
+ return mb_substr($text, 0, 30)
+ . ' ... بیشتر';
+ }
+ return $text;
+ })
+ ->html()
+ ->action(
+ Action::make('viewSurgeryBefore')
+ ->label(__('patients.fields.surgery_before'))
+ ->modalWidth(Width::Large)
+ ->modalContent(fn (Patient $record): \Illuminate\Support\HtmlString =>
+ new \Illuminate\Support\HtmlString(
+ '
'
+ . $record->surgery_before
+ . '
'
+ )
+ )
+ ->modalSubmitAction(false)
+ ->modalCancelActionLabel('بستن')
+ ),
+
+ TextColumn::make('sergery_after')
+ ->label(__('patients.fields.sergery_after'))
+ ->width('150px')
+ ->extraAttributes(fn (Patient $record): array =>
+ empty(strip_tags($record->sergery_after ?? ''))
+ ? ['class' => 'pointer-events-none']
+ : []
+ )
+ ->formatStateUsing(function ($state) {
+ $text = strip_tags($state ?? '');
+ if (! $text) {
+ return '-';
+ }
+ if (mb_strlen($text) > 30) {
+ return mb_substr($text, 0, 30)
+ . ' ... بیشتر';
+ }
+ return $text;
+ })
+ ->html()
+ ->action(
+ Action::make('viewSergeryAfter')
+ ->label(__('patients.fields.sergery_after'))
+ ->modalWidth(Width::Large)
+ ->modalContent(fn (Patient $record): \Illuminate\Support\HtmlString =>
+ new \Illuminate\Support\HtmlString(
+ ''
+ . $record->sergery_after
+ . '
'
+ )
+ )
+ ->modalSubmitAction(false)
+ ->modalCancelActionLabel('بستن')
+ ),
+
+ TextColumn::make('surgeryAppointment.surgery_date')
+ ->label(__('patients.fields.surgery_appointment'))
+ ->formatStateUsing(function ($state) {
+ if (! $state) {
+ return '-';
+ }
+ try {
+ $date = \Carbon\Carbon::parse($state);
+ return Jalalian::fromCarbon($date)->format('Y/m/d - H:i');
+ } catch (\Exception $e) {
+ return $state;
+ }
+ })
+ ->icon(fn ($state) => $state ? 'heroicon-o-check-circle' : 'heroicon-o-clock')
+ ->iconColor(fn ($state) => $state ? 'success' : 'gray')
+ ->placeholder('-'),
+ ])
+ ->defaultSort('created_at', 'desc')
+ ->recordActions([
+ Action::make('surgeryAppointment')
+ ->label(__('patients.actions.surgery_appointment'))
+ ->icon('heroicon-o-calendar-days')
+ ->iconButton()
+ ->color(fn (Patient $record) => $record->surgeryAppointment ? 'success' : 'info')
+ ->modalWidth(Width::Large)
+ ->fillForm(function (Patient $record): array {
+ $appointment = $record->surgeryAppointment;
+
+ if ($appointment) {
+ $surgeryDate = $appointment->surgery_date;
+ return [
+ 'surgery_date' => $surgeryDate?->format('Y-m-d'),
+ 'surgery_time' => $surgeryDate?->format('H:i'),
+ 'surgery_center_id' => $appointment->surgery_center_id,
+ ];
+ }
+
+ return [
+ 'surgery_date' => null,
+ 'surgery_time' => '09:00',
+ 'surgery_center_id' => null,
+ ];
+ })
+ ->form([
+ \Filament\Forms\Components\Placeholder::make('patient_name')
+ ->label(__('patients.fields.full_name'))
+ ->content(fn (Patient $record) => $record->full_name),
+
+ Grid::make(2)
+ ->schema([
+ DatePicker::make('surgery_date')
+ ->label(__('patients.fields.surgery_date'))
+ ->jalali()
+ ->minDate(today())
+ ->required(),
+
+ TimePicker::make('surgery_time')
+ ->label(__('patients.fields.surgery_time'))
+ ->native(false)
+ ->seconds(false)
+ ->minutesStep(15),
+ ]),
+
+ Select::make('surgery_center_id')
+ ->label(__('patients.fields.surgery_center'))
+ ->options(fn () => SurgeryCenter::pluck('name', 'id')->toArray())
+ ->searchable()
+ ->required(),
+ ])
+ ->modalSubmitAction(false)
+ ->extraModalFooterActions(fn (Action $action): array => [
+ $action->makeModalSubmitAction('saveAppointment', arguments: ['save' => true])
+ ->label(__('patients.actions.save_appointment'))
+ ->color('primary')
+ ->icon('heroicon-o-check')
+ ->visible(fn (Patient $record) => $record->surgeryAppointment === null),
+
+ Action::make('printAdmission')
+ ->label(__('patients.actions.print_admission'))
+ ->color('warning')
+ ->icon('heroicon-o-printer')
+ ->url(fn (Patient $record) => route('surgery-appointment.print.admission', $record), shouldOpenInNewTab: true)
+ ->visible(fn (Patient $record) => $record->surgeryAppointment !== null),
+
+ $action->makeModalSubmitAction('deleteAppointment', arguments: ['delete' => true])
+ ->label(__('patients.actions.delete_appointment'))
+ ->color('danger')
+ ->icon('heroicon-o-trash')
+ ->visible(fn (Patient $record) => $record->surgeryAppointment !== null),
+ ])
+ ->action(function (Patient $record, array $data, array $arguments, Action $action): void {
+ if (! empty($arguments['delete'])) {
+ SurgeryAppointment::where('patient_id', $record->id)->delete();
+
+ \Filament\Notifications\Notification::make()
+ ->title(__('patients.actions.appointment_deleted'))
+ ->success()
+ ->send();
+ return;
+ }
+ $dateStr = $data['surgery_date'];
+ $timeStr = $data['surgery_time'] ?? '00:00';
+ $surgeryDateTime = \Carbon\Carbon::parse($dateStr . ' ' . $timeStr);
+ $jalaliDate = Jalalian::fromCarbon($surgeryDateTime)->format('Y/m/d');
+
+ $appointment = SurgeryAppointment::updateOrCreate(
+ ['patient_id' => $record->id],
+ [
+ 'surgery_date' => $surgeryDateTime,
+ 'surgery_center_id' => $data['surgery_center_id'],
+ ]
+ );
+
+ try {
+ $response = \Illuminate\Support\Facades\Http::timeout(30)
+ ->withHeader('X-API-Key', \App\Models\OsurgInitial::val('sms_api_key', config('sms.api_key')))
+ ->post(\App\Models\OsurgInitial::val('sms_api_url', config('sms.api_url')) . '/surgery-reminder', [
+ 'phoneNumber' => $record->hand_phone ?? '',
+ 'patientName' => $record->full_name,
+ 'surgeryDate' => $jalaliDate,
+ 'appointmentId' => $appointment->id,
+ 'patientId' => $record->id,
+ 'surgeryDateFull' => $surgeryDateTime->toDateTimeString(),
+ ]);
+
+ if (! ($response->json('success') ?? false)) {
+ \Filament\Notifications\Notification::make()
+ ->title(__('patients.actions.appointment_saved'))
+ ->body(__('patients.actions.api_failed') . ': ' . ($response->json('message') ?? ''))
+ ->warning()
+ ->send();
+ } else {
+ \Filament\Notifications\Notification::make()
+ ->title(__('patients.actions.appointment_saved'))
+ ->body(__('patients.actions.sms_sent'))
+ ->success()
+ ->send();
+ }
+ } catch (\Throwable $e) {
+ \Illuminate\Support\Facades\Log::warning('Surgery appointment API failed', [
+ 'patient_id' => $record->id,
+ 'appointment_id' => $appointment->id,
+ 'error' => $e->getMessage(),
+ ]);
+
+ \Filament\Notifications\Notification::make()
+ ->title(__('patients.actions.appointment_saved'))
+ ->body(__('patients.actions.api_failed') . ': ' . $e->getMessage())
+ ->warning()
+ ->send();
+ }
+
+ $record->refresh();
+ $action->halt();
+ }),
+
+ Action::make('prescription')
+ ->label(__('prescriptions.actions.create'))
+ ->icon('heroicon-o-document-text')
+ ->iconButton()
+ ->color('warning')
+ ->slideOver()
+ ->fillForm(function (Patient $record): array {
+ $prescription = Prescription::where('patient', $record->id)
+ ->latest()
+ ->first();
+
+ if ($prescription) {
+ $medicationIds = $prescription->medication_ids ?? [];
+ $content = $prescription->content ?? '';
+ } else {
+ $defaultMeds = Medication::where('is_active', true)
+ ->where('is_default', true)
+ ->orderBy('name')
+ ->get();
+ $medicationIds = $defaultMeds->pluck('id')->toArray();
+ $content = $defaultMeds->isNotEmpty()
+ ? '' . $defaultMeds->map(fn ($m) =>
+ '- ' . implode(' ', array_filter([
+ $m->dosage_form,
+ $m->name,
+ $m->strength,
+ $m->quantity ? '#' . $m->quantity : null,
+ $m->timing,
+ ])) . '
'
+ )->implode('') . '
'
+ : '';
+ }
+
+ return [
+ 'medication_ids' => $medicationIds,
+ 'medication_order' => $medicationIds,
+ 'content' => $content,
+ 'issue_date' => now()->toDateString(),
+ ];
+ })
+ ->form([
+ Grid::make(2)
+ ->schema([
+ \Filament\Forms\Components\Placeholder::make('patient_name')
+ ->label(__('prescriptions.fields.patient'))
+ ->content(fn (Patient $record) => $record->full_name),
+
+ \Filament\Forms\Components\DatePicker::make('issue_date')
+ ->label(__('prescriptions.fields.issue_date'))
+ ->jalali()
+ ->required(),
+ ]),
+
+ \Filament\Forms\Components\Hidden::make('medication_order'),
+
+ \Filament\Forms\Components\CheckboxList::make('medication_ids')
+ ->label(__('prescriptions.fields.medication_ids'))
+ ->options(fn () => Medication::where('is_active', true)
+ ->orderBy('name')
+ ->get()
+ ->mapWithKeys(fn ($m) => [
+ $m->id => implode(' ', array_filter([
+ $m->dosage_form,
+ $m->name,
+ $m->strength,
+ $m->quantity ? '#' . $m->quantity : null,
+ $m->timing,
+ ])),
+ ])
+ ->toArray()
+ )
+ ->columns(2)
+ ->live()
+ ->afterStateUpdated(function (array $state, callable $set, callable $get) {
+ $currentOrder = array_map('intval', (array) ($get('medication_order') ?: []));
+ $state = array_map('intval', $state);
+
+ $newOrder = array_values(
+ array_filter($currentOrder, fn ($id) => in_array($id, $state))
+ );
+
+ foreach ($state as $id) {
+ if (! in_array($id, $newOrder)) {
+ $newOrder[] = $id;
+ }
+ }
+
+ $set('medication_order', $newOrder);
+
+ if (empty($newOrder)) {
+ $set('content', null);
+ return;
+ }
+
+ $medications = Medication::whereIn('id', $newOrder)->get()->keyBy('id');
+ $html = '' . collect($newOrder)
+ ->map(fn ($id) => isset($medications[$id])
+ ? '- ' . implode(' ', array_filter([
+ $medications[$id]->dosage_form,
+ $medications[$id]->name,
+ $medications[$id]->strength,
+ $medications[$id]->quantity ? '#' . $medications[$id]->quantity : null,
+ $medications[$id]->timing,
+ ])) . '
'
+ : ''
+ )
+ ->filter()
+ ->implode('') . '
';
+
+ $set('content', $html);
+ })
+ ->columnSpanFull(),
+
+ \Filament\Forms\Components\RichEditor::make('content')
+ ->label(__('prescriptions.fields.content'))
+ ->columnSpanFull(),
+ ])
+ ->modalSubmitAction(false)
+ ->extraModalFooterActions(fn (Action $action): array => [
+ $action->makeModalSubmitAction('printPrescription', arguments: ['printType' => 'prescription'])
+ ->label(__('prescriptions.actions.save_and_print'))
+ ->color('info')
+ ->icon('heroicon-o-printer'),
+
+ $action->makeModalSubmitAction('printAdmission', arguments: ['printType' => 'admission'])
+ ->label(__('prescriptions.actions.print_admission'))
+ ->color('warning')
+ ->icon('heroicon-o-printer')
+ ->visible(fn (Patient $record) => $record->surgeryAppointment !== null),
+
+ $action->makeModalSubmitAction('printLab', arguments: ['printType' => 'lab'])
+ ->label(__('prescriptions.actions.print_lab'))
+ ->color('gray')
+ ->icon('heroicon-o-beaker'),
+ ])
+ ->action(function (Patient $record, array $data, array $arguments, $livewire): void {
+ $prescription = Prescription::updateOrCreate(
+ ['patient' => $record->id],
+ [
+ 'doctor' => auth()->user()?->name,
+ 'issue_date' => $data['issue_date'] ?? '',
+ 'issue_datetime' => now(),
+ 'medication_ids' => $data['medication_order'] ?? $data['medication_ids'] ?? [],
+ 'content' => $data['content'] ?? '',
+ ]
+ );
+
+ $printType = $arguments['printType'] ?? null;
+
+ if ($printType === 'prescription') {
+ $livewire->redirect(route('prescription.print', $prescription));
+ } elseif ($printType === 'admission') {
+ $livewire->redirect(route('prescription.print.admission', $prescription));
+ } elseif ($printType === 'lab') {
+ $livewire->redirect(route('prescription.print', ['prescription' => $prescription, 'type' => 'lab']));
+ }
+ })
+ ->successNotificationTitle(__('prescriptions.actions.saved')),
+
+ Action::make('viewFiles')
+ ->label(__('patients.actions.view_files'))
+ ->icon('heroicon-o-paper-clip')
+ ->iconButton()
+ ->color('warning')
+ ->visible(fn (Patient $record): bool =>
+ ! empty(array_filter([
+ $record->photos_before,
+ $record->photos_after,
+ $record->videos,
+ $record->audio_files,
+ ]))
+ )
+ ->modalWidth(Width::Large)
+ ->fillForm(fn (Patient $record): array => [
+ 'photos_before' => $record->photos_before ?? [],
+ 'photos_after' => $record->photos_after ?? [],
+ 'videos' => $record->videos ?? [],
+ 'audio_files' => $record->audio_files ?? [],
+ ])
+ ->schema([
+ Grid::make(2)
+ ->schema([
+ FileUpload::make('photos_before')
+ ->label(__('patients.fields.photos_before'))
+ ->multiple()
+ ->image()
+ ->imagePreviewHeight('150')
+ ->disk('public')
+ ->directory('surgery_photos/before')
+ ->downloadable()
+ ->openable()
+ ->disabled()
+ ->extraAttributes(['data-hide-dropzone' => 'true']),
+
+ FileUpload::make('photos_after')
+ ->label(__('patients.fields.photos_after'))
+ ->multiple()
+ ->image()
+ ->imagePreviewHeight('150')
+ ->disk('public')
+ ->directory('surgery_photos/after')
+ ->downloadable()
+ ->openable()
+ ->disabled()
+ ->extraAttributes(['data-hide-dropzone' => 'true']),
+
+ FileUpload::make('videos')
+ ->label(__('patients.fields.videos'))
+ ->multiple()
+ ->disk('public')
+ ->directory('surgery_photos/videos')
+ ->acceptedFileTypes(['video/mp4', 'video/quicktime', 'video/x-msvideo', 'video/x-matroska', 'video/webm', 'audio/mpeg', 'audio/mp3', 'audio/wav', 'audio/ogg', 'audio/aac'])
+ ->downloadable()
+ ->disabled()
+ ->extraAttributes(['data-hide-dropzone' => 'true']),
+
+ FileUpload::make('audio_files')
+ ->label(__('patients.fields.audio_files'))
+ ->multiple()
+ ->disk('public')
+ ->directory('audio_files')
+ ->acceptedFileTypes(['audio/mpeg', 'audio/mp3', 'audio/wav', 'audio/ogg', 'audio/mp4', 'audio/aac'])
+ ->downloadable()
+ ->disabled()
+ ->extraAttributes(['data-hide-dropzone' => 'true']),
+ ]),
+ ])
+ ->modalSubmitAction(false)
+ ->modalCancelActionLabel('بستن'),
+
+ EditAction::make()->iconButton(),
+ DeleteAction::make()->iconButton(),
+ ], position: \Filament\Tables\Enums\RecordActionsPosition::BeforeCells)
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ BulkAction::make('export_excel_selected')
+ ->label(__('table.export_excel_selected'))
+ ->icon('heroicon-o-table-cells')
+ ->color('success')
+ ->action(function (Collection $records) {
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('patients.fields.first_name'),
+ __('patients.fields.last_name'),
+ __('patients.fields.icno'),
+ __('patients.fields.gender'),
+ __('patients.fields.hand_phone'),
+ __('patients.fields.insurance'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->first_name,
+ $record->last_name,
+ $record->icno,
+ $record->gender,
+ $record->hand_phone,
+ $record->insurance,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'patients-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+ ]),
+
+ ActionGroup::make([
+ Action::make('export_excel')
+ ->label(__('table.export_excel'))
+ ->color('success')
+ ->icon('heroicon-o-table-cells')
+ ->action(function () {
+ $records = Patient::orderBy('last_name')->orderBy('first_name')->get();
+
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('patients.fields.first_name'),
+ __('patients.fields.last_name'),
+ __('patients.fields.icno'),
+ __('patients.fields.gender'),
+ __('patients.fields.hand_phone'),
+ __('patients.fields.insurance'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->first_name,
+ $record->last_name,
+ $record->icno,
+ $record->gender,
+ $record->hand_phone,
+ $record->insurance,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'patients-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+
+ Action::make('export_pdf')
+ ->label(__('table.export_pdf'))
+ ->color('danger')
+ ->icon('heroicon-o-document-arrow-down')
+ ->action(function () {
+ $records = Patient::orderBy('last_name')->orderBy('first_name')->get();
+
+ return PdfService::download(
+ 'exports.patients-pdf',
+ ['records' => $records],
+ 'patients-' . now()->format('Y-m-d') . '.pdf',
+ );
+ }),
+ ])
+ ->label(__('table.export'))
+ ->color('orange')
+ ->button(),
+ ]);
+ }
+
+ public static function getRelations(): array
+ {
+ return [
+ VisitsRelationManager::class,
+ ];
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListPatients::route('/'),
+ 'create' => Pages\CreatePatient::route('/create'),
+ 'edit' => Pages\EditPatient::route('/{record}/edit'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/PatientResource/Pages/CreatePatient.php b/app/Filament/Resources/PatientResource/Pages/CreatePatient.php
new file mode 100644
index 0000000..7fef8b9
--- /dev/null
+++ b/app/Filament/Resources/PatientResource/Pages/CreatePatient.php
@@ -0,0 +1,21 @@
+label(__('prescriptions.actions.print_prescription'))
+ ->icon('heroicon-o-printer')
+ ->color('info')
+ ->visible(fn () => $this->getRecord()->prescriptions()->exists())
+ ->url(fn () => route('prescription.print', $this->getRecord()->prescriptions()->latest()->first()))
+ ->openUrlInNewTab(),
+
+ Action::make('printAdmission')
+ ->label(__('prescriptions.actions.print_admission'))
+ ->icon('heroicon-o-printer')
+ ->color('warning')
+ ->visible(fn () => $this->getRecord()->surgeryAppointment !== null)
+ ->url(fn () => route('surgery-appointment.print.admission', $this->getRecord()))
+ ->openUrlInNewTab(),
+
+ Action::make('printLab')
+ ->label(__('prescriptions.actions.print_lab'))
+ ->icon('heroicon-o-beaker')
+ ->color('gray')
+ ->url(fn () => route('patient.print.lab', $this->getRecord()))
+ ->openUrlInNewTab(),
+
+ DeleteAction::make(),
+ ];
+ }
+
+ protected function getFormActions(): array
+ {
+ return [];
+ }
+}
diff --git a/app/Filament/Resources/PatientResource/Pages/ListPatients.php b/app/Filament/Resources/PatientResource/Pages/ListPatients.php
new file mode 100644
index 0000000..42e6e2c
--- /dev/null
+++ b/app/Filament/Resources/PatientResource/Pages/ListPatients.php
@@ -0,0 +1,25 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/PatientResource/RelationManagers/VisitsRelationManager.php b/app/Filament/Resources/PatientResource/RelationManagers/VisitsRelationManager.php
new file mode 100644
index 0000000..f51ec0e
--- /dev/null
+++ b/app/Filament/Resources/PatientResource/RelationManagers/VisitsRelationManager.php
@@ -0,0 +1,202 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make(__('visits.sections.visit_info'))
+ ->schema([
+ DatePicker::make('visit_date')
+ ->label(__('visits.fields.visit_date'))
+ ->jalali()
+ ->default(now())
+ ->required(),
+
+ TimePicker::make('visit_time')
+ ->label(__('visits.fields.visit_time'))
+ ->nullable()
+ ->native(false)
+ ->seconds(false)
+ ->minutesStep(15),
+
+ Select::make('doctor')
+ ->label(__('visits.fields.doctor'))
+ ->options(fn () => Doctor::all()->mapWithKeys(
+ fn ($d) => [$d->id => $d->full_name]
+ )->toArray())
+ ->searchable()
+ ->nullable(),
+
+ Select::make('treatment')
+ ->label(__('visits.fields.treatment'))
+ ->options(fn () => Treatment::all()->mapWithKeys(
+ fn ($t) => [$t->id => ($t->treatment_name ?: $t->treatment_type)]
+ )->toArray())
+ ->searchable()
+ ->nullable()
+ ->live()
+ ->afterStateUpdated(function ($state, callable $set) {
+ if ($state) {
+ $treatment = Treatment::find($state);
+ if ($treatment && $treatment->treatment_cost > 0) {
+ $set('treatment_cost', $treatment->treatment_cost);
+ }
+ }
+ }),
+ ])
+ ->columns(2)
+ ->columnSpanFull(),
+
+ Section::make(__('visits.sections.financial_info'))
+ ->schema([
+ TextInput::make('treatment_cost')
+ ->label(__('visits.fields.treatment_cost'))
+ ->numeric()
+ ->nullable()
+ ->suffix(__('visits.fields.currency')),
+
+ TextInput::make('paid_amount')
+ ->label(__('visits.fields.paid_amount'))
+ ->numeric()
+ ->nullable()
+ ->suffix(__('visits.fields.currency')),
+
+ Select::make('payment_type')
+ ->label(__('visits.fields.payment_type'))
+ ->options(fn () => PaymentType::all()->mapWithKeys(
+ fn ($p) => [$p->id => $p->payment_type]
+ )->toArray())
+ ->searchable()
+ ->nullable(),
+ ])
+ ->columns(3)
+ ->columnSpanFull(),
+
+ Section::make(__('visits.sections.treatment_details'))
+ ->schema([
+ Textarea::make('treatment_description')
+ ->label(__('visits.fields.treatment_description'))
+ ->rows(3)
+ ->columnSpanFull(),
+ ])
+ ->columnSpanFull(),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public function table(Table $table): Table
+ {
+ return $table
+ ->recordTitleAttribute('visit_date')
+ ->columns([
+ TextColumn::make('visit_date')
+ ->label(__('visits.fields.visit_date'))
+ ->sortable()
+ ->formatStateUsing(function ($state) {
+ if (! $state) {
+ return '-';
+ }
+ try {
+ $date = \Carbon\Carbon::parse($state);
+ return \Morilog\Jalali\Jalalian::fromCarbon($date)->format('Y/m/d');
+ } catch (\Exception $e) {
+ return $state;
+ }
+ })
+ ->placeholder('-'),
+
+ TextColumn::make('doctorRecord.first_name')
+ ->label(__('visits.fields.doctor'))
+ ->formatStateUsing(fn ($record) => $record->doctorRecord?->full_name ?? '-')
+ ->placeholder('-'),
+
+ TextColumn::make('treatmentRecord.treatment_name')
+ ->label(__('visits.fields.treatment'))
+ ->formatStateUsing(fn ($record) => $record->treatmentRecord
+ ? ($record->treatmentRecord->treatment_name ?: $record->treatmentRecord->treatment_type)
+ : '-')
+ ->placeholder('-'),
+
+ TextColumn::make('treatment_cost')
+ ->label(__('visits.fields.treatment_cost'))
+ ->formatStateUsing(fn ($state) => $state !== null ? number_format((int) $state) : '-')
+ ->placeholder('-')
+ ->summarize(
+ Sum::make()
+ ->label(__('visits.fields.treatment_cost'))
+ ->formatStateUsing(fn ($state) => number_format((int) ($state ?? 0)))
+ ),
+
+ TextColumn::make('paid_amount')
+ ->label(__('visits.fields.paid_amount'))
+ ->formatStateUsing(fn ($state) => $state !== null ? number_format((int) $state) : '-')
+ ->placeholder('-')
+ ->summarize(
+ Sum::make()
+ ->label(__('visits.fields.paid_amount'))
+ ->formatStateUsing(fn ($state) => number_format((int) ($state ?? 0)))
+ ),
+
+ TextColumn::make('remained_amount')
+ ->label(__('visits.fields.remained_amount'))
+ ->state(fn ($record) => $record->remained_amount)
+ ->formatStateUsing(fn ($state) => number_format((int) $state))
+ ->color(fn ($record) => $record->remained_amount > 0 ? 'danger' : 'success'),
+
+ TextColumn::make('paymentTypeRecord.payment_type')
+ ->label(__('visits.fields.payment_type'))
+ ->placeholder('-'),
+ ])
+ ->defaultSort('visit_date', 'desc')
+ ->headerActions([
+ CreateAction::make()
+ ->label(__('visits.actions.create'))
+ ->icon('heroicon-o-plus')
+ ->slideOver()
+ ->modalWidth('4xl'),
+ ])
+ ->recordActions([
+ EditAction::make()
+ ->slideOver()
+ ->modalWidth('4xl'),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([]);
+ }
+}
diff --git a/app/Filament/Resources/PaymentTypeResource.php b/app/Filament/Resources/PaymentTypeResource.php
new file mode 100644
index 0000000..55db805
--- /dev/null
+++ b/app/Filament/Resources/PaymentTypeResource.php
@@ -0,0 +1,271 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make()
+ ->schema([
+ TextInput::make('payment_type')
+ ->label(__('payment_types.fields.payment_type'))
+ ->required()
+ ->maxLength(50),
+
+ TextInput::make('account_no')
+ ->label(__('payment_types.fields.account_no'))
+ ->maxLength(50),
+
+ TextInput::make('pos_no')
+ ->label(__('payment_types.fields.pos_no'))
+ ->maxLength(50),
+
+ Textarea::make('description')
+ ->label(__('payment_types.fields.description'))
+ ->rows(3)
+ ->columnSpanFull(),
+ ])
+ ->columns(2)
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('createAnother')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create_another.label'))
+ ->action('createAnother')
+ ->keyBindings(['mod+shift+s'])
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ TextColumn::make('payment_type')
+ ->label(__('payment_types.fields.payment_type'))
+ ->weight(FontWeight::Medium)
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('account_no')
+ ->label(__('payment_types.fields.account_no'))
+ ->placeholder('-'),
+
+ TextColumn::make('pos_no')
+ ->label(__('payment_types.fields.pos_no'))
+ ->placeholder('-'),
+
+ TextColumn::make('description')
+ ->label(__('payment_types.fields.description'))
+ ->limit(50)
+ ->placeholder('-'),
+
+ TextColumn::make('created_at')
+ ->label(__('payment_types.fields.created_at'))
+ ->sortable(),
+ ])
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ BulkAction::make('export_excel_selected')
+ ->label(__('table.export_excel_selected'))
+ ->icon('heroicon-o-table-cells')
+ ->color('success')
+ ->action(function (Collection $records) {
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('payment_types.fields.payment_type'),
+ __('payment_types.fields.account_no'),
+ __('payment_types.fields.pos_no'),
+ __('payment_types.fields.description'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->payment_type,
+ $record->account_no,
+ $record->pos_no,
+ $record->description,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'payment-types-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+ ]),
+
+ ActionGroup::make([
+ Action::make('export_excel')
+ ->label(__('table.export_excel'))
+ ->color('success')
+ ->icon('heroicon-o-table-cells')
+ ->action(function () {
+ $records = PaymentType::all();
+
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('payment_types.fields.payment_type'),
+ __('payment_types.fields.account_no'),
+ __('payment_types.fields.pos_no'),
+ __('payment_types.fields.description'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->payment_type,
+ $record->account_no,
+ $record->pos_no,
+ $record->description,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'payment-types-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+
+ Action::make('export_pdf')
+ ->label(__('table.export_pdf'))
+ ->color('danger')
+ ->icon('heroicon-o-document-arrow-down')
+ ->action(function () {
+ $records = PaymentType::all();
+
+ return PdfService::download(
+ 'exports.payment-types-pdf',
+ ['records' => $records],
+ 'payment-types-' . now()->format('Y-m-d') . '.pdf',
+ );
+ }),
+ ])
+ ->label(__('table.export'))
+ ->color('orange')
+ ->button(),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListPaymentTypes::route('/'),
+ 'create' => Pages\CreatePaymentType::route('/create'),
+ 'edit' => Pages\EditPaymentType::route('/{record}/edit'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/PaymentTypeResource/Pages/CreatePaymentType.php b/app/Filament/Resources/PaymentTypeResource/Pages/CreatePaymentType.php
new file mode 100644
index 0000000..bb0090e
--- /dev/null
+++ b/app/Filament/Resources/PaymentTypeResource/Pages/CreatePaymentType.php
@@ -0,0 +1,18 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/PrescriptionResource.php b/app/Filament/Resources/PrescriptionResource.php
new file mode 100644
index 0000000..783b0aa
--- /dev/null
+++ b/app/Filament/Resources/PrescriptionResource.php
@@ -0,0 +1,373 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make(__('prescriptions.sections.info'))
+ ->schema([
+ Select::make('patient')
+ ->label(__('prescriptions.fields.patient'))
+ ->options(fn () => Patient::all()->mapWithKeys(
+ fn ($p) => [$p->id => $p->full_name]
+ )->toArray())
+ ->searchable()
+ ->nullable(),
+
+ DatePicker::make('issue_date')
+ ->label(__('prescriptions.fields.issue_date'))
+ ->jalali()
+ ->default(now()),
+ ])
+ ->columns(2)
+ ->columnSpanFull(),
+
+ Section::make(__('prescriptions.sections.medications'))
+ ->schema([
+ CheckboxList::make('medication_ids')
+ ->label(__('prescriptions.fields.medication_ids'))
+ ->options(fn () => Medication::where('is_active', true)
+ ->orderBy('name')
+ ->get()
+ ->mapWithKeys(fn ($m) => [
+ $m->id => implode(' ', array_filter([
+ $m->dosage_form,
+ $m->name,
+ $m->strength,
+ $m->quantity ? '#' . $m->quantity : null,
+ $m->timing,
+ ])),
+ ])
+ ->toArray()
+ )
+ ->columns(3)
+ ->live()
+ ->afterStateUpdated(function (array $state, callable $set) {
+ if (empty($state)) {
+ $set('content', null);
+ return;
+ }
+ $medications = Medication::whereIn('id', $state)
+ ->orderBy('name')
+ ->get();
+ $html = '' . $medications->map(fn ($m) =>
+ '- ' . implode(' ', array_filter([
+ $m->dosage_form,
+ $m->name,
+ $m->strength,
+ $m->quantity ? '#' . $m->quantity : null,
+ $m->timing,
+ ])) . '
'
+ )->implode('') . '
';
+ $set('content', $html);
+ })
+ ->columnSpanFull(),
+ ])
+ ->columnSpanFull(),
+
+ Section::make(__('prescriptions.sections.content'))
+ ->schema([
+ RichEditor::make('content')
+ ->label(__('prescriptions.fields.content'))
+ ->columnSpanFull(),
+ ])
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('createAndPrint')
+ ->label(__('prescriptions.actions.save_and_print'))
+ ->color('warning')
+ ->icon('heroicon-o-printer')
+ ->action(function ($livewire) {
+ $livewire->printType = 'prescription';
+ $livewire->create();
+ })
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->modifyQueryUsing(fn ($query) => $query->with(['patientRecord', 'creator']))
+ ->deferLoading()
+ ->columns([
+ TextColumn::make('patientRecord.first_name')
+ ->label(__('prescriptions.fields.patient'))
+ ->formatStateUsing(fn ($record) => $record->patientRecord?->full_name ?? '-')
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('doctor')
+ ->label(__('prescriptions.fields.doctor'))
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('issue_date')
+ ->label(__('prescriptions.fields.issue_date'))
+ ->sortable()
+ ->formatStateUsing(function ($state) {
+ if (! $state) {
+ return '-';
+ }
+ try {
+ $date = \Carbon\Carbon::parse($state);
+ return Jalalian::fromCarbon($date)->format('Y/m/d - H:i');
+ } catch (\Exception $e) {
+ return $state;
+ }
+ })
+ ->placeholder('-'),
+
+ TextColumn::make('content')
+ ->label(__('prescriptions.fields.content'))
+ ->formatStateUsing(fn ($state) => strip_tags($state ?? ''))
+ ->limit(80)
+ ->placeholder('-'),
+
+ TextColumn::make('creator.name')
+ ->label(__('prescriptions.fields.created_by'))
+ ->sortable(),
+
+ TextColumn::make('created_at')
+ ->label(__('prescriptions.fields.created_at'))
+ ->sortable()
+ ->formatStateUsing(function ($state) {
+ if (! $state) {
+ return '-';
+ }
+ try {
+ $date = \Carbon\Carbon::parse($state);
+ return Jalalian::fromCarbon($date)->format('Y/m/d - H:i');
+ } catch (\Exception $e) {
+ return $state;
+ }
+ }),
+ ])
+ ->defaultSort('created_at', 'desc')
+ ->recordActions([
+ Action::make('printPrescription')
+ ->label(__('prescriptions.actions.print_prescription'))
+ ->icon('heroicon-o-printer')
+ ->color('info')
+ ->url(fn ($record) => route('prescription.print', $record))
+ ->openUrlInNewTab(),
+
+ Action::make('printAdmission')
+ ->label(__('prescriptions.actions.print_admission'))
+ ->icon('heroicon-o-printer')
+ ->color('warning')
+ ->url(fn ($record) => route('prescription.print.admission', $record))
+ ->openUrlInNewTab(),
+
+ Action::make('printLab')
+ ->label(__('prescriptions.actions.print_lab'))
+ ->icon('heroicon-o-beaker')
+ ->color('gray')
+ ->url(fn ($record) => route('prescription.print', ['prescription' => $record, 'type' => 'lab']))
+ ->openUrlInNewTab(),
+
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ BulkAction::make('export_excel_selected')
+ ->label(__('table.export_excel_selected'))
+ ->icon('heroicon-o-table-cells')
+ ->color('success')
+ ->action(function (Collection $records) {
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('prescriptions.fields.patient'),
+ __('prescriptions.fields.doctor'),
+ __('prescriptions.fields.issue_date'),
+ __('prescriptions.fields.content'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->patientRecord?->full_name ?? '',
+ $record->doctor,
+ $record->issue_date,
+ strip_tags($record->content ?? ''),
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'prescriptions-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+ ]),
+
+ ActionGroup::make([
+ Action::make('export_excel')
+ ->label(__('table.export_excel'))
+ ->color('success')
+ ->icon('heroicon-o-table-cells')
+ ->action(function () {
+ $records = Prescription::with('patientRecord')->orderBy('created_at', 'desc')->get();
+
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('prescriptions.fields.patient'),
+ __('prescriptions.fields.doctor'),
+ __('prescriptions.fields.issue_date'),
+ __('prescriptions.fields.content'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->patientRecord?->full_name ?? '',
+ $record->doctor,
+ $record->issue_date,
+ strip_tags($record->content ?? ''),
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'prescriptions-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+
+ Action::make('export_pdf')
+ ->label(__('table.export_pdf'))
+ ->color('danger')
+ ->icon('heroicon-o-document-arrow-down')
+ ->action(function () {
+ $records = Prescription::with('patientRecord')->orderBy('created_at', 'desc')->get();
+
+ return PdfService::download(
+ 'exports.prescriptions-pdf',
+ ['records' => $records],
+ 'prescriptions-' . now()->format('Y-m-d') . '.pdf',
+ );
+ }),
+ ])
+ ->label(__('table.export'))
+ ->color('orange')
+ ->button(),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListPrescriptions::route('/'),
+ 'create' => Pages\CreatePrescription::route('/create'),
+ 'edit' => Pages\EditPrescription::route('/{record}/edit'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/PrescriptionResource/Pages/CreatePrescription.php b/app/Filament/Resources/PrescriptionResource/Pages/CreatePrescription.php
new file mode 100644
index 0000000..deaa391
--- /dev/null
+++ b/app/Filament/Resources/PrescriptionResource/Pages/CreatePrescription.php
@@ -0,0 +1,49 @@
+user()?->name;
+ $data['issue_datetime'] = now();
+ return $data;
+ }
+
+ protected function getFormActions(): array
+ {
+ return [];
+ }
+
+ protected function getRedirectUrl(): string
+ {
+ $record = $this->getRecord();
+
+ if ($this->printType === 'prescription') {
+ return route('prescription.print', $record);
+ }
+
+ if ($this->printType === 'lab') {
+ return route('prescription.print', ['prescription' => $record, 'type' => 'lab']);
+ }
+
+ if ($this->printType === 'admission') {
+ return route('prescription.print.admission', $record);
+ }
+
+ return static::getResource()::getUrl('index');
+ }
+}
diff --git a/app/Filament/Resources/PrescriptionResource/Pages/EditPrescription.php b/app/Filament/Resources/PrescriptionResource/Pages/EditPrescription.php
new file mode 100644
index 0000000..6b19ebe
--- /dev/null
+++ b/app/Filament/Resources/PrescriptionResource/Pages/EditPrescription.php
@@ -0,0 +1,59 @@
+user()?->name;
+ $data['issue_datetime'] = now();
+ return $data;
+ }
+
+ protected function getHeaderActions(): array
+ {
+ return [
+ Action::make('printPrescription')
+ ->label(__('prescriptions.actions.print_prescription'))
+ ->icon('heroicon-o-printer')
+ ->color('info')
+ ->url(fn () => route('prescription.print', $this->getRecord()))
+ ->openUrlInNewTab(),
+
+ Action::make('printAdmission')
+ ->label(__('prescriptions.actions.print_admission'))
+ ->icon('heroicon-o-printer')
+ ->color('warning')
+ ->visible(fn () => $this->getRecord()->patientRecord?->surgeryAppointment !== null)
+ ->url(fn () => route('prescription.print.admission', $this->getRecord()))
+ ->openUrlInNewTab(),
+
+ Action::make('printLab')
+ ->label(__('prescriptions.actions.print_lab'))
+ ->icon('heroicon-o-beaker')
+ ->color('gray')
+ ->url(fn () => route('prescription.print', ['prescription' => $this->getRecord(), 'type' => 'lab']))
+ ->openUrlInNewTab(),
+
+ DeleteAction::make(),
+ ];
+ }
+
+ protected function getFormActions(): array
+ {
+ return [];
+ }
+}
diff --git a/app/Filament/Resources/PrescriptionResource/Pages/ListPrescriptions.php b/app/Filament/Resources/PrescriptionResource/Pages/ListPrescriptions.php
new file mode 100644
index 0000000..7aa8c4f
--- /dev/null
+++ b/app/Filament/Resources/PrescriptionResource/Pages/ListPrescriptions.php
@@ -0,0 +1,22 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/RoleResource.php b/app/Filament/Resources/RoleResource.php
new file mode 100644
index 0000000..d96a6eb
--- /dev/null
+++ b/app/Filament/Resources/RoleResource.php
@@ -0,0 +1,335 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make()
+ ->schema([
+ TextInput::make('name')
+ ->label(__('filament-shield::filament-shield.field.name'))
+ ->unique(
+ ignoreRecord: true,
+ modifyRuleUsing: fn (Unique $rule): Unique => Utils::isTenancyEnabled()
+ ? $rule->where(Utils::getTenantModelForeignKey(), Filament::getTenant()?->id)
+ : $rule
+ )
+ ->required()
+ ->maxLength(255),
+
+ TextInput::make('guard_name')
+ ->label(__('filament-shield::filament-shield.field.guard_name'))
+ ->default(Utils::getFilamentAuthGuard())
+ ->nullable()
+ ->maxLength(255),
+
+ Select::make(config('permission.column_names.team_foreign_key'))
+ ->label(__('filament-shield::filament-shield.field.team'))
+ ->placeholder(__('filament-shield::filament-shield.field.team.placeholder'))
+ ->default(Filament::getTenant()?->id)
+ ->options(fn (): array => in_array(Utils::getTenantModel(), [null, '', '0'], true) ? [] : Utils::getTenantModel()::pluck('name', 'id')->toArray())
+ ->visible(fn (): bool => static::shield()->isCentralApp() && Utils::isTenancyEnabled())
+ ->dehydrated(fn (): bool => static::shield()->isCentralApp() && Utils::isTenancyEnabled()),
+
+ static::getSelectAllFormComponent(),
+ ])
+ ->columns(['sm' => 2, 'lg' => 3])
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('createAnother')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create_another.label'))
+ ->action('createAnother')
+ ->keyBindings(['mod+shift+s'])
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ static::getShieldFormComponents(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ TextColumn::make('name')
+ ->weight(FontWeight::Medium)
+ ->label(__('filament-shield::filament-shield.column.name'))
+ ->formatStateUsing(fn (string $state): string => Str::headline($state))
+ ->searchable(),
+ TextColumn::make('guard_name')
+ ->badge()
+ ->color('warning')
+ ->label(__('filament-shield::filament-shield.column.guard_name')),
+ TextColumn::make('team.name')
+ ->default('Global')
+ ->badge()
+ ->color(fn (mixed $state): string => str($state)->contains('Global') ? 'gray' : 'primary')
+ ->label(__('filament-shield::filament-shield.column.team'))
+ ->searchable()
+ ->visible(fn (): bool => static::shield()->isCentralApp() && Utils::isTenancyEnabled()),
+ TextColumn::make('permissions_count')
+ ->badge()
+ ->label(__('filament-shield::filament-shield.column.permissions'))
+ ->counts('permissions')
+ ->color('primary'),
+ TextColumn::make('updated_at')
+ ->label(__('filament-shield::filament-shield.column.updated_at'))
+ ->formatStateUsing(function ($state) {
+ if (! $state) {
+ return '-';
+ }
+ try {
+ $date = \Carbon\Carbon::parse($state);
+ return Jalalian::fromCarbon($date)->format('Y/m/d - H:i');
+ } catch (\Exception $e) {
+ return $state;
+ }
+ }),
+ ])
+ ->filters([
+ //
+ ])
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->paginationPageOptions([5, 10, 25, 50, 100])
+ ->defaultPaginationPageOption(25)
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ BulkAction::make('export_excel_selected')
+ ->label(__('table.export_excel_selected'))
+ ->icon('heroicon-o-table-cells')
+ ->color('success')
+ ->action(function (Collection $records) {
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('filament-shield::filament-shield.column.name'),
+ __('filament-shield::filament-shield.column.guard_name'),
+ __('filament-shield::filament-shield.column.permissions'),
+ __('filament-shield::filament-shield.column.updated_at'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->name,
+ $record->guard_name,
+ $record->permissions_count ?? $record->permissions()->count(),
+ $record->updated_at?->format('Y-m-d H:i:s'),
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'roles-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+ ]),
+
+ ActionGroup::make([
+ Action::make('export_excel')
+ ->label(__('table.export_excel'))
+ ->color('success')
+ ->icon('heroicon-o-table-cells')
+ ->action(function () {
+ $records = Role::with('permissions')->withCount('permissions')->get();
+
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('filament-shield::filament-shield.column.name'),
+ __('filament-shield::filament-shield.column.guard_name'),
+ __('filament-shield::filament-shield.column.permissions'),
+ __('filament-shield::filament-shield.column.updated_at'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->name,
+ $record->guard_name,
+ $record->permissions_count,
+ $record->updated_at?->format('Y-m-d H:i:s'),
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'roles-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+
+ Action::make('export_pdf')
+ ->label(__('table.export_pdf'))
+ ->color('danger')
+ ->icon('heroicon-o-document-arrow-down')
+ ->action(function () {
+ $records = Role::with('permissions')->get();
+
+ return PdfService::download(
+ 'exports.roles-pdf',
+ ['records' => $records],
+ 'roles-' . now()->format('Y-m-d') . '.pdf',
+ );
+ }),
+ ])
+ ->label(__('table.export'))
+ ->color('orange')
+ ->button(),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListRoles::route('/'),
+ 'create' => Pages\CreateRole::route('/create'),
+ 'view' => Pages\ViewRole::route('/{record}'),
+ 'edit' => Pages\EditRole::route('/{record}/edit'),
+ ];
+ }
+
+ public static function toggleSelectAllViaEntities(Livewire $livewire, Set $set): void
+ {
+ /** @phpstan-ignore-next-line */
+ $entitiesStates = collect($livewire->form->getFlatComponents())
+ ->filter(fn (mixed $component): bool => $component instanceof Component)
+ ->reduce(function (mixed $counts, Component $component) {
+ if ($component instanceof CheckboxList) {
+ $counts[$component->getName()] = count(array_keys($component->getOptions())) === count(collect($component->getState())->values()->unique()->toArray());
+ }
+
+ return $counts;
+ }, collect())
+ ->values();
+
+ if ($entitiesStates->containsStrict(false)) {
+ $set('select_all', false);
+ } else {
+ $set('select_all', true);
+ }
+ }
+
+ public static function toggleEntitiesViaSelectAll(Livewire $livewire, Set $set, bool $state): void
+ {
+ /** @phpstan-ignore-next-line */
+ $entitiesComponents = collect($livewire->form->getFlatComponents())
+ ->filter(fn (mixed $component): bool => $component instanceof CheckboxList);
+
+ if ($state) {
+ $entitiesComponents->each(function (CheckboxList $component) use ($set): void {
+ $set($component->getName(), array_keys($component->getOptions()));
+ });
+ } else {
+ $entitiesComponents->each(fn (CheckboxList $component) => $component->state([]));
+ }
+ }
+}
diff --git a/app/Filament/Resources/RoleResource/Pages/CreateRole.php b/app/Filament/Resources/RoleResource/Pages/CreateRole.php
new file mode 100644
index 0000000..543b405
--- /dev/null
+++ b/app/Filament/Resources/RoleResource/Pages/CreateRole.php
@@ -0,0 +1,18 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make(__('surgery_appointments.sections.info'))
+ ->schema([
+ Select::make('patient_id')
+ ->label(__('surgery_appointments.fields.patient'))
+ ->options(fn () => Patient::all()->mapWithKeys(
+ fn ($p) => [$p->id => $p->full_name]
+ )->toArray())
+ ->searchable()
+ ->required(),
+
+ Select::make('surgery_center_id')
+ ->label(__('surgery_appointments.fields.surgery_center'))
+ ->options(fn () => SurgeryCenter::pluck('name', 'id')->toArray())
+ ->searchable()
+ ->required(),
+
+ DatePicker::make('surgery_date_date')
+ ->label(__('surgery_appointments.fields.surgery_date'))
+ ->jalali()
+ ->minDate(today())
+ ->required(),
+
+ TimePicker::make('surgery_date_time')
+ ->label(__('surgery_appointments.fields.surgery_time'))
+ ->native(false)
+ ->seconds(false)
+ ->minutesStep(15)
+ ->default('09:00'),
+ ])
+ ->columns(2)
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('createAnother')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create_another.label'))
+ ->action('createAnother')
+ ->keyBindings(['mod+shift+s'])
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ TextColumn::make('patient.first_name')
+ ->label(__('surgery_appointments.fields.patient'))
+ ->formatStateUsing(fn ($record) => $record->patient?->full_name ?? '-')
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('surgeryCenter.name')
+ ->label(__('surgery_appointments.fields.surgery_center'))
+ ->searchable()
+ ->sortable()
+ ->placeholder('-'),
+
+ TextColumn::make('surgery_date')
+ ->label(__('surgery_appointments.fields.surgery_date'))
+ ->formatStateUsing(function ($state) {
+ if (! $state) {
+ return '-';
+ }
+ try {
+ $date = \Carbon\Carbon::parse($state);
+ return Jalalian::fromCarbon($date)->format('Y/m/d - H:i');
+ } catch (\Exception $e) {
+ return $state;
+ }
+ })
+ ->sortable(),
+
+ TextColumn::make('creator.name')
+ ->label(__('surgery_appointments.fields.created_by'))
+ ->placeholder('-'),
+
+ TextColumn::make('created_at')
+ ->label(__('surgery_appointments.fields.created_at'))
+ ->sortable(),
+ ])
+ ->defaultSort('surgery_date', 'desc')
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ DeleteBulkAction::make(),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListSurgeryAppointments::route('/'),
+ 'create' => Pages\CreateSurgeryAppointment::route('/create'),
+ 'edit' => Pages\EditSurgeryAppointment::route('/{record}/edit'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/SurgeryAppointmentResource/Pages/CreateSurgeryAppointment.php b/app/Filament/Resources/SurgeryAppointmentResource/Pages/CreateSurgeryAppointment.php
new file mode 100644
index 0000000..2229853
--- /dev/null
+++ b/app/Filament/Resources/SurgeryAppointmentResource/Pages/CreateSurgeryAppointment.php
@@ -0,0 +1,90 @@
+record;
+ $patient = $record->patient;
+ $surgeryDateTime = $record->getRawOriginal('surgery_date')
+ ? \Carbon\Carbon::parse($record->getRawOriginal('surgery_date'))
+ : \Carbon\Carbon::parse($record->surgery_date);
+ $jalaliDate = Jalalian::fromCarbon($surgeryDateTime)->format('Y/m/d');
+
+ try {
+ $response = Http::timeout(30)
+ ->withHeader('X-API-Key', \App\Models\OsurgInitial::val('sms_api_key', config('sms.api_key')))
+ ->asJson()
+ ->post(\App\Models\OsurgInitial::val('sms_api_url', config('sms.api_url')) . '/surgery-reminder', [
+ 'phoneNumber' => $patient->hand_phone ?? '',
+ 'patientName' => $patient->full_name,
+ 'surgeryDate' => $jalaliDate,
+ 'appointmentId' => $record->id,
+ 'patientId' => $patient->id,
+ 'surgeryDateFull' => $surgeryDateTime->toDateTimeString(),
+ ]);
+
+ if (! ($response->json('success') ?? false)) {
+ Notification::make()
+ ->title(__('patients.actions.appointment_saved'))
+ ->body(__('patients.actions.api_failed') . ': ' . ($response->json('message') ?? ''))
+ ->warning()
+ ->send();
+
+ return;
+ }
+ } catch (\Throwable $e) {
+ Log::warning('Surgery appointment API failed', [
+ 'appointment_id' => $record->id,
+ 'patient_id' => $patient->id,
+ 'error' => $e->getMessage(),
+ ]);
+
+ Notification::make()
+ ->title(__('patients.actions.appointment_saved'))
+ ->body(__('patients.actions.api_failed') . ': ' . $e->getMessage())
+ ->warning()
+ ->send();
+
+ return;
+ }
+
+ Notification::make()
+ ->title(__('patients.actions.appointment_saved'))
+ ->body(__('patients.actions.sms_sent'))
+ ->success()
+ ->send();
+ }
+
+ protected function getFormActions(): array
+ {
+ return [];
+ }
+}
diff --git a/app/Filament/Resources/SurgeryAppointmentResource/Pages/EditSurgeryAppointment.php b/app/Filament/Resources/SurgeryAppointmentResource/Pages/EditSurgeryAppointment.php
new file mode 100644
index 0000000..15ca36e
--- /dev/null
+++ b/app/Filament/Resources/SurgeryAppointmentResource/Pages/EditSurgeryAppointment.php
@@ -0,0 +1,112 @@
+format('Y-m-d');
+ $data['surgery_date_time'] = $date->format('H:i');
+ }
+
+ return $data;
+ }
+
+ protected function mutateFormDataBeforeSave(array $data): array
+ {
+ $dateStr = $data['surgery_date_date'] ?? '';
+ $timeStr = $data['surgery_date_time'] ?? '09:00';
+ $data['surgery_date'] = \Carbon\Carbon::parse($dateStr . ' ' . $timeStr);
+
+ unset($data['surgery_date_date'], $data['surgery_date_time']);
+
+ return $data;
+ }
+
+ protected function beforeSave(): void
+ {
+ $data = $this->form->getState();
+ $dateStr = $data['surgery_date_date'] ?? '';
+ $timeStr = $data['surgery_date_time'] ?? '09:00';
+ $surgeryDateTime = \Carbon\Carbon::parse($dateStr . ' ' . $timeStr);
+ $jalaliDate = Jalalian::fromCarbon($surgeryDateTime)->format('Y/m/d');
+
+ $patient = $this->getRecord()->patient;
+
+ try {
+ $response = Http::timeout(30)
+ ->withHeader('X-API-Key', \App\Models\OsurgInitial::val('sms_api_key', config('sms.api_key')))
+ ->asJson()
+ ->post(\App\Models\OsurgInitial::val('sms_api_url', config('sms.api_url')) . '/surgery-reminder', [
+ 'phoneNumber' => $patient->hand_phone ?? '',
+ 'patientName' => $patient->full_name,
+ 'surgeryDate' => $jalaliDate,
+ 'appointmentId' => $this->getRecord()->id,
+ 'patientId' => $patient->id,
+ 'surgeryDateFull' => $surgeryDateTime->toDateTimeString(),
+ ]);
+
+ if (! ($response->json('success') ?? false)) {
+ Notification::make()
+ ->title(__('patients.actions.api_failed'))
+ ->body($response->json('message') ?? '')
+ ->danger()
+ ->send();
+
+ $this->halt();
+ }
+ } catch (\Throwable $e) {
+ Log::warning('Surgery appointment API failed', [
+ 'patient_id' => $patient->id,
+ 'error' => $e->getMessage(),
+ ]);
+
+ Notification::make()
+ ->title(__('patients.actions.api_failed'))
+ ->body($e->getMessage())
+ ->danger()
+ ->send();
+
+ $this->halt();
+ }
+ }
+
+ protected function afterSave(): void
+ {
+ Notification::make()
+ ->title(__('patients.actions.appointment_saved'))
+ ->body(__('patients.actions.sms_sent'))
+ ->success()
+ ->send();
+ }
+
+ protected function getFormActions(): array
+ {
+ return [];
+ }
+}
diff --git a/app/Filament/Resources/SurgeryAppointmentResource/Pages/ListSurgeryAppointments.php b/app/Filament/Resources/SurgeryAppointmentResource/Pages/ListSurgeryAppointments.php
new file mode 100644
index 0000000..41decc0
--- /dev/null
+++ b/app/Filament/Resources/SurgeryAppointmentResource/Pages/ListSurgeryAppointments.php
@@ -0,0 +1,22 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/SurgeryCenterResource.php b/app/Filament/Resources/SurgeryCenterResource.php
new file mode 100644
index 0000000..c1c2b74
--- /dev/null
+++ b/app/Filament/Resources/SurgeryCenterResource.php
@@ -0,0 +1,291 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make()
+ ->schema([
+ TextInput::make('name')
+ ->label(__('surgery_centers.fields.name'))
+ ->required()
+ ->maxLength(255)
+ ->columnSpanFull(),
+
+ TextInput::make('phone')
+ ->label(__('surgery_centers.fields.phone'))
+ ->maxLength(50),
+
+ TextInput::make('email')
+ ->label(__('surgery_centers.fields.email'))
+ ->email()
+ ->maxLength(100),
+
+ TextInput::make('contact_person')
+ ->label(__('surgery_centers.fields.contact_person'))
+ ->maxLength(100)
+ ->columnSpanFull(),
+
+ Textarea::make('address')
+ ->label(__('surgery_centers.fields.address'))
+ ->rows(2)
+ ->columnSpanFull(),
+
+ Textarea::make('description')
+ ->label(__('surgery_centers.fields.description'))
+ ->rows(3)
+ ->columnSpanFull(),
+ ])
+ ->columns(2)
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('createAnother')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create_another.label'))
+ ->action('createAnother')
+ ->keyBindings(['mod+shift+s'])
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ TextColumn::make('name')
+ ->label(__('surgery_centers.fields.name'))
+ ->weight(FontWeight::Medium)
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('phone')
+ ->label(__('surgery_centers.fields.phone'))
+ ->placeholder('-'),
+
+ TextColumn::make('email')
+ ->label(__('surgery_centers.fields.email'))
+ ->placeholder('-'),
+
+ TextColumn::make('contact_person')
+ ->label(__('surgery_centers.fields.contact_person'))
+ ->placeholder('-'),
+
+ TextColumn::make('address')
+ ->label(__('surgery_centers.fields.address'))
+ ->limit(40)
+ ->placeholder('-'),
+
+ TextColumn::make('created_at')
+ ->label(__('surgery_centers.fields.created_at'))
+ ->sortable(),
+ ])
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ BulkAction::make('export_excel_selected')
+ ->label(__('table.export_excel_selected'))
+ ->icon('heroicon-o-table-cells')
+ ->color('success')
+ ->action(function (Collection $records) {
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('surgery_centers.fields.name'),
+ __('surgery_centers.fields.phone'),
+ __('surgery_centers.fields.email'),
+ __('surgery_centers.fields.contact_person'),
+ __('surgery_centers.fields.address'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->name,
+ $record->phone,
+ $record->email,
+ $record->contact_person,
+ $record->address,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'surgery-centers-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+ ]),
+
+ ActionGroup::make([
+ Action::make('export_excel')
+ ->label(__('table.export_excel'))
+ ->color('success')
+ ->icon('heroicon-o-table-cells')
+ ->action(function () {
+ $records = SurgeryCenter::orderBy('name')->get();
+
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('surgery_centers.fields.name'),
+ __('surgery_centers.fields.phone'),
+ __('surgery_centers.fields.email'),
+ __('surgery_centers.fields.contact_person'),
+ __('surgery_centers.fields.address'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->name,
+ $record->phone,
+ $record->email,
+ $record->contact_person,
+ $record->address,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'surgery-centers-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+
+ Action::make('export_pdf')
+ ->label(__('table.export_pdf'))
+ ->color('danger')
+ ->icon('heroicon-o-document-arrow-down')
+ ->action(function () {
+ $records = SurgeryCenter::orderBy('name')->get();
+
+ return PdfService::download(
+ 'exports.surgery-centers-pdf',
+ ['records' => $records],
+ 'surgery-centers-' . now()->format('Y-m-d') . '.pdf',
+ );
+ }),
+ ])
+ ->label(__('table.export'))
+ ->color('orange')
+ ->button(),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListSurgeryCenters::route('/'),
+ 'create' => Pages\CreateSurgeryCenter::route('/create'),
+ 'edit' => Pages\EditSurgeryCenter::route('/{record}/edit'),
+ ];
+ }
+}
\ No newline at end of file
diff --git a/app/Filament/Resources/SurgeryCenterResource/Pages/CreateSurgeryCenter.php b/app/Filament/Resources/SurgeryCenterResource/Pages/CreateSurgeryCenter.php
new file mode 100644
index 0000000..e6a8576
--- /dev/null
+++ b/app/Filament/Resources/SurgeryCenterResource/Pages/CreateSurgeryCenter.php
@@ -0,0 +1,18 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
\ No newline at end of file
diff --git a/app/Filament/Resources/TreatmentResource.php b/app/Filament/Resources/TreatmentResource.php
new file mode 100644
index 0000000..30abe78
--- /dev/null
+++ b/app/Filament/Resources/TreatmentResource.php
@@ -0,0 +1,277 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make()
+ ->schema([
+ TextInput::make('treatment_type')
+ ->label(__('treatments.fields.treatment_type'))
+ ->maxLength(50),
+
+ TextInput::make('treatment_name')
+ ->label(__('treatments.fields.treatment_name'))
+ ->required()
+ ->maxLength(50),
+
+ TextInput::make('treatment_cost')
+ ->label(__('treatments.fields.treatment_cost'))
+ ->numeric()
+ ->minValue(0),
+
+ Textarea::make('descriptions')
+ ->label(__('treatments.fields.descriptions'))
+ ->rows(3)
+ ->columnSpanFull(),
+ ])
+ ->columns(2)
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('createAnother')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create_another.label'))
+ ->action('createAnother')
+ ->keyBindings(['mod+shift+s'])
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ TextColumn::make('treatment_name')
+ ->label(__('treatments.fields.treatment_name'))
+ ->weight(FontWeight::Medium)
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('treatment_type')
+ ->label(__('treatments.fields.treatment_type'))
+ ->badge()
+ ->color('primary')
+ ->placeholder('-')
+ ->sortable(),
+
+ TextColumn::make('treatment_cost')
+ ->label(__('treatments.fields.treatment_cost'))
+ ->numeric(thousandsSeparator: ',')
+ ->placeholder('-')
+ ->sortable(),
+
+ TextColumn::make('descriptions')
+ ->label(__('treatments.fields.descriptions'))
+ ->limit(40)
+ ->placeholder('-'),
+
+ TextColumn::make('created_at')
+ ->label(__('treatments.fields.created_at'))
+ ->sortable(),
+ ])
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ BulkAction::make('export_excel_selected')
+ ->label(__('table.export_excel_selected'))
+ ->icon('heroicon-o-table-cells')
+ ->color('success')
+ ->action(function (Collection $records) {
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('treatments.fields.treatment_name'),
+ __('treatments.fields.treatment_type'),
+ __('treatments.fields.treatment_cost'),
+ __('treatments.fields.descriptions'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->treatment_name,
+ $record->treatment_type,
+ $record->treatment_cost,
+ $record->descriptions,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'treatments-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+ ]),
+
+ ActionGroup::make([
+ Action::make('export_excel')
+ ->label(__('table.export_excel'))
+ ->color('success')
+ ->icon('heroicon-o-table-cells')
+ ->action(function () {
+ $records = Treatment::orderBy('treatment_type')->orderBy('treatment_name')->get();
+
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('treatments.fields.treatment_name'),
+ __('treatments.fields.treatment_type'),
+ __('treatments.fields.treatment_cost'),
+ __('treatments.fields.descriptions'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->treatment_name,
+ $record->treatment_type,
+ $record->treatment_cost,
+ $record->descriptions,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'treatments-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+
+ Action::make('export_pdf')
+ ->label(__('table.export_pdf'))
+ ->color('danger')
+ ->icon('heroicon-o-document-arrow-down')
+ ->action(function () {
+ $records = Treatment::orderBy('treatment_type')->orderBy('treatment_name')->get();
+
+ return PdfService::download(
+ 'exports.treatments-pdf',
+ ['records' => $records],
+ 'treatments-' . now()->format('Y-m-d') . '.pdf',
+ );
+ }),
+ ])
+ ->label(__('table.export'))
+ ->color('orange')
+ ->button(),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListTreatments::route('/'),
+ 'create' => Pages\CreateTreatment::route('/create'),
+ 'edit' => Pages\EditTreatment::route('/{record}/edit'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/TreatmentResource/Pages/CreateTreatment.php b/app/Filament/Resources/TreatmentResource/Pages/CreateTreatment.php
new file mode 100644
index 0000000..26037ad
--- /dev/null
+++ b/app/Filament/Resources/TreatmentResource/Pages/CreateTreatment.php
@@ -0,0 +1,18 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/UserResource.php b/app/Filament/Resources/UserResource.php
new file mode 100644
index 0000000..7abd779
--- /dev/null
+++ b/app/Filament/Resources/UserResource.php
@@ -0,0 +1,279 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make()
+ ->schema([
+ TextInput::make('name')
+ ->label(__('users.fields.name'))
+ ->required()
+ ->maxLength(255),
+
+ TextInput::make('username')
+ ->label(__('users.fields.username'))
+ ->required()
+ ->maxLength(255)
+ ->unique(table: User::class, column: 'username', ignoreRecord: true),
+
+ TextInput::make('password')
+ ->label(__('users.fields.password'))
+ ->password()
+ ->required(fn (string $operation): bool => $operation === 'create')
+ ->dehydrateStateUsing(fn (string $state): string => Hash::make($state))
+ ->dehydrated(fn (?string $state): bool => filled($state))
+ ->maxLength(255),
+
+ Select::make('roles')
+ ->label(__('users.fields.roles'))
+ ->relationship('roles', 'name')
+ ->multiple()
+ ->preload(),
+ ])
+ ->columns(2)
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('createAnother')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create_another.label'))
+ ->action('createAnother')
+ ->keyBindings(['mod+shift+s'])
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->columns([
+ TextColumn::make('name')
+ ->label(__('users.fields.name'))
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('username')
+ ->label(__('users.fields.username'))
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('roles.name')
+ ->label(__('users.fields.roles'))
+ ->badge()
+ ->separator(','),
+
+ TextColumn::make('created_at')
+ ->label(__('users.fields.created_at'))
+ ->sortable(),
+ ])
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ BulkAction::make('export_excel_selected')
+ ->label(__('table.export_excel_selected'))
+ ->icon('heroicon-o-table-cells')
+ ->color('success')
+ ->action(function (Collection $records) {
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('users.fields.name'),
+ __('users.fields.username'),
+ __('users.fields.roles'),
+ __('users.fields.created_at'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->name,
+ $record->username,
+ $record->roles->pluck('name')->join(', '),
+ $record->created_at,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'users-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+ ]),
+
+ ActionGroup::make([
+ Action::make('export_excel')
+ ->label(__('table.export_excel'))
+ ->color('success')
+ ->icon('heroicon-o-table-cells')
+ ->action(function () {
+ $records = User::with('roles')->get();
+
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('users.fields.name'),
+ __('users.fields.username'),
+ __('users.fields.roles'),
+ __('users.fields.created_at'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->name,
+ $record->username,
+ $record->roles->pluck('name')->join(', '),
+ $record->created_at,
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'users-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }),
+
+ Action::make('export_pdf')
+ ->label(__('table.export_pdf'))
+ ->color('danger')
+ ->icon('heroicon-o-document-arrow-down')
+ ->action(function () {
+ $records = User::with('roles')->get();
+
+ return PdfService::download(
+ 'exports.users-pdf',
+ ['records' => $records],
+ 'users-' . now()->format('Y-m-d') . '.pdf',
+ );
+ }),
+ ])
+ ->label(__('table.export'))
+ ->color('orange')
+ ->button(),
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListUsers::route('/'),
+ 'create' => Pages\CreateUser::route('/create'),
+ 'edit' => Pages\EditUser::route('/{record}/edit'),
+ ];
+ }
+
+ public static function getNavigationLabel(): string
+ {
+ return __('navigation.users.title');
+ }
+
+ public static function getModelLabel(): string
+ {
+ return __('navigation.users.singular');
+ }
+
+ public static function getPluralModelLabel(): string
+ {
+ return __('navigation.users.title');
+ }
+}
diff --git a/app/Filament/Resources/UserResource/Pages/CreateUser.php b/app/Filament/Resources/UserResource/Pages/CreateUser.php
new file mode 100644
index 0000000..e7ca9a3
--- /dev/null
+++ b/app/Filament/Resources/UserResource/Pages/CreateUser.php
@@ -0,0 +1,18 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
diff --git a/app/Filament/Resources/VisitResource.php b/app/Filament/Resources/VisitResource.php
new file mode 100644
index 0000000..2548f6d
--- /dev/null
+++ b/app/Filament/Resources/VisitResource.php
@@ -0,0 +1,406 @@
+components([
+ Grid::make()
+ ->schema([
+ Section::make(__('visits.sections.visit_info'))
+ ->schema([
+ Select::make('patient')
+ ->label(__('visits.fields.patient'))
+ ->options(fn () => Patient::all()->mapWithKeys(
+ fn ($p) => [$p->id => $p->full_name . ($p->icno ? ' - ' . $p->icno : '')]
+ )->toArray())
+ ->searchable()
+ ->nullable()
+ ->columnSpan(2),
+
+ DatePicker::make('visit_date')
+ ->label(__('visits.fields.visit_date'))
+ ->jalali()
+ ->default(now())
+ ->required(),
+
+ TimePicker::make('visit_time')
+ ->label(__('visits.fields.visit_time'))
+ ->nullable()
+ ->native(false)
+ ->seconds(false)
+ ->minutesStep(15),
+
+ Select::make('doctor')
+ ->label(__('visits.fields.doctor'))
+ ->options(fn () => Doctor::all()->mapWithKeys(
+ fn ($d) => [$d->id => $d->full_name]
+ )->toArray())
+ ->searchable()
+ ->nullable(),
+
+ Select::make('treatment')
+ ->label(__('visits.fields.treatment'))
+ ->options(fn () => Treatment::all()->mapWithKeys(
+ fn ($t) => [$t->id => ($t->treatment_name ?: $t->treatment_type)]
+ )->toArray())
+ ->searchable()
+ ->nullable()
+ ->live()
+ ->afterStateUpdated(function ($state, callable $set) {
+ if ($state) {
+ $treatment = Treatment::find($state);
+ if ($treatment && $treatment->treatment_cost > 0) {
+ $set('treatment_cost', $treatment->treatment_cost);
+ }
+ }
+ }),
+ ])
+ ->columns(2)
+ ->columnSpanFull(),
+
+ Section::make(__('visits.sections.financial_info'))
+ ->schema([
+ TextInput::make('treatment_cost')
+ ->label(__('visits.fields.treatment_cost'))
+ ->numeric()
+ ->nullable()
+ ->suffix(__('visits.fields.currency')),
+
+ TextInput::make('paid_amount')
+ ->label(__('visits.fields.paid_amount'))
+ ->numeric()
+ ->nullable()
+ ->suffix(__('visits.fields.currency')),
+
+ Select::make('payment_type')
+ ->label(__('visits.fields.payment_type'))
+ ->options(fn () => PaymentType::all()->mapWithKeys(
+ fn ($p) => [$p->id => $p->payment_type]
+ )->toArray())
+ ->searchable()
+ ->nullable(),
+ ])
+ ->columns(3)
+ ->columnSpanFull(),
+
+ Section::make(__('visits.sections.treatment_details'))
+ ->schema([
+ Textarea::make('treatment_description')
+ ->label(__('visits.fields.treatment_description'))
+ ->rows(4)
+ ->columnSpanFull(),
+ ])
+ ->columnSpanFull()
+ ->footerActions([
+ fn (string $operation) => Action::make('create')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.create.label'))
+ ->submit('create')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('cancelCreate')
+ ->label(__('filament-panels::resources/pages/create-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'create'),
+
+ fn (string $operation) => Action::make('save')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label'))
+ ->submit('save')
+ ->keyBindings(['mod+s'])
+ ->visible($operation === 'edit'),
+
+ fn (string $operation) => Action::make('cancelEdit')
+ ->label(__('filament-panels::resources/pages/edit-record.form.actions.cancel.label'))
+ ->url(static::getUrl('index'))
+ ->color('gray')
+ ->visible($operation === 'edit'),
+ ]),
+ ])
+ ->columnSpanFull(),
+ ]);
+ }
+
+ public static function table(Table $table): Table
+ {
+ return $table
+ ->modifyQueryUsing(fn ($query) => $query->with(['patientRecord', 'doctorRecord', 'treatmentRecord', 'paymentTypeRecord']))
+ ->deferLoading()
+ ->columns([
+ TextColumn::make('visit_date')
+ ->label(__('visits.fields.visit_date'))
+ ->sortable()
+ ->searchable()
+ ->formatStateUsing(function ($state) {
+ if (! $state) {
+ return '-';
+ }
+ try {
+ $date = \Carbon\Carbon::parse($state);
+ return Jalalian::fromCarbon($date)->format('Y/m/d');
+ } catch (\Exception $e) {
+ return $state;
+ }
+ })
+ ->placeholder('-'),
+
+ TextColumn::make('patientRecord.first_name')
+ ->label(__('visits.fields.patient'))
+ ->formatStateUsing(fn ($record) => $record->patientRecord?->full_name ?? '-')
+ ->searchable()
+ ->sortable(),
+
+ TextColumn::make('doctorRecord.first_name')
+ ->label(__('visits.fields.doctor'))
+ ->formatStateUsing(fn ($record) => $record->doctorRecord?->full_name ?? '-')
+ ->sortable()
+ ->placeholder('-'),
+
+ TextColumn::make('treatmentRecord.treatment_name')
+ ->label(__('visits.fields.treatment'))
+ ->formatStateUsing(fn ($record) => $record->treatmentRecord
+ ? ($record->treatmentRecord->treatment_name ?: $record->treatmentRecord->treatment_type)
+ : '-')
+ ->sortable()
+ ->placeholder('-'),
+
+ TextColumn::make('treatment_cost')
+ ->label(__('visits.fields.treatment_cost'))
+ ->formatStateUsing(fn ($state) => $state !== null ? number_format((int) $state) : '-')
+ ->sortable()
+ ->placeholder('-'),
+
+ TextColumn::make('paid_amount')
+ ->label(__('visits.fields.paid_amount'))
+ ->formatStateUsing(fn ($state) => $state !== null ? number_format((int) $state) : '-')
+ ->sortable()
+ ->placeholder('-'),
+
+ TextColumn::make('remained_amount')
+ ->label(__('visits.fields.remained_amount'))
+ ->state(fn ($record) => $record->remained_amount)
+ ->formatStateUsing(fn ($state) => number_format((int) $state))
+ ->color(fn ($record) => $record->remained_amount > 0 ? 'danger' : 'success')
+ ->placeholder('-'),
+
+ TextColumn::make('paymentTypeRecord.payment_type')
+ ->label(__('visits.fields.payment_type'))
+ ->placeholder('-'),
+
+ TextColumn::make('created_at')
+ ->label(__('visits.fields.created_at'))
+ ->sortable()
+ ->formatStateUsing(function ($state) {
+ if (! $state) {
+ return '-';
+ }
+ try {
+ $date = \Carbon\Carbon::parse($state);
+ return Jalalian::fromCarbon($date)->format('Y/m/d - H:i');
+ } catch (\Exception $e) {
+ return $state;
+ }
+ })
+ ->toggleable(isToggledHiddenByDefault: true),
+ ])
+ ->defaultSort('created_at', 'desc')
+ ->filters([
+ SelectFilter::make('doctor')
+ ->label(__('visits.fields.doctor'))
+ ->options(fn () => Doctor::all()->mapWithKeys(
+ fn ($d) => [$d->id => $d->full_name]
+ )->toArray()),
+
+ SelectFilter::make('treatment')
+ ->label(__('visits.fields.treatment'))
+ ->options(fn () => Treatment::all()->mapWithKeys(
+ fn ($t) => [$t->id => ($t->treatment_name ?: $t->treatment_type)]
+ )->toArray()),
+
+ SelectFilter::make('payment_type')
+ ->label(__('visits.fields.payment_type'))
+ ->options(fn () => PaymentType::all()->mapWithKeys(
+ fn ($p) => [$p->id => $p->payment_type]
+ )->toArray()),
+ ])
+ ->recordActions([
+ EditAction::make(),
+ DeleteAction::make(),
+ ])
+ ->toolbarActions([
+ BulkActionGroup::make([
+ DeleteBulkAction::make(),
+ BulkAction::make('export_excel_selected')
+ ->label(__('table.export_excel_selected'))
+ ->icon('heroicon-o-table-cells')
+ ->color('success')
+ ->action(function (Collection $records) {
+ return self::exportToExcel($records);
+ }),
+ ]),
+
+ ActionGroup::make([
+ Action::make('export_excel')
+ ->label(__('table.export_excel'))
+ ->color('success')
+ ->icon('heroicon-o-table-cells')
+ ->action(function () {
+ $records = Visit::with(['patientRecord', 'doctorRecord', 'treatmentRecord', 'paymentTypeRecord'])
+ ->orderBy('created_at', 'desc')
+ ->get();
+ return self::exportToExcel($records);
+ }),
+
+ Action::make('export_pdf')
+ ->label(__('table.export_pdf'))
+ ->color('danger')
+ ->icon('heroicon-o-document-arrow-down')
+ ->action(function () {
+ $records = Visit::with(['patientRecord', 'doctorRecord', 'treatmentRecord', 'paymentTypeRecord'])
+ ->orderBy('created_at', 'desc')
+ ->get();
+
+ return PdfService::download(
+ 'exports.visits-pdf',
+ ['records' => $records],
+ 'visits-' . now()->format('Y-m-d') . '.pdf',
+ );
+ }),
+ ])
+ ->label(__('table.export'))
+ ->color('orange')
+ ->button(),
+ ]);
+ }
+
+ private static function exportToExcel(Collection $records): mixed
+ {
+ $tempPath = tempnam(sys_get_temp_dir(), 'export_') . '.xlsx';
+ $writer = new Writer();
+ $writer->openToFile($tempPath);
+
+ $writer->addRow(Row::fromValues([
+ 'ID',
+ __('visits.fields.visit_date'),
+ __('visits.fields.patient'),
+ __('visits.fields.doctor'),
+ __('visits.fields.treatment'),
+ __('visits.fields.treatment_cost'),
+ __('visits.fields.paid_amount'),
+ __('visits.fields.remained_amount'),
+ __('visits.fields.payment_type'),
+ __('visits.fields.treatment_description'),
+ ]));
+
+ foreach ($records as $record) {
+ $writer->addRow(Row::fromValues([
+ $record->id,
+ $record->visit_date ?? '',
+ $record->patientRecord?->full_name ?? '',
+ $record->doctorRecord?->full_name ?? '',
+ $record->treatmentRecord
+ ? ($record->treatmentRecord->treatment_name ?: $record->treatmentRecord->treatment_type)
+ : '',
+ $record->treatment_cost ?? 0,
+ $record->paid_amount ?? 0,
+ $record->remained_amount,
+ $record->paymentTypeRecord?->payment_type ?? '',
+ $record->treatment_description ?? '',
+ ]));
+ }
+
+ $writer->close();
+
+ return response()->streamDownload(function () use ($tempPath) {
+ readfile($tempPath);
+ @unlink($tempPath);
+ }, 'visits-' . now()->format('Y-m-d') . '.xlsx', [
+ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ ]);
+ }
+
+ public static function getPages(): array
+ {
+ return [
+ 'index' => Pages\ListVisits::route('/'),
+ 'create' => Pages\CreateVisit::route('/create'),
+ 'edit' => Pages\EditVisit::route('/{record}/edit'),
+ ];
+ }
+}
\ No newline at end of file
diff --git a/app/Filament/Resources/VisitResource/Pages/CreateVisit.php b/app/Filament/Resources/VisitResource/Pages/CreateVisit.php
new file mode 100644
index 0000000..9c831b9
--- /dev/null
+++ b/app/Filament/Resources/VisitResource/Pages/CreateVisit.php
@@ -0,0 +1,26 @@
+icon('heroicon-o-plus'),
+ ];
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
new file mode 100644
index 0000000..8677cd5
--- /dev/null
+++ b/app/Http/Controllers/Controller.php
@@ -0,0 +1,8 @@
+load('patientRecord');
+ $type = $request->query('type', 'prescription');
+
+ return view('prints.prescription', [
+ 'prescription' => $prescription,
+ 'type' => $type,
+ ]);
+ }
+
+ public function printAdmission(Prescription $prescription)
+ {
+ $prescription->load('patientRecord');
+
+ return view('prints.prescription-admission', [
+ 'prescription' => $prescription,
+ ]);
+ }
+
+ public function printPatientLab(Patient $patient)
+ {
+ return view('prints.patient-lab', [
+ 'patient' => $patient,
+ 'issueDate' => Jalalian::now()->format('Y/m/d'),
+ ]);
+ }
+
+ public function printSurgeryAdmission(Patient $patient)
+ {
+ $appointment = $patient->surgeryAppointment?->load('surgeryCenter');
+
+ $surgeryDate = '';
+ $centerName = '';
+
+ if ($appointment) {
+ try {
+ $surgeryDate = Jalalian::fromCarbon($appointment->surgery_date)->format('Y/m/d');
+ } catch (\Throwable) {
+ $surgeryDate = $appointment->surgery_date?->format('Y-m-d') ?? '';
+ }
+ $centerName = $appointment->surgeryCenter?->name ?? '';
+ }
+
+ return view('prints.surgery-admission', [
+ 'patient' => $patient,
+ 'surgeryDate' => $surgeryDate,
+ 'centerName' => $centerName,
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/SyncController.php b/app/Http/Controllers/SyncController.php
new file mode 100644
index 0000000..002eac9
--- /dev/null
+++ b/app/Http/Controllers/SyncController.php
@@ -0,0 +1,85 @@
+header('X-Sync-Token') === $token;
+ }
+
+ public function export(Request $request): JsonResponse
+ {
+ if (! $this->verifyToken($request)) {
+ return response()->json(['error' => 'Unauthorized'], 401);
+ }
+
+ $since = (int) $request->query('since', 0);
+
+ return response()->json([
+ 'last_sync_id' => SyncLog::lastSyncId(),
+ 'changes' => SyncLog::changesSince($since),
+ ]);
+ }
+
+ public function apply(Request $request): JsonResponse
+ {
+ if (! $this->verifyToken($request)) {
+ return response()->json(['error' => 'Unauthorized'], 401);
+ }
+
+ set_time_limit(0);
+
+ $service = SyncService::fromConfig();
+ $report = $service->applyChanges($request->input('changes', []));
+
+ return response()->json(['report' => $report]);
+ }
+
+ public function downloadFile(Request $request): mixed
+ {
+ if (! $this->verifyToken($request)) {
+ return response()->json(['error' => 'Unauthorized'], 401);
+ }
+
+ $path = $request->query('path');
+ if (! $path || ! Storage::disk('public')->exists($path)) {
+ return response()->json(['error' => 'File not found'], 404);
+ }
+
+ return Storage::disk('public')->download($path);
+ }
+
+ public function receiveFile(Request $request): JsonResponse
+ {
+ if (! $this->verifyToken($request)) {
+ return response()->json(['error' => 'Unauthorized'], 401);
+ }
+
+ set_time_limit(0);
+
+ $path = $request->input('path');
+ $file = $request->file('file');
+
+ if (! $path || ! $file) {
+ return response()->json(['error' => 'Missing path or file'], 400);
+ }
+
+ $path = ltrim(str_replace(['..', '\\'], ['', '/'], $path), '/');
+
+ Storage::disk('public')->put($path, file_get_contents($file->getRealPath()));
+
+ return response()->json(['success' => true, 'path' => $path]);
+ }
+}
diff --git a/app/Http/Middleware/SetLocale.php b/app/Http/Middleware/SetLocale.php
new file mode 100644
index 0000000..1f6aad6
--- /dev/null
+++ b/app/Http/Middleware/SetLocale.php
@@ -0,0 +1,21 @@
+setLocale($locale);
+ }
+
+ return $next($request);
+ }
+}
diff --git a/app/Livewire/SettingsDropdown.php b/app/Livewire/SettingsDropdown.php
new file mode 100644
index 0000000..1c01672
--- /dev/null
+++ b/app/Livewire/SettingsDropdown.php
@@ -0,0 +1,46 @@
+isConfigured()) {
+ $this->syncFailed = true;
+ $this->reportLines = [__('navigation.sync.error_not_configured')];
+ $this->dispatch('sync-finished', success: false);
+
+ return;
+ }
+
+ $result = $service->sync();
+
+ $this->reportLines = $result['report'] ?? [];
+
+ if ($result['success']) {
+ $this->syncSuccess = true;
+ $this->dispatch('sync-finished', success: true);
+ } else {
+ $this->syncFailed = true;
+ $this->dispatch('sync-finished', success: false);
+ }
+ }
+
+ public function render()
+ {
+ return view('livewire.settings-dropdown');
+ }
+}
diff --git a/app/Models/Doctor.php b/app/Models/Doctor.php
new file mode 100644
index 0000000..5bbac3b
--- /dev/null
+++ b/app/Models/Doctor.php
@@ -0,0 +1,31 @@
+ JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+
+ public function getFullNameAttribute(): string
+ {
+ return $this->first_name . ' ' . $this->last_name;
+ }
+}
diff --git a/app/Models/Medication.php b/app/Models/Medication.php
new file mode 100644
index 0000000..b04bd63
--- /dev/null
+++ b/app/Models/Medication.php
@@ -0,0 +1,33 @@
+ 'boolean',
+ 'is_active' => 'boolean',
+ 'quantity' => 'integer',
+ 'created_at' => JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+}
diff --git a/app/Models/OsurgInitial.php b/app/Models/OsurgInitial.php
new file mode 100644
index 0000000..10fb737
--- /dev/null
+++ b/app/Models/OsurgInitial.php
@@ -0,0 +1,35 @@
+ JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+
+
+ public static function val(string $key, mixed $default = null): mixed
+ {
+ return cache()->remember(
+ "osurg_initial.{$key}",
+ 60,
+ fn () => static::where('init_parameter', $key)->value('init_value') ?? $default
+ );
+ }
+}
diff --git a/app/Models/Patient.php b/app/Models/Patient.php
new file mode 100644
index 0000000..4cdbc95
--- /dev/null
+++ b/app/Models/Patient.php
@@ -0,0 +1,105 @@
+ 'integer',
+ 'blood_sugar' => 'integer',
+ 'age' => 'integer',
+ 'current_illness_1' => 'array',
+ 'current_illness_2' => 'array',
+ 'has_alergyto' => 'array',
+ 'photos_before' => 'array',
+ 'photos_after' => 'array',
+ 'videos' => 'array',
+ 'audio_files' => 'array',
+ 'created_at' => JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+
+ public function getFullNameAttribute(): string
+ {
+ return trim($this->first_name . ' ' . $this->last_name);
+ }
+
+ public function creator(): BelongsTo
+ {
+ return $this->belongsTo(User::class, 'created_by');
+ }
+
+ public function updator(): BelongsTo
+ {
+ return $this->belongsTo(User::class, 'updated_by');
+ }
+
+ public function surgeryAppointment(): HasOne
+ {
+ return $this->hasOne(SurgeryAppointment::class);
+ }
+
+ public function prescriptions(): HasMany
+ {
+ return $this->hasMany(Prescription::class, 'patient');
+ }
+
+ public function visits(): HasMany
+ {
+ return $this->hasMany(Visit::class, 'patient');
+ }
+}
diff --git a/app/Models/PatientIllness.php b/app/Models/PatientIllness.php
new file mode 100644
index 0000000..ba4acf5
--- /dev/null
+++ b/app/Models/PatientIllness.php
@@ -0,0 +1,29 @@
+ 'integer',
+ 'priority' => 'integer',
+ 'created_at' => JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+}
diff --git a/app/Models/PaymentType.php b/app/Models/PaymentType.php
new file mode 100644
index 0000000..4da6352
--- /dev/null
+++ b/app/Models/PaymentType.php
@@ -0,0 +1,26 @@
+ JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+}
diff --git a/app/Models/Prescription.php b/app/Models/Prescription.php
new file mode 100644
index 0000000..fd3a498
--- /dev/null
+++ b/app/Models/Prescription.php
@@ -0,0 +1,49 @@
+ 'datetime',
+ 'medication_ids' => 'array',
+ 'created_at' => JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+
+ public function patientRecord(): BelongsTo
+ {
+ return $this->belongsTo(Patient::class, 'patient');
+ }
+
+ public function creator(): BelongsTo
+ {
+ return $this->belongsTo(User::class, 'created_by');
+ }
+
+ public function updator(): BelongsTo
+ {
+ return $this->belongsTo(User::class, 'updated_by');
+ }
+}
diff --git a/app/Models/SurgeryAppointment.php b/app/Models/SurgeryAppointment.php
new file mode 100644
index 0000000..6e53757
--- /dev/null
+++ b/app/Models/SurgeryAppointment.php
@@ -0,0 +1,50 @@
+ 'datetime',
+ 'created_at' => JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+
+ public function patient(): BelongsTo
+ {
+ return $this->belongsTo(Patient::class);
+ }
+
+ public function surgeryCenter(): BelongsTo
+ {
+ return $this->belongsTo(SurgeryCenter::class);
+ }
+
+ public function creator(): BelongsTo
+ {
+ return $this->belongsTo(User::class, 'created_by');
+ }
+
+ public function updator(): BelongsTo
+ {
+ return $this->belongsTo(User::class, 'updated_by');
+ }
+}
diff --git a/app/Models/SurgeryCenter.php b/app/Models/SurgeryCenter.php
new file mode 100644
index 0000000..9c6eb71
--- /dev/null
+++ b/app/Models/SurgeryCenter.php
@@ -0,0 +1,28 @@
+ JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+}
\ No newline at end of file
diff --git a/app/Models/SyncLog.php b/app/Models/SyncLog.php
new file mode 100644
index 0000000..36b9369
--- /dev/null
+++ b/app/Models/SyncLog.php
@@ -0,0 +1,53 @@
+ 'datetime',
+ 'changed_data' => 'array',
+ ];
+
+ public static function lastSyncId(): int
+ {
+ return (int) static::where('action', 'synced')->max('id') ?: 0;
+ }
+
+ public static function changesSince(int $since): \Illuminate\Database\Eloquent\Collection
+ {
+ return static::where('id', '>', $since)
+ ->whereIn('action', ['created', 'updated', 'deleted'])
+ ->orderBy('id')
+ ->get();
+ }
+
+ public static function markSynced(string $ip): static
+ {
+ return static::create([
+ 'datetime' => now(),
+ 'ip' => $ip,
+ 'user' => auth()->user()?->name ?? 'system',
+ 'table_name' => '',
+ 'action' => 'synced',
+ ]);
+ }
+}
diff --git a/app/Models/Treatment.php b/app/Models/Treatment.php
new file mode 100644
index 0000000..570bdc3
--- /dev/null
+++ b/app/Models/Treatment.php
@@ -0,0 +1,27 @@
+ 'integer',
+ 'created_at' => JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+}
diff --git a/app/Models/User.php b/app/Models/User.php
new file mode 100644
index 0000000..f763b6e
--- /dev/null
+++ b/app/Models/User.php
@@ -0,0 +1,71 @@
+ 'datetime',
+ 'password' => 'hashed',
+ 'created_at' => JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+
+ public function getFilamentAvatarUrl(): ?string
+ {
+ $name = $this->name ?? $this->username ?? '?';
+ $initials = $this->getAvatarInitials($name);
+ $color = $this->getAvatarColor($name);
+
+ $svg = '';
+
+ return 'data:image/svg+xml;base64,' . base64_encode($svg);
+ }
+
+ private function getAvatarInitials(string $name): string
+ {
+ $words = preg_split('/\s+/', trim($name));
+ if (count($words) >= 2) {
+ return mb_substr($words[0], 0, 1) . mb_substr($words[1], 0, 1);
+ }
+
+ return mb_substr($name, 0, 2);
+ }
+
+ private function getAvatarColor(string $name): string
+ {
+ $colors = ['#4F46E5', '#7C3AED', '#2563EB', '#0891B2', '#059669', '#D97706', '#DC2626', '#0F766E'];
+ $index = abs(crc32($name) % count($colors));
+
+ return $colors[$index];
+ }
+}
diff --git a/app/Models/Visit.php b/app/Models/Visit.php
new file mode 100644
index 0000000..38cc11c
--- /dev/null
+++ b/app/Models/Visit.php
@@ -0,0 +1,80 @@
+ 'integer',
+ 'paid_amount' => 'integer',
+ 'pos_ul' => 'integer',
+ 'pos_ll' => 'integer',
+ 'pos_ur' => 'integer',
+ 'pos_lr' => 'integer',
+ 'created_at' => JalaliDatetime::class,
+ 'updated_at' => JalaliDatetime::class,
+ ];
+ }
+
+ public function getRemainedAmountAttribute(): int
+ {
+ return (int) ($this->treatment_cost ?? 0) - (int) ($this->paid_amount ?? 0);
+ }
+
+ public function patientRecord(): BelongsTo
+ {
+ return $this->belongsTo(Patient::class, 'patient');
+ }
+
+ public function doctorRecord(): BelongsTo
+ {
+ return $this->belongsTo(Doctor::class, 'doctor');
+ }
+
+ public function treatmentRecord(): BelongsTo
+ {
+ return $this->belongsTo(Treatment::class, 'treatment');
+ }
+
+ public function paymentTypeRecord(): BelongsTo
+ {
+ return $this->belongsTo(PaymentType::class, 'payment_type');
+ }
+
+ public function creator(): BelongsTo
+ {
+ return $this->belongsTo(User::class, 'created_by');
+ }
+
+ public function updator(): BelongsTo
+ {
+ return $this->belongsTo(User::class, 'updated_by');
+ }
+}
\ No newline at end of file
diff --git a/app/Observers/SyncObserver.php b/app/Observers/SyncObserver.php
new file mode 100644
index 0000000..449fd6d
--- /dev/null
+++ b/app/Observers/SyncObserver.php
@@ -0,0 +1,72 @@
+bound('sync.applying')) {
+ return;
+ }
+
+ SyncLog::create([
+ 'datetime' => now(),
+ 'ip' => request()->ip() ?? '127.0.0.1',
+ 'user' => auth()->user()?->name ?? 'system',
+ 'table_name' => $model->getTable(),
+ 'action' => 'created',
+ 'record_id' => $model->getKey(),
+ 'changed_data' => $model->getAttributes(),
+ ]);
+ }
+
+ public function updated(Model $model): void
+ {
+ if (app()->bound('sync.applying')) {
+ return;
+ }
+
+ $dirty = $model->getDirty();
+ if (empty($dirty)) {
+ return;
+ }
+
+ $changedData = [];
+ foreach ($dirty as $field => $newValue) {
+ $changedData[$field] = $model->getAttribute($field);
+ }
+
+ SyncLog::create([
+ 'datetime' => now(),
+ 'ip' => request()->ip() ?? '127.0.0.1',
+ 'user' => auth()->user()?->name ?? 'system',
+ 'table_name' => $model->getTable(),
+ 'action' => 'updated',
+ 'record_id' => $model->getKey(),
+ 'changed_data' => $changedData,
+ ]);
+ }
+
+ public function deleted(Model $model): void
+ {
+ if (app()->bound('sync.applying')) {
+ return;
+ }
+
+ SyncLog::create([
+ 'datetime' => now(),
+ 'ip' => request()->ip() ?? '127.0.0.1',
+ 'user' => auth()->user()?->name ?? 'system',
+ 'table_name' => $model->getTable(),
+ 'action' => 'deleted',
+ 'record_id' => $model->getKey(),
+ 'changed_data' => null,
+ ]);
+ }
+}
diff --git a/app/Policies/DoctorPolicy.php b/app/Policies/DoctorPolicy.php
new file mode 100644
index 0000000..c9ee414
--- /dev/null
+++ b/app/Policies/DoctorPolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:Doctor');
+ }
+
+ public function view(AuthUser $authUser, Doctor $doctor): bool
+ {
+ return $authUser->can('View:Doctor');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:Doctor');
+ }
+
+ public function update(AuthUser $authUser, Doctor $doctor): bool
+ {
+ return $authUser->can('Update:Doctor');
+ }
+
+ public function delete(AuthUser $authUser, Doctor $doctor): bool
+ {
+ return $authUser->can('Delete:Doctor');
+ }
+
+ public function restore(AuthUser $authUser, Doctor $doctor): bool
+ {
+ return $authUser->can('Restore:Doctor');
+ }
+
+ public function forceDelete(AuthUser $authUser, Doctor $doctor): bool
+ {
+ return $authUser->can('ForceDelete:Doctor');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:Doctor');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:Doctor');
+ }
+
+ public function replicate(AuthUser $authUser, Doctor $doctor): bool
+ {
+ return $authUser->can('Replicate:Doctor');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:Doctor');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/MedicationPolicy.php b/app/Policies/MedicationPolicy.php
new file mode 100644
index 0000000..0a41e9d
--- /dev/null
+++ b/app/Policies/MedicationPolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:Medication');
+ }
+
+ public function view(AuthUser $authUser, Medication $medication): bool
+ {
+ return $authUser->can('View:Medication');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:Medication');
+ }
+
+ public function update(AuthUser $authUser, Medication $medication): bool
+ {
+ return $authUser->can('Update:Medication');
+ }
+
+ public function delete(AuthUser $authUser, Medication $medication): bool
+ {
+ return $authUser->can('Delete:Medication');
+ }
+
+ public function restore(AuthUser $authUser, Medication $medication): bool
+ {
+ return $authUser->can('Restore:Medication');
+ }
+
+ public function forceDelete(AuthUser $authUser, Medication $medication): bool
+ {
+ return $authUser->can('ForceDelete:Medication');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:Medication');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:Medication');
+ }
+
+ public function replicate(AuthUser $authUser, Medication $medication): bool
+ {
+ return $authUser->can('Replicate:Medication');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:Medication');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/OsurgInitialPolicy.php b/app/Policies/OsurgInitialPolicy.php
new file mode 100644
index 0000000..207cb95
--- /dev/null
+++ b/app/Policies/OsurgInitialPolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:OsurgInitial');
+ }
+
+ public function view(AuthUser $authUser, OsurgInitial $osurgInitial): bool
+ {
+ return $authUser->can('View:OsurgInitial');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:OsurgInitial');
+ }
+
+ public function update(AuthUser $authUser, OsurgInitial $osurgInitial): bool
+ {
+ return $authUser->can('Update:OsurgInitial');
+ }
+
+ public function delete(AuthUser $authUser, OsurgInitial $osurgInitial): bool
+ {
+ return $authUser->can('Delete:OsurgInitial');
+ }
+
+ public function restore(AuthUser $authUser, OsurgInitial $osurgInitial): bool
+ {
+ return $authUser->can('Restore:OsurgInitial');
+ }
+
+ public function forceDelete(AuthUser $authUser, OsurgInitial $osurgInitial): bool
+ {
+ return $authUser->can('ForceDelete:OsurgInitial');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:OsurgInitial');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:OsurgInitial');
+ }
+
+ public function replicate(AuthUser $authUser, OsurgInitial $osurgInitial): bool
+ {
+ return $authUser->can('Replicate:OsurgInitial');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:OsurgInitial');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/PatientIllnessPolicy.php b/app/Policies/PatientIllnessPolicy.php
new file mode 100644
index 0000000..fe22847
--- /dev/null
+++ b/app/Policies/PatientIllnessPolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:PatientIllness');
+ }
+
+ public function view(AuthUser $authUser, PatientIllness $patientIllness): bool
+ {
+ return $authUser->can('View:PatientIllness');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:PatientIllness');
+ }
+
+ public function update(AuthUser $authUser, PatientIllness $patientIllness): bool
+ {
+ return $authUser->can('Update:PatientIllness');
+ }
+
+ public function delete(AuthUser $authUser, PatientIllness $patientIllness): bool
+ {
+ return $authUser->can('Delete:PatientIllness');
+ }
+
+ public function restore(AuthUser $authUser, PatientIllness $patientIllness): bool
+ {
+ return $authUser->can('Restore:PatientIllness');
+ }
+
+ public function forceDelete(AuthUser $authUser, PatientIllness $patientIllness): bool
+ {
+ return $authUser->can('ForceDelete:PatientIllness');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:PatientIllness');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:PatientIllness');
+ }
+
+ public function replicate(AuthUser $authUser, PatientIllness $patientIllness): bool
+ {
+ return $authUser->can('Replicate:PatientIllness');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:PatientIllness');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/PatientPolicy.php b/app/Policies/PatientPolicy.php
new file mode 100644
index 0000000..5e8df41
--- /dev/null
+++ b/app/Policies/PatientPolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:Patient');
+ }
+
+ public function view(AuthUser $authUser, Patient $patient): bool
+ {
+ return $authUser->can('View:Patient');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:Patient');
+ }
+
+ public function update(AuthUser $authUser, Patient $patient): bool
+ {
+ return $authUser->can('Update:Patient');
+ }
+
+ public function delete(AuthUser $authUser, Patient $patient): bool
+ {
+ return $authUser->can('Delete:Patient');
+ }
+
+ public function restore(AuthUser $authUser, Patient $patient): bool
+ {
+ return $authUser->can('Restore:Patient');
+ }
+
+ public function forceDelete(AuthUser $authUser, Patient $patient): bool
+ {
+ return $authUser->can('ForceDelete:Patient');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:Patient');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:Patient');
+ }
+
+ public function replicate(AuthUser $authUser, Patient $patient): bool
+ {
+ return $authUser->can('Replicate:Patient');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:Patient');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/PaymentTypePolicy.php b/app/Policies/PaymentTypePolicy.php
new file mode 100644
index 0000000..5b46e7b
--- /dev/null
+++ b/app/Policies/PaymentTypePolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:PaymentType');
+ }
+
+ public function view(AuthUser $authUser, PaymentType $paymentType): bool
+ {
+ return $authUser->can('View:PaymentType');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:PaymentType');
+ }
+
+ public function update(AuthUser $authUser, PaymentType $paymentType): bool
+ {
+ return $authUser->can('Update:PaymentType');
+ }
+
+ public function delete(AuthUser $authUser, PaymentType $paymentType): bool
+ {
+ return $authUser->can('Delete:PaymentType');
+ }
+
+ public function restore(AuthUser $authUser, PaymentType $paymentType): bool
+ {
+ return $authUser->can('Restore:PaymentType');
+ }
+
+ public function forceDelete(AuthUser $authUser, PaymentType $paymentType): bool
+ {
+ return $authUser->can('ForceDelete:PaymentType');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:PaymentType');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:PaymentType');
+ }
+
+ public function replicate(AuthUser $authUser, PaymentType $paymentType): bool
+ {
+ return $authUser->can('Replicate:PaymentType');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:PaymentType');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/PrescriptionPolicy.php b/app/Policies/PrescriptionPolicy.php
new file mode 100644
index 0000000..69fc2c3
--- /dev/null
+++ b/app/Policies/PrescriptionPolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:Prescription');
+ }
+
+ public function view(AuthUser $authUser, Prescription $prescription): bool
+ {
+ return $authUser->can('View:Prescription');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:Prescription');
+ }
+
+ public function update(AuthUser $authUser, Prescription $prescription): bool
+ {
+ return $authUser->can('Update:Prescription');
+ }
+
+ public function delete(AuthUser $authUser, Prescription $prescription): bool
+ {
+ return $authUser->can('Delete:Prescription');
+ }
+
+ public function restore(AuthUser $authUser, Prescription $prescription): bool
+ {
+ return $authUser->can('Restore:Prescription');
+ }
+
+ public function forceDelete(AuthUser $authUser, Prescription $prescription): bool
+ {
+ return $authUser->can('ForceDelete:Prescription');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:Prescription');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:Prescription');
+ }
+
+ public function replicate(AuthUser $authUser, Prescription $prescription): bool
+ {
+ return $authUser->can('Replicate:Prescription');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:Prescription');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/RolePolicy.php b/app/Policies/RolePolicy.php
new file mode 100644
index 0000000..a2a3263
--- /dev/null
+++ b/app/Policies/RolePolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:Role');
+ }
+
+ public function view(AuthUser $authUser, Role $role): bool
+ {
+ return $authUser->can('View:Role');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:Role');
+ }
+
+ public function update(AuthUser $authUser, Role $role): bool
+ {
+ return $authUser->can('Update:Role');
+ }
+
+ public function delete(AuthUser $authUser, Role $role): bool
+ {
+ return $authUser->can('Delete:Role');
+ }
+
+ public function restore(AuthUser $authUser, Role $role): bool
+ {
+ return $authUser->can('Restore:Role');
+ }
+
+ public function forceDelete(AuthUser $authUser, Role $role): bool
+ {
+ return $authUser->can('ForceDelete:Role');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:Role');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:Role');
+ }
+
+ public function replicate(AuthUser $authUser, Role $role): bool
+ {
+ return $authUser->can('Replicate:Role');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:Role');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/SurgeryAppointmentPolicy.php b/app/Policies/SurgeryAppointmentPolicy.php
new file mode 100644
index 0000000..cc7b793
--- /dev/null
+++ b/app/Policies/SurgeryAppointmentPolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:SurgeryAppointment');
+ }
+
+ public function view(AuthUser $authUser, SurgeryAppointment $surgeryAppointment): bool
+ {
+ return $authUser->can('View:SurgeryAppointment');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:SurgeryAppointment');
+ }
+
+ public function update(AuthUser $authUser, SurgeryAppointment $surgeryAppointment): bool
+ {
+ return $authUser->can('Update:SurgeryAppointment');
+ }
+
+ public function delete(AuthUser $authUser, SurgeryAppointment $surgeryAppointment): bool
+ {
+ return $authUser->can('Delete:SurgeryAppointment');
+ }
+
+ public function restore(AuthUser $authUser, SurgeryAppointment $surgeryAppointment): bool
+ {
+ return $authUser->can('Restore:SurgeryAppointment');
+ }
+
+ public function forceDelete(AuthUser $authUser, SurgeryAppointment $surgeryAppointment): bool
+ {
+ return $authUser->can('ForceDelete:SurgeryAppointment');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:SurgeryAppointment');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:SurgeryAppointment');
+ }
+
+ public function replicate(AuthUser $authUser, SurgeryAppointment $surgeryAppointment): bool
+ {
+ return $authUser->can('Replicate:SurgeryAppointment');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:SurgeryAppointment');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/SurgeryCenterPolicy.php b/app/Policies/SurgeryCenterPolicy.php
new file mode 100644
index 0000000..3785916
--- /dev/null
+++ b/app/Policies/SurgeryCenterPolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:SurgeryCenter');
+ }
+
+ public function view(AuthUser $authUser, SurgeryCenter $surgeryCenter): bool
+ {
+ return $authUser->can('View:SurgeryCenter');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:SurgeryCenter');
+ }
+
+ public function update(AuthUser $authUser, SurgeryCenter $surgeryCenter): bool
+ {
+ return $authUser->can('Update:SurgeryCenter');
+ }
+
+ public function delete(AuthUser $authUser, SurgeryCenter $surgeryCenter): bool
+ {
+ return $authUser->can('Delete:SurgeryCenter');
+ }
+
+ public function restore(AuthUser $authUser, SurgeryCenter $surgeryCenter): bool
+ {
+ return $authUser->can('Restore:SurgeryCenter');
+ }
+
+ public function forceDelete(AuthUser $authUser, SurgeryCenter $surgeryCenter): bool
+ {
+ return $authUser->can('ForceDelete:SurgeryCenter');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:SurgeryCenter');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:SurgeryCenter');
+ }
+
+ public function replicate(AuthUser $authUser, SurgeryCenter $surgeryCenter): bool
+ {
+ return $authUser->can('Replicate:SurgeryCenter');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:SurgeryCenter');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/SyncLogPolicy.php b/app/Policies/SyncLogPolicy.php
new file mode 100644
index 0000000..f9b9f8e
--- /dev/null
+++ b/app/Policies/SyncLogPolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:SyncLog');
+ }
+
+ public function view(AuthUser $authUser, SyncLog $syncLog): bool
+ {
+ return $authUser->can('View:SyncLog');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:SyncLog');
+ }
+
+ public function update(AuthUser $authUser, SyncLog $syncLog): bool
+ {
+ return $authUser->can('Update:SyncLog');
+ }
+
+ public function delete(AuthUser $authUser, SyncLog $syncLog): bool
+ {
+ return $authUser->can('Delete:SyncLog');
+ }
+
+ public function restore(AuthUser $authUser, SyncLog $syncLog): bool
+ {
+ return $authUser->can('Restore:SyncLog');
+ }
+
+ public function forceDelete(AuthUser $authUser, SyncLog $syncLog): bool
+ {
+ return $authUser->can('ForceDelete:SyncLog');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:SyncLog');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:SyncLog');
+ }
+
+ public function replicate(AuthUser $authUser, SyncLog $syncLog): bool
+ {
+ return $authUser->can('Replicate:SyncLog');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:SyncLog');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/TreatmentPolicy.php b/app/Policies/TreatmentPolicy.php
new file mode 100644
index 0000000..a89d7d0
--- /dev/null
+++ b/app/Policies/TreatmentPolicy.php
@@ -0,0 +1,70 @@
+can('ViewAny:Treatment');
+ }
+
+ public function view(AuthUser $authUser, Treatment $treatment): bool
+ {
+ return $authUser->can('View:Treatment');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:Treatment');
+ }
+
+ public function update(AuthUser $authUser, Treatment $treatment): bool
+ {
+ return $authUser->can('Update:Treatment');
+ }
+
+ public function delete(AuthUser $authUser, Treatment $treatment): bool
+ {
+ return $authUser->can('Delete:Treatment');
+ }
+
+ public function restore(AuthUser $authUser, Treatment $treatment): bool
+ {
+ return $authUser->can('Restore:Treatment');
+ }
+
+ public function forceDelete(AuthUser $authUser, Treatment $treatment): bool
+ {
+ return $authUser->can('ForceDelete:Treatment');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:Treatment');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:Treatment');
+ }
+
+ public function replicate(AuthUser $authUser, Treatment $treatment): bool
+ {
+ return $authUser->can('Replicate:Treatment');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:Treatment');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php
new file mode 100644
index 0000000..10cdce3
--- /dev/null
+++ b/app/Policies/UserPolicy.php
@@ -0,0 +1,67 @@
+can('ViewAny:User');
+ }
+
+ public function view(AuthUser $authUser): bool
+ {
+ return $authUser->can('View:User');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:User');
+ }
+
+ public function update(AuthUser $authUser): bool
+ {
+ return $authUser->can('Update:User');
+ }
+
+ public function delete(AuthUser $authUser): bool
+ {
+ return $authUser->can('Delete:User');
+ }
+
+ public function restore(AuthUser $authUser): bool
+ {
+ return $authUser->can('Restore:User');
+ }
+
+ public function forceDelete(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDelete:User');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:User');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:User');
+ }
+
+ public function replicate(AuthUser $authUser): bool
+ {
+ return $authUser->can('Replicate:User');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:User');
+ }
+
+}
\ No newline at end of file
diff --git a/app/Policies/VisitPolicy.php b/app/Policies/VisitPolicy.php
new file mode 100644
index 0000000..501ad9b
--- /dev/null
+++ b/app/Policies/VisitPolicy.php
@@ -0,0 +1,69 @@
+can('ViewAny:Visit');
+ }
+
+ public function view(AuthUser $authUser, Visit $visit): bool
+ {
+ return $authUser->can('View:Visit');
+ }
+
+ public function create(AuthUser $authUser): bool
+ {
+ return $authUser->can('Create:Visit');
+ }
+
+ public function update(AuthUser $authUser, Visit $visit): bool
+ {
+ return $authUser->can('Update:Visit');
+ }
+
+ public function delete(AuthUser $authUser, Visit $visit): bool
+ {
+ return $authUser->can('Delete:Visit');
+ }
+
+ public function restore(AuthUser $authUser, Visit $visit): bool
+ {
+ return $authUser->can('Restore:Visit');
+ }
+
+ public function forceDelete(AuthUser $authUser, Visit $visit): bool
+ {
+ return $authUser->can('ForceDelete:Visit');
+ }
+
+ public function forceDeleteAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('ForceDeleteAny:Visit');
+ }
+
+ public function restoreAny(AuthUser $authUser): bool
+ {
+ return $authUser->can('RestoreAny:Visit');
+ }
+
+ public function replicate(AuthUser $authUser, Visit $visit): bool
+ {
+ return $authUser->can('Replicate:Visit');
+ }
+
+ public function reorder(AuthUser $authUser): bool
+ {
+ return $authUser->can('Reorder:Visit');
+ }
+}
\ No newline at end of file
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
new file mode 100644
index 0000000..b28dca7
--- /dev/null
+++ b/app/Providers/AppServiceProvider.php
@@ -0,0 +1,48 @@
+modalAlignment(Alignment::Start);
+ });
+
+ DeleteBulkAction::configureUsing(function (DeleteBulkAction $action): void {
+ $action->modalAlignment(Alignment::Start);
+ });
+ }
+}
diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php
new file mode 100644
index 0000000..32bdb92
--- /dev/null
+++ b/app/Providers/Filament/AdminPanelProvider.php
@@ -0,0 +1,129 @@
+default()
+ ->id('admin')
+ ->path('admin')
+ ->login(Login::class)
+ ->colors([
+ 'primary' => Color::Blue,
+ 'orange' => Color::Orange,
+ ])
+ ->brandLogo(function () {
+ $key = app()->getLocale() === 'fa' ? 'listlogo_per.png' : 'listlogo_eng.png';
+ $attachment = \Illuminate\Support\Facades\Cache::remember(
+ 'brand_logo_' . $key,
+ now()->addHours(24),
+ fn () => \App\Models\OsurgInitial::where('init_parameter', $key)->value('attachment')
+ );
+ return $attachment ? asset('storage/' . $attachment) : null;
+ })
+ ->brandLogoHeight('1.75rem')
+ ->brandName('')
+ ->favicon(asset('favicon.svg'))
+ ->font('Vazirmatn', url: \Illuminate\Support\Facades\Vite::asset('resources/css/vazirmatn.css'), provider: \Filament\FontProviders\LocalFontProvider::class)
+ ->renderHook(
+ PanelsRenderHook::TOPBAR_LOGO_AFTER,
+ fn (): string => view('components.persian-datetime')->render(),
+ )
+ ->renderHook(
+ PanelsRenderHook::GLOBAL_SEARCH_BEFORE,
+ fn (): string => \Blade::render('@livewire(\'settings-dropdown\')'),
+ )
+ ->renderHook(
+ PanelsRenderHook::BODY_END,
+ fn (): string => <<<'HTML'
+
+ HTML,
+ )
+ ->userMenuItems([
+ Action::make('switch_language')
+ ->label(fn () => app()->getLocale() === 'fa' ? 'English' : 'فارسی')
+ ->icon('heroicon-o-language')
+ ->url(fn () => route('locale.switch', app()->getLocale() === 'fa' ? 'en' : 'fa')),
+ ])
+ ->navigationGroups([
+ NavigationGroup::make('بیماران و ویزیت'),
+ NavigationGroup::make('بیماریها و روشهای درمان'),
+ NavigationGroup::make('اطلاعات کلینیک'),
+ NavigationGroup::make('تنظیمات'),
+ ])
+ ->sidebarFullyCollapsibleOnDesktop()
+ ->maxContentWidth(Width::Full)
+ ->viteTheme('resources/css/filament/admin/theme.css')
+ ->discoverResources(in: app_path('Filament/Resources'), for: 'App\Filament\Resources')
+ ->plugins([
+ FilamentShieldPlugin::make(),
+ ])
+ ->discoverPages(in: app_path('Filament/Pages'), for: 'App\Filament\Pages')
+ ->pages([])
+ ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\Filament\Widgets')
+ ->widgets([])
+ ->middleware([
+ EncryptCookies::class,
+ AddQueuedCookiesToResponse::class,
+ StartSession::class,
+ AuthenticateSession::class,
+ ShareErrorsFromSession::class,
+ VerifyCsrfToken::class,
+ SubstituteBindings::class,
+ DisableBladeIconComponents::class,
+ DispatchServingFilamentEvent::class,
+ SetLocale::class,
+ ])
+ ->authMiddleware([
+ Authenticate::class,
+ ]);
+ }
+}
diff --git a/app/Providers/NativeAppServiceProvider.php b/app/Providers/NativeAppServiceProvider.php
new file mode 100644
index 0000000..10bee13
--- /dev/null
+++ b/app/Providers/NativeAppServiceProvider.php
@@ -0,0 +1,64 @@
+registerMenu();
+
+ Window::open()
+ ->title('مطب پنل')
+ ->width(1280)
+ ->height(800)
+ ->maximized()
+ ->rememberState();
+
+ AutoUpdater::checkForUpdates();
+ }
+
+ protected function registerMenu(): void
+ {
+ Menu::create(
+ Menu::make(
+ Menu::reload('بارگذاری مجدد'),
+ Menu::separator(),
+ Menu::quit('خروج'),
+ )->label('فایل'),
+ Menu::make(
+ Menu::undo('بازگردانی'),
+ Menu::redo('از نو'),
+ Menu::separator(),
+ Menu::cut('برش'),
+ Menu::copy('کپی'),
+ Menu::paste('چسباندن'),
+ )->label('ویرایش'),
+ Menu::make(
+ Menu::fullscreen('تمام صفحه'),
+ Menu::separator(),
+ Menu::devTools('ابزار توسعهدهنده'),
+ )->label('نمایش'),
+ Menu::make(
+ Menu::minimize('کمینه'),
+ Menu::close('بستن'),
+ )->label('پنجره'),
+ );
+ }
+
+
+ public function phpIni(): array
+ {
+ return [
+ 'memory_limit' => '512M',
+ 'post_max_size' => '50M',
+ 'upload_max_filesize' => '50M',
+ ];
+ }
+}
diff --git a/app/Services/PdfService.php b/app/Services/PdfService.php
new file mode 100644
index 0000000..47417fd
--- /dev/null
+++ b/app/Services/PdfService.php
@@ -0,0 +1,76 @@
+getDefaults();
+ $defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
+
+ $fontsDir = storage_path('fonts');
+
+ $mpdf = new \Mpdf\Mpdf([
+ 'mode' => 'utf-8',
+ 'format' => 'A4',
+ 'orientation' => 'P',
+ 'margin_top' => 15,
+ 'margin_bottom' => 15,
+ 'margin_left' => 15,
+ 'margin_right' => 15,
+ 'tempDir' => sys_get_temp_dir(),
+ 'fontDir' => array_merge($defaultConfig['fontDir'], [$fontsDir]),
+ 'fontdata' => $defaultFontConfig['fontdata'] + [
+ 'tahoma' => [
+ 'R' => 'tahoma.ttf',
+ 'B' => 'tahomabd.ttf',
+ 'useOTL' => 0xFF,
+ 'useKashida' => 75,
+ ],
+ ],
+ 'default_font' => 'tahoma',
+ ]);
+
+ $mpdf->autoScriptToLang = true;
+ $mpdf->baseScript = 1;
+ $mpdf->autoArabic = true;
+ $mpdf->autoLangToFont = true;
+
+ $html = view($view, $data)->render();
+ $mpdf->WriteHTML($html);
+ $output = $mpdf->Output('', 'S');
+
+ return response()->streamDownload(
+ fn () => print($output),
+ $filename,
+ ['Content-Type' => 'application/pdf'],
+ );
+ }
+
+ private static function downloadWithDompdf(string $view, array $data, string $filename): StreamedResponse
+ {
+ $pdf = Pdf::loadView($view, $data)->setPaper('a4', 'portrait');
+
+ return response()->streamDownload(
+ fn () => print($pdf->output()),
+ $filename,
+ ['Content-Type' => 'application/pdf'],
+ );
+ }
+}
diff --git a/app/Services/SyncService.php b/app/Services/SyncService.php
new file mode 100644
index 0000000..1451440
--- /dev/null
+++ b/app/Services/SyncService.php
@@ -0,0 +1,324 @@
+peerIp !== '' && $this->token !== '';
+ }
+
+ public function isFtpConfigured(): bool
+ {
+ return $this->peerIp !== '' && $this->ftpUser !== '' && $this->ftpRemotePath !== '';
+ }
+
+ public function sync(): array
+ {
+ $report = [];
+ $baseUrl = "http://{$this->peerIp}:{$this->peerPort}";
+
+ $ourLastSync = SyncLog::lastSyncId();
+
+ try {
+ $pullResponse = Http::timeout(30)
+ ->withHeader('X-Sync-Token', $this->token)
+ ->get("{$baseUrl}/api/sync/export", ['since' => $ourLastSync]);
+
+ if ($pullResponse->successful()) {
+ $peerChanges = $pullResponse->json('changes', []);
+
+ if (! empty($peerChanges)) {
+ app()->instance('sync.applying', true);
+
+ DB::transaction(function () use ($peerChanges, &$report) {
+ foreach ($peerChanges as $change) {
+ $this->applyChange($change, 'دریافت', $report);
+ }
+ });
+
+ if ($this->isFtpConfigured()) {
+ $this->transferFilesViaFtp($peerChanges, 's2c', $report);
+ } else {
+ $this->syncFilesViaHttp($peerChanges, $baseUrl, $report);
+ }
+ }
+
+ $report[] = count($peerChanges) . ' تغییر از سیستم مقابل دریافت شد.';
+ } else {
+ $report[] = 'خطا در دریافت تغییرات از سیستم مقابل: ' . $pullResponse->status();
+ }
+ } catch (\Throwable $e) {
+ $report[] = 'خطا در اتصال به سیستم مقابل: ' . $e->getMessage();
+ return ['success' => false, 'report' => $report];
+ }
+
+ $ourChanges = SyncLog::changesSince($ourLastSync)->toArray();
+
+ try {
+ $pushResponse = Http::timeout(120)
+ ->withHeader('X-Sync-Token', $this->token)
+ ->post("{$baseUrl}/api/sync/apply", ['changes' => $ourChanges]);
+
+ if ($pushResponse->successful()) {
+ foreach ($pushResponse->json('report', []) as $line) {
+ $report[] = 'ارسال: ' . $line;
+ }
+ $report[] = count($ourChanges) . ' تغییر به سیستم مقابل ارسال شد.';
+
+ if ($this->isFtpConfigured()) {
+ $this->transferFilesViaFtp($ourChanges, 'c2s', $report);
+ } else {
+ $this->pushFilesViaHttp($ourChanges, $baseUrl, $report);
+ }
+ } else {
+ $report[] = 'خطا در ارسال تغییرات به سیستم مقابل: ' . $pushResponse->status();
+ }
+ } catch (\Throwable $e) {
+ $report[] = 'خطا در ارسال به سیستم مقابل: ' . $e->getMessage();
+ }
+
+ SyncLog::markSynced(request()->ip() ?? '127.0.0.1');
+
+ return ['success' => true, 'report' => $report];
+ }
+
+ public function applyChanges(array $changes): array
+ {
+ $report = [];
+ app()->instance('sync.applying', true);
+
+ DB::transaction(function () use ($changes, &$report) {
+ foreach ($changes as $change) {
+ $this->applyChange($change, '', $report);
+ }
+ });
+
+ SyncLog::markSynced(request()->ip() ?? '');
+
+ return $report;
+ }
+
+ private function transferFilesViaFtp(array $changes, string $side, array &$report): void
+ {
+ $ftp = $this->connectFtp();
+ if (! $ftp) {
+ $report[] = 'خطا در اتصال FTP به سیستم مقابل';
+ return;
+ }
+
+ $fileFields = ['photos_before', 'photos_after', 'videos', 'audio_files'];
+ $localBase = rtrim(Storage::disk('public')->path(''), '/\\');
+ $remoteBase = rtrim($this->ftpRemotePath, '/\\');
+
+ foreach ($changes as $change) {
+ $data = $change['changed_data'] ?? [];
+ foreach ($fileFields as $field) {
+ if (empty($data[$field])) {
+ continue;
+ }
+ $files = is_array($data[$field]) ? $data[$field] : json_decode($data[$field], true) ?? [];
+ foreach ($files as $filePath) {
+ if (! $filePath) {
+ continue;
+ }
+
+ $filePath = ltrim(str_replace('\\', '/', $filePath), '/');
+ $localFile = $localBase . '/' . $filePath;
+ $remoteFile = $remoteBase . '/' . $filePath;
+ $remoteFolder = dirname($remoteFile);
+
+ if ($side === 'c2s') {
+ if (! file_exists($localFile)) {
+ continue;
+ }
+ @ftp_mkdir($ftp, $remoteFolder);
+ if (ftp_put($ftp, $remoteFile, $localFile, FTP_BINARY)) {
+ $report[] = "فایل [{$filePath}] ارسال شد (FTP) ✓";
+ } else {
+ $report[] = "فایل [{$filePath}] ارسال نشد (FTP) ✗";
+ }
+ } else {
+ if (file_exists($localFile)) {
+ continue;
+ }
+ $localFolder = dirname($localFile);
+ if (! is_dir($localFolder)) {
+ mkdir($localFolder, 0755, true);
+ }
+ if (ftp_get($ftp, $localFile, $remoteFile, FTP_BINARY)) {
+ $report[] = "فایل [{$filePath}] دریافت شد (FTP) ✓";
+ } else {
+ $report[] = "فایل [{$filePath}] دریافت نشد (FTP) ✗";
+ }
+ }
+ }
+ }
+ }
+
+ ftp_close($ftp);
+ }
+
+ private function connectFtp(): mixed
+ {
+ if (! function_exists('ftp_connect')) {
+ return null;
+ }
+
+ $ftp = @ftp_connect($this->peerIp, $this->ftpPort, 30);
+ if (! $ftp) {
+ return null;
+ }
+
+ if (! @ftp_login($ftp, $this->ftpUser, $this->ftpPass)) {
+ ftp_close($ftp);
+ return null;
+ }
+
+ ftp_pasv($ftp, true);
+
+ return $ftp;
+ }
+
+ private function pushFilesViaHttp(array $changes, string $baseUrl, array &$report): void
+ {
+ $fileFields = ['photos_before', 'photos_after', 'videos', 'audio_files'];
+
+ foreach ($changes as $change) {
+ $data = $change['changed_data'] ?? [];
+ foreach ($fileFields as $field) {
+ if (empty($data[$field])) {
+ continue;
+ }
+ $files = is_array($data[$field]) ? $data[$field] : json_decode($data[$field], true) ?? [];
+ foreach ($files as $filePath) {
+ if (! $filePath || ! Storage::disk('public')->exists($filePath)) {
+ continue;
+ }
+ try {
+ $response = Http::timeout(600)
+ ->withHeader('X-Sync-Token', $this->token)
+ ->attach('file', Storage::disk('public')->get($filePath), basename($filePath))
+ ->post("{$baseUrl}/api/sync/receive-file", ['path' => $filePath]);
+
+ if ($response->successful()) {
+ $report[] = "فایل [{$filePath}] ارسال شد (HTTP) ✓";
+ } else {
+ $report[] = "فایل [{$filePath}] ارسال نشد (HTTP) ✗ " . $response->status();
+ }
+ } catch (\Throwable $e) {
+ $report[] = "فایل [{$filePath}] ارسال نشد (HTTP) ✗ " . $e->getMessage();
+ }
+ }
+ }
+ }
+ }
+
+ private function syncFilesViaHttp(array $changes, string $baseUrl, array &$report): void
+ {
+ $fileFields = ['photos_before', 'photos_after', 'videos', 'audio_files'];
+
+ foreach ($changes as $change) {
+ $data = $change['changed_data'] ?? [];
+ foreach ($fileFields as $field) {
+ if (empty($data[$field])) {
+ continue;
+ }
+ $files = is_array($data[$field]) ? $data[$field] : json_decode($data[$field], true) ?? [];
+ foreach ($files as $filePath) {
+ if (! $filePath || Storage::disk('public')->exists($filePath)) {
+ continue;
+ }
+ try {
+ $response = Http::timeout(60)
+ ->withHeader('X-Sync-Token', $this->token)
+ ->get("{$baseUrl}/api/sync/file", ['path' => $filePath]);
+
+ if ($response->successful()) {
+ Storage::disk('public')->put($filePath, $response->body());
+ $report[] = "فایل [{$filePath}] دریافت شد (HTTP) ✓";
+ }
+ } catch (\Throwable $e) {
+ $report[] = "فایل [{$filePath}] دریافت نشد (HTTP) ✗ " . $e->getMessage();
+ }
+ }
+ }
+ }
+ }
+
+ private function applyChange(array $change, string $prefix, array &$report): void
+ {
+ $table = $change['table_name'];
+ $recordId = $change['record_id'];
+ $action = $change['action'];
+ $data = $change['changed_data'] ?? [];
+
+ $label = $prefix ? "{$prefix} [{$table}#{$recordId}]" : "[{$table}#{$recordId}]";
+
+ try {
+ if ($action === 'deleted') {
+ DB::table($table)->where('id', $recordId)->delete();
+ $report[] = "{$label} حذف ✓";
+ } elseif ($action === 'created') {
+ $exists = DB::table($table)->where('id', $recordId)->exists();
+ if ($exists) {
+ DB::table($table)->where('id', $recordId)->update($this->sanitize($data));
+ $report[] = "{$label} ایجاد→بروزرسانی ✓";
+ } else {
+ DB::table($table)->insert($this->sanitize(array_merge(['id' => $recordId], $data)));
+ $report[] = "{$label} ایجاد ✓";
+ }
+ } elseif ($action === 'updated') {
+ DB::table($table)->where('id', $recordId)->update($this->sanitize($data));
+ $report[] = "{$label} بروزرسانی ✓";
+ }
+ } catch (\Throwable $e) {
+ $report[] = "{$label} {$action} ✗ " . $e->getMessage();
+ }
+ }
+
+ private function sanitize(array $data): array
+ {
+ $result = [];
+ foreach ($data as $key => $value) {
+ if (is_array($value)) {
+ $result[$key] = json_encode($value, JSON_UNESCAPED_UNICODE);
+ } elseif (is_scalar($value) || $value === null) {
+ $result[$key] = $value;
+ }
+ }
+ return $result;
+ }
+}
diff --git a/app/Traits/HasUserStamps.php b/app/Traits/HasUserStamps.php
new file mode 100644
index 0000000..97dbc60
--- /dev/null
+++ b/app/Traits/HasUserStamps.php
@@ -0,0 +1,26 @@
+created_by = Auth::id();
+ $model->updated_by = Auth::id();
+ }
+ });
+
+ static::updating(function ($model) {
+ if (Auth::check()) {
+ $model->updated_by = Auth::id();
+ }
+ });
+ }
+}
diff --git a/artisan b/artisan
new file mode 100644
index 0000000..c35e31d
--- /dev/null
+++ b/artisan
@@ -0,0 +1,18 @@
+#!/usr/bin/env php
+handleCommand(new ArgvInput);
+
+exit($status);
diff --git a/bootstrap/app.php b/bootstrap/app.php
new file mode 100644
index 0000000..c3928c5
--- /dev/null
+++ b/bootstrap/app.php
@@ -0,0 +1,19 @@
+withRouting(
+ web: __DIR__.'/../routes/web.php',
+ api: __DIR__.'/../routes/api.php',
+ commands: __DIR__.'/../routes/console.php',
+ health: '/up',
+ )
+ ->withMiddleware(function (Middleware $middleware): void {
+ //
+ })
+ ->withExceptions(function (Exceptions $exceptions): void {
+ //
+ })->create();
diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/bootstrap/cache/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/bootstrap/providers.php b/bootstrap/providers.php
new file mode 100644
index 0000000..22744d1
--- /dev/null
+++ b/bootstrap/providers.php
@@ -0,0 +1,6 @@
+=6.0.0",
+ "yoast/phpunit-polyfills": "^0.1.0"
+ },
+ "suggest": {
+ "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/Assert/functions.php"
+ ],
+ "psr-4": {
+ "Assert\\": "lib/Assert"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Richard Quadling",
+ "email": "rquadling@gmail.com",
+ "role": "Collaborator"
+ }
+ ],
+ "description": "Thin assertion library for input validation in business models.",
+ "keywords": [
+ "assert",
+ "assertion",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/beberlei/assert/issues",
+ "source": "https://github.com/beberlei/assert/tree/v3.3.3"
+ },
+ "time": "2024-07-15T13:18:35+00:00"
+ },
+ {
+ "name": "bezhansalleh/filament-plugin-essentials",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bezhanSalleh/filament-plugin-essentials.git",
+ "reference": "3bfdb276a8993ccd5acd9d6b43fd4763cf221d3a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bezhanSalleh/filament-plugin-essentials/zipball/3bfdb276a8993ccd5acd9d6b43fd4763cf221d3a",
+ "reference": "3bfdb276a8993ccd5acd9d6b43fd4763cf221d3a",
+ "shasum": ""
+ },
+ "require": {
+ "filament/filament": "^4.0|^5.0",
+ "illuminate/contracts": "^11.28|^12.0",
+ "php": "^8.2",
+ "spatie/laravel-package-tools": "^1.9"
+ },
+ "require-dev": {
+ "larastan/larastan": "^2.9||^3.0",
+ "laravel/pint": "^1.14",
+ "nunomaduro/collision": "^8.1.1||^7.10.0",
+ "orchestra/testbench": "^10.0.0||^9.0.0",
+ "pestphp/pest": "^3.0",
+ "pestphp/pest-plugin-arch": "^3.0",
+ "pestphp/pest-plugin-laravel": "^3.0",
+ "pestphp/pest-plugin-type-coverage": "^3.5",
+ "phpstan/extension-installer": "^1.3||^2.0",
+ "phpstan/phpstan-deprecation-rules": "^1.1||^2.0",
+ "phpstan/phpstan-phpunit": "^1.3||^2.0",
+ "rector/rector": "^2.1",
+ "spatie/laravel-ray": "^1.40"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "BezhanSalleh\\PluginEssentials\\PluginEssentialsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "BezhanSalleh\\PluginEssentials\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bezhan Salleh",
+ "email": "bezhan_salleh@yahoo.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "A collection of essential traits that streamline Filament plugin development by taking care of the boilerplate, so you can focus on shipping real features faster",
+ "homepage": "https://github.com/bezhansalleh/filament-plugin-essentials",
+ "keywords": [
+ "Bezhan Salleh",
+ "filament-plugin-essentials",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/bezhanSalleh/filament-plugin-essentials/issues",
+ "source": "https://github.com/bezhanSalleh/filament-plugin-essentials/tree/1.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/bezhanSalleh",
+ "type": "github"
+ }
+ ],
+ "time": "2026-01-19T19:23:25+00:00"
+ },
+ {
+ "name": "bezhansalleh/filament-shield",
+ "version": "4.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bezhanSalleh/filament-shield.git",
+ "reference": "bb5ac95b3c10f801e4c54bb289be8c055968726a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bezhanSalleh/filament-shield/zipball/bb5ac95b3c10f801e4c54bb289be8c055968726a",
+ "reference": "bb5ac95b3c10f801e4c54bb289be8c055968726a",
+ "shasum": ""
+ },
+ "require": {
+ "bezhansalleh/filament-plugin-essentials": "^1.0",
+ "filament/filament": "^4.0|^5.0",
+ "illuminate/contracts": "^11.28|^12.0",
+ "illuminate/support": "^11.28|^12.0",
+ "php": "^8.2",
+ "spatie/laravel-package-tools": "^1.92",
+ "spatie/laravel-permission": "^6.0"
+ },
+ "require-dev": {
+ "larastan/larastan": "^3.8",
+ "laravel/pint": "^1.26",
+ "nunomaduro/collision": "^8.8",
+ "orchestra/testbench": "^10.8",
+ "pestphp/pest": "^3.8|^4.0",
+ "pestphp/pest-plugin-laravel": "^3.2|^4.0",
+ "pestphp/pest-plugin-livewire": "^3.0|^4.0",
+ "pestphp/pest-plugin-type-coverage": "^3.6|^4.0",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-deprecation-rules": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^11.5",
+ "rector/jack": "^0.4.0",
+ "rector/rector": "^2.2",
+ "spatie/laravel-ray": "^1.43"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "aliases": {
+ "FilamentShield": "BezhanSalleh\\FilamentShield\\Facades\\FilamentShield"
+ },
+ "providers": [
+ "BezhanSalleh\\FilamentShield\\FilamentShieldServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "BezhanSalleh\\FilamentShield\\": "src",
+ "BezhanSalleh\\FilamentShield\\Database\\Factories\\": "database/factories"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bezhan Salleh",
+ "email": "bezhan_salleh@yahoo.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Filament support for `spatie/laravel-permission`.",
+ "homepage": "https://github.com/bezhansalleh/filament-shield",
+ "keywords": [
+ "acl",
+ "bezhanSalleh",
+ "filament",
+ "filament-shield",
+ "laravel",
+ "permission",
+ "permissions",
+ "rbac",
+ "roles",
+ "security"
+ ],
+ "support": {
+ "issues": "https://github.com/bezhanSalleh/filament-shield/issues",
+ "source": "https://github.com/bezhanSalleh/filament-shield/tree/4.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/bezhanSalleh",
+ "type": "github"
+ }
+ ],
+ "time": "2026-01-19T19:28:46+00:00"
+ },
+ {
+ "name": "blade-ui-kit/blade-heroicons",
+ "version": "2.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/driesvints/blade-heroicons.git",
+ "reference": "4553b2a1f6c76f0ac7f3bc0de4c0cfa06a097d19"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/driesvints/blade-heroicons/zipball/4553b2a1f6c76f0ac7f3bc0de4c0cfa06a097d19",
+ "reference": "4553b2a1f6c76f0ac7f3bc0de4c0cfa06a097d19",
+ "shasum": ""
+ },
+ "require": {
+ "blade-ui-kit/blade-icons": "^1.6",
+ "illuminate/support": "^9.0|^10.0|^11.0|^12.0",
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0",
+ "phpunit/phpunit": "^9.0|^10.5|^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "BladeUI\\Heroicons\\BladeHeroiconsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "BladeUI\\Heroicons\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dries Vints",
+ "homepage": "https://driesvints.com"
+ }
+ ],
+ "description": "A package to easily make use of Heroicons in your Laravel Blade views.",
+ "homepage": "https://github.com/blade-ui-kit/blade-heroicons",
+ "keywords": [
+ "Heroicons",
+ "blade",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/driesvints/blade-heroicons/issues",
+ "source": "https://github.com/driesvints/blade-heroicons/tree/2.6.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/driesvints",
+ "type": "github"
+ },
+ {
+ "url": "https://www.paypal.com/paypalme/driesvints",
+ "type": "paypal"
+ }
+ ],
+ "time": "2025-02-13T20:53:33+00:00"
+ },
+ {
+ "name": "blade-ui-kit/blade-icons",
+ "version": "1.9.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/driesvints/blade-icons.git",
+ "reference": "caa92fde675d7a651c38bf73ca582ddada56f318"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/driesvints/blade-icons/zipball/caa92fde675d7a651c38bf73ca582ddada56f318",
+ "reference": "caa92fde675d7a651c38bf73ca582ddada56f318",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/filesystem": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/view": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0",
+ "php": "^7.4|^8.0",
+ "symfony/console": "^5.3|^6.0|^7.0|^8.0",
+ "symfony/finder": "^5.3|^6.0|^7.0|^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.5.1",
+ "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
+ "phpunit/phpunit": "^9.0|^10.5|^11.0"
+ },
+ "bin": [
+ "bin/blade-icons-generate"
+ ],
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "BladeUI\\Icons\\BladeIconsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "BladeUI\\Icons\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dries Vints",
+ "homepage": "https://driesvints.com"
+ }
+ ],
+ "description": "A package to easily make use of icons in your Laravel Blade views.",
+ "homepage": "https://github.com/driesvints/blade-icons",
+ "keywords": [
+ "blade",
+ "icons",
+ "laravel",
+ "svg"
+ ],
+ "support": {
+ "issues": "https://github.com/driesvints/blade-icons/issues",
+ "source": "https://github.com/driesvints/blade-icons"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/driesvints",
+ "type": "github"
+ },
+ {
+ "url": "https://www.paypal.com/paypalme/driesvints",
+ "type": "paypal"
+ }
+ ],
+ "time": "2026-02-23T10:42:23+00:00"
+ },
+ {
+ "name": "brick/math",
+ "version": "0.14.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/brick/math.git",
+ "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629",
+ "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.2"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpstan/phpstan": "2.1.22",
+ "phpunit/phpunit": "^11.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Brick\\Math\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Arbitrary-precision arithmetic library",
+ "keywords": [
+ "Arbitrary-precision",
+ "BigInteger",
+ "BigRational",
+ "arithmetic",
+ "bigdecimal",
+ "bignum",
+ "bignumber",
+ "brick",
+ "decimal",
+ "integer",
+ "math",
+ "mathematics",
+ "rational"
+ ],
+ "support": {
+ "issues": "https://github.com/brick/math/issues",
+ "source": "https://github.com/brick/math/tree/0.14.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/BenMorel",
+ "type": "github"
+ }
+ ],
+ "time": "2026-02-10T14:33:43+00:00"
+ },
+ {
+ "name": "carbonphp/carbon-doctrine-types",
+ "version": "3.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git",
+ "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d",
+ "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "conflict": {
+ "doctrine/dbal": "<4.0.0 || >=5.0.0"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^4.0.0",
+ "nesbot/carbon": "^2.71.0 || ^3.0.0",
+ "phpunit/phpunit": "^10.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Carbon\\Doctrine\\": "src/Carbon/Doctrine/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "KyleKatarn",
+ "email": "kylekatarnls@gmail.com"
+ }
+ ],
+ "description": "Types to use Carbon in Doctrine",
+ "keywords": [
+ "carbon",
+ "date",
+ "datetime",
+ "doctrine",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues",
+ "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kylekatarnls",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/Carbon",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-02-09T16:56:22+00:00"
+ },
+ {
+ "name": "chillerlan/php-qrcode",
+ "version": "5.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-qrcode.git",
+ "reference": "7b66282572fc14075c0507d74d9837dab25b38d6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/7b66282572fc14075c0507d74d9837dab25b38d6",
+ "reference": "7b66282572fc14075c0507d74d9837dab25b38d6",
+ "shasum": ""
+ },
+ "require": {
+ "chillerlan/php-settings-container": "^2.1.6 || ^3.2.1",
+ "ext-mbstring": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "chillerlan/php-authenticator": "^4.3.1 || ^5.2.1",
+ "ext-fileinfo": "*",
+ "phan/phan": "^5.5.2",
+ "phpcompatibility/php-compatibility": "10.x-dev",
+ "phpmd/phpmd": "^2.15",
+ "phpunit/phpunit": "^9.6",
+ "setasign/fpdf": "^1.8.2",
+ "slevomat/coding-standard": "^8.23.0",
+ "squizlabs/php_codesniffer": "^4.0.0"
+ },
+ "suggest": {
+ "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
+ "setasign/fpdf": "Required to use the QR FPDF output.",
+ "simple-icons/simple-icons": "SVG icons that you can use to embed as logos in the QR Code"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\QRCode\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT",
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Kazuhiko Arase",
+ "homepage": "https://github.com/kazuhikoarase/qrcode-generator"
+ },
+ {
+ "name": "ZXing Authors",
+ "homepage": "https://github.com/zxing/zxing"
+ },
+ {
+ "name": "Ashot Khanamiryan",
+ "homepage": "https://github.com/khanamiryan/php-qrcode-detector-decoder"
+ },
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
+ }
+ ],
+ "description": "A QR Code generator and reader with a user-friendly API. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-qrcode",
+ "keywords": [
+ "phpqrcode",
+ "qr",
+ "qr code",
+ "qr-reader",
+ "qrcode",
+ "qrcode-generator",
+ "qrcode-reader"
+ ],
+ "support": {
+ "docs": "https://php-qrcode.readthedocs.io",
+ "issues": "https://github.com/chillerlan/php-qrcode/issues",
+ "source": "https://github.com/chillerlan/php-qrcode"
+ },
+ "funding": [
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "Ko-Fi"
+ }
+ ],
+ "time": "2025-11-23T23:51:44+00:00"
+ },
+ {
+ "name": "chillerlan/php-settings-container",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-settings-container.git",
+ "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
+ "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "phpmd/phpmd": "^2.15",
+ "phpstan/phpstan": "^1.11",
+ "phpstan/phpstan-deprecation-rules": "^1.2",
+ "phpunit/phpunit": "^10.5",
+ "squizlabs/php_codesniffer": "^3.10"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\Settings\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ }
+ ],
+ "description": "A container class for immutable settings objects. Not a DI container.",
+ "homepage": "https://github.com/chillerlan/php-settings-container",
+ "keywords": [
+ "Settings",
+ "configuration",
+ "container",
+ "helper"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-settings-container/issues",
+ "source": "https://github.com/chillerlan/php-settings-container"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "time": "2024-07-16T11:13:48+00:00"
+ },
+ {
+ "name": "danharrin/date-format-converter",
+ "version": "v0.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/danharrin/date-format-converter.git",
+ "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/danharrin/date-format-converter/zipball/7c31171bc981e48726729a5f3a05a2d2b63f0b1e",
+ "reference": "7c31171bc981e48726729a5f3a05a2d2b63f0b1e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/helpers.php",
+ "src/standards.php"
+ ],
+ "psr-4": {
+ "DanHarrin\\DateFormatConverter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dan Harrin",
+ "email": "dan@danharrin.com"
+ }
+ ],
+ "description": "Convert token-based date formats between standards.",
+ "homepage": "https://github.com/danharrin/date-format-converter",
+ "support": {
+ "issues": "https://github.com/danharrin/date-format-converter/issues",
+ "source": "https://github.com/danharrin/date-format-converter"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/danharrin",
+ "type": "github"
+ }
+ ],
+ "time": "2024-06-13T09:38:44+00:00"
+ },
+ {
+ "name": "danharrin/livewire-rate-limiting",
+ "version": "v2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/danharrin/livewire-rate-limiting.git",
+ "reference": "14dde653a9ae8f38af07a0ba4921dc046235e1a0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/14dde653a9ae8f38af07a0ba4921dc046235e1a0",
+ "reference": "14dde653a9ae8f38af07a0ba4921dc046235e1a0",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/support": "^9.0|^10.0|^11.0|^12.0",
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "livewire/livewire": "^3.0",
+ "livewire/volt": "^1.3",
+ "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0",
+ "phpunit/phpunit": "^9.0|^10.0|^11.5.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DanHarrin\\LivewireRateLimiting\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dan Harrin",
+ "email": "dan@danharrin.com"
+ }
+ ],
+ "description": "Apply rate limiters to Laravel Livewire actions.",
+ "homepage": "https://github.com/danharrin/livewire-rate-limiting",
+ "support": {
+ "issues": "https://github.com/danharrin/livewire-rate-limiting/issues",
+ "source": "https://github.com/danharrin/livewire-rate-limiting"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/danharrin",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-21T08:52:11+00:00"
+ },
+ {
+ "name": "dflydev/dot-access-data",
+ "version": "v3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+ "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f",
+ "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.42",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
+ "scrutinizer/ocular": "1.6.0",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^4.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dflydev\\DotAccessData\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dragonfly Development Inc.",
+ "email": "info@dflydev.com",
+ "homepage": "http://dflydev.com"
+ },
+ {
+ "name": "Beau Simensen",
+ "email": "beau@dflydev.com",
+ "homepage": "http://beausimensen.com"
+ },
+ {
+ "name": "Carlos Frutos",
+ "email": "carlos@kiwing.it",
+ "homepage": "https://github.com/cfrutos"
+ },
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com"
+ }
+ ],
+ "description": "Given a deep data structure, access data by dot notation.",
+ "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+ "keywords": [
+ "access",
+ "data",
+ "dot",
+ "notation"
+ ],
+ "support": {
+ "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
+ "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3"
+ },
+ "time": "2024-07-08T12:26:09+00:00"
+ },
+ {
+ "name": "doctrine/inflector",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/inflector.git",
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b",
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^12.0 || ^13.0",
+ "phpstan/phpstan": "^1.12 || ^2.0",
+ "phpstan/phpstan-phpunit": "^1.4 || ^2.0",
+ "phpstan/phpstan-strict-rules": "^1.6 || ^2.0",
+ "phpunit/phpunit": "^8.5 || ^12.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Inflector\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
+ "homepage": "https://www.doctrine-project.org/projects/inflector.html",
+ "keywords": [
+ "inflection",
+ "inflector",
+ "lowercase",
+ "manipulation",
+ "php",
+ "plural",
+ "singular",
+ "strings",
+ "uppercase",
+ "words"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/inflector/issues",
+ "source": "https://github.com/doctrine/inflector/tree/2.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-10T19:31:58+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^12",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^10.5",
+ "psalm/plugin-phpunit": "^0.18.3",
+ "vimeo/psalm": "^5.21"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/3.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-02-05T11:56:58+00:00"
+ },
+ {
+ "name": "dompdf/dompdf",
+ "version": "v3.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dompdf/dompdf.git",
+ "reference": "f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dompdf/dompdf/zipball/f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496",
+ "reference": "f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496",
+ "shasum": ""
+ },
+ "require": {
+ "dompdf/php-font-lib": "^1.0.0",
+ "dompdf/php-svg-lib": "^1.0.0",
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "masterminds/html5": "^2.0",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "ext-gd": "*",
+ "ext-json": "*",
+ "ext-zip": "*",
+ "mockery/mockery": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11",
+ "squizlabs/php_codesniffer": "^3.5",
+ "symfony/process": "^4.4 || ^5.4 || ^6.2 || ^7.0"
+ },
+ "suggest": {
+ "ext-gd": "Needed to process images",
+ "ext-gmagick": "Improves image processing performance",
+ "ext-imagick": "Improves image processing performance",
+ "ext-zlib": "Needed for pdf stream compression"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Dompdf\\": "src/"
+ },
+ "classmap": [
+ "lib/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1"
+ ],
+ "authors": [
+ {
+ "name": "The Dompdf Community",
+ "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
+ }
+ ],
+ "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
+ "homepage": "https://github.com/dompdf/dompdf",
+ "support": {
+ "issues": "https://github.com/dompdf/dompdf/issues",
+ "source": "https://github.com/dompdf/dompdf/tree/v3.1.5"
+ },
+ "time": "2026-03-03T13:54:37+00:00"
+ },
+ {
+ "name": "dompdf/php-font-lib",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dompdf/php-font-lib.git",
+ "reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a6e9a688a2a80016ac080b97be73d3e10c444c9a",
+ "reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11 || ^12"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "FontLib\\": "src/FontLib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1-or-later"
+ ],
+ "authors": [
+ {
+ "name": "The FontLib Community",
+ "homepage": "https://github.com/dompdf/php-font-lib/blob/master/AUTHORS.md"
+ }
+ ],
+ "description": "A library to read, parse, export and make subsets of different types of font files.",
+ "homepage": "https://github.com/dompdf/php-font-lib",
+ "support": {
+ "issues": "https://github.com/dompdf/php-font-lib/issues",
+ "source": "https://github.com/dompdf/php-font-lib/tree/1.0.2"
+ },
+ "time": "2026-01-20T14:10:26+00:00"
+ },
+ {
+ "name": "dompdf/php-svg-lib",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dompdf/php-svg-lib.git",
+ "reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/8259ffb930817e72b1ff1caef5d226501f3dfeb1",
+ "reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": "^7.1 || ^8.0",
+ "sabberworm/php-css-parser": "^8.4 || ^9.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Svg\\": "src/Svg"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "The SvgLib Community",
+ "homepage": "https://github.com/dompdf/php-svg-lib/blob/master/AUTHORS.md"
+ }
+ ],
+ "description": "A library to read, parse and export to PDF SVG files.",
+ "homepage": "https://github.com/dompdf/php-svg-lib",
+ "support": {
+ "issues": "https://github.com/dompdf/php-svg-lib/issues",
+ "source": "https://github.com/dompdf/php-svg-lib/tree/1.0.2"
+ },
+ "time": "2026-01-02T16:01:13+00:00"
+ },
+ {
+ "name": "dragonmantank/cron-expression",
+ "version": "v3.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dragonmantank/cron-expression.git",
+ "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013",
+ "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.2|^8.3|^8.4|^8.5"
+ },
+ "replace": {
+ "mtdowling/cron-expression": "^1.0"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.32|^2.1.31",
+ "phpunit/phpunit": "^8.5.48|^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Cron\\": "src/Cron/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Tankersley",
+ "email": "chris@ctankersley.com",
+ "homepage": "https://github.com/dragonmantank"
+ }
+ ],
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "keywords": [
+ "cron",
+ "schedule"
+ ],
+ "support": {
+ "issues": "https://github.com/dragonmantank/cron-expression/issues",
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/dragonmantank",
+ "type": "github"
+ }
+ ],
+ "time": "2025-10-31T18:51:33+00:00"
+ },
+ {
+ "name": "egulias/email-validator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/egulias/EmailValidator.git",
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^2.0 || ^3.0",
+ "php": ">=8.1",
+ "symfony/polyfill-intl-idn": "^1.26"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^10.2",
+ "vimeo/psalm": "^5.12"
+ },
+ "suggest": {
+ "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Egulias\\EmailValidator\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eduardo Gulias Davis"
+ }
+ ],
+ "description": "A library for validating emails against several RFCs",
+ "homepage": "https://github.com/egulias/EmailValidator",
+ "keywords": [
+ "email",
+ "emailvalidation",
+ "emailvalidator",
+ "validation",
+ "validator"
+ ],
+ "support": {
+ "issues": "https://github.com/egulias/EmailValidator/issues",
+ "source": "https://github.com/egulias/EmailValidator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/egulias",
+ "type": "github"
+ }
+ ],
+ "time": "2025-03-06T22:45:56+00:00"
+ },
+ {
+ "name": "filament/actions",
+ "version": "v4.8.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filamentphp/actions.git",
+ "reference": "61ad65f478dadc877050779de6b603d9328259dc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filamentphp/actions/zipball/61ad65f478dadc877050779de6b603d9328259dc",
+ "reference": "61ad65f478dadc877050779de6b603d9328259dc",
+ "shasum": ""
+ },
+ "require": {
+ "anourvalar/eloquent-serialize": "^1.2",
+ "filament/forms": "self.version",
+ "filament/infolists": "self.version",
+ "filament/notifications": "self.version",
+ "filament/support": "self.version",
+ "league/csv": "^9.27",
+ "openspout/openspout": "^4.23",
+ "php": "^8.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Filament\\Actions\\ActionsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Filament\\Actions\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Easily add beautiful action modals to any Livewire component.",
+ "homepage": "https://github.com/filamentphp/filament",
+ "support": {
+ "issues": "https://github.com/filamentphp/filament/issues",
+ "source": "https://github.com/filamentphp/filament"
+ },
+ "time": "2026-03-14T07:52:39+00:00"
+ },
+ {
+ "name": "filament/filament",
+ "version": "v4.8.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filamentphp/panels.git",
+ "reference": "2d8bf7cfcf23faace1abfc4e44317a5748d1c42c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filamentphp/panels/zipball/2d8bf7cfcf23faace1abfc4e44317a5748d1c42c",
+ "reference": "2d8bf7cfcf23faace1abfc4e44317a5748d1c42c",
+ "shasum": ""
+ },
+ "require": {
+ "chillerlan/php-qrcode": "^5.0",
+ "filament/actions": "self.version",
+ "filament/forms": "self.version",
+ "filament/infolists": "self.version",
+ "filament/notifications": "self.version",
+ "filament/schemas": "self.version",
+ "filament/support": "self.version",
+ "filament/tables": "self.version",
+ "filament/widgets": "self.version",
+ "php": "^8.2",
+ "pragmarx/google2fa": "^8.0|^9.0",
+ "pragmarx/google2fa-qrcode": "^3.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Filament\\FilamentServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/global_helpers.php",
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Filament\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A collection of full-stack components for accelerated Laravel app development.",
+ "homepage": "https://github.com/filamentphp/filament",
+ "support": {
+ "issues": "https://github.com/filamentphp/filament/issues",
+ "source": "https://github.com/filamentphp/filament"
+ },
+ "time": "2026-03-14T07:52:43+00:00"
+ },
+ {
+ "name": "filament/forms",
+ "version": "v4.8.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filamentphp/forms.git",
+ "reference": "1e2acdef45e7cb803e5bf7e415c10d35b2f178d1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filamentphp/forms/zipball/1e2acdef45e7cb803e5bf7e415c10d35b2f178d1",
+ "reference": "1e2acdef45e7cb803e5bf7e415c10d35b2f178d1",
+ "shasum": ""
+ },
+ "require": {
+ "danharrin/date-format-converter": "^0.3",
+ "filament/actions": "self.version",
+ "filament/schemas": "self.version",
+ "filament/support": "self.version",
+ "php": "^8.2",
+ "ueberdosis/tiptap-php": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Filament\\Forms\\FormsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Filament\\Forms\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Easily add beautiful forms to any Livewire component.",
+ "homepage": "https://github.com/filamentphp/filament",
+ "support": {
+ "issues": "https://github.com/filamentphp/filament/issues",
+ "source": "https://github.com/filamentphp/filament"
+ },
+ "time": "2026-03-14T07:52:39+00:00"
+ },
+ {
+ "name": "filament/infolists",
+ "version": "v4.8.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filamentphp/infolists.git",
+ "reference": "9488c65ce965b248948bf6c69d7e782891944ca9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filamentphp/infolists/zipball/9488c65ce965b248948bf6c69d7e782891944ca9",
+ "reference": "9488c65ce965b248948bf6c69d7e782891944ca9",
+ "shasum": ""
+ },
+ "require": {
+ "filament/actions": "self.version",
+ "filament/schemas": "self.version",
+ "filament/support": "self.version",
+ "php": "^8.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Filament\\Infolists\\InfolistsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Filament\\Infolists\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Easily add beautiful read-only infolists to any Livewire component.",
+ "homepage": "https://github.com/filamentphp/filament",
+ "support": {
+ "issues": "https://github.com/filamentphp/filament/issues",
+ "source": "https://github.com/filamentphp/filament"
+ },
+ "time": "2026-03-12T11:52:13+00:00"
+ },
+ {
+ "name": "filament/notifications",
+ "version": "v4.8.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filamentphp/notifications.git",
+ "reference": "8437dc3b9c8500ce7d787055b88d8f20c8cafd08"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filamentphp/notifications/zipball/8437dc3b9c8500ce7d787055b88d8f20c8cafd08",
+ "reference": "8437dc3b9c8500ce7d787055b88d8f20c8cafd08",
+ "shasum": ""
+ },
+ "require": {
+ "filament/actions": "self.version",
+ "filament/support": "self.version",
+ "php": "^8.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Filament\\Notifications\\NotificationsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Testing/helpers.php"
+ ],
+ "psr-4": {
+ "Filament\\Notifications\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Easily add beautiful notifications to any Livewire app.",
+ "homepage": "https://github.com/filamentphp/filament",
+ "support": {
+ "issues": "https://github.com/filamentphp/filament/issues",
+ "source": "https://github.com/filamentphp/filament"
+ },
+ "time": "2026-03-14T07:52:38+00:00"
+ },
+ {
+ "name": "filament/query-builder",
+ "version": "v4.8.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filamentphp/query-builder.git",
+ "reference": "3a8b722190ba8cf982cbd8123a2025f08e3f1136"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filamentphp/query-builder/zipball/3a8b722190ba8cf982cbd8123a2025f08e3f1136",
+ "reference": "3a8b722190ba8cf982cbd8123a2025f08e3f1136",
+ "shasum": ""
+ },
+ "require": {
+ "filament/actions": "self.version",
+ "filament/forms": "self.version",
+ "filament/schemas": "self.version",
+ "filament/support": "self.version",
+ "php": "^8.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Filament\\QueryBuilder\\QueryBuilderServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Filament\\QueryBuilder\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A powerful query builder component for Filament.",
+ "homepage": "https://github.com/filamentphp/filament",
+ "support": {
+ "issues": "https://github.com/filamentphp/filament/issues",
+ "source": "https://github.com/filamentphp/filament"
+ },
+ "time": "2026-03-14T07:52:39+00:00"
+ },
+ {
+ "name": "filament/schemas",
+ "version": "v4.8.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filamentphp/schemas.git",
+ "reference": "d32cb88b05abe6221ebe5f317e73e354d4067b6b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filamentphp/schemas/zipball/d32cb88b05abe6221ebe5f317e73e354d4067b6b",
+ "reference": "d32cb88b05abe6221ebe5f317e73e354d4067b6b",
+ "shasum": ""
+ },
+ "require": {
+ "danharrin/date-format-converter": "^0.3",
+ "filament/actions": "self.version",
+ "filament/support": "self.version",
+ "php": "^8.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Filament\\Schemas\\SchemasServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Filament\\Schemas\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Easily add beautiful UI to any Livewire component.",
+ "homepage": "https://github.com/filamentphp/filament",
+ "support": {
+ "issues": "https://github.com/filamentphp/filament/issues",
+ "source": "https://github.com/filamentphp/filament"
+ },
+ "time": "2026-03-12T11:51:18+00:00"
+ },
+ {
+ "name": "filament/support",
+ "version": "v4.8.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filamentphp/support.git",
+ "reference": "18b3730decc6670e7824314002f39cba742a796e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filamentphp/support/zipball/18b3730decc6670e7824314002f39cba742a796e",
+ "reference": "18b3730decc6670e7824314002f39cba742a796e",
+ "shasum": ""
+ },
+ "require": {
+ "blade-ui-kit/blade-heroicons": "^2.5",
+ "danharrin/livewire-rate-limiting": "^2.0",
+ "ext-intl": "*",
+ "illuminate/contracts": "^11.28|^12.0",
+ "kirschbaum-development/eloquent-power-joins": "^4.0",
+ "league/uri-components": "^7.0",
+ "livewire/livewire": "^3.5",
+ "nette/php-generator": "^4.0",
+ "php": "^8.2",
+ "ryangjchandler/blade-capture-directive": "^1.0",
+ "spatie/invade": "^2.0",
+ "spatie/laravel-package-tools": "^1.9",
+ "symfony/console": "^7.0",
+ "symfony/html-sanitizer": "^7.0|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Filament\\Support\\SupportServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Filament\\Support\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Core helper methods and foundation code for all Filament packages.",
+ "homepage": "https://github.com/filamentphp/filament",
+ "support": {
+ "issues": "https://github.com/filamentphp/filament/issues",
+ "source": "https://github.com/filamentphp/filament"
+ },
+ "time": "2026-03-12T11:48:52+00:00"
+ },
+ {
+ "name": "filament/tables",
+ "version": "v4.8.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filamentphp/tables.git",
+ "reference": "5242f724ff21222aecb47fbaea79f416372eefe7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filamentphp/tables/zipball/5242f724ff21222aecb47fbaea79f416372eefe7",
+ "reference": "5242f724ff21222aecb47fbaea79f416372eefe7",
+ "shasum": ""
+ },
+ "require": {
+ "filament/actions": "self.version",
+ "filament/forms": "self.version",
+ "filament/query-builder": "self.version",
+ "filament/support": "self.version",
+ "php": "^8.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Filament\\Tables\\TablesServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Filament\\Tables\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Easily add beautiful tables to any Livewire component.",
+ "homepage": "https://github.com/filamentphp/filament",
+ "support": {
+ "issues": "https://github.com/filamentphp/filament/issues",
+ "source": "https://github.com/filamentphp/filament"
+ },
+ "time": "2026-03-14T07:52:39+00:00"
+ },
+ {
+ "name": "filament/widgets",
+ "version": "v4.8.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filamentphp/widgets.git",
+ "reference": "b4f124324a607fc43665a6947384a6664aaa7976"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filamentphp/widgets/zipball/b4f124324a607fc43665a6947384a6664aaa7976",
+ "reference": "b4f124324a607fc43665a6947384a6664aaa7976",
+ "shasum": ""
+ },
+ "require": {
+ "filament/schemas": "self.version",
+ "filament/support": "self.version",
+ "php": "^8.2"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Filament\\Widgets\\WidgetsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Filament\\Widgets\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Easily add beautiful dashboard widgets to any Livewire component.",
+ "homepage": "https://github.com/filamentphp/filament",
+ "support": {
+ "issues": "https://github.com/filamentphp/filament/issues",
+ "source": "https://github.com/filamentphp/filament"
+ },
+ "time": "2026-03-12T11:50:53+00:00"
+ },
+ {
+ "name": "fruitcake/php-cors",
+ "version": "v1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/fruitcake/php-cors.git",
+ "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379",
+ "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "symfony/http-foundation": "^5.4|^6.4|^7.3|^8"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^2",
+ "phpunit/phpunit": "^9",
+ "squizlabs/php_codesniffer": "^4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Fruitcake\\Cors\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fruitcake",
+ "homepage": "https://fruitcake.nl"
+ },
+ {
+ "name": "Barryvdh",
+ "email": "barryvdh@gmail.com"
+ }
+ ],
+ "description": "Cross-origin resource sharing library for the Symfony HttpFoundation",
+ "homepage": "https://github.com/fruitcake/php-cors",
+ "keywords": [
+ "cors",
+ "laravel",
+ "symfony"
+ ],
+ "support": {
+ "issues": "https://github.com/fruitcake/php-cors/issues",
+ "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://fruitcake.nl",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/barryvdh",
+ "type": "github"
+ }
+ ],
+ "time": "2025-12-03T09:33:47+00:00"
+ },
+ {
+ "name": "graham-campbell/result-type",
+ "version": "v1.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GrahamCampbell/Result-Type.git",
+ "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b",
+ "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "phpoption/phpoption": "^1.9.5"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "GrahamCampbell\\ResultType\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "An Implementation Of The Result Type",
+ "keywords": [
+ "Graham Campbell",
+ "GrahamCampbell",
+ "Result Type",
+ "Result-Type",
+ "result"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+ "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-12-27T19:43:20+00:00"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "7.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/promises": "^2.3",
+ "guzzlehttp/psr7": "^2.8",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-curl": "*",
+ "guzzle/client-integration-tests": "3.0.2",
+ "php-http/message-factory": "^1.1",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
+ },
+ "suggest": {
+ "ext-curl": "Required for CURL handler support",
+ "ext-intl": "Required for Internationalized Domain Name (IDN) support",
+ "psr/log": "Required for using the Log middleware"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle is a PHP HTTP client library",
+ "keywords": [
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "psr-18",
+ "psr-7",
+ "rest",
+ "web service"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.10.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-23T22:36:01+00:00"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "2.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle promises library",
+ "keywords": [
+ "promise"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/2.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-22T14:34:08+00:00"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "2.9.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884",
+ "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.1 || ^2.0",
+ "ralouphie/getallheaders": "^3.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "http-interop/http-factory-tests": "0.9.0",
+ "jshttp/mime-db": "1.54.0.1",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
+ },
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
+ }
+ ],
+ "description": "PSR-7 message implementation that also provides common utility methods",
+ "keywords": [
+ "http",
+ "message",
+ "psr-7",
+ "request",
+ "response",
+ "stream",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.9.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-03-10T16:41:02+00:00"
+ },
+ {
+ "name": "guzzlehttp/uri-template",
+ "version": "v1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/uri-template.git",
+ "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1",
+ "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "symfony/polyfill-php80": "^1.24"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25",
+ "uri-template/tests": "1.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\UriTemplate\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ }
+ ],
+ "description": "A polyfill class for uri_template of PHP",
+ "keywords": [
+ "guzzlehttp",
+ "uri-template"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/uri-template/issues",
+ "source": "https://github.com/guzzle/uri-template/tree/v1.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-22T14:27:06+00:00"
+ },
+ {
+ "name": "kirschbaum-development/eloquent-power-joins",
+ "version": "4.2.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git",
+ "reference": "0e3e3372992e4bf82391b3c7b84b435c3db73588"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/0e3e3372992e4bf82391b3c7b84b435c3db73588",
+ "reference": "0e3e3372992e4bf82391b3c7b84b435c3db73588",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/database": "^11.42|^12.0",
+ "illuminate/support": "^11.42|^12.0",
+ "php": "^8.2"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "dev-master",
+ "laravel/legacy-factories": "^1.0@dev",
+ "orchestra/testbench": "^9.0|^10.0",
+ "phpunit/phpunit": "^10.0|^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Kirschbaum\\PowerJoins\\PowerJoinsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Kirschbaum\\PowerJoins\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Luis Dalmolin",
+ "email": "luis.nh@gmail.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "The Laravel magic applied to joins.",
+ "homepage": "https://github.com/kirschbaum-development/eloquent-power-joins",
+ "keywords": [
+ "eloquent",
+ "join",
+ "laravel",
+ "mysql"
+ ],
+ "support": {
+ "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues",
+ "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.2.11"
+ },
+ "time": "2025-12-17T00:37:48+00:00"
+ },
+ {
+ "name": "laravel/framework",
+ "version": "v12.54.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/framework.git",
+ "reference": "325497463e7599cd14224c422c6e5dd2fe832868"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/325497463e7599cd14224c422c6e5dd2fe832868",
+ "reference": "325497463e7599cd14224c422c6e5dd2fe832868",
+ "shasum": ""
+ },
+ "require": {
+ "brick/math": "^0.11|^0.12|^0.13|^0.14",
+ "composer-runtime-api": "^2.2",
+ "doctrine/inflector": "^2.0.5",
+ "dragonmantank/cron-expression": "^3.4",
+ "egulias/email-validator": "^3.2.1|^4.0",
+ "ext-ctype": "*",
+ "ext-filter": "*",
+ "ext-hash": "*",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "ext-session": "*",
+ "ext-tokenizer": "*",
+ "fruitcake/php-cors": "^1.3",
+ "guzzlehttp/guzzle": "^7.8.2",
+ "guzzlehttp/uri-template": "^1.0",
+ "laravel/prompts": "^0.3.0",
+ "laravel/serializable-closure": "^1.3|^2.0",
+ "league/commonmark": "^2.8.1",
+ "league/flysystem": "^3.25.1",
+ "league/flysystem-local": "^3.25.1",
+ "league/uri": "^7.5.1",
+ "monolog/monolog": "^3.0",
+ "nesbot/carbon": "^3.8.4",
+ "nunomaduro/termwind": "^2.0",
+ "php": "^8.2",
+ "psr/container": "^1.1.1|^2.0.1",
+ "psr/log": "^1.0|^2.0|^3.0",
+ "psr/simple-cache": "^1.0|^2.0|^3.0",
+ "ramsey/uuid": "^4.7",
+ "symfony/console": "^7.2.0",
+ "symfony/error-handler": "^7.2.0",
+ "symfony/finder": "^7.2.0",
+ "symfony/http-foundation": "^7.2.0",
+ "symfony/http-kernel": "^7.2.0",
+ "symfony/mailer": "^7.2.0",
+ "symfony/mime": "^7.2.0",
+ "symfony/polyfill-php83": "^1.33",
+ "symfony/polyfill-php84": "^1.33",
+ "symfony/polyfill-php85": "^1.33",
+ "symfony/process": "^7.2.0",
+ "symfony/routing": "^7.2.0",
+ "symfony/uid": "^7.2.0",
+ "symfony/var-dumper": "^7.2.0",
+ "tijsverkoyen/css-to-inline-styles": "^2.2.5",
+ "vlucas/phpdotenv": "^5.6.1",
+ "voku/portable-ascii": "^2.0.2"
+ },
+ "conflict": {
+ "tightenco/collect": "<5.5.33"
+ },
+ "provide": {
+ "psr/container-implementation": "1.1|2.0",
+ "psr/log-implementation": "1.0|2.0|3.0",
+ "psr/simple-cache-implementation": "1.0|2.0|3.0"
+ },
+ "replace": {
+ "illuminate/auth": "self.version",
+ "illuminate/broadcasting": "self.version",
+ "illuminate/bus": "self.version",
+ "illuminate/cache": "self.version",
+ "illuminate/collections": "self.version",
+ "illuminate/concurrency": "self.version",
+ "illuminate/conditionable": "self.version",
+ "illuminate/config": "self.version",
+ "illuminate/console": "self.version",
+ "illuminate/container": "self.version",
+ "illuminate/contracts": "self.version",
+ "illuminate/cookie": "self.version",
+ "illuminate/database": "self.version",
+ "illuminate/encryption": "self.version",
+ "illuminate/events": "self.version",
+ "illuminate/filesystem": "self.version",
+ "illuminate/hashing": "self.version",
+ "illuminate/http": "self.version",
+ "illuminate/json-schema": "self.version",
+ "illuminate/log": "self.version",
+ "illuminate/macroable": "self.version",
+ "illuminate/mail": "self.version",
+ "illuminate/notifications": "self.version",
+ "illuminate/pagination": "self.version",
+ "illuminate/pipeline": "self.version",
+ "illuminate/process": "self.version",
+ "illuminate/queue": "self.version",
+ "illuminate/redis": "self.version",
+ "illuminate/reflection": "self.version",
+ "illuminate/routing": "self.version",
+ "illuminate/session": "self.version",
+ "illuminate/support": "self.version",
+ "illuminate/testing": "self.version",
+ "illuminate/translation": "self.version",
+ "illuminate/validation": "self.version",
+ "illuminate/view": "self.version",
+ "spatie/once": "*"
+ },
+ "require-dev": {
+ "ably/ably-php": "^1.0",
+ "aws/aws-sdk-php": "^3.322.9",
+ "ext-gmp": "*",
+ "fakerphp/faker": "^1.24",
+ "guzzlehttp/promises": "^2.0.3",
+ "guzzlehttp/psr7": "^2.4",
+ "laravel/pint": "^1.18",
+ "league/flysystem-aws-s3-v3": "^3.25.1",
+ "league/flysystem-ftp": "^3.25.1",
+ "league/flysystem-path-prefixing": "^3.25.1",
+ "league/flysystem-read-only": "^3.25.1",
+ "league/flysystem-sftp-v3": "^3.25.1",
+ "mockery/mockery": "^1.6.10",
+ "opis/json-schema": "^2.4.1",
+ "orchestra/testbench-core": "^10.9.0",
+ "pda/pheanstalk": "^5.0.6|^7.0.0",
+ "php-http/discovery": "^1.15",
+ "phpstan/phpstan": "^2.0",
+ "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1",
+ "predis/predis": "^2.3|^3.0",
+ "resend/resend-php": "^0.10.0|^1.0",
+ "symfony/cache": "^7.2.0",
+ "symfony/http-client": "^7.2.0",
+ "symfony/psr-http-message-bridge": "^7.2.0",
+ "symfony/translation": "^7.2.0"
+ },
+ "suggest": {
+ "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
+ "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).",
+ "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).",
+ "ext-apcu": "Required to use the APC cache driver.",
+ "ext-fileinfo": "Required to use the Filesystem class.",
+ "ext-ftp": "Required to use the Flysystem FTP driver.",
+ "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
+ "ext-memcached": "Required to use the memcache cache driver.",
+ "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.",
+ "ext-pdo": "Required to use all database features.",
+ "ext-posix": "Required to use all features of the queue worker.",
+ "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).",
+ "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).",
+ "filp/whoops": "Required for friendly error pages in development (^2.14.3).",
+ "laravel/tinker": "Required to use the tinker console command (^2.0).",
+ "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).",
+ "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).",
+ "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).",
+ "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)",
+ "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).",
+ "mockery/mockery": "Required to use mocking (^1.6).",
+ "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).",
+ "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).",
+ "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).",
+ "predis/predis": "Required to use the predis connector (^2.3|^3.0).",
+ "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
+ "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).",
+ "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0|^1.0).",
+ "symfony/cache": "Required to PSR-6 cache bridge (^7.2).",
+ "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).",
+ "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).",
+ "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).",
+ "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).",
+ "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "12.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Illuminate/Collections/functions.php",
+ "src/Illuminate/Collections/helpers.php",
+ "src/Illuminate/Events/functions.php",
+ "src/Illuminate/Filesystem/functions.php",
+ "src/Illuminate/Foundation/helpers.php",
+ "src/Illuminate/Log/functions.php",
+ "src/Illuminate/Reflection/helpers.php",
+ "src/Illuminate/Support/functions.php",
+ "src/Illuminate/Support/helpers.php"
+ ],
+ "psr-4": {
+ "Illuminate\\": "src/Illuminate/",
+ "Illuminate\\Support\\": [
+ "src/Illuminate/Macroable/",
+ "src/Illuminate/Collections/",
+ "src/Illuminate/Conditionable/",
+ "src/Illuminate/Reflection/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Laravel Framework.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "framework",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2026-03-10T20:25:56+00:00"
+ },
+ {
+ "name": "laravel/prompts",
+ "version": "v0.3.14",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/prompts.git",
+ "reference": "9f0e371244eedfe2ebeaa72c79c54bb5df6e0176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/9f0e371244eedfe2ebeaa72c79c54bb5df6e0176",
+ "reference": "9f0e371244eedfe2ebeaa72c79c54bb5df6e0176",
+ "shasum": ""
+ },
+ "require": {
+ "composer-runtime-api": "^2.2",
+ "ext-mbstring": "*",
+ "php": "^8.1",
+ "symfony/console": "^6.2|^7.0|^8.0"
+ },
+ "conflict": {
+ "illuminate/console": ">=10.17.0 <10.25.0",
+ "laravel/framework": ">=10.17.0 <10.25.0"
+ },
+ "require-dev": {
+ "illuminate/collections": "^10.0|^11.0|^12.0|^13.0",
+ "mockery/mockery": "^1.5",
+ "pestphp/pest": "^2.3|^3.4|^4.0",
+ "phpstan/phpstan": "^1.12.28",
+ "phpstan/phpstan-mockery": "^1.1.3"
+ },
+ "suggest": {
+ "ext-pcntl": "Required for the spinner to be animated."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "0.3.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Laravel\\Prompts\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Add beautiful and user-friendly forms to your command-line applications.",
+ "support": {
+ "issues": "https://github.com/laravel/prompts/issues",
+ "source": "https://github.com/laravel/prompts/tree/v0.3.14"
+ },
+ "time": "2026-03-01T09:02:38+00:00"
+ },
+ {
+ "name": "laravel/serializable-closure",
+ "version": "v2.0.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/serializable-closure.git",
+ "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/870fc81d2f879903dfc5b60bf8a0f94a1609e669",
+ "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "illuminate/support": "^10.0|^11.0|^12.0|^13.0",
+ "nesbot/carbon": "^2.67|^3.0",
+ "pestphp/pest": "^2.36|^3.0|^4.0",
+ "phpstan/phpstan": "^2.0",
+ "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\SerializableClosure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "nuno@laravel.com"
+ }
+ ],
+ "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+ "keywords": [
+ "closure",
+ "laravel",
+ "serializable"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/serializable-closure/issues",
+ "source": "https://github.com/laravel/serializable-closure"
+ },
+ "time": "2026-02-20T19:59:49+00:00"
+ },
+ {
+ "name": "laravel/tinker",
+ "version": "v2.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/tinker.git",
+ "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/c9f80cc835649b5c1842898fb043f8cc098dd741",
+ "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+ "php": "^7.2.5|^8.0",
+ "psy/psysh": "^0.11.1|^0.12.0",
+ "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0|^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.3.3|^1.4.2",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0"
+ },
+ "suggest": {
+ "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)."
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Laravel\\Tinker\\TinkerServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Tinker\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Powerful REPL for the Laravel framework.",
+ "keywords": [
+ "REPL",
+ "Tinker",
+ "laravel",
+ "psysh"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/tinker/issues",
+ "source": "https://github.com/laravel/tinker/tree/v2.11.1"
+ },
+ "time": "2026-02-06T14:12:35+00:00"
+ },
+ {
+ "name": "league/commonmark",
+ "version": "2.8.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/commonmark.git",
+ "reference": "84b1ca48347efdbe775426f108622a42735a6579"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/84b1ca48347efdbe775426f108622a42735a6579",
+ "reference": "84b1ca48347efdbe775426f108622a42735a6579",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "league/config": "^1.1.1",
+ "php": "^7.4 || ^8.0",
+ "psr/event-dispatcher": "^1.0",
+ "symfony/deprecation-contracts": "^2.1 || ^3.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
+ "cebe/markdown": "^1.0",
+ "commonmark/cmark": "0.31.1",
+ "commonmark/commonmark.js": "0.31.1",
+ "composer/package-versions-deprecated": "^1.8",
+ "embed/embed": "^4.4",
+ "erusev/parsedown": "^1.0",
+ "ext-json": "*",
+ "github/gfm": "0.29.0",
+ "michelf/php-markdown": "^1.4 || ^2.0",
+ "nyholm/psr7": "^1.5",
+ "phpstan/phpstan": "^1.8.2",
+ "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0",
+ "scrutinizer/ocular": "^1.8.1",
+ "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0",
+ "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0",
+ "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0",
+ "unleashedtech/php-coding-standard": "^3.1.1",
+ "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
+ },
+ "suggest": {
+ "symfony/yaml": "v2.3+ required if using the Front Matter extension"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\CommonMark\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)",
+ "homepage": "https://commonmark.thephpleague.com",
+ "keywords": [
+ "commonmark",
+ "flavored",
+ "gfm",
+ "github",
+ "github-flavored",
+ "markdown",
+ "md",
+ "parser"
+ ],
+ "support": {
+ "docs": "https://commonmark.thephpleague.com/",
+ "forum": "https://github.com/thephpleague/commonmark/discussions",
+ "issues": "https://github.com/thephpleague/commonmark/issues",
+ "rss": "https://github.com/thephpleague/commonmark/releases.atom",
+ "source": "https://github.com/thephpleague/commonmark"
+ },
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-03-05T21:37:03+00:00"
+ },
+ {
+ "name": "league/config",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/config.git",
+ "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3",
+ "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3",
+ "shasum": ""
+ },
+ "require": {
+ "dflydev/dot-access-data": "^3.0.1",
+ "nette/schema": "^1.2",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.8.2",
+ "phpunit/phpunit": "^9.5.5",
+ "scrutinizer/ocular": "^1.8.1",
+ "unleashedtech/php-coding-standard": "^3.1",
+ "vimeo/psalm": "^4.7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Config\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Define configuration arrays with strict schemas and access values with dot notation",
+ "homepage": "https://config.thephpleague.com",
+ "keywords": [
+ "array",
+ "config",
+ "configuration",
+ "dot",
+ "dot-access",
+ "nested",
+ "schema"
+ ],
+ "support": {
+ "docs": "https://config.thephpleague.com/",
+ "issues": "https://github.com/thephpleague/config/issues",
+ "rss": "https://github.com/thephpleague/config/releases.atom",
+ "source": "https://github.com/thephpleague/config"
+ },
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ }
+ ],
+ "time": "2022-12-11T20:36:23+00:00"
+ },
+ {
+ "name": "league/csv",
+ "version": "9.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/csv.git",
+ "reference": "6582ace29ae09ba5b07049d40ea13eb19c8b5073"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/csv/zipball/6582ace29ae09ba5b07049d40ea13eb19c8b5073",
+ "reference": "6582ace29ae09ba5b07049d40ea13eb19c8b5073",
+ "shasum": ""
+ },
+ "require": {
+ "ext-filter": "*",
+ "php": "^8.1.2"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "ext-xdebug": "*",
+ "friendsofphp/php-cs-fixer": "^3.92.3",
+ "phpbench/phpbench": "^1.4.3",
+ "phpstan/phpstan": "^1.12.32",
+ "phpstan/phpstan-deprecation-rules": "^1.2.1",
+ "phpstan/phpstan-phpunit": "^1.4.2",
+ "phpstan/phpstan-strict-rules": "^1.6.2",
+ "phpunit/phpunit": "^10.5.16 || ^11.5.22 || ^12.5.4",
+ "symfony/var-dumper": "^6.4.8 || ^7.4.0 || ^8.0"
+ },
+ "suggest": {
+ "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
+ "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters",
+ "ext-mbstring": "Needed to ease transcoding CSV using mb stream filters",
+ "ext-mysqli": "Requiered to use the package with the MySQLi extension",
+ "ext-pdo": "Required to use the package with the PDO extension",
+ "ext-pgsql": "Requiered to use the package with the PgSQL extension",
+ "ext-sqlite3": "Required to use the package with the SQLite3 extension"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "League\\Csv\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ignace Nyamagana Butera",
+ "email": "nyamsprod@gmail.com",
+ "homepage": "https://github.com/nyamsprod/",
+ "role": "Developer"
+ }
+ ],
+ "description": "CSV data manipulation made easy in PHP",
+ "homepage": "https://csv.thephpleague.com",
+ "keywords": [
+ "convert",
+ "csv",
+ "export",
+ "filter",
+ "import",
+ "read",
+ "transform",
+ "write"
+ ],
+ "support": {
+ "docs": "https://csv.thephpleague.com",
+ "issues": "https://github.com/thephpleague/csv/issues",
+ "rss": "https://github.com/thephpleague/csv/releases.atom",
+ "source": "https://github.com/thephpleague/csv"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/nyamsprod",
+ "type": "github"
+ }
+ ],
+ "time": "2025-12-27T15:18:42+00:00"
+ },
+ {
+ "name": "league/flysystem",
+ "version": "3.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem.git",
+ "reference": "254b1595b16b22dbddaaef9ed6ca9fdac4956725"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/254b1595b16b22dbddaaef9ed6ca9fdac4956725",
+ "reference": "254b1595b16b22dbddaaef9ed6ca9fdac4956725",
+ "shasum": ""
+ },
+ "require": {
+ "league/flysystem-local": "^3.0.0",
+ "league/mime-type-detection": "^1.0.0",
+ "php": "^8.0.2"
+ },
+ "conflict": {
+ "async-aws/core": "<1.19.0",
+ "async-aws/s3": "<1.14.0",
+ "aws/aws-sdk-php": "3.209.31 || 3.210.0",
+ "guzzlehttp/guzzle": "<7.0",
+ "guzzlehttp/ringphp": "<1.1.1",
+ "phpseclib/phpseclib": "3.0.15",
+ "symfony/http-client": "<5.2"
+ },
+ "require-dev": {
+ "async-aws/s3": "^1.5 || ^2.0",
+ "async-aws/simple-s3": "^1.1 || ^2.0",
+ "aws/aws-sdk-php": "^3.295.10",
+ "composer/semver": "^3.0",
+ "ext-fileinfo": "*",
+ "ext-ftp": "*",
+ "ext-mongodb": "^1.3|^2",
+ "ext-zip": "*",
+ "friendsofphp/php-cs-fixer": "^3.5",
+ "google/cloud-storage": "^1.23",
+ "guzzlehttp/psr7": "^2.6",
+ "microsoft/azure-storage-blob": "^1.1",
+ "mongodb/mongodb": "^1.2|^2",
+ "phpseclib/phpseclib": "^3.0.36",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.5.11|^10.0",
+ "sabre/dav": "^4.6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frankdejonge.nl"
+ }
+ ],
+ "description": "File storage abstraction for PHP",
+ "keywords": [
+ "WebDAV",
+ "aws",
+ "cloud",
+ "file",
+ "files",
+ "filesystem",
+ "filesystems",
+ "ftp",
+ "s3",
+ "sftp",
+ "storage"
+ ],
+ "support": {
+ "issues": "https://github.com/thephpleague/flysystem/issues",
+ "source": "https://github.com/thephpleague/flysystem/tree/3.32.0"
+ },
+ "time": "2026-02-25T17:01:41+00:00"
+ },
+ {
+ "name": "league/flysystem-local",
+ "version": "3.31.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem-local.git",
+ "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079",
+ "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079",
+ "shasum": ""
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "league/flysystem": "^3.0.0",
+ "league/mime-type-detection": "^1.0.0",
+ "php": "^8.0.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\Local\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frankdejonge.nl"
+ }
+ ],
+ "description": "Local filesystem adapter for Flysystem.",
+ "keywords": [
+ "Flysystem",
+ "file",
+ "files",
+ "filesystem",
+ "local"
+ ],
+ "support": {
+ "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0"
+ },
+ "time": "2026-01-23T15:30:45+00:00"
+ },
+ {
+ "name": "league/mime-type-detection",
+ "version": "1.16.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/mime-type-detection.git",
+ "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9",
+ "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.2",
+ "phpstan/phpstan": "^0.12.68",
+ "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\MimeTypeDetection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frankdejonge.nl"
+ }
+ ],
+ "description": "Mime-type detection for Flysystem",
+ "support": {
+ "issues": "https://github.com/thephpleague/mime-type-detection/issues",
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/frankdejonge",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-21T08:32:55+00:00"
+ },
+ {
+ "name": "league/uri",
+ "version": "7.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/uri.git",
+ "reference": "4436c6ec8d458e4244448b069cc572d088230b76"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76",
+ "reference": "4436c6ec8d458e4244448b069cc572d088230b76",
+ "shasum": ""
+ },
+ "require": {
+ "league/uri-interfaces": "^7.8",
+ "php": "^8.1",
+ "psr/http-factory": "^1"
+ },
+ "conflict": {
+ "league/uri-schemes": "^1.0"
+ },
+ "suggest": {
+ "ext-bcmath": "to improve IPV4 host parsing",
+ "ext-dom": "to convert the URI into an HTML anchor tag",
+ "ext-fileinfo": "to create Data URI from file contennts",
+ "ext-gmp": "to improve IPV4 host parsing",
+ "ext-intl": "to handle IDN host with the best performance",
+ "ext-uri": "to use the PHP native URI class",
+ "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain",
+ "league/uri-components": "to provide additional tools to manipulate URI objects components",
+ "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP",
+ "php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
+ "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Uri\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ignace Nyamagana Butera",
+ "email": "nyamsprod@gmail.com",
+ "homepage": "https://nyamsprod.com"
+ }
+ ],
+ "description": "URI manipulation library",
+ "homepage": "https://uri.thephpleague.com",
+ "keywords": [
+ "URN",
+ "data-uri",
+ "file-uri",
+ "ftp",
+ "hostname",
+ "http",
+ "https",
+ "middleware",
+ "parse_str",
+ "parse_url",
+ "psr-7",
+ "query-string",
+ "querystring",
+ "rfc2141",
+ "rfc3986",
+ "rfc3987",
+ "rfc6570",
+ "rfc8141",
+ "uri",
+ "uri-template",
+ "url",
+ "ws"
+ ],
+ "support": {
+ "docs": "https://uri.thephpleague.com",
+ "forum": "https://thephpleague.slack.com",
+ "issues": "https://github.com/thephpleague/uri-src/issues",
+ "source": "https://github.com/thephpleague/uri/tree/7.8.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/nyamsprod",
+ "type": "github"
+ }
+ ],
+ "time": "2026-01-14T17:24:56+00:00"
+ },
+ {
+ "name": "league/uri-components",
+ "version": "7.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/uri-components.git",
+ "reference": "8b5ffcebcc0842b76eb80964795bd56a8333b2ba"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/8b5ffcebcc0842b76eb80964795bd56a8333b2ba",
+ "reference": "8b5ffcebcc0842b76eb80964795bd56a8333b2ba",
+ "shasum": ""
+ },
+ "require": {
+ "league/uri": "^7.8",
+ "php": "^8.1"
+ },
+ "suggest": {
+ "ext-bcmath": "to improve IPV4 host parsing",
+ "ext-fileinfo": "to create Data URI from file contennts",
+ "ext-gmp": "to improve IPV4 host parsing",
+ "ext-intl": "to handle IDN host with the best performance",
+ "ext-mbstring": "to use the sorting algorithm of URLSearchParams",
+ "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain",
+ "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP",
+ "php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
+ "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Uri\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ignace Nyamagana Butera",
+ "email": "nyamsprod@gmail.com",
+ "homepage": "https://nyamsprod.com"
+ }
+ ],
+ "description": "URI components manipulation library",
+ "homepage": "http://uri.thephpleague.com",
+ "keywords": [
+ "authority",
+ "components",
+ "fragment",
+ "host",
+ "middleware",
+ "modifier",
+ "path",
+ "port",
+ "query",
+ "rfc3986",
+ "scheme",
+ "uri",
+ "url",
+ "userinfo"
+ ],
+ "support": {
+ "docs": "https://uri.thephpleague.com",
+ "forum": "https://thephpleague.slack.com",
+ "issues": "https://github.com/thephpleague/uri-src/issues",
+ "source": "https://github.com/thephpleague/uri-components/tree/7.8.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/nyamsprod",
+ "type": "github"
+ }
+ ],
+ "time": "2026-01-14T17:24:56+00:00"
+ },
+ {
+ "name": "league/uri-interfaces",
+ "version": "7.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/uri-interfaces.git",
+ "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
+ "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-filter": "*",
+ "php": "^8.1",
+ "psr/http-message": "^1.1 || ^2.0"
+ },
+ "suggest": {
+ "ext-bcmath": "to improve IPV4 host parsing",
+ "ext-gmp": "to improve IPV4 host parsing",
+ "ext-intl": "to handle IDN host with the best performance",
+ "php-64bit": "to improve IPV4 host parsing",
+ "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification",
+ "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Uri\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ignace Nyamagana Butera",
+ "email": "nyamsprod@gmail.com",
+ "homepage": "https://nyamsprod.com"
+ }
+ ],
+ "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI",
+ "homepage": "https://uri.thephpleague.com",
+ "keywords": [
+ "data-uri",
+ "file-uri",
+ "ftp",
+ "hostname",
+ "http",
+ "https",
+ "parse_str",
+ "parse_url",
+ "psr-7",
+ "query-string",
+ "querystring",
+ "rfc3986",
+ "rfc3987",
+ "rfc6570",
+ "uri",
+ "url",
+ "ws"
+ ],
+ "support": {
+ "docs": "https://uri.thephpleague.com",
+ "forum": "https://thephpleague.slack.com",
+ "issues": "https://github.com/thephpleague/uri-src/issues",
+ "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/nyamsprod",
+ "type": "github"
+ }
+ ],
+ "time": "2026-01-15T06:54:53+00:00"
+ },
+ {
+ "name": "livewire/livewire",
+ "version": "v3.7.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/livewire/livewire.git",
+ "reference": "addd6e8e9234df75f29e6a327ee2a745a7d67bb6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/livewire/livewire/zipball/addd6e8e9234df75f29e6a327ee2a745a7d67bb6",
+ "reference": "addd6e8e9234df75f29e6a327ee2a745a7d67bb6",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/database": "^10.0|^11.0|^12.0|^13.0",
+ "illuminate/routing": "^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "^10.0|^11.0|^12.0|^13.0",
+ "illuminate/validation": "^10.0|^11.0|^12.0|^13.0",
+ "laravel/prompts": "^0.1.24|^0.2|^0.3",
+ "league/mime-type-detection": "^1.9",
+ "php": "^8.1",
+ "symfony/console": "^6.0|^7.0|^8.0",
+ "symfony/http-kernel": "^6.2|^7.0|^8.0"
+ },
+ "require-dev": {
+ "calebporzio/sushi": "^2.1",
+ "laravel/framework": "^10.15.0|^11.0|^12.0|^13.0",
+ "mockery/mockery": "^1.3.1",
+ "orchestra/testbench": "^8.21.0|^9.0|^10.0|^11.0",
+ "orchestra/testbench-dusk": "^8.24|^9.1|^10.0|^11.0",
+ "phpunit/phpunit": "^10.4|^11.5|^12.5",
+ "psy/psysh": "^0.11.22|^0.12"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "aliases": {
+ "Livewire": "Livewire\\Livewire"
+ },
+ "providers": [
+ "Livewire\\LivewireServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Livewire\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Caleb Porzio",
+ "email": "calebporzio@gmail.com"
+ }
+ ],
+ "description": "A front-end framework for Laravel.",
+ "support": {
+ "issues": "https://github.com/livewire/livewire/issues",
+ "source": "https://github.com/livewire/livewire/tree/v3.7.11"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/livewire",
+ "type": "github"
+ }
+ ],
+ "time": "2026-02-26T00:58:19+00:00"
+ },
+ {
+ "name": "masterminds/html5",
+ "version": "2.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Masterminds/html5-php.git",
+ "reference": "fcf91eb64359852f00d921887b219479b4f21251"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251",
+ "reference": "fcf91eb64359852f00d921887b219479b4f21251",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Masterminds\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matt Butcher",
+ "email": "technosophos@gmail.com"
+ },
+ {
+ "name": "Matt Farina",
+ "email": "matt@mattfarina.com"
+ },
+ {
+ "name": "Asmir Mustafic",
+ "email": "goetas@gmail.com"
+ }
+ ],
+ "description": "An HTML5 parser and serializer.",
+ "homepage": "http://masterminds.github.io/html5-php",
+ "keywords": [
+ "HTML5",
+ "dom",
+ "html",
+ "parser",
+ "querypath",
+ "serializer",
+ "xml"
+ ],
+ "support": {
+ "issues": "https://github.com/Masterminds/html5-php/issues",
+ "source": "https://github.com/Masterminds/html5-php/tree/2.10.0"
+ },
+ "time": "2025-07-25T09:04:22+00:00"
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "3.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0",
+ "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/log": "^2.0 || ^3.0"
+ },
+ "provide": {
+ "psr/log-implementation": "3.0.0"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^3.0",
+ "doctrine/couchdb": "~1.0@dev",
+ "elasticsearch/elasticsearch": "^7 || ^8",
+ "ext-json": "*",
+ "graylog2/gelf-php": "^1.4.2 || ^2.0",
+ "guzzlehttp/guzzle": "^7.4.5",
+ "guzzlehttp/psr7": "^2.2",
+ "mongodb/mongodb": "^1.8 || ^2.0",
+ "php-amqplib/php-amqplib": "~2.4 || ^3",
+ "php-console/php-console": "^3.1.8",
+ "phpstan/phpstan": "^2",
+ "phpstan/phpstan-deprecation-rules": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^10.5.17 || ^11.0.7",
+ "predis/predis": "^1.1 || ^2",
+ "rollbar/rollbar": "^4.0",
+ "ruflin/elastica": "^7 || ^8",
+ "symfony/mailer": "^5.4 || ^6",
+ "symfony/mime": "^5.4 || ^6"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+ "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+ "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
+ "ext-mbstring": "Allow to work properly with unicode symbols",
+ "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
+ "ext-openssl": "Required to send log messages using SSL",
+ "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
+ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
+ "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+ "rollbar/rollbar": "Allow sending log messages to Rollbar",
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Monolog\\": "src/Monolog"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+ "homepage": "https://github.com/Seldaek/monolog",
+ "keywords": [
+ "log",
+ "logging",
+ "psr-3"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/monolog/issues",
+ "source": "https://github.com/Seldaek/monolog/tree/3.10.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Seldaek",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-02T08:56:05+00:00"
+ },
+ {
+ "name": "morilog/jalali",
+ "version": "v3.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/morilog/jalali.git",
+ "reference": "40b906c405b72edd20e73797b40be1e650e872c1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/morilog/jalali/zipball/40b906c405b72edd20e73797b40be1e650e872c1",
+ "reference": "40b906c405b72edd20e73797b40be1e650e872c1",
+ "shasum": ""
+ },
+ "require": {
+ "beberlei/assert": "^3.0",
+ "nesbot/carbon": "^1.21 || ^2.0 || ^3.0",
+ "php": "^7.1 | ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Morilog\\Jalali\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Milad Rey",
+ "email": "miladr@gmail.com"
+ },
+ {
+ "name": "Morteza Parvini",
+ "email": "m.parvini@outlook.com"
+ }
+ ],
+ "description": "This Package helps developers to easily work with Jalali (Shamsi or Iranian) dates in PHP applications, based on Jalali (Shamsi) DateTime class.",
+ "keywords": [
+ "Jalali",
+ "date",
+ "datetime",
+ "laravel",
+ "morilog"
+ ],
+ "support": {
+ "issues": "https://github.com/morilog/jalali/issues",
+ "source": "https://github.com/morilog/jalali/tree/v3.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://issuehunt.io/r/morilog",
+ "type": "issuehunt"
+ }
+ ],
+ "time": "2025-12-25T07:12:28+00:00"
+ },
+ {
+ "name": "mpdf/mpdf",
+ "version": "v8.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mpdf/mpdf.git",
+ "reference": "2a454ec334109911fdb323a284c19dbf3f049810"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mpdf/mpdf/zipball/2a454ec334109911fdb323a284c19dbf3f049810",
+ "reference": "2a454ec334109911fdb323a284c19dbf3f049810",
+ "shasum": ""
+ },
+ "require": {
+ "ext-gd": "*",
+ "ext-mbstring": "*",
+ "mpdf/psr-http-message-shim": "^1.0 || ^2.0",
+ "mpdf/psr-log-aware-trait": "^2.0 || ^3.0",
+ "myclabs/deep-copy": "^1.7",
+ "paragonie/random_compat": "^1.4|^2.0|^9.99.99",
+ "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
+ "psr/http-message": "^1.0 || ^2.0",
+ "psr/log": "^1.0 || ^2.0 || ^3.0",
+ "setasign/fpdi": "^2.1"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.3.0",
+ "mpdf/qrcode": "^1.1.0",
+ "squizlabs/php_codesniffer": "^3.5.0",
+ "tracy/tracy": "~2.5",
+ "yoast/phpunit-polyfills": "^1.0"
+ },
+ "suggest": {
+ "ext-bcmath": "Needed for generation of some types of barcodes",
+ "ext-imagick": "Needed if developing the Mpdf library",
+ "ext-xml": "Needed mainly for SVG manipulation",
+ "ext-zlib": "Needed for compression of embedded resources, such as fonts"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Mpdf\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0-only"
+ ],
+ "authors": [
+ {
+ "name": "Matěj Humpál",
+ "role": "Developer, maintainer"
+ },
+ {
+ "name": "Ian Back",
+ "role": "Developer (retired)"
+ }
+ ],
+ "description": "PHP library generating PDF files from UTF-8 encoded HTML",
+ "homepage": "https://mpdf.github.io",
+ "keywords": [
+ "pdf",
+ "php",
+ "utf-8"
+ ],
+ "support": {
+ "docs": "https://mpdf.github.io",
+ "issues": "https://github.com/mpdf/mpdf/issues",
+ "source": "https://github.com/mpdf/mpdf"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.me/mpdf",
+ "type": "custom"
+ }
+ ],
+ "time": "2026-03-11T10:58:44+00:00"
+ },
+ {
+ "name": "mpdf/psr-http-message-shim",
+ "version": "v2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mpdf/psr-http-message-shim.git",
+ "reference": "f25a0153d645e234f9db42e5433b16d9b113920f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mpdf/psr-http-message-shim/zipball/f25a0153d645e234f9db42e5433b16d9b113920f",
+ "reference": "f25a0153d645e234f9db42e5433b16d9b113920f",
+ "shasum": ""
+ },
+ "require": {
+ "psr/http-message": "^2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Mpdf\\PsrHttpMessageShim\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mark Dorison",
+ "email": "mark@chromatichq.com"
+ },
+ {
+ "name": "Kristofer Widholm",
+ "email": "kristofer@chromatichq.com"
+ },
+ {
+ "name": "Nigel Cunningham",
+ "email": "nigel.cunningham@technocrat.com.au"
+ }
+ ],
+ "description": "Shim to allow support of different psr/message versions.",
+ "support": {
+ "issues": "https://github.com/mpdf/psr-http-message-shim/issues",
+ "source": "https://github.com/mpdf/psr-http-message-shim/tree/v2.0.1"
+ },
+ "time": "2023-10-02T14:34:03+00:00"
+ },
+ {
+ "name": "mpdf/psr-log-aware-trait",
+ "version": "v3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mpdf/psr-log-aware-trait.git",
+ "reference": "a633da6065e946cc491e1c962850344bb0bf3e78"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mpdf/psr-log-aware-trait/zipball/a633da6065e946cc491e1c962850344bb0bf3e78",
+ "reference": "a633da6065e946cc491e1c962850344bb0bf3e78",
+ "shasum": ""
+ },
+ "require": {
+ "psr/log": "^3.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Mpdf\\PsrLogAwareTrait\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mark Dorison",
+ "email": "mark@chromatichq.com"
+ },
+ {
+ "name": "Kristofer Widholm",
+ "email": "kristofer@chromatichq.com"
+ }
+ ],
+ "description": "Trait to allow support of different psr/log versions.",
+ "support": {
+ "issues": "https://github.com/mpdf/psr-log-aware-trait/issues",
+ "source": "https://github.com/mpdf/psr-log-aware-trait/tree/v3.0.0"
+ },
+ "time": "2023-05-03T06:19:36+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.13.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-01T08:46:24+00:00"
+ },
+ {
+ "name": "nativephp/desktop",
+ "version": "2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/NativePHP/desktop.git",
+ "reference": "5aa09597ec6cd83011d606ce5d9b2dd1055cc727"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/NativePHP/desktop/zipball/5aa09597ec6cd83011d606ce5d9b2dd1055cc727",
+ "reference": "5aa09597ec6cd83011d606ce5d9b2dd1055cc727",
+ "shasum": ""
+ },
+ "require": {
+ "ext-zip": "*",
+ "illuminate/contracts": "^10.0|^11.0|^12.0",
+ "laravel/prompts": "^0.1.1|^0.2|^0.3",
+ "nativephp/php-bin": "^1.0",
+ "php": "^8.3",
+ "spatie/laravel-package-tools": "^1.16.4",
+ "symfony/filesystem": "^6.4|^7.2",
+ "symfony/finder": "^6.2|^7.0"
+ },
+ "conflict": {
+ "nativephp/electron": "*",
+ "nativephp/laravel": "*",
+ "nativephp/mobile": "*"
+ },
+ "require-dev": {
+ "guzzlehttp/guzzle": "^7.0",
+ "larastan/larastan": "^2.0|^3.1",
+ "laravel/pint": "^1.0",
+ "nunomaduro/collision": "^7.11|^8.1.1",
+ "orchestra/testbench": "^8.0|^9.0|^10.0",
+ "pestphp/pest": "^v2.30|^3.0",
+ "pestphp/pest-plugin-arch": "^2.0|^3.0",
+ "pestphp/pest-plugin-laravel": "^2.0|^3.1",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan-deprecation-rules": "^1.0|^2.0",
+ "phpstan/phpstan-phpunit": "^1.0|^2.0",
+ "spatie/laravel-ray": "^1.26"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "aliases": {
+ "Dock": "Native\\Desktop\\Facades\\Dock",
+ "Menu": "Native\\Desktop\\Facades\\Menu",
+ "Shell": "Native\\Desktop\\Facades\\Shell",
+ "Screen": "Native\\Desktop\\Facades\\Screen",
+ "System": "Native\\Desktop\\Facades\\System",
+ "Window": "Native\\Desktop\\Facades\\Window",
+ "MenuBar": "Native\\Desktop\\Facades\\MenuBar",
+ "Process": "Native\\Desktop\\Facades\\Process",
+ "Updater": "Native\\Electron\\Facades\\Updater",
+ "Settings": "Native\\Desktop\\Facades\\Settings",
+ "Clipboard": "Native\\Desktop\\Facades\\Clipboard",
+ "ContextMenu": "Native\\Desktop\\Facades\\ContextMenu",
+ "QueueWorker": "Native\\Desktop\\Facades\\QueueWorker",
+ "ChildProcess": "Native\\Desktop\\Facades\\ChildProcess",
+ "Notification": "Native\\Desktop\\Facades\\Notification",
+ "PowerMonitor": "Native\\Desktop\\Facades\\PowerMonitor",
+ "GlobalShortcut": "Native\\Desktop\\Facades\\GlobalShortcut"
+ },
+ "providers": [
+ "Native\\Desktop\\NativeServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Native\\Desktop\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marcel Pociot",
+ "email": "marcel@beyondco.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Simon Hamp",
+ "email": "simon.hamp@me.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "NativePHP for Desktop",
+ "homepage": "https://github.com/nativephp/laravel",
+ "keywords": [
+ "desktop",
+ "laravel",
+ "nativephp",
+ "nativephp-laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/NativePHP/desktop/issues",
+ "source": "https://github.com/NativePHP/desktop/tree/2.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/simonhamp",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/nativephp",
+ "type": "opencollective"
+ }
+ ],
+ "time": "2026-02-27T12:01:59+00:00"
+ },
+ {
+ "name": "nativephp/php-bin",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/NativePHP/php-bin.git",
+ "reference": "6b5e11cd56f5214f37d4c175afb752b210545f59"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/NativePHP/php-bin/zipball/6b5e11cd56f5214f37d4c175afb752b210545f59",
+ "reference": "6b5e11cd56f5214f37d4c175afb752b210545f59",
+ "shasum": ""
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0",
+ "GPL-3.0-or-later",
+ "MIT",
+ "PHP-3.01"
+ ],
+ "authors": [
+ {
+ "name": "Marcel Pociot",
+ "email": "marcel@beyondco.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Simon Hamp",
+ "email": "simon.hamp@me.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "PHP binaries used by the NativePHP framework",
+ "homepage": "https://nativephp.com",
+ "keywords": [
+ "nativephp",
+ "php"
+ ],
+ "support": {
+ "source": "https://github.com/NativePHP/php-bin/tree/1.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/simonhamp",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/nativephp",
+ "type": "opencollective"
+ }
+ ],
+ "time": "2025-09-02T19:18:24+00:00"
+ },
+ {
+ "name": "nesbot/carbon",
+ "version": "3.11.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/CarbonPHP/carbon.git",
+ "reference": "6a7e652845bb018c668220c2a545aded8594fbbf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/6a7e652845bb018c668220c2a545aded8594fbbf",
+ "reference": "6a7e652845bb018c668220c2a545aded8594fbbf",
+ "shasum": ""
+ },
+ "require": {
+ "carbonphp/carbon-doctrine-types": "<100.0",
+ "ext-json": "*",
+ "php": "^8.1",
+ "psr/clock": "^1.0",
+ "symfony/clock": "^6.3.12 || ^7.0 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0"
+ },
+ "provide": {
+ "psr/clock-implementation": "1.0"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^3.6.3 || ^4.0",
+ "doctrine/orm": "^2.15.2 || ^3.0",
+ "friendsofphp/php-cs-fixer": "^v3.87.1",
+ "kylekatarnls/multi-tester": "^2.5.3",
+ "phpmd/phpmd": "^2.15.0",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^2.1.22",
+ "phpunit/phpunit": "^10.5.53",
+ "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0"
+ },
+ "bin": [
+ "bin/carbon"
+ ],
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Carbon\\Laravel\\ServiceProvider"
+ ]
+ },
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ },
+ "branch-alias": {
+ "dev-2.x": "2.x-dev",
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Carbon\\": "src/Carbon/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brian Nesbitt",
+ "email": "brian@nesbot.com",
+ "homepage": "https://markido.com"
+ },
+ {
+ "name": "kylekatarnls",
+ "homepage": "https://github.com/kylekatarnls"
+ }
+ ],
+ "description": "An API extension for DateTime that supports 281 different languages.",
+ "homepage": "https://carbonphp.github.io/carbon/",
+ "keywords": [
+ "date",
+ "datetime",
+ "time"
+ ],
+ "support": {
+ "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html",
+ "issues": "https://github.com/CarbonPHP/carbon/issues",
+ "source": "https://github.com/CarbonPHP/carbon"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/kylekatarnls",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/Carbon#sponsor",
+ "type": "opencollective"
+ },
+ {
+ "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-03-11T17:23:39+00:00"
+ },
+ {
+ "name": "nette/php-generator",
+ "version": "v4.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/php-generator.git",
+ "reference": "0d7060926f5c3e8c488b9b9ced42d857f12a34b5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/php-generator/zipball/0d7060926f5c3e8c488b9b9ced42d857f12a34b5",
+ "reference": "0d7060926f5c3e8c488b9b9ced42d857f12a34b5",
+ "shasum": ""
+ },
+ "require": {
+ "nette/utils": "^4.0.6",
+ "php": "8.1 - 8.5"
+ },
+ "require-dev": {
+ "jetbrains/phpstorm-attributes": "^1.2",
+ "nette/phpstan-rules": "^1.0",
+ "nette/tester": "^2.6",
+ "nikic/php-parser": "^5.0",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1.40@stable",
+ "tracy/tracy": "^2.8"
+ },
+ "suggest": {
+ "nikic/php-parser": "to use ClassType::from(withBodies: true) & ClassType::fromCode()"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.5 features.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "code",
+ "nette",
+ "php",
+ "scaffolding"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/php-generator/issues",
+ "source": "https://github.com/nette/php-generator/tree/v4.2.2"
+ },
+ "time": "2026-02-26T00:58:33+00:00"
+ },
+ {
+ "name": "nette/schema",
+ "version": "v1.3.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/schema.git",
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002",
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002",
+ "shasum": ""
+ },
+ "require": {
+ "nette/utils": "^4.0",
+ "php": "8.1 - 8.5"
+ },
+ "require-dev": {
+ "nette/phpstan-rules": "^1.0",
+ "nette/tester": "^2.6",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1.39@stable",
+ "tracy/tracy": "^2.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "📐 Nette Schema: validating data structures against a given Schema.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "config",
+ "nette"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/schema/issues",
+ "source": "https://github.com/nette/schema/tree/v1.3.5"
+ },
+ "time": "2026-02-23T03:47:12+00:00"
+ },
+ {
+ "name": "nette/utils",
+ "version": "v4.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/utils.git",
+ "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe",
+ "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe",
+ "shasum": ""
+ },
+ "require": {
+ "php": "8.2 - 8.5"
+ },
+ "conflict": {
+ "nette/finder": "<3",
+ "nette/schema": "<1.2.2"
+ },
+ "require-dev": {
+ "jetbrains/phpstorm-attributes": "^1.2",
+ "nette/phpstan-rules": "^1.0",
+ "nette/tester": "^2.5",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1@stable",
+ "tracy/tracy": "^2.9"
+ },
+ "suggest": {
+ "ext-gd": "to use Image",
+ "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
+ "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
+ "ext-json": "to use Nette\\Utils\\Json",
+ "ext-mbstring": "to use Strings::lower() etc...",
+ "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "array",
+ "core",
+ "datetime",
+ "images",
+ "json",
+ "nette",
+ "paginator",
+ "password",
+ "slugify",
+ "string",
+ "unicode",
+ "utf-8",
+ "utility",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/utils/issues",
+ "source": "https://github.com/nette/utils/tree/v4.1.3"
+ },
+ "time": "2026-02-13T03:05:33+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v5.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82",
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0"
+ },
+ "time": "2025-12-06T11:56:16+00:00"
+ },
+ {
+ "name": "nunomaduro/termwind",
+ "version": "v2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nunomaduro/termwind.git",
+ "reference": "712a31b768f5daea284c2169a7d227031001b9a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8",
+ "reference": "712a31b768f5daea284c2169a7d227031001b9a8",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": "^8.2",
+ "symfony/console": "^7.4.4 || ^8.0.4"
+ },
+ "require-dev": {
+ "illuminate/console": "^11.47.0",
+ "laravel/pint": "^1.27.1",
+ "mockery/mockery": "^1.6.12",
+ "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2",
+ "phpstan/phpstan": "^1.12.32",
+ "phpstan/phpstan-strict-rules": "^1.6.2",
+ "symfony/var-dumper": "^7.3.5 || ^8.0.4",
+ "thecodingmachine/phpstan-strict-rules": "^1.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Termwind\\Laravel\\TermwindServiceProvider"
+ ]
+ },
+ "branch-alias": {
+ "dev-2.x": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Functions.php"
+ ],
+ "psr-4": {
+ "Termwind\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "It's like Tailwind CSS, but for the console.",
+ "keywords": [
+ "cli",
+ "console",
+ "css",
+ "package",
+ "php",
+ "style"
+ ],
+ "support": {
+ "issues": "https://github.com/nunomaduro/termwind/issues",
+ "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/paypalme/enunomaduro",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/nunomaduro",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/xiCO2k",
+ "type": "github"
+ }
+ ],
+ "time": "2026-02-16T23:10:27+00:00"
+ },
+ {
+ "name": "openspout/openspout",
+ "version": "v4.28.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/openspout/openspout.git",
+ "reference": "ab05a09fe6fce57c90338f83280648a9786ce36b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/openspout/openspout/zipball/ab05a09fe6fce57c90338f83280648a9786ce36b",
+ "reference": "ab05a09fe6fce57c90338f83280648a9786ce36b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-fileinfo": "*",
+ "ext-filter": "*",
+ "ext-libxml": "*",
+ "ext-xmlreader": "*",
+ "ext-zip": "*",
+ "php": "~8.2.0 || ~8.3.0 || ~8.4.0"
+ },
+ "require-dev": {
+ "ext-zlib": "*",
+ "friendsofphp/php-cs-fixer": "^3.68.3",
+ "infection/infection": "^0.29.10",
+ "phpbench/phpbench": "^1.4.0",
+ "phpstan/phpstan": "^2.1.2",
+ "phpstan/phpstan-phpunit": "^2.0.4",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^11.5.4"
+ },
+ "suggest": {
+ "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)",
+ "ext-mbstring": "To handle non UTF-8 CSV files (if \"iconv\" is not already installed)"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "OpenSpout\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Adrien Loison",
+ "email": "adrien@box.com"
+ }
+ ],
+ "description": "PHP Library to read and write spreadsheet files (CSV, XLSX and ODS), in a fast and scalable way",
+ "homepage": "https://github.com/openspout/openspout",
+ "keywords": [
+ "OOXML",
+ "csv",
+ "excel",
+ "memory",
+ "odf",
+ "ods",
+ "office",
+ "open",
+ "php",
+ "read",
+ "scale",
+ "spreadsheet",
+ "stream",
+ "write",
+ "xlsx"
+ ],
+ "support": {
+ "issues": "https://github.com/openspout/openspout/issues",
+ "source": "https://github.com/openspout/openspout/tree/v4.28.5"
+ },
+ "funding": [
+ {
+ "url": "https://paypal.me/filippotessarotto",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/Slamdunk",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-30T13:51:11+00:00"
+ },
+ {
+ "name": "paragonie/constant_time_encoding",
+ "version": "v3.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/constant_time_encoding.git",
+ "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77",
+ "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8"
+ },
+ "require-dev": {
+ "infection/infection": "^0",
+ "nikic/php-fuzzer": "^0",
+ "phpunit/phpunit": "^9|^10|^11",
+ "vimeo/psalm": "^4|^5|^6"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ParagonIE\\ConstantTime\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Steve 'Sc00bz' Thomas",
+ "email": "steve@tobtu.com",
+ "homepage": "https://www.tobtu.com",
+ "role": "Original Developer"
+ }
+ ],
+ "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
+ "keywords": [
+ "base16",
+ "base32",
+ "base32_decode",
+ "base32_encode",
+ "base64",
+ "base64_decode",
+ "base64_encode",
+ "bin2hex",
+ "encoding",
+ "hex",
+ "hex2bin",
+ "rfc4648"
+ ],
+ "support": {
+ "email": "info@paragonie.com",
+ "issues": "https://github.com/paragonie/constant_time_encoding/issues",
+ "source": "https://github.com/paragonie/constant_time_encoding"
+ },
+ "time": "2025-09-24T15:06:41+00:00"
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v9.99.100",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
+ "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">= 7"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "polyfill",
+ "pseudorandom",
+ "random"
+ ],
+ "support": {
+ "email": "info@paragonie.com",
+ "issues": "https://github.com/paragonie/random_compat/issues",
+ "source": "https://github.com/paragonie/random_compat"
+ },
+ "time": "2020-10-15T08:29:30+00:00"
+ },
+ {
+ "name": "phpoption/phpoption",
+ "version": "1.9.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/php-option.git",
+ "reference": "75365b91986c2405cf5e1e012c5595cd487a98be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be",
+ "reference": "75365b91986c2405cf5e1e012c5595cd487a98be",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpOption\\": "src/PhpOption/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "https://github.com/schmittjoh"
+ },
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "Option Type for PHP",
+ "keywords": [
+ "language",
+ "option",
+ "php",
+ "type"
+ ],
+ "support": {
+ "issues": "https://github.com/schmittjoh/php-option/issues",
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-12-27T19:41:33+00:00"
+ },
+ {
+ "name": "pragmarx/google2fa",
+ "version": "v9.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/antonioribeiro/google2fa.git",
+ "reference": "e6bc62dd6ae83acc475f57912e27466019a1f2cf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/e6bc62dd6ae83acc475f57912e27466019a1f2cf",
+ "reference": "e6bc62dd6ae83acc475f57912e27466019a1f2cf",
+ "shasum": ""
+ },
+ "require": {
+ "paragonie/constant_time_encoding": "^1.0|^2.0|^3.0",
+ "php": "^7.1|^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.9",
+ "phpunit/phpunit": "^7.5.15|^8.5|^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PragmaRX\\Google2FA\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Antonio Carlos Ribeiro",
+ "email": "acr@antoniocarlosribeiro.com",
+ "role": "Creator & Designer"
+ }
+ ],
+ "description": "A One Time Password Authentication package, compatible with Google Authenticator.",
+ "keywords": [
+ "2fa",
+ "Authentication",
+ "Two Factor Authentication",
+ "google2fa"
+ ],
+ "support": {
+ "issues": "https://github.com/antonioribeiro/google2fa/issues",
+ "source": "https://github.com/antonioribeiro/google2fa/tree/v9.0.0"
+ },
+ "time": "2025-09-19T22:51:08+00:00"
+ },
+ {
+ "name": "pragmarx/google2fa-qrcode",
+ "version": "v3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/antonioribeiro/google2fa-qrcode.git",
+ "reference": "ce4d8a729b6c93741c607cfb2217acfffb5bf76b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/antonioribeiro/google2fa-qrcode/zipball/ce4d8a729b6c93741c607cfb2217acfffb5bf76b",
+ "reference": "ce4d8a729b6c93741c607cfb2217acfffb5bf76b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "pragmarx/google2fa": ">=4.0"
+ },
+ "require-dev": {
+ "bacon/bacon-qr-code": "^2.0",
+ "chillerlan/php-qrcode": "^1.0|^2.0|^3.0|^4.0",
+ "khanamiryan/qrcode-detector-decoder": "^1.0",
+ "phpunit/phpunit": "~4|~5|~6|~7|~8|~9"
+ },
+ "suggest": {
+ "bacon/bacon-qr-code": "For QR Code generation, requires imagick",
+ "chillerlan/php-qrcode": "For QR Code generation"
+ },
+ "type": "library",
+ "extra": {
+ "component": "package",
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PragmaRX\\Google2FAQRCode\\": "src/",
+ "PragmaRX\\Google2FAQRCode\\Tests\\": "tests/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Antonio Carlos Ribeiro",
+ "email": "acr@antoniocarlosribeiro.com",
+ "role": "Creator & Designer"
+ }
+ ],
+ "description": "QR Code package for Google2FA",
+ "keywords": [
+ "2fa",
+ "Authentication",
+ "Two Factor Authentication",
+ "google2fa",
+ "qr code",
+ "qrcode"
+ ],
+ "support": {
+ "issues": "https://github.com/antonioribeiro/google2fa-qrcode/issues",
+ "source": "https://github.com/antonioribeiro/google2fa-qrcode/tree/v3.0.0"
+ },
+ "time": "2021-08-15T12:53:48+00:00"
+ },
+ {
+ "name": "psr/clock",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/clock.git",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Clock\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for reading the clock.",
+ "homepage": "https://github.com/php-fig/clock",
+ "keywords": [
+ "clock",
+ "now",
+ "psr",
+ "psr-20",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/clock/issues",
+ "source": "https://github.com/php-fig/clock/tree/1.0.0"
+ },
+ "time": "2022-11-25T14:36:26+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/2.0.2"
+ },
+ "time": "2021-11-05T16:47:00+00:00"
+ },
+ {
+ "name": "psr/event-dispatcher",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/event-dispatcher.git",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\EventDispatcher\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Standard interfaces for event handling.",
+ "keywords": [
+ "events",
+ "psr",
+ "psr-14"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/event-dispatcher/issues",
+ "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+ },
+ "time": "2019-01-08T18:20:26+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client"
+ },
+ "time": "2023-09-23T14:17:50+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory"
+ },
+ "time": "2024-04-15T12:06:14+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/2.0"
+ },
+ "time": "2023-04-04T09:54:51+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
+ },
+ "time": "2024-09-11T13:17:53+00:00"
+ },
+ {
+ "name": "psr/simple-cache",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
+ "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\SimpleCache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
+ },
+ "time": "2021-10-29T13:26:27+00:00"
+ },
+ {
+ "name": "psy/psysh",
+ "version": "v0.12.21",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bobthecow/psysh.git",
+ "reference": "4821fab5b7cd8c49a673a9fd5754dc9162bb9e97"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/4821fab5b7cd8c49a673a9fd5754dc9162bb9e97",
+ "reference": "4821fab5b7cd8c49a673a9fd5754dc9162bb9e97",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "nikic/php-parser": "^5.0 || ^4.0",
+ "php": "^8.0 || ^7.4",
+ "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
+ "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4"
+ },
+ "conflict": {
+ "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.2",
+ "composer/class-map-generator": "^1.6"
+ },
+ "suggest": {
+ "composer/class-map-generator": "Improved tab completion performance with better class discovery.",
+ "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+ "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well."
+ },
+ "bin": [
+ "bin/psysh"
+ ],
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": false,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-main": "0.12.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Psy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Justin Hileman",
+ "email": "justin@justinhileman.info"
+ }
+ ],
+ "description": "An interactive shell for modern PHP.",
+ "homepage": "https://psysh.org",
+ "keywords": [
+ "REPL",
+ "console",
+ "interactive",
+ "shell"
+ ],
+ "support": {
+ "issues": "https://github.com/bobthecow/psysh/issues",
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.21"
+ },
+ "time": "2026-03-06T21:21:28+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
+ "time": "2019-03-08T08:55:37+00:00"
+ },
+ {
+ "name": "ramsey/collection",
+ "version": "2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/collection.git",
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2",
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "captainhook/plugin-composer": "^5.3",
+ "ergebnis/composer-normalize": "^2.45",
+ "fakerphp/faker": "^1.24",
+ "hamcrest/hamcrest-php": "^2.0",
+ "jangregor/phpstan-prophecy": "^2.1",
+ "mockery/mockery": "^1.6",
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.4",
+ "phpspec/prophecy-phpunit": "^2.3",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-mockery": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^10.5",
+ "ramsey/coding-standard": "^2.3",
+ "ramsey/conventional-commits": "^1.6",
+ "roave/security-advisories": "dev-latest"
+ },
+ "type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ },
+ "ramsey/conventional-commits": {
+ "configFile": "conventional-commits.json"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Collection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ }
+ ],
+ "description": "A PHP library for representing and manipulating collections.",
+ "keywords": [
+ "array",
+ "collection",
+ "hash",
+ "map",
+ "queue",
+ "set"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/collection/issues",
+ "source": "https://github.com/ramsey/collection/tree/2.1.1"
+ },
+ "time": "2025-03-22T05:38:12+00:00"
+ },
+ {
+ "name": "ramsey/uuid",
+ "version": "4.9.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/uuid.git",
+ "reference": "8429c78ca35a09f27565311b98101e2826affde0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0",
+ "reference": "8429c78ca35a09f27565311b98101e2826affde0",
+ "shasum": ""
+ },
+ "require": {
+ "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14",
+ "php": "^8.0",
+ "ramsey/collection": "^1.2 || ^2.0"
+ },
+ "replace": {
+ "rhumsaa/uuid": "self.version"
+ },
+ "require-dev": {
+ "captainhook/captainhook": "^5.25",
+ "captainhook/plugin-composer": "^5.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "ergebnis/composer-normalize": "^2.47",
+ "mockery/mockery": "^1.6",
+ "paragonie/random-lib": "^2",
+ "php-mock/php-mock": "^2.6",
+ "php-mock/php-mock-mockery": "^1.5",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "phpbench/phpbench": "^1.2.14",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-mockery": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^9.6",
+ "slevomat/coding-standard": "^8.18",
+ "squizlabs/php_codesniffer": "^3.13"
+ },
+ "suggest": {
+ "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+ "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+ "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
+ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+ "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+ },
+ "type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Ramsey\\Uuid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
+ "keywords": [
+ "guid",
+ "identifier",
+ "uuid"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/uuid/issues",
+ "source": "https://github.com/ramsey/uuid/tree/4.9.2"
+ },
+ "time": "2025-12-14T04:43:48+00:00"
+ },
+ {
+ "name": "ryangjchandler/blade-capture-directive",
+ "version": "v1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ryangjchandler/blade-capture-directive.git",
+ "reference": "bbb1513dfd89eaec87a47fe0c449a7e3d4a1976d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ryangjchandler/blade-capture-directive/zipball/bbb1513dfd89eaec87a47fe0c449a7e3d4a1976d",
+ "reference": "bbb1513dfd89eaec87a47fe0c449a7e3d4a1976d",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^10.0|^11.0|^12.0",
+ "php": "^8.1",
+ "spatie/laravel-package-tools": "^1.9.2"
+ },
+ "require-dev": {
+ "nunomaduro/collision": "^7.0|^8.0",
+ "nunomaduro/larastan": "^2.0|^3.0",
+ "orchestra/testbench": "^8.0|^9.0|^10.0",
+ "pestphp/pest": "^2.0|^3.7",
+ "pestphp/pest-plugin-laravel": "^2.0|^3.1",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan-deprecation-rules": "^1.0|^2.0",
+ "phpstan/phpstan-phpunit": "^1.0|^2.0",
+ "phpunit/phpunit": "^10.0|^11.5.3",
+ "spatie/laravel-ray": "^1.26"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "aliases": {
+ "BladeCaptureDirective": "RyanChandler\\BladeCaptureDirective\\Facades\\BladeCaptureDirective"
+ },
+ "providers": [
+ "RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "RyanChandler\\BladeCaptureDirective\\": "src",
+ "RyanChandler\\BladeCaptureDirective\\Database\\Factories\\": "database/factories"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ryan Chandler",
+ "email": "support@ryangjchandler.co.uk",
+ "role": "Developer"
+ }
+ ],
+ "description": "Create inline partials in your Blade templates with ease.",
+ "homepage": "https://github.com/ryangjchandler/blade-capture-directive",
+ "keywords": [
+ "blade-capture-directive",
+ "laravel",
+ "ryangjchandler"
+ ],
+ "support": {
+ "issues": "https://github.com/ryangjchandler/blade-capture-directive/issues",
+ "source": "https://github.com/ryangjchandler/blade-capture-directive/tree/v1.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ryangjchandler",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-25T09:09:36+00:00"
+ },
+ {
+ "name": "sabberworm/php-css-parser",
+ "version": "v9.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
+ "reference": "88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949",
+ "reference": "88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949",
+ "shasum": ""
+ },
+ "require": {
+ "ext-iconv": "*",
+ "php": "^7.2.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
+ "thecodingmachine/safe": "^1.3 || ^2.5 || ^3.4"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-parallel-lint": "1.4.0",
+ "phpstan/extension-installer": "1.4.3",
+ "phpstan/phpstan": "1.12.32 || 2.1.32",
+ "phpstan/phpstan-phpunit": "1.4.2 || 2.0.8",
+ "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.7",
+ "phpunit/phpunit": "8.5.52",
+ "rawr/phpunit-data-provider": "3.3.1",
+ "rector/rector": "1.2.10 || 2.2.8",
+ "rector/type-perfect": "1.0.0 || 2.1.0",
+ "squizlabs/php_codesniffer": "4.0.1",
+ "thecodingmachine/phpstan-safe-rule": "1.2.0 || 1.4.1"
+ },
+ "suggest": {
+ "ext-mbstring": "for parsing UTF-8 CSS"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "9.4.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Rule/Rule.php",
+ "src/RuleSet/RuleContainer.php"
+ ],
+ "psr-4": {
+ "Sabberworm\\CSS\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Raphael Schweikert"
+ },
+ {
+ "name": "Oliver Klee",
+ "email": "github@oliverklee.de"
+ },
+ {
+ "name": "Jake Hotson",
+ "email": "jake.github@qzdesign.co.uk"
+ }
+ ],
+ "description": "Parser for CSS Files written in PHP",
+ "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
+ "keywords": [
+ "css",
+ "parser",
+ "stylesheet"
+ ],
+ "support": {
+ "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
+ "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.3.0"
+ },
+ "time": "2026-03-03T17:31:43+00:00"
+ },
+ {
+ "name": "scrivo/highlight.php",
+ "version": "v9.18.1.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/scrivo/highlight.php.git",
+ "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/850f4b44697a2552e892ffe71490ba2733c2fc6e",
+ "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": ">=5.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8|^5.7",
+ "sabberworm/php-css-parser": "^8.3",
+ "symfony/finder": "^2.8|^3.4|^5.4",
+ "symfony/var-dumper": "^2.8|^3.4|^5.4"
+ },
+ "suggest": {
+ "ext-mbstring": "Allows highlighting code with unicode characters and supports language with unicode keywords"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "HighlightUtilities/functions.php"
+ ],
+ "psr-0": {
+ "Highlight\\": "",
+ "HighlightUtilities\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Geert Bergman",
+ "homepage": "http://www.scrivo.org/",
+ "role": "Project Author"
+ },
+ {
+ "name": "Vladimir Jimenez",
+ "homepage": "https://allejo.io",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Martin Folkers",
+ "homepage": "https://twobrain.io",
+ "role": "Contributor"
+ }
+ ],
+ "description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js",
+ "keywords": [
+ "code",
+ "highlight",
+ "highlight.js",
+ "highlight.php",
+ "syntax"
+ ],
+ "support": {
+ "issues": "https://github.com/scrivo/highlight.php/issues",
+ "source": "https://github.com/scrivo/highlight.php"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/allejo",
+ "type": "github"
+ }
+ ],
+ "time": "2022-12-17T21:53:22+00:00"
+ },
+ {
+ "name": "setasign/fpdi",
+ "version": "v2.6.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Setasign/FPDI.git",
+ "reference": "de0cf35911be3e9ea63b48e0f307883b1c7c48ac"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Setasign/FPDI/zipball/de0cf35911be3e9ea63b48e0f307883b1c7c48ac",
+ "reference": "de0cf35911be3e9ea63b48e0f307883b1c7c48ac",
+ "shasum": ""
+ },
+ "require": {
+ "ext-zlib": "*",
+ "php": ">=7.2 <=8.5.99999"
+ },
+ "conflict": {
+ "setasign/tfpdf": "<1.31"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.52",
+ "setasign/fpdf": "~1.8.6",
+ "setasign/tfpdf": "~1.33",
+ "squizlabs/php_codesniffer": "^3.5",
+ "tecnickcom/tcpdf": "^6.8"
+ },
+ "suggest": {
+ "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "setasign\\Fpdi\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Slabon",
+ "email": "jan.slabon@setasign.com",
+ "homepage": "https://www.setasign.com"
+ },
+ {
+ "name": "Maximilian Kresse",
+ "email": "maximilian.kresse@setasign.com",
+ "homepage": "https://www.setasign.com"
+ }
+ ],
+ "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
+ "homepage": "https://www.setasign.com/fpdi",
+ "keywords": [
+ "fpdf",
+ "fpdi",
+ "pdf"
+ ],
+ "support": {
+ "issues": "https://github.com/Setasign/FPDI/issues",
+ "source": "https://github.com/Setasign/FPDI/tree/v2.6.6"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-03-13T08:38:20+00:00"
+ },
+ {
+ "name": "spatie/invade",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/invade.git",
+ "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/invade/zipball/b920f6411d21df4e8610a138e2e87ae4957d7f63",
+ "reference": "b920f6411d21df4e8610a138e2e87ae4957d7f63",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "pestphp/pest": "^1.20",
+ "phpstan/phpstan": "^1.4",
+ "spatie/ray": "^1.28"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Spatie\\Invade\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "A PHP function to work with private properties and methods",
+ "homepage": "https://github.com/spatie/invade",
+ "keywords": [
+ "invade",
+ "spatie"
+ ],
+ "support": {
+ "source": "https://github.com/spatie/invade/tree/2.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2024-05-17T09:06:10+00:00"
+ },
+ {
+ "name": "spatie/laravel-package-tools",
+ "version": "1.93.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/laravel-package-tools.git",
+ "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/0d097bce95b2bf6802fb1d83e1e753b0f5a948e7",
+ "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0",
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.5",
+ "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0",
+ "pestphp/pest": "^2.1|^3.1|^4.0",
+ "phpunit/php-code-coverage": "^10.0|^11.0|^12.0",
+ "phpunit/phpunit": "^10.5|^11.5|^12.5",
+ "spatie/pest-plugin-test-time": "^2.2|^3.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Spatie\\LaravelPackageTools\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "Tools for creating Laravel packages",
+ "homepage": "https://github.com/spatie/laravel-package-tools",
+ "keywords": [
+ "laravel-package-tools",
+ "spatie"
+ ],
+ "support": {
+ "issues": "https://github.com/spatie/laravel-package-tools/issues",
+ "source": "https://github.com/spatie/laravel-package-tools/tree/1.93.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2026-02-21T12:49:54+00:00"
+ },
+ {
+ "name": "spatie/laravel-permission",
+ "version": "6.24.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/laravel-permission.git",
+ "reference": "eefc9d17eba80d023d6bff313f882cb2bcd691a3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/eefc9d17eba80d023d6bff313f882cb2bcd691a3",
+ "reference": "eefc9d17eba80d023d6bff313f882cb2bcd691a3",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/auth": "^8.12|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/container": "^8.12|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/database": "^8.12|^9.0|^10.0|^11.0|^12.0",
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "laravel/passport": "^11.0|^12.0",
+ "laravel/pint": "^1.0",
+ "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0",
+ "phpunit/phpunit": "^9.4|^10.1|^11.5"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Spatie\\Permission\\PermissionServiceProvider"
+ ]
+ },
+ "branch-alias": {
+ "dev-main": "6.x-dev",
+ "dev-master": "6.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Spatie\\Permission\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "homepage": "https://spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "Permission handling for Laravel 8.0 and up",
+ "homepage": "https://github.com/spatie/laravel-permission",
+ "keywords": [
+ "acl",
+ "laravel",
+ "permission",
+ "permissions",
+ "rbac",
+ "roles",
+ "security",
+ "spatie"
+ ],
+ "support": {
+ "issues": "https://github.com/spatie/laravel-permission/issues",
+ "source": "https://github.com/spatie/laravel-permission/tree/6.24.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2026-02-09T21:10:03+00:00"
+ },
+ {
+ "name": "spatie/shiki-php",
+ "version": "2.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/shiki-php.git",
+ "reference": "9d50ff4d9825d87d3283a6695c65ae9c3c3caa6b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/shiki-php/zipball/9d50ff4d9825d87d3283a6695c65ae9c3c3caa6b",
+ "reference": "9d50ff4d9825d87d3283a6695c65ae9c3c3caa6b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^8.0",
+ "symfony/process": "^5.4|^6.4|^7.1|^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^v3.0",
+ "pestphp/pest": "^1.8",
+ "phpunit/phpunit": "^9.5",
+ "spatie/pest-plugin-snapshots": "^1.1",
+ "spatie/ray": "^1.10"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Spatie\\ShikiPhp\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Rias Van der Veken",
+ "email": "rias@spatie.be",
+ "role": "Developer"
+ },
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "Highlight code using Shiki in PHP",
+ "homepage": "https://github.com/spatie/shiki-php",
+ "keywords": [
+ "shiki",
+ "spatie"
+ ],
+ "support": {
+ "source": "https://github.com/spatie/shiki-php/tree/2.3.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2026-02-01T09:30:04+00:00"
+ },
+ {
+ "name": "symfony/clock",
+ "version": "v7.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/clock.git",
+ "reference": "9169f24776edde469914c1e7a1442a50f7a4e110"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/clock/zipball/9169f24776edde469914c1e7a1442a50f7a4e110",
+ "reference": "9169f24776edde469914c1e7a1442a50f7a4e110",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "psr/clock": "^1.0",
+ "symfony/polyfill-php83": "^1.28"
+ },
+ "provide": {
+ "psr/clock-implementation": "1.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/now.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\Clock\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Decouples applications from the system clock",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "clock",
+ "psr20",
+ "time"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/clock/tree/v7.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-11-12T15:39:26+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v7.4.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/e1e6770440fb9c9b0cf725f81d1361ad1835329d",
+ "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/string": "^7.2|^8.0"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<6.4",
+ "symfony/dotenv": "<6.4",
+ "symfony/event-dispatcher": "<6.4",
+ "symfony/lock": "<6.4",
+ "symfony/process": "<6.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0|3.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/lock": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command-line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v7.4.7"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-03-06T14:06:20+00:00"
+ },
+ {
+ "name": "symfony/css-selector",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/css-selector.git",
+ "reference": "2e7c52c647b406e2107dd867db424a4dbac91864"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/2e7c52c647b406e2107dd867db424a4dbac91864",
+ "reference": "2e7c52c647b406e2107dd867db424a4dbac91864",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\CssSelector\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Converts CSS selectors to XPath expressions",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/css-selector/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-17T07:53:42+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:21:43+00:00"
+ },
+ {
+ "name": "symfony/error-handler",
+ "version": "v7.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/error-handler.git",
+ "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/8da531f364ddfee53e36092a7eebbbd0b775f6b8",
+ "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "psr/log": "^1|^2|^3",
+ "symfony/polyfill-php85": "^1.32",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
+ },
+ "conflict": {
+ "symfony/deprecation-contracts": "<2.5",
+ "symfony/http-kernel": "<6.4"
+ },
+ "require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^6.4|^7.0|^8.0",
+ "symfony/webpack-encore-bundle": "^1.0|^2.0"
+ },
+ "bin": [
+ "Resources/bin/patch-type-declarations"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\ErrorHandler\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools to manage errors and ease debugging PHP code",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/error-handler/tree/v7.4.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-20T16:42:42+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v7.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "dc2c0eba1af673e736bb851d747d266108aea746"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746",
+ "reference": "dc2c0eba1af673e736bb851d747d266108aea746",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/event-dispatcher-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<6.4",
+ "symfony/service-contracts": "<2.5"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "2.0|3.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/error-handler": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/framework-bundle": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-05T11:45:34+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v3.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "59eb412e93815df44f05f342958efa9f46b1e586"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
+ "reference": "59eb412e93815df44f05f342958efa9f46b1e586",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/event-dispatcher": "^1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:21:43+00:00"
+ },
+ {
+ "name": "symfony/filesystem",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/3ebc794fa5315e59fd122561623c2e2e4280538e",
+ "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.8"
+ },
+ "require-dev": {
+ "symfony/process": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides basic utilities for the filesystem",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/filesystem/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-25T16:50:00+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/8655bf1076b7a3a346cb11413ffdabff50c7ffcf",
+ "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "symfony/filesystem": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-29T09:40:50+00:00"
+ },
+ {
+ "name": "symfony/html-sanitizer",
+ "version": "v7.4.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/html-sanitizer.git",
+ "reference": "e4df2abd9391ce3263baa1aea9e993f6da74a3c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/e4df2abd9391ce3263baa1aea9e993f6da74a3c7",
+ "reference": "e4df2abd9391ce3263baa1aea9e993f6da74a3c7",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "league/uri": "^6.5|^7.0",
+ "masterminds/html5": "^2.7.2",
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HtmlSanitizer\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Titouan Galopin",
+ "email": "galopintitouan@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to sanitize untrusted HTML input for safe insertion into a document's DOM.",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "Purifier",
+ "html",
+ "sanitizer"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/html-sanitizer/tree/v7.4.7"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-03-06T13:15:18+00:00"
+ },
+ {
+ "name": "symfony/http-foundation",
+ "version": "v7.4.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "f94b3e7b7dafd40e666f0c9ff2084133bae41e81"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f94b3e7b7dafd40e666f0c9ff2084133bae41e81",
+ "reference": "f94b3e7b7dafd40e666f0c9ff2084133bae41e81",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "^1.1"
+ },
+ "conflict": {
+ "doctrine/dbal": "<3.6",
+ "symfony/cache": "<6.4.12|>=7.0,<7.1.5"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^3.6|^4",
+ "predis/predis": "^1.1|^2.0",
+ "symfony/cache": "^6.4.12|^7.1.5|^8.0",
+ "symfony/clock": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/mime": "^6.4|^7.0|^8.0",
+ "symfony/rate-limiter": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpFoundation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Defines an object-oriented layer for the HTTP specification",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-foundation/tree/v7.4.7"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-03-06T13:15:18+00:00"
+ },
+ {
+ "name": "symfony/http-kernel",
+ "version": "v7.4.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-kernel.git",
+ "reference": "3b3fcf386c809be990c922e10e4c620d6367cab1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3b3fcf386c809be990c922e10e4c620d6367cab1",
+ "reference": "3b3fcf386c809be990c922e10e4c620d6367cab1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "psr/log": "^1|^2|^3",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/error-handler": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^7.3|^8.0",
+ "symfony/http-foundation": "^7.4|^8.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "symfony/browser-kit": "<6.4",
+ "symfony/cache": "<6.4",
+ "symfony/config": "<6.4",
+ "symfony/console": "<6.4",
+ "symfony/dependency-injection": "<6.4",
+ "symfony/doctrine-bridge": "<6.4",
+ "symfony/flex": "<2.10",
+ "symfony/form": "<6.4",
+ "symfony/http-client": "<6.4",
+ "symfony/http-client-contracts": "<2.5",
+ "symfony/mailer": "<6.4",
+ "symfony/messenger": "<6.4",
+ "symfony/translation": "<6.4",
+ "symfony/translation-contracts": "<2.5",
+ "symfony/twig-bridge": "<6.4",
+ "symfony/validator": "<6.4",
+ "symfony/var-dumper": "<6.4",
+ "twig/twig": "<3.12"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0|3.0"
+ },
+ "require-dev": {
+ "psr/cache": "^1.0|^2.0|^3.0",
+ "symfony/browser-kit": "^6.4|^7.0|^8.0",
+ "symfony/clock": "^6.4|^7.0|^8.0",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/css-selector": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0",
+ "symfony/dom-crawler": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/finder": "^6.4|^7.0|^8.0",
+ "symfony/http-client-contracts": "^2.5|^3",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/property-access": "^7.1|^8.0",
+ "symfony/routing": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^7.1|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/translation": "^6.4|^7.0|^8.0",
+ "symfony/translation-contracts": "^2.5|^3",
+ "symfony/uid": "^6.4|^7.0|^8.0",
+ "symfony/validator": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0",
+ "symfony/var-exporter": "^6.4|^7.0|^8.0",
+ "twig/twig": "^3.12"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpKernel\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides a structured process for converting a Request into a Response",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-kernel/tree/v7.4.7"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-03-06T16:33:18+00:00"
+ },
+ {
+ "name": "symfony/mailer",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/mailer.git",
+ "reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/b02726f39a20bc65e30364f5c750c4ddbf1f58e9",
+ "reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9",
+ "shasum": ""
+ },
+ "require": {
+ "egulias/email-validator": "^2.1.10|^3|^4",
+ "php": ">=8.2",
+ "psr/event-dispatcher": "^1",
+ "psr/log": "^1|^2|^3",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/mime": "^7.2|^8.0",
+ "symfony/service-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "symfony/http-client-contracts": "<2.5",
+ "symfony/http-kernel": "<6.4",
+ "symfony/messenger": "<6.4",
+ "symfony/mime": "<6.4",
+ "symfony/twig-bridge": "<6.4"
+ },
+ "require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/http-client": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/twig-bridge": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Mailer\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Helps sending emails",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/mailer/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-25T16:50:00+00:00"
+ },
+ {
+ "name": "symfony/mime",
+ "version": "v7.4.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/mime.git",
+ "reference": "da5ab4fde3f6c88ab06e96185b9922f48b677cd1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/da5ab4fde3f6c88ab06e96185b9922f48b677cd1",
+ "reference": "da5ab4fde3f6c88ab06e96185b9922f48b677cd1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-intl-idn": "^1.10",
+ "symfony/polyfill-mbstring": "^1.0"
+ },
+ "conflict": {
+ "egulias/email-validator": "~3.0.0",
+ "phpdocumentor/reflection-docblock": "<5.2|>=7",
+ "phpdocumentor/type-resolver": "<1.5.1",
+ "symfony/mailer": "<6.4",
+ "symfony/serializer": "<6.4.3|>7.0,<7.0.3"
+ },
+ "require-dev": {
+ "egulias/email-validator": "^2.1.10|^3.1|^4",
+ "league/html-to-markdown": "^5.0",
+ "phpdocumentor/reflection-docblock": "^5.2|^6.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/property-access": "^6.4|^7.0|^8.0",
+ "symfony/property-info": "^6.4|^7.0|^8.0",
+ "symfony/serializer": "^6.4.3|^7.0.3|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Mime\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Allows manipulating MIME messages",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "mime",
+ "mime-type"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/mime/tree/v7.4.7"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-03-05T15:24:09+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-06-27T09:58:17+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-idn",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-idn.git",
+ "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3",
+ "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2",
+ "symfony/polyfill-intl-normalizer": "^1.10"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Idn\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Laurent Bassin",
+ "email": "laurent@bassin.info"
+ },
+ {
+ "name": "Trevor Rowbotham",
+ "email": "trevor.rowbotham@pm.me"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "idn",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-10T14:38:51+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "shasum": ""
+ },
+ "require": {
+ "ext-iconv": "*",
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-12-23T08:48:59+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-01-02T08:10:11+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php83",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php83.git",
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5",
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php83\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-07-08T02:45:35+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php84",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php84.git",
+ "reference": "d8ced4d875142b6a7426000426b8abc631d6b191"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191",
+ "reference": "d8ced4d875142b6a7426000426b8abc631d6b191",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php84\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-06-24T13:30:11+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php85",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php85.git",
+ "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
+ "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php85\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-06-23T16:12:55+00:00"
+ },
+ {
+ "name": "symfony/polyfill-uuid",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-uuid.git",
+ "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+ "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-uuid": "*"
+ },
+ "suggest": {
+ "ext-uuid": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Uuid\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Grégoire Pineau",
+ "email": "lyrixx@lyrixx.info"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for uuid functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "uuid"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v7.4.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "608476f4604102976d687c483ac63a79ba18cc97"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97",
+ "reference": "608476f4604102976d687c483ac63a79ba18cc97",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v7.4.5"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-26T15:07:59+00:00"
+ },
+ {
+ "name": "symfony/routing",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/routing.git",
+ "reference": "238d749c56b804b31a9bf3e26519d93b65a60938"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/238d749c56b804b31a9bf3e26519d93b65a60938",
+ "reference": "238d749c56b804b31a9bf3e26519d93b65a60938",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "symfony/config": "<6.4",
+ "symfony/dependency-injection": "<6.4",
+ "symfony/yaml": "<6.4"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/yaml": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Routing\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Maps an HTTP request to a set of configuration variables",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "router",
+ "routing",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/routing/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-25T16:50:00+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v3.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-07-15T11:30:57+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "9f209231affa85aa930a5e46e6eb03381424b30b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/9f209231affa85aa930a5e46e6eb03381424b30b",
+ "reference": "9f209231affa85aa930a5e46e6eb03381424b30b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3.0",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.33",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "conflict": {
+ "symfony/translation-contracts": "<2.5"
+ },
+ "require-dev": {
+ "symfony/emoji": "^7.1|^8.0",
+ "symfony/http-client": "^6.4|^7.0|^8.0",
+ "symfony/intl": "^6.4|^7.0|^8.0",
+ "symfony/translation-contracts": "^2.5|^3.0",
+ "symfony/var-exporter": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-09T09:33:46+00:00"
+ },
+ {
+ "name": "symfony/translation",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation.git",
+ "reference": "1888cf064399868af3784b9e043240f1d89d25ce"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/1888cf064399868af3784b9e043240f1d89d25ce",
+ "reference": "1888cf064399868af3784b9e043240f1d89d25ce",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/translation-contracts": "^2.5.3|^3.3"
+ },
+ "conflict": {
+ "nikic/php-parser": "<5.0",
+ "symfony/config": "<6.4",
+ "symfony/console": "<6.4",
+ "symfony/dependency-injection": "<6.4",
+ "symfony/http-client-contracts": "<2.5",
+ "symfony/http-kernel": "<6.4",
+ "symfony/service-contracts": "<2.5",
+ "symfony/twig-bundle": "<6.4",
+ "symfony/yaml": "<6.4"
+ },
+ "provide": {
+ "symfony/translation-implementation": "2.3|3.0"
+ },
+ "require-dev": {
+ "nikic/php-parser": "^5.0",
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/finder": "^6.4|^7.0|^8.0",
+ "symfony/http-client-contracts": "^2.5|^3.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/intl": "^6.4|^7.0|^8.0",
+ "symfony/polyfill-intl-icu": "^1.21",
+ "symfony/routing": "^6.4|^7.0|^8.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/yaml": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\Translation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools to internationalize your application",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/translation/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-17T07:53:42+00:00"
+ },
+ {
+ "name": "symfony/translation-contracts",
+ "version": "v3.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation-contracts.git",
+ "reference": "65a8bc82080447fae78373aa10f8d13b38338977"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977",
+ "reference": "65a8bc82080447fae78373aa10f8d13b38338977",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Translation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to translation",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-07-15T13:41:35+00:00"
+ },
+ {
+ "name": "symfony/uid",
+ "version": "v7.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/uid.git",
+ "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/7719ce8aba76be93dfe249192f1fbfa52c588e36",
+ "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/polyfill-uuid": "^1.15"
+ },
+ "require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Uid\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Grégoire Pineau",
+ "email": "lyrixx@lyrixx.info"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to generate and represent UIDs",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "UID",
+ "ulid",
+ "uuid"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/uid/tree/v7.4.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-03T23:30:35+00:00"
+ },
+ {
+ "name": "symfony/var-dumper",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-dumper.git",
+ "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/045321c440ac18347b136c63d2e9bf28a2dc0291",
+ "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "conflict": {
+ "symfony/console": "<6.4"
+ },
+ "require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/uid": "^6.4|^7.0|^8.0",
+ "twig/twig": "^3.12"
+ },
+ "bin": [
+ "Resources/bin/var-dump-server"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions/dump.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\VarDumper\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides mechanisms for walking through any arbitrary PHP variable",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "debug",
+ "dump"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/var-dumper/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-15T10:53:20+00:00"
+ },
+ {
+ "name": "thecodingmachine/safe",
+ "version": "v3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thecodingmachine/safe.git",
+ "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/705683a25bacf0d4860c7dea4d7947bfd09eea19",
+ "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-parallel-lint": "^1.4",
+ "phpstan/phpstan": "^2",
+ "phpunit/phpunit": "^10",
+ "squizlabs/php_codesniffer": "^3.2"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/special_cases.php",
+ "generated/apache.php",
+ "generated/apcu.php",
+ "generated/array.php",
+ "generated/bzip2.php",
+ "generated/calendar.php",
+ "generated/classobj.php",
+ "generated/com.php",
+ "generated/cubrid.php",
+ "generated/curl.php",
+ "generated/datetime.php",
+ "generated/dir.php",
+ "generated/eio.php",
+ "generated/errorfunc.php",
+ "generated/exec.php",
+ "generated/fileinfo.php",
+ "generated/filesystem.php",
+ "generated/filter.php",
+ "generated/fpm.php",
+ "generated/ftp.php",
+ "generated/funchand.php",
+ "generated/gettext.php",
+ "generated/gmp.php",
+ "generated/gnupg.php",
+ "generated/hash.php",
+ "generated/ibase.php",
+ "generated/ibmDb2.php",
+ "generated/iconv.php",
+ "generated/image.php",
+ "generated/imap.php",
+ "generated/info.php",
+ "generated/inotify.php",
+ "generated/json.php",
+ "generated/ldap.php",
+ "generated/libxml.php",
+ "generated/lzf.php",
+ "generated/mailparse.php",
+ "generated/mbstring.php",
+ "generated/misc.php",
+ "generated/mysql.php",
+ "generated/mysqli.php",
+ "generated/network.php",
+ "generated/oci8.php",
+ "generated/opcache.php",
+ "generated/openssl.php",
+ "generated/outcontrol.php",
+ "generated/pcntl.php",
+ "generated/pcre.php",
+ "generated/pgsql.php",
+ "generated/posix.php",
+ "generated/ps.php",
+ "generated/pspell.php",
+ "generated/readline.php",
+ "generated/rnp.php",
+ "generated/rpminfo.php",
+ "generated/rrd.php",
+ "generated/sem.php",
+ "generated/session.php",
+ "generated/shmop.php",
+ "generated/sockets.php",
+ "generated/sodium.php",
+ "generated/solr.php",
+ "generated/spl.php",
+ "generated/sqlsrv.php",
+ "generated/ssdeep.php",
+ "generated/ssh2.php",
+ "generated/stream.php",
+ "generated/strings.php",
+ "generated/swoole.php",
+ "generated/uodbc.php",
+ "generated/uopz.php",
+ "generated/url.php",
+ "generated/var.php",
+ "generated/xdiff.php",
+ "generated/xml.php",
+ "generated/xmlrpc.php",
+ "generated/yaml.php",
+ "generated/yaz.php",
+ "generated/zip.php",
+ "generated/zlib.php"
+ ],
+ "classmap": [
+ "lib/DateTime.php",
+ "lib/DateTimeImmutable.php",
+ "lib/Exceptions/",
+ "generated/Exceptions/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
+ "support": {
+ "issues": "https://github.com/thecodingmachine/safe/issues",
+ "source": "https://github.com/thecodingmachine/safe/tree/v3.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/OskarStark",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/shish",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/silasjoisten",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/staabm",
+ "type": "github"
+ }
+ ],
+ "time": "2026-02-04T18:08:13+00:00"
+ },
+ {
+ "name": "tijsverkoyen/css-to-inline-styles",
+ "version": "v2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
+ "reference": "f0292ccf0ec75843d65027214426b6b163b48b41"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41",
+ "reference": "f0292ccf0ec75843d65027214426b6b163b48b41",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "php": "^7.4 || ^8.0",
+ "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^8.5.21 || ^9.5.10"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "TijsVerkoyen\\CssToInlineStyles\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Tijs Verkoyen",
+ "email": "css_to_inline_styles@verkoyen.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
+ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
+ "support": {
+ "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
+ "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0"
+ },
+ "time": "2025-12-02T11:56:42+00:00"
+ },
+ {
+ "name": "ueberdosis/tiptap-php",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ueberdosis/tiptap-php.git",
+ "reference": "6ea321fa665080e1a72ac5f52dfab19f6a292e2d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ueberdosis/tiptap-php/zipball/6ea321fa665080e1a72ac5f52dfab19f6a292e2d",
+ "reference": "6ea321fa665080e1a72ac5f52dfab19f6a292e2d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.0",
+ "scrivo/highlight.php": "^9.18",
+ "spatie/shiki-php": "^2.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.5",
+ "pestphp/pest": "^1.21",
+ "phpunit/phpunit": "^9.5",
+ "vimeo/psalm": "^4.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Tiptap\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Hans Pagel",
+ "email": "humans@tiptap.dev",
+ "role": "Developer"
+ }
+ ],
+ "description": "A PHP package to work with Tiptap output",
+ "homepage": "https://github.com/ueberdosis/tiptap-php",
+ "keywords": [
+ "prosemirror",
+ "tiptap",
+ "ueberdosis"
+ ],
+ "support": {
+ "issues": "https://github.com/ueberdosis/tiptap-php/issues",
+ "source": "https://github.com/ueberdosis/tiptap-php/tree/2.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://tiptap.dev/pricing",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/ueberdosis",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/tiptap",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2026-01-10T16:40:02+00:00"
+ },
+ {
+ "name": "vlucas/phpdotenv",
+ "version": "v5.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vlucas/phpdotenv.git",
+ "reference": "955e7815d677a3eaa7075231212f2110983adecc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc",
+ "reference": "955e7815d677a3eaa7075231212f2110983adecc",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "graham-campbell/result-type": "^1.1.4",
+ "php": "^7.2.5 || ^8.0",
+ "phpoption/phpoption": "^1.9.5",
+ "symfony/polyfill-ctype": "^1.26",
+ "symfony/polyfill-mbstring": "^1.26",
+ "symfony/polyfill-php80": "^1.26"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-filter": "*",
+ "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+ },
+ "suggest": {
+ "ext-filter": "Required to use the boolean validator."
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-master": "5.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dotenv\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Vance Lucas",
+ "email": "vance@vancelucas.com",
+ "homepage": "https://github.com/vlucas"
+ }
+ ],
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+ "keywords": [
+ "dotenv",
+ "env",
+ "environment"
+ ],
+ "support": {
+ "issues": "https://github.com/vlucas/phpdotenv/issues",
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-12-27T19:49:13+00:00"
+ },
+ {
+ "name": "voku/portable-ascii",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/voku/portable-ascii.git",
+ "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
+ "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
+ },
+ "suggest": {
+ "ext-intl": "Use Intl for transliterator_transliterate() support"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "voku\\": "src/voku/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Lars Moelleken",
+ "homepage": "https://www.moelleken.org/"
+ }
+ ],
+ "description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
+ "homepage": "https://github.com/voku/portable-ascii",
+ "keywords": [
+ "ascii",
+ "clean",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/voku/portable-ascii/issues",
+ "source": "https://github.com/voku/portable-ascii/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.me/moelleken",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/voku",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/portable-ascii",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://www.patreon.com/voku",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-11-21T01:49:47+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "fakerphp/faker",
+ "version": "v1.24.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/FakerPHP/Faker.git",
+ "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
+ "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "conflict": {
+ "fzaninotto/faker": "*"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "doctrine/persistence": "^1.3 || ^2.0",
+ "ext-intl": "*",
+ "phpunit/phpunit": "^9.5.26",
+ "symfony/phpunit-bridge": "^5.4.16"
+ },
+ "suggest": {
+ "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
+ "ext-curl": "Required by Faker\\Provider\\Image to download images.",
+ "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
+ "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
+ "ext-mbstring": "Required for multibyte Unicode string functionality."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Faker\\": "src/Faker/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "François Zaninotto"
+ }
+ ],
+ "description": "Faker is a PHP library that generates fake data for you.",
+ "keywords": [
+ "data",
+ "faker",
+ "fixtures"
+ ],
+ "support": {
+ "issues": "https://github.com/FakerPHP/Faker/issues",
+ "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1"
+ },
+ "time": "2024-11-21T13:46:39+00:00"
+ },
+ {
+ "name": "filp/whoops",
+ "version": "2.18.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filp/whoops.git",
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d",
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0",
+ "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3",
+ "symfony/var-dumper": "^4.0 || ^5.0"
+ },
+ "suggest": {
+ "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
+ "whoops/soap": "Formats errors as SOAP responses"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Whoops\\": "src/Whoops/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Filipe Dobreira",
+ "homepage": "https://github.com/filp",
+ "role": "Developer"
+ }
+ ],
+ "description": "php error handling for cool kids",
+ "homepage": "https://filp.github.io/whoops/",
+ "keywords": [
+ "error",
+ "exception",
+ "handling",
+ "library",
+ "throwable",
+ "whoops"
+ ],
+ "support": {
+ "issues": "https://github.com/filp/whoops/issues",
+ "source": "https://github.com/filp/whoops/tree/2.18.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/denis-sokolov",
+ "type": "github"
+ }
+ ],
+ "time": "2025-08-08T12:00:00+00:00"
+ },
+ {
+ "name": "hamcrest/hamcrest-php",
+ "version": "v2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/hamcrest/hamcrest-php.git",
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4|^8.0"
+ },
+ "replace": {
+ "cordoval/hamcrest-php": "*",
+ "davedevelopment/hamcrest-php": "*",
+ "kodova/hamcrest-php": "*"
+ },
+ "require-dev": {
+ "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "hamcrest"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "This is the PHP port of Hamcrest Matchers",
+ "keywords": [
+ "test"
+ ],
+ "support": {
+ "issues": "https://github.com/hamcrest/hamcrest-php/issues",
+ "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1"
+ },
+ "time": "2025-04-30T06:54:44+00:00"
+ },
+ {
+ "name": "laravel/pail",
+ "version": "v1.2.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/pail.git",
+ "reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/pail/zipball/aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf",
+ "reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "illuminate/console": "^10.24|^11.0|^12.0|^13.0",
+ "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0",
+ "illuminate/log": "^10.24|^11.0|^12.0|^13.0",
+ "illuminate/process": "^10.24|^11.0|^12.0|^13.0",
+ "illuminate/support": "^10.24|^11.0|^12.0|^13.0",
+ "nunomaduro/termwind": "^1.15|^2.0",
+ "php": "^8.2",
+ "symfony/console": "^6.0|^7.0|^8.0"
+ },
+ "require-dev": {
+ "laravel/framework": "^10.24|^11.0|^12.0|^13.0",
+ "laravel/pint": "^1.13",
+ "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0",
+ "pestphp/pest": "^2.20|^3.0|^4.0",
+ "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0",
+ "phpstan/phpstan": "^1.12.27",
+ "symfony/var-dumper": "^6.3|^7.0|^8.0",
+ "symfony/yaml": "^6.3|^7.0|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Laravel\\Pail\\PailServiceProvider"
+ ]
+ },
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Pail\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "Easily delve into your Laravel application's log files directly from the command line.",
+ "homepage": "https://github.com/laravel/pail",
+ "keywords": [
+ "dev",
+ "laravel",
+ "logs",
+ "php",
+ "tail"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/pail/issues",
+ "source": "https://github.com/laravel/pail"
+ },
+ "time": "2026-02-09T13:44:54+00:00"
+ },
+ {
+ "name": "laravel/pint",
+ "version": "v1.29.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/pint.git",
+ "reference": "bdec963f53172c5e36330f3a400604c69bf02d39"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/bdec963f53172c5e36330f3a400604c69bf02d39",
+ "reference": "bdec963f53172c5e36330f3a400604c69bf02d39",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-tokenizer": "*",
+ "ext-xml": "*",
+ "php": "^8.2.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.94.2",
+ "illuminate/view": "^12.54.1",
+ "larastan/larastan": "^3.9.3",
+ "laravel-zero/framework": "^12.0.5",
+ "mockery/mockery": "^1.6.12",
+ "nunomaduro/termwind": "^2.4.0",
+ "pestphp/pest": "^3.8.6",
+ "shipfastlabs/agent-detector": "^1.1.0"
+ },
+ "bin": [
+ "builds/pint"
+ ],
+ "type": "project",
+ "autoload": {
+ "psr-4": {
+ "App\\": "app/",
+ "Database\\Seeders\\": "database/seeders/",
+ "Database\\Factories\\": "database/factories/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "An opinionated code formatter for PHP.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "dev",
+ "format",
+ "formatter",
+ "lint",
+ "linter",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/pint/issues",
+ "source": "https://github.com/laravel/pint"
+ },
+ "time": "2026-03-12T15:51:39+00:00"
+ },
+ {
+ "name": "laravel/sail",
+ "version": "v1.53.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/sail.git",
+ "reference": "e340eaa2bea9b99192570c48ed837155dbf24fbb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/e340eaa2bea9b99192570c48ed837155dbf24fbb",
+ "reference": "e340eaa2bea9b99192570c48ed837155dbf24fbb",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
+ "php": "^8.0",
+ "symfony/console": "^6.0|^7.0|^8.0",
+ "symfony/yaml": "^6.0|^7.0|^8.0"
+ },
+ "require-dev": {
+ "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0|^11.0",
+ "phpstan/phpstan": "^2.0"
+ },
+ "bin": [
+ "bin/sail"
+ ],
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Laravel\\Sail\\SailServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Sail\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Docker files for running a basic Laravel application.",
+ "keywords": [
+ "docker",
+ "laravel"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/sail/issues",
+ "source": "https://github.com/laravel/sail"
+ },
+ "time": "2026-02-06T12:16:02+00:00"
+ },
+ {
+ "name": "mockery/mockery",
+ "version": "1.6.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mockery/mockery.git",
+ "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+ "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+ "shasum": ""
+ },
+ "require": {
+ "hamcrest/hamcrest-php": "^2.0.1",
+ "lib-pcre": ">=7.0",
+ "php": ">=7.3"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5 || ^9.6.17",
+ "symplify/easy-coding-standard": "^12.1.14"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "library/helpers.php",
+ "library/Mockery.php"
+ ],
+ "psr-4": {
+ "Mockery\\": "library/Mockery"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Pádraic Brady",
+ "email": "padraic.brady@gmail.com",
+ "homepage": "https://github.com/padraic",
+ "role": "Author"
+ },
+ {
+ "name": "Dave Marshall",
+ "email": "dave.marshall@atstsolutions.co.uk",
+ "homepage": "https://davedevelopment.co.uk",
+ "role": "Developer"
+ },
+ {
+ "name": "Nathanael Esayeas",
+ "email": "nathanael.esayeas@protonmail.com",
+ "homepage": "https://github.com/ghostwriter",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Mockery is a simple yet flexible PHP mock object framework",
+ "homepage": "https://github.com/mockery/mockery",
+ "keywords": [
+ "BDD",
+ "TDD",
+ "library",
+ "mock",
+ "mock objects",
+ "mockery",
+ "stub",
+ "test",
+ "test double",
+ "testing"
+ ],
+ "support": {
+ "docs": "https://docs.mockery.io/",
+ "issues": "https://github.com/mockery/mockery/issues",
+ "rss": "https://github.com/mockery/mockery/releases.atom",
+ "security": "https://github.com/mockery/mockery/security/advisories",
+ "source": "https://github.com/mockery/mockery"
+ },
+ "time": "2024-05-16T03:13:13+00:00"
+ },
+ {
+ "name": "nunomaduro/collision",
+ "version": "v8.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nunomaduro/collision.git",
+ "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/a1ed3fa530fd60bc515f9303e8520fcb7d4bd935",
+ "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935",
+ "shasum": ""
+ },
+ "require": {
+ "filp/whoops": "^2.18.4",
+ "nunomaduro/termwind": "^2.4.0",
+ "php": "^8.2.0",
+ "symfony/console": "^7.4.4 || ^8.0.4"
+ },
+ "conflict": {
+ "laravel/framework": "<11.48.0 || >=14.0.0",
+ "phpunit/phpunit": "<11.5.50 || >=14.0.0"
+ },
+ "require-dev": {
+ "brianium/paratest": "^7.8.5",
+ "larastan/larastan": "^3.9.2",
+ "laravel/framework": "^11.48.0 || ^12.52.0",
+ "laravel/pint": "^1.27.1",
+ "orchestra/testbench-core": "^9.12.0 || ^10.9.0",
+ "pestphp/pest": "^3.8.5 || ^4.4.1 || ^5.0.0",
+ "sebastian/environment": "^7.2.1 || ^8.0.3 || ^9.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
+ ]
+ },
+ "branch-alias": {
+ "dev-8.x": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "./src/Adapters/Phpunit/Autoload.php"
+ ],
+ "psr-4": {
+ "NunoMaduro\\Collision\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "Cli error handling for console/command-line PHP applications.",
+ "keywords": [
+ "artisan",
+ "cli",
+ "command-line",
+ "console",
+ "dev",
+ "error",
+ "handling",
+ "laravel",
+ "laravel-zero",
+ "php",
+ "symfony"
+ ],
+ "support": {
+ "issues": "https://github.com/nunomaduro/collision/issues",
+ "source": "https://github.com/nunomaduro/collision"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/paypalme/enunomaduro",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/nunomaduro",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/nunomaduro",
+ "type": "patreon"
+ }
+ ],
+ "time": "2026-02-17T17:33:08+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "11.0.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56",
+ "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^5.7.0",
+ "php": ">=8.2",
+ "phpunit/php-file-iterator": "^5.1.0",
+ "phpunit/php-text-template": "^4.0.1",
+ "sebastian/code-unit-reverse-lookup": "^4.0.1",
+ "sebastian/complexity": "^4.0.1",
+ "sebastian/environment": "^7.2.1",
+ "sebastian/lines-of-code": "^3.0.1",
+ "sebastian/version": "^5.0.2",
+ "theseer/tokenizer": "^1.3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.5.46"
+ },
+ "suggest": {
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "11.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-12-24T07:01:01+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "5.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903",
+ "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-02T13:52:54+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "5.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2",
+ "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^11.0"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "security": "https://github.com/sebastianbergmann/php-invoker/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T05:07:44+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964",
+ "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T05:08:43+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "7.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3",
+ "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "security": "https://github.com/sebastianbergmann/php-timer/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T05:09:35+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "11.5.55",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00",
+ "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.13.4",
+ "phar-io/manifest": "^2.0.4",
+ "phar-io/version": "^3.2.1",
+ "php": ">=8.2",
+ "phpunit/php-code-coverage": "^11.0.12",
+ "phpunit/php-file-iterator": "^5.1.1",
+ "phpunit/php-invoker": "^5.0.1",
+ "phpunit/php-text-template": "^4.0.1",
+ "phpunit/php-timer": "^7.0.1",
+ "sebastian/cli-parser": "^3.0.2",
+ "sebastian/code-unit": "^3.0.3",
+ "sebastian/comparator": "^6.3.3",
+ "sebastian/diff": "^6.0.2",
+ "sebastian/environment": "^7.2.1",
+ "sebastian/exporter": "^6.3.2",
+ "sebastian/global-state": "^7.0.2",
+ "sebastian/object-enumerator": "^6.0.1",
+ "sebastian/recursion-context": "^6.0.3",
+ "sebastian/type": "^5.1.3",
+ "sebastian/version": "^5.0.2",
+ "staabm/side-effects-detector": "^1.0.5"
+ },
+ "suggest": {
+ "ext-soap": "To be able to generate mocks based on WSDL files"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "11.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.55"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-18T12:37:06+00:00"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180",
+ "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:41:36+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64",
+ "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "security": "https://github.com/sebastianbergmann/code-unit/security/policy",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-03-19T07:56:08+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "183a9b2632194febd219bb9246eee421dad8d45e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e",
+ "reference": "183a9b2632194febd219bb9246eee421dad8d45e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:45:54+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "6.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9",
+ "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "php": ">=8.2",
+ "sebastian/diff": "^6.0",
+ "sebastian/exporter": "^6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.4"
+ },
+ "suggest": {
+ "ext-bcmath": "For comparing BcMath\\Number objects"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.3-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-01-24T09:26:40+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "ee41d384ab1906c68852636b6de493846e13e5a0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0",
+ "reference": "ee41d384ab1906c68852636b6de493846e13e5a0",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:49:50+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "6.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544",
+ "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "security": "https://github.com/sebastianbergmann/diff/security/policy",
+ "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:53:05+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "7.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4",
+ "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.3"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "https://github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "security": "https://github.com/sebastianbergmann/environment/security/policy",
+ "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/environment",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-05-21T11:55:47+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "6.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "70a298763b40b213ec087c51c739efcaa90bcd74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74",
+ "reference": "70a298763b40b213ec087c51c739efcaa90bcd74",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": ">=8.2",
+ "sebastian/recursion-context": "^6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.3-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-09-24T06:12:51+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "7.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "3be331570a721f9a4b5917f4209773de17f747d7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7",
+ "reference": "3be331570a721f9a4b5917f4209773de17f747d7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "sebastian/object-reflector": "^4.0",
+ "sebastian/recursion-context": "^6.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "security": "https://github.com/sebastianbergmann/global-state/security/policy",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:57:36+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a",
+ "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T04:58:38+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "6.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "f5b498e631a74204185071eb41f33f38d64608aa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa",
+ "reference": "f5b498e631a74204185071eb41f33f38d64608aa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "sebastian/object-reflector": "^4.0",
+ "sebastian/recursion-context": "^6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T05:00:13+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9",
+ "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "security": "https://github.com/sebastianbergmann/object-reflector/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-07-03T05:01:32+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "6.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc",
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-13T04:42:22+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "5.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^11.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "security": "https://github.com/sebastianbergmann/type/security/policy",
+ "source": "https://github.com/sebastianbergmann/type/tree/5.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/type",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-09T06:55:48+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "5.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874",
+ "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "security": "https://github.com/sebastianbergmann/version/security/policy",
+ "source": "https://github.com/sebastianbergmann/version/tree/5.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-10-09T05:16:32+00:00"
+ },
+ {
+ "name": "staabm/side-effects-detector",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/staabm/side-effects-detector.git",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.6",
+ "phpunit/phpunit": "^9.6.21",
+ "symfony/var-dumper": "^5.4.43",
+ "tomasvotruba/type-coverage": "1.0.0",
+ "tomasvotruba/unused-public": "1.0.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "lib/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A static analysis tool to detect side effects in PHP code",
+ "keywords": [
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/staabm/side-effects-detector/issues",
+ "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/staabm",
+ "type": "github"
+ }
+ ],
+ "time": "2024-10-20T05:08:20+00:00"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v7.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "58751048de17bae71c5aa0d13cb19d79bca26391"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/58751048de17bae71c5aa0d13cb19d79bca26391",
+ "reference": "58751048de17bae71c5aa0d13cb19d79bca26391",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "symfony/console": "<6.4"
+ },
+ "require-dev": {
+ "symfony/console": "^6.4|^7.0|^8.0"
+ },
+ "bin": [
+ "Resources/bin/yaml-lint"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Yaml\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Loads and dumps YAML files",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/yaml/tree/v7.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-09T09:33:46+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c",
+ "reference": "b7489ce515e168639d17feec34b8847c326b0b3c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.3.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2025-11-17T20:03:58+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": {},
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": "^8.2"
+ },
+ "platform-dev": {},
+ "plugin-api-version": "2.9.0"
+}
diff --git a/config/app.php b/config/app.php
new file mode 100644
index 0000000..dacc95b
--- /dev/null
+++ b/config/app.php
@@ -0,0 +1,128 @@
+ env('APP_NAME', 'Laravel'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Environment
+ |--------------------------------------------------------------------------
+ |
+ | This value determines the "environment" your application is currently
+ | running in. This may determine how you prefer to configure various
+ | services the application utilizes. Set this in your ".env" file.
+ |
+ */
+
+ 'env' => env('APP_ENV', 'production'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Debug Mode
+ |--------------------------------------------------------------------------
+ |
+ | When your application is in debug mode, detailed error messages with
+ | stack traces will be shown on every error that occurs within your
+ | application. If disabled, a simple generic error page is shown.
+ |
+ */
+
+ 'debug' => (bool) env('APP_DEBUG', false),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application URL
+ |--------------------------------------------------------------------------
+ |
+ | This URL is used by the console to properly generate URLs when using
+ | the Artisan command line tool. You should set this to the root of
+ | the application so that it's available within Artisan commands.
+ |
+ */
+
+ 'url' => env('APP_URL', 'http://localhost'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Timezone
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the default timezone for your application, which
+ | will be used by the PHP date and date-time functions. The timezone
+ | is set to "UTC" by default as it is suitable for most use cases.
+ |
+ */
+
+ 'timezone' => env('APP_TIMEZONE', 'Asia/Tehran'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Locale Configuration
+ |--------------------------------------------------------------------------
+ |
+ | The application locale determines the default locale that will be used
+ | by Laravel's translation / localization methods. This option can be
+ | set to any locale for which you plan to have translation strings.
+ |
+ */
+
+ 'locale' => env('APP_LOCALE', 'fa'),
+
+ 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
+
+ 'available_locales' => ['fa', 'en'],
+
+ 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Encryption Key
+ |--------------------------------------------------------------------------
+ |
+ | This key is utilized by Laravel's encryption services and should be set
+ | to a random, 32 character string to ensure that all encrypted values
+ | are secure. You should do this prior to deploying the application.
+ |
+ */
+
+ 'cipher' => 'AES-256-CBC',
+
+ 'key' => env('APP_KEY'),
+
+ 'previous_keys' => [
+ ...array_filter(
+ explode(',', (string) env('APP_PREVIOUS_KEYS', ''))
+ ),
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Maintenance Mode Driver
+ |--------------------------------------------------------------------------
+ |
+ | These configuration options determine the driver used to determine and
+ | manage Laravel's "maintenance mode" status. The "cache" driver will
+ | allow maintenance mode to be controlled across multiple machines.
+ |
+ | Supported drivers: "file", "cache"
+ |
+ */
+
+ 'maintenance' => [
+ 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
+ 'store' => env('APP_MAINTENANCE_STORE', 'database'),
+ ],
+
+];
diff --git a/config/auth.php b/config/auth.php
new file mode 100644
index 0000000..d7568ff
--- /dev/null
+++ b/config/auth.php
@@ -0,0 +1,117 @@
+ [
+ 'guard' => env('AUTH_GUARD', 'web'),
+ 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Authentication Guards
+ |--------------------------------------------------------------------------
+ |
+ | Next, you may define every authentication guard for your application.
+ | Of course, a great default configuration has been defined for you
+ | which utilizes session storage plus the Eloquent user provider.
+ |
+ | All authentication guards have a user provider, which defines how the
+ | users are actually retrieved out of your database or other storage
+ | system used by the application. Typically, Eloquent is utilized.
+ |
+ | Supported: "session"
+ |
+ */
+
+ 'guards' => [
+ 'web' => [
+ 'driver' => 'session',
+ 'provider' => 'users',
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | User Providers
+ |--------------------------------------------------------------------------
+ |
+ | All authentication guards have a user provider, which defines how the
+ | users are actually retrieved out of your database or other storage
+ | system used by the application. Typically, Eloquent is utilized.
+ |
+ | If you have multiple user tables or models you may configure multiple
+ | providers to represent the model / table. These providers may then
+ | be assigned to any extra authentication guards you have defined.
+ |
+ | Supported: "database", "eloquent"
+ |
+ */
+
+ 'providers' => [
+ 'users' => [
+ 'driver' => 'eloquent',
+ 'model' => env('AUTH_MODEL', User::class),
+ ],
+
+ // 'users' => [
+ // 'driver' => 'database',
+ // 'table' => 'users',
+ // ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Resetting Passwords
+ |--------------------------------------------------------------------------
+ |
+ | These configuration options specify the behavior of Laravel's password
+ | reset functionality, including the table utilized for token storage
+ | and the user provider that is invoked to actually retrieve users.
+ |
+ | The expiry time is the number of minutes that each reset token will be
+ | considered valid. This security feature keeps tokens short-lived so
+ | they have less time to be guessed. You may change this as needed.
+ |
+ | The throttle setting is the number of seconds a user must wait before
+ | generating more password reset tokens. This prevents the user from
+ | quickly generating a very large amount of password reset tokens.
+ |
+ */
+
+ 'passwords' => [
+ 'users' => [
+ 'provider' => 'users',
+ 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
+ 'expire' => 60,
+ 'throttle' => 60,
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Password Confirmation Timeout
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define the number of seconds before a password confirmation
+ | window expires and users are asked to re-enter their password via the
+ | confirmation screen. By default, the timeout lasts for three hours.
+ |
+ */
+
+ 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
+
+];
diff --git a/config/cache.php b/config/cache.php
new file mode 100644
index 0000000..b32aead
--- /dev/null
+++ b/config/cache.php
@@ -0,0 +1,117 @@
+ env('CACHE_STORE', 'database'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Cache Stores
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define all of the cache "stores" for your application as
+ | well as their drivers. You may even define multiple stores for the
+ | same cache driver to group types of items stored in your caches.
+ |
+ | Supported drivers: "array", "database", "file", "memcached",
+ | "redis", "dynamodb", "octane",
+ | "failover", "null"
+ |
+ */
+
+ 'stores' => [
+
+ 'array' => [
+ 'driver' => 'array',
+ 'serialize' => false,
+ ],
+
+ 'database' => [
+ 'driver' => 'database',
+ 'connection' => env('DB_CACHE_CONNECTION'),
+ 'table' => env('DB_CACHE_TABLE', 'cache'),
+ 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
+ 'lock_table' => env('DB_CACHE_LOCK_TABLE'),
+ ],
+
+ 'file' => [
+ 'driver' => 'file',
+ 'path' => storage_path('framework/cache/data'),
+ 'lock_path' => storage_path('framework/cache/data'),
+ ],
+
+ 'memcached' => [
+ 'driver' => 'memcached',
+ 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
+ 'sasl' => [
+ env('MEMCACHED_USERNAME'),
+ env('MEMCACHED_PASSWORD'),
+ ],
+ 'options' => [
+ // Memcached::OPT_CONNECT_TIMEOUT => 2000,
+ ],
+ 'servers' => [
+ [
+ 'host' => env('MEMCACHED_HOST', '127.0.0.1'),
+ 'port' => env('MEMCACHED_PORT', 11211),
+ 'weight' => 100,
+ ],
+ ],
+ ],
+
+ 'redis' => [
+ 'driver' => 'redis',
+ 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),
+ 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
+ ],
+
+ 'dynamodb' => [
+ 'driver' => 'dynamodb',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+ 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
+ 'endpoint' => env('DYNAMODB_ENDPOINT'),
+ ],
+
+ 'octane' => [
+ 'driver' => 'octane',
+ ],
+
+ 'failover' => [
+ 'driver' => 'failover',
+ 'stores' => [
+ 'database',
+ 'array',
+ ],
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Cache Key Prefix
+ |--------------------------------------------------------------------------
+ |
+ | When utilizing the APC, database, memcached, Redis, and DynamoDB cache
+ | stores, there might be other applications using the same cache. For
+ | that reason, you may prefix every cache key to avoid collisions.
+ |
+ */
+
+ 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'),
+
+];
diff --git a/config/database.php b/config/database.php
new file mode 100644
index 0000000..64709ce
--- /dev/null
+++ b/config/database.php
@@ -0,0 +1,184 @@
+ env('DB_CONNECTION', 'sqlite'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Database Connections
+ |--------------------------------------------------------------------------
+ |
+ | Below are all of the database connections defined for your application.
+ | An example configuration is provided for each database system which
+ | is supported by Laravel. You're free to add / remove connections.
+ |
+ */
+
+ 'connections' => [
+
+ 'sqlite' => [
+ 'driver' => 'sqlite',
+ 'url' => env('DB_URL'),
+ 'database' => env('DB_DATABASE', database_path('database.sqlite')),
+ 'prefix' => '',
+ 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
+ 'busy_timeout' => null,
+ 'journal_mode' => null,
+ 'synchronous' => null,
+ 'transaction_mode' => 'DEFERRED',
+ ],
+
+ 'mysql' => [
+ 'driver' => 'mysql',
+ 'url' => env('DB_URL'),
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '3306'),
+ 'database' => env('DB_DATABASE', 'laravel'),
+ 'username' => env('DB_USERNAME', 'root'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'unix_socket' => env('DB_SOCKET', ''),
+ 'charset' => env('DB_CHARSET', 'utf8mb4'),
+ 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'strict' => true,
+ 'engine' => null,
+ 'options' => extension_loaded('pdo_mysql') ? array_filter([
+ (PHP_VERSION_ID >= 80500 ? Mysql::ATTR_SSL_CA : PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
+ ]) : [],
+ ],
+
+ 'mariadb' => [
+ 'driver' => 'mariadb',
+ 'url' => env('DB_URL'),
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '3306'),
+ 'database' => env('DB_DATABASE', 'laravel'),
+ 'username' => env('DB_USERNAME', 'root'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'unix_socket' => env('DB_SOCKET', ''),
+ 'charset' => env('DB_CHARSET', 'utf8mb4'),
+ 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'strict' => true,
+ 'engine' => null,
+ 'options' => extension_loaded('pdo_mysql') ? array_filter([
+ (PHP_VERSION_ID >= 80500 ? Mysql::ATTR_SSL_CA : PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
+ ]) : [],
+ ],
+
+ 'pgsql' => [
+ 'driver' => 'pgsql',
+ 'url' => env('DB_URL'),
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '5432'),
+ 'database' => env('DB_DATABASE', 'laravel'),
+ 'username' => env('DB_USERNAME', 'root'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => env('DB_CHARSET', 'utf8'),
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'search_path' => 'public',
+ 'sslmode' => env('DB_SSLMODE', 'prefer'),
+ ],
+
+ 'sqlsrv' => [
+ 'driver' => 'sqlsrv',
+ 'url' => env('DB_URL'),
+ 'host' => env('DB_HOST', 'localhost'),
+ 'port' => env('DB_PORT', '1433'),
+ 'database' => env('DB_DATABASE', 'laravel'),
+ 'username' => env('DB_USERNAME', 'root'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => env('DB_CHARSET', 'utf8'),
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ // 'encrypt' => env('DB_ENCRYPT', 'yes'),
+ // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Migration Repository Table
+ |--------------------------------------------------------------------------
+ |
+ | This table keeps track of all the migrations that have already run for
+ | your application. Using this information, we can determine which of
+ | the migrations on disk haven't actually been run on the database.
+ |
+ */
+
+ 'migrations' => [
+ 'table' => 'migrations',
+ 'update_date_on_publish' => true,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Redis Databases
+ |--------------------------------------------------------------------------
+ |
+ | Redis is an open source, fast, and advanced key-value store that also
+ | provides a richer body of commands than a typical key-value system
+ | such as Memcached. You may define your connection settings here.
+ |
+ */
+
+ 'redis' => [
+
+ 'client' => env('REDIS_CLIENT', 'phpredis'),
+
+ 'options' => [
+ 'cluster' => env('REDIS_CLUSTER', 'redis'),
+ 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'),
+ 'persistent' => env('REDIS_PERSISTENT', false),
+ ],
+
+ 'default' => [
+ 'url' => env('REDIS_URL'),
+ 'host' => env('REDIS_HOST', '127.0.0.1'),
+ 'username' => env('REDIS_USERNAME'),
+ 'password' => env('REDIS_PASSWORD'),
+ 'port' => env('REDIS_PORT', '6379'),
+ 'database' => env('REDIS_DB', '0'),
+ 'max_retries' => env('REDIS_MAX_RETRIES', 3),
+ 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
+ 'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
+ 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
+ ],
+
+ 'cache' => [
+ 'url' => env('REDIS_URL'),
+ 'host' => env('REDIS_HOST', '127.0.0.1'),
+ 'username' => env('REDIS_USERNAME'),
+ 'password' => env('REDIS_PASSWORD'),
+ 'port' => env('REDIS_PORT', '6379'),
+ 'database' => env('REDIS_CACHE_DB', '1'),
+ 'max_retries' => env('REDIS_MAX_RETRIES', 3),
+ 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
+ 'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
+ 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
+ ],
+
+ ],
+
+];
diff --git a/config/dompdf.php b/config/dompdf.php
new file mode 100644
index 0000000..35eef8f
--- /dev/null
+++ b/config/dompdf.php
@@ -0,0 +1,301 @@
+ false, // Throw an Exception on warnings from dompdf
+
+ 'public_path' => null, // Override the public path if needed
+
+ /*
+ * Dejavu Sans font is missing glyphs for converted entities, turn it off if you need to show € and £.
+ */
+ 'convert_entities' => true,
+
+ 'options' => [
+ /**
+ * The location of the DOMPDF font directory
+ *
+ * The location of the directory where DOMPDF will store fonts and font metrics
+ * Note: This directory must exist and be writable by the webserver process.
+ * *Please note the trailing slash.*
+ *
+ * Notes regarding fonts:
+ * Additional .afm font metrics can be added by executing load_font.php from command line.
+ *
+ * Only the original "Base 14 fonts" are present on all pdf viewers. Additional fonts must
+ * be embedded in the pdf file or the PDF may not display correctly. This can significantly
+ * increase file size unless font subsetting is enabled. Before embedding a font please
+ * review your rights under the font license.
+ *
+ * Any font specification in the source HTML is translated to the closest font available
+ * in the font directory.
+ *
+ * The pdf standard "Base 14 fonts" are:
+ * Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique,
+ * Helvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique,
+ * Times-Roman, Times-Bold, Times-BoldItalic, Times-Italic,
+ * Symbol, ZapfDingbats.
+ */
+ 'font_dir' => storage_path('fonts'), // advised by dompdf (https://github.com/dompdf/dompdf/pull/782)
+
+ /**
+ * The location of the DOMPDF font cache directory
+ *
+ * This directory contains the cached font metrics for the fonts used by DOMPDF.
+ * This directory can be the same as DOMPDF_FONT_DIR
+ *
+ * Note: This directory must exist and be writable by the webserver process.
+ */
+ 'font_cache' => storage_path('fonts'),
+
+ /**
+ * The location of a temporary directory.
+ *
+ * The directory specified must be writeable by the webserver process.
+ * The temporary directory is required to download remote images and when
+ * using the PDFLib back end.
+ */
+ 'temp_dir' => sys_get_temp_dir(),
+
+ /**
+ * ==== IMPORTANT ====
+ *
+ * dompdf's "chroot": Prevents dompdf from accessing system files or other
+ * files on the webserver. All local files opened by dompdf must be in a
+ * subdirectory of this directory. DO NOT set it to '/' since this could
+ * allow an attacker to use dompdf to read any files on the server. This
+ * should be an absolute path.
+ * This is only checked on command line call by dompdf.php, but not by
+ * direct class use like:
+ * $dompdf = new DOMPDF(); $dompdf->load_html($htmldata); $dompdf->render(); $pdfdata = $dompdf->output();
+ */
+ 'chroot' => realpath(base_path()),
+
+ /**
+ * Protocol whitelist
+ *
+ * Protocols and PHP wrappers allowed in URIs, and the validation rules
+ * that determine if a resouce may be loaded. Full support is not guaranteed
+ * for the protocols/wrappers specified
+ * by this array.
+ *
+ * @var array
+ */
+ 'allowed_protocols' => [
+ 'data://' => ['rules' => []],
+ 'file://' => ['rules' => []],
+ 'http://' => ['rules' => []],
+ 'https://' => ['rules' => []],
+ ],
+
+ /**
+ * Operational artifact (log files, temporary files) path validation
+ */
+ 'artifactPathValidation' => null,
+
+ /**
+ * @var string
+ */
+ 'log_output_file' => null,
+
+ /**
+ * Whether to enable font subsetting or not.
+ */
+ 'enable_font_subsetting' => false,
+
+ /**
+ * The PDF rendering backend to use
+ *
+ * Valid settings are 'PDFLib', 'CPDF' (the bundled R&OS PDF class), 'GD' and
+ * 'auto'. 'auto' will look for PDFLib and use it if found, or if not it will
+ * fall back on CPDF. 'GD' renders PDFs to graphic files.
+ * {@link * Canvas_Factory} ultimately determines which rendering class to
+ * instantiate based on this setting.
+ *
+ * Both PDFLib & CPDF rendering backends provide sufficient rendering
+ * capabilities for dompdf, however additional features (e.g. object,
+ * image and font support, etc.) differ between backends. Please see
+ * {@link PDFLib_Adapter} for more information on the PDFLib backend
+ * and {@link CPDF_Adapter} and lib/class.pdf.php for more information
+ * on CPDF. Also see the documentation for each backend at the links
+ * below.
+ *
+ * The GD rendering backend is a little different than PDFLib and
+ * CPDF. Several features of CPDF and PDFLib are not supported or do
+ * not make any sense when creating image files. For example,
+ * multiple pages are not supported, nor are PDF 'objects'. Have a
+ * look at {@link GD_Adapter} for more information. GD support is
+ * experimental, so use it at your own risk.
+ *
+ * @link http://www.pdflib.com
+ * @link http://www.ros.co.nz/pdf
+ * @link http://www.php.net/image
+ */
+ 'pdf_backend' => 'CPDF',
+
+ /**
+ * html target media view which should be rendered into pdf.
+ * List of types and parsing rules for future extensions:
+ * http://www.w3.org/TR/REC-html40/types.html
+ * screen, tty, tv, projection, handheld, print, braille, aural, all
+ * Note: aural is deprecated in CSS 2.1 because it is replaced by speech in CSS 3.
+ * Note, even though the generated pdf file is intended for print output,
+ * the desired content might be different (e.g. screen or projection view of html file).
+ * Therefore allow specification of content here.
+ */
+ 'default_media_type' => 'screen',
+
+ /**
+ * The default paper size.
+ *
+ * North America standard is "letter"; other countries generally "a4"
+ *
+ * @see CPDF_Adapter::PAPER_SIZES for valid sizes ('letter', 'legal', 'A4', etc.)
+ */
+ 'default_paper_size' => 'a4',
+
+ /**
+ * The default paper orientation.
+ *
+ * The orientation of the page (portrait or landscape).
+ *
+ * @var string
+ */
+ 'default_paper_orientation' => 'portrait',
+
+ /**
+ * The default font family
+ *
+ * Used if no suitable fonts can be found. This must exist in the font folder.
+ *
+ * @var string
+ */
+ 'default_font' => 'serif',
+
+ /**
+ * Image DPI setting
+ *
+ * This setting determines the default DPI setting for images and fonts. The
+ * DPI may be overridden for inline images by explictly setting the
+ * image's width & height style attributes (i.e. if the image's native
+ * width is 600 pixels and you specify the image's width as 72 points,
+ * the image will have a DPI of 600 in the rendered PDF. The DPI of
+ * background images can not be overridden and is controlled entirely
+ * via this parameter.
+ *
+ * For the purposes of DOMPDF, pixels per inch (PPI) = dots per inch (DPI).
+ * If a size in html is given as px (or without unit as image size),
+ * this tells the corresponding size in pt.
+ * This adjusts the relative sizes to be similar to the rendering of the
+ * html page in a reference browser.
+ *
+ * In pdf, always 1 pt = 1/72 inch
+ *
+ * Rendering resolution of various browsers in px per inch:
+ * Windows Firefox and Internet Explorer:
+ * SystemControl->Display properties->FontResolution: Default:96, largefonts:120, custom:?
+ * Linux Firefox:
+ * about:config *resolution: Default:96
+ * (xorg screen dimension in mm and Desktop font dpi settings are ignored)
+ *
+ * Take care about extra font/image zoom factor of browser.
+ *
+ * In images,
size in pixel attribute, img css style, are overriding
+ * the real image dimension in px for rendering.
+ *
+ * @var int
+ */
+ 'dpi' => 96,
+
+ /**
+ * Enable embedded PHP
+ *
+ * If this setting is set to true then DOMPDF will automatically evaluate embedded PHP contained
+ * within tags.
+ *
+ * ==== IMPORTANT ==== Enabling this for documents you do not trust (e.g. arbitrary remote html pages)
+ * is a security risk.
+ * Embedded scripts are run with the same level of system access available to dompdf.
+ * Set this option to false (recommended) if you wish to process untrusted documents.
+ * This setting may increase the risk of system exploit.
+ * Do not change this settings without understanding the consequences.
+ * Additional documentation is available on the dompdf wiki at:
+ * https://github.com/dompdf/dompdf/wiki
+ *
+ * @var bool
+ */
+ 'enable_php' => false,
+
+ /**
+ * Rnable inline JavaScript
+ *
+ * If this setting is set to true then DOMPDF will automatically insert JavaScript code contained
+ * within tags as written into the PDF.
+ * NOTE: This is PDF-based JavaScript to be executed by the PDF viewer,
+ * not browser-based JavaScript executed by Dompdf.
+ *
+ * @var bool
+ */
+ 'enable_javascript' => true,
+
+ /**
+ * Enable remote file access
+ *
+ * If this setting is set to true, DOMPDF will access remote sites for
+ * images and CSS files as required.
+ *
+ * ==== IMPORTANT ====
+ * This can be a security risk, in particular in combination with isPhpEnabled and
+ * allowing remote html code to be passed to $dompdf = new DOMPDF(); $dompdf->load_html(...);
+ * This allows anonymous users to download legally doubtful internet content which on
+ * tracing back appears to being downloaded by your server, or allows malicious php code
+ * in remote html pages to be executed by your server with your account privileges.
+ *
+ * This setting may increase the risk of system exploit. Do not change
+ * this settings without understanding the consequences. Additional
+ * documentation is available on the dompdf wiki at:
+ * https://github.com/dompdf/dompdf/wiki
+ *
+ * @var bool
+ */
+ 'enable_remote' => false,
+
+ /**
+ * List of allowed remote hosts
+ *
+ * Each value of the array must be a valid hostname.
+ *
+ * This will be used to filter which resources can be loaded in combination with
+ * isRemoteEnabled. If enable_remote is FALSE, then this will have no effect.
+ *
+ * Leave to NULL to allow any remote host.
+ *
+ * @var array|null
+ */
+ 'allowed_remote_hosts' => null,
+
+ /**
+ * A ratio applied to the fonts height to be more like browsers' line height
+ */
+ 'font_height_ratio' => 1.1,
+
+ /**
+ * Use the HTML5 Lib parser
+ *
+ * @deprecated This feature is now always on in dompdf 2.x
+ *
+ * @var bool
+ */
+ 'enable_html5_parser' => true,
+ ],
+
+];
diff --git a/config/filament-shield.php b/config/filament-shield.php
new file mode 100644
index 0000000..189c29a
--- /dev/null
+++ b/config/filament-shield.php
@@ -0,0 +1,263 @@
+ [
+ 'slug' => 'shield/roles',
+ 'show_model_path' => true,
+ 'cluster' => null,
+ 'tabs' => [
+ 'pages' => true,
+ 'widgets' => true,
+ 'resources' => true,
+ 'custom_permissions' => false,
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Multi-Tenancy
+ |--------------------------------------------------------------------------
+ |
+ | When your application supports teams, Shield will automatically detect
+ | and configure the tenant model during setup. This enables tenant-scoped
+ | roles and permissions throughout your application.
+ |
+ */
+
+ 'tenant_model' => null,
+
+ /*
+ |--------------------------------------------------------------------------
+ | User Model
+ |--------------------------------------------------------------------------
+ |
+ | This value contains the class name of your user model. This model will
+ | be used for role assignments and must implement the HasRoles trait
+ | provided by the Spatie\Permission package.
+ |
+ */
+
+ 'auth_provider_model' => 'App\\Models\\User',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Super Admin
+ |--------------------------------------------------------------------------
+ |
+ | Here you may define a super admin that has unrestricted access to your
+ | application. You can choose to implement this via Laravel's gate system
+ | or as a traditional role with all permissions explicitly assigned.
+ |
+ */
+
+ 'super_admin' => [
+ 'enabled' => true,
+ 'name' => 'super_admin',
+ 'define_via_gate' => false,
+ 'intercept_gate' => 'before',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Panel User
+ |--------------------------------------------------------------------------
+ |
+ | When enabled, Shield will create a basic panel user role that can be
+ | assigned to users who should have access to your Filament panels but
+ | don't need any specific permissions beyond basic authentication.
+ |
+ */
+
+ 'panel_user' => [
+ 'enabled' => true,
+ 'name' => 'panel_user',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Permission Builder
+ |--------------------------------------------------------------------------
+ |
+ | You can customize how permission keys are generated to match your
+ | preferred naming convention and organizational standards. Shield uses
+ | these settings when creating permission names from your resources.
+ |
+ | Supported formats: snake, kebab, pascal, camel, upper_snake, lower_snake
+ |
+ */
+
+ 'permissions' => [
+ 'separator' => ':',
+ 'case' => 'pascal',
+ 'generate' => true,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Policies
+ |--------------------------------------------------------------------------
+ |
+ | Shield can automatically generate Laravel policies for your resources.
+ | When merge is enabled, the methods below will be combined with any
+ | resource-specific methods you define in the resources section.
+ |
+ */
+
+ 'policies' => [
+ 'path' => app_path('Policies'),
+ 'merge' => true,
+ 'generate' => true,
+ 'methods' => [
+ 'viewAny', 'view', 'create', 'update', 'delete', 'restore',
+ 'forceDelete', 'forceDeleteAny', 'restoreAny', 'replicate', 'reorder',
+ ],
+ 'single_parameter_methods' => [
+ 'viewAny',
+ 'create',
+ 'deleteAny',
+ 'forceDeleteAny',
+ 'restoreAny',
+ 'reorder',
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Localization
+ |--------------------------------------------------------------------------
+ |
+ | Shield supports multiple languages out of the box. When enabled, you
+ | can provide translated labels for permissions to create a more
+ | localized experience for your international users.
+ |
+ */
+
+ 'localization' => [
+ 'enabled' => false,
+ 'key' => 'filament-shield::filament-shield.resource_permission_prefixes_labels',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Resources
+ |--------------------------------------------------------------------------
+ |
+ | Here you can fine-tune permissions for specific Filament resources.
+ | Use the 'manage' array to override the default policy methods for
+ | individual resources, giving you granular control over permissions.
+ |
+ */
+
+ 'resources' => [
+ 'subject' => 'model',
+ 'manage' => [
+ \BezhanSalleh\FilamentShield\Resources\Roles\RoleResource::class => [
+ 'viewAny',
+ 'view',
+ 'create',
+ 'update',
+ 'delete',
+ ],
+ ],
+ 'exclude' => [
+ //
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Pages
+ |--------------------------------------------------------------------------
+ |
+ | Most Filament pages only require view permissions. Pages listed in the
+ | exclude array will be skipped during permission generation and won't
+ | appear in your role management interface.
+ |
+ */
+
+ 'pages' => [
+ 'subject' => 'class',
+ 'prefix' => 'view',
+ 'exclude' => [
+ \Filament\Pages\Dashboard::class,
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Widgets
+ |--------------------------------------------------------------------------
+ |
+ | Like pages, widgets typically only need view permissions. Add widgets
+ | to the exclude array if you don't want them to appear in your role
+ | management interface.
+ |
+ */
+
+ 'widgets' => [
+ 'subject' => 'class',
+ 'prefix' => 'view',
+ 'exclude' => [
+ \Filament\Widgets\AccountWidget::class,
+ \Filament\Widgets\FilamentInfoWidget::class,
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Permissions
+ |--------------------------------------------------------------------------
+ |
+ | Sometimes you need permissions that don't map to resources, pages, or
+ | widgets. Define any custom permissions here and they'll be available
+ | when editing roles in your application.
+ |
+ */
+
+ 'custom_permissions' => [],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Entity Discovery
+ |--------------------------------------------------------------------------
+ |
+ | By default, Shield only looks for entities in your default Filament
+ | panel. Enable these options if you're using multiple panels and want
+ | Shield to discover entities across all of them.
+ |
+ */
+
+ 'discovery' => [
+ 'discover_all_resources' => false,
+ 'discover_all_widgets' => false,
+ 'discover_all_pages' => false,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Role Policy
+ |--------------------------------------------------------------------------
+ |
+ | Shield can automatically register a policy for role management itself.
+ | This lets you control who can manage roles using Laravel's built-in
+ | authorization system. Requires a RolePolicy class in your app.
+ |
+ */
+
+ 'register_role_policy' => true,
+
+];
diff --git a/config/filesystems.php b/config/filesystems.php
new file mode 100644
index 0000000..37d8fca
--- /dev/null
+++ b/config/filesystems.php
@@ -0,0 +1,80 @@
+ env('FILESYSTEM_DISK', 'local'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Filesystem Disks
+ |--------------------------------------------------------------------------
+ |
+ | Below you may configure as many filesystem disks as necessary, and you
+ | may even configure multiple disks for the same driver. Examples for
+ | most supported storage drivers are configured here for reference.
+ |
+ | Supported drivers: "local", "ftp", "sftp", "s3"
+ |
+ */
+
+ 'disks' => [
+
+ 'local' => [
+ 'driver' => 'local',
+ 'root' => storage_path('app/private'),
+ 'serve' => true,
+ 'throw' => false,
+ 'report' => false,
+ ],
+
+ 'public' => [
+ 'driver' => 'local',
+ 'root' => storage_path('app/public'),
+ 'url' => rtrim(env('APP_URL', 'http://localhost'), '/').'/storage',
+ 'visibility' => 'public',
+ 'throw' => false,
+ 'report' => false,
+ ],
+
+ 's3' => [
+ 'driver' => 's3',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION'),
+ 'bucket' => env('AWS_BUCKET'),
+ 'url' => env('AWS_URL'),
+ 'endpoint' => env('AWS_ENDPOINT'),
+ 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
+ 'throw' => false,
+ 'report' => false,
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Symbolic Links
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the symbolic links that will be created when the
+ | `storage:link` Artisan command is executed. The array keys should be
+ | the locations of the links and the values should be their targets.
+ |
+ */
+
+ 'links' => [
+ public_path('storage') => storage_path('app/public'),
+ ],
+
+];
diff --git a/config/livewire.php b/config/livewire.php
new file mode 100644
index 0000000..e4084f1
--- /dev/null
+++ b/config/livewire.php
@@ -0,0 +1,186 @@
+ 'App\\Livewire',
+
+ /*
+ |---------------------------------------------------------------------------
+ | View Path
+ |---------------------------------------------------------------------------
+ |
+ | This value is used to specify where Livewire component Blade templates are
+ | stored when running file creation commands like `artisan make:livewire`.
+ | It is also used if you choose to omit a component's render() method.
+ |
+ */
+
+ 'view_path' => resource_path('views/livewire'),
+
+ /*
+ |---------------------------------------------------------------------------
+ | Layout
+ |---------------------------------------------------------------------------
+ | The view that will be used as the layout when rendering a single component
+ | as an entire page via `Route::get('/post/create', CreatePost::class);`.
+ | In this case, the view returned by CreatePost will render into $slot.
+ |
+ */
+
+ 'layout' => 'components.layouts.app',
+
+ /*
+ |---------------------------------------------------------------------------
+ | Lazy Loading Placeholder
+ |---------------------------------------------------------------------------
+ | Livewire allows you to lazy load components that would otherwise slow down
+ | the initial page load. Every component can have a custom placeholder or
+ | you can define the default placeholder view for all components below.
+ |
+ */
+
+ 'lazy_placeholder' => null,
+
+ /*
+ |---------------------------------------------------------------------------
+ | Temporary File Uploads
+ |---------------------------------------------------------------------------
+ |
+ | Livewire handles file uploads by storing uploads in a temporary directory
+ | before the file is stored permanently. All file uploads are directed to
+ | a global endpoint for temporary storage. You may configure this below:
+ |
+ */
+
+ 'temporary_file_upload' => [
+ 'disk' => 'public', // Example: 'local', 's3' | Default: 'default'
+ 'rules' => null, // Example: ['file', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB)
+ 'directory' => 'livewire-tmp', // Example: 'tmp' | Default: 'livewire-tmp'
+ 'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1'
+ 'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs...
+ 'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',
+ 'mov', 'avi', 'wmv', 'mp3', 'm4a',
+ 'jpg', 'jpeg', 'mpga', 'webp', 'wma',
+ ],
+ 'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated...
+ 'cleanup' => true, // Should cleanup temporary uploads older than 24 hrs...
+ ],
+
+ /*
+ |---------------------------------------------------------------------------
+ | Render On Redirect
+ |---------------------------------------------------------------------------
+ |
+ | This value determines if Livewire will run a component's `render()` method
+ | after a redirect has been triggered using something like `redirect(...)`
+ | Setting this to true will render the view once more before redirecting
+ |
+ */
+
+ 'render_on_redirect' => false,
+
+ /*
+ |---------------------------------------------------------------------------
+ | Eloquent Model Binding
+ |---------------------------------------------------------------------------
+ |
+ | Previous versions of Livewire supported binding directly to eloquent model
+ | properties using wire:model by default. However, this behavior has been
+ | deemed too "magical" and has therefore been put under a feature flag.
+ |
+ */
+
+ 'legacy_model_binding' => false,
+
+ /*
+ |---------------------------------------------------------------------------
+ | Auto-inject Frontend Assets
+ |---------------------------------------------------------------------------
+ |
+ | By default, Livewire automatically injects its JavaScript and CSS into the
+ | and of pages containing Livewire components. By disabling
+ | this behavior, you need to use @livewireStyles and @livewireScripts.
+ |
+ */
+
+ 'inject_assets' => true,
+
+ /*
+ |---------------------------------------------------------------------------
+ | Navigate (SPA mode)
+ |---------------------------------------------------------------------------
+ |
+ | By adding `wire:navigate` to links in your Livewire application, Livewire
+ | will prevent the default link handling and instead request those pages
+ | via AJAX, creating an SPA-like effect. Configure this behavior here.
+ |
+ */
+
+ 'navigate' => [
+ 'show_progress_bar' => true,
+ 'progress_bar_color' => '#2299dd',
+ ],
+
+ /*
+ |---------------------------------------------------------------------------
+ | HTML Morph Markers
+ |---------------------------------------------------------------------------
+ |
+ | Livewire intelligently "morphs" existing HTML into the newly rendered HTML
+ | after each update. To make this process more reliable, Livewire injects
+ | "markers" into the rendered Blade surrounding @if, @class & @foreach.
+ |
+ */
+
+ 'inject_morph_markers' => true,
+
+ /*
+ |---------------------------------------------------------------------------
+ | Smart Wire Keys
+ |---------------------------------------------------------------------------
+ |
+ | Livewire uses loops and keys used within loops to generate smart keys that
+ | are applied to nested components that don't have them. This makes using
+ | nested components more reliable by ensuring that they all have keys.
+ |
+ */
+
+ 'smart_wire_keys' => false,
+
+ /*
+ |---------------------------------------------------------------------------
+ | Pagination Theme
+ |---------------------------------------------------------------------------
+ |
+ | When enabling Livewire's pagination feature by using the `WithPagination`
+ | trait, Livewire will use Tailwind templates to render pagination views
+ | on the page. If you want Bootstrap CSS, you can specify: "bootstrap"
+ |
+ */
+
+ 'pagination_theme' => 'tailwind',
+
+ /*
+ |---------------------------------------------------------------------------
+ | Release Token
+ |---------------------------------------------------------------------------
+ |
+ | This token is stored client-side and sent along with each request to check
+ | a users session to see if a new release has invalidated it. If there is
+ | a mismatch it will throw an error and prompt for a browser refresh.
+ |
+ */
+
+ 'release_token' => 'a',
+];
diff --git a/config/logging.php b/config/logging.php
new file mode 100644
index 0000000..9e998a4
--- /dev/null
+++ b/config/logging.php
@@ -0,0 +1,132 @@
+ env('LOG_CHANNEL', 'stack'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Deprecations Log Channel
+ |--------------------------------------------------------------------------
+ |
+ | This option controls the log channel that should be used to log warnings
+ | regarding deprecated PHP and library features. This allows you to get
+ | your application ready for upcoming major versions of dependencies.
+ |
+ */
+
+ 'deprecations' => [
+ 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
+ 'trace' => env('LOG_DEPRECATIONS_TRACE', false),
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Log Channels
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the log channels for your application. Laravel
+ | utilizes the Monolog PHP logging library, which includes a variety
+ | of powerful log handlers and formatters that you're free to use.
+ |
+ | Available drivers: "single", "daily", "slack", "syslog",
+ | "errorlog", "monolog", "custom", "stack"
+ |
+ */
+
+ 'channels' => [
+
+ 'stack' => [
+ 'driver' => 'stack',
+ 'channels' => explode(',', (string) env('LOG_STACK', 'single')),
+ 'ignore_exceptions' => false,
+ ],
+
+ 'single' => [
+ 'driver' => 'single',
+ 'path' => storage_path('logs/laravel.log'),
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'replace_placeholders' => true,
+ ],
+
+ 'daily' => [
+ 'driver' => 'daily',
+ 'path' => storage_path('logs/laravel.log'),
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'days' => env('LOG_DAILY_DAYS', 14),
+ 'replace_placeholders' => true,
+ ],
+
+ 'slack' => [
+ 'driver' => 'slack',
+ 'url' => env('LOG_SLACK_WEBHOOK_URL'),
+ 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),
+ 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),
+ 'level' => env('LOG_LEVEL', 'critical'),
+ 'replace_placeholders' => true,
+ ],
+
+ 'papertrail' => [
+ 'driver' => 'monolog',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
+ 'handler_with' => [
+ 'host' => env('PAPERTRAIL_URL'),
+ 'port' => env('PAPERTRAIL_PORT'),
+ 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
+ ],
+ 'processors' => [PsrLogMessageProcessor::class],
+ ],
+
+ 'stderr' => [
+ 'driver' => 'monolog',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'handler' => StreamHandler::class,
+ 'handler_with' => [
+ 'stream' => 'php://stderr',
+ ],
+ 'formatter' => env('LOG_STDERR_FORMATTER'),
+ 'processors' => [PsrLogMessageProcessor::class],
+ ],
+
+ 'syslog' => [
+ 'driver' => 'syslog',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
+ 'replace_placeholders' => true,
+ ],
+
+ 'errorlog' => [
+ 'driver' => 'errorlog',
+ 'level' => env('LOG_LEVEL', 'debug'),
+ 'replace_placeholders' => true,
+ ],
+
+ 'null' => [
+ 'driver' => 'monolog',
+ 'handler' => NullHandler::class,
+ ],
+
+ 'emergency' => [
+ 'path' => storage_path('logs/laravel.log'),
+ ],
+
+ ],
+
+];
diff --git a/config/mail.php b/config/mail.php
new file mode 100644
index 0000000..e32e88d
--- /dev/null
+++ b/config/mail.php
@@ -0,0 +1,118 @@
+ env('MAIL_MAILER', 'log'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Mailer Configurations
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure all of the mailers used by your application plus
+ | their respective settings. Several examples have been configured for
+ | you and you are free to add your own as your application requires.
+ |
+ | Laravel supports a variety of mail "transport" drivers that can be used
+ | when delivering an email. You may specify which one you're using for
+ | your mailers below. You may also add additional mailers if needed.
+ |
+ | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
+ | "postmark", "resend", "log", "array",
+ | "failover", "roundrobin"
+ |
+ */
+
+ 'mailers' => [
+
+ 'smtp' => [
+ 'transport' => 'smtp',
+ 'scheme' => env('MAIL_SCHEME'),
+ 'url' => env('MAIL_URL'),
+ 'host' => env('MAIL_HOST', '127.0.0.1'),
+ 'port' => env('MAIL_PORT', 2525),
+ 'username' => env('MAIL_USERNAME'),
+ 'password' => env('MAIL_PASSWORD'),
+ 'timeout' => null,
+ 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
+ ],
+
+ 'ses' => [
+ 'transport' => 'ses',
+ ],
+
+ 'postmark' => [
+ 'transport' => 'postmark',
+ // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),
+ // 'client' => [
+ // 'timeout' => 5,
+ // ],
+ ],
+
+ 'resend' => [
+ 'transport' => 'resend',
+ ],
+
+ 'sendmail' => [
+ 'transport' => 'sendmail',
+ 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
+ ],
+
+ 'log' => [
+ 'transport' => 'log',
+ 'channel' => env('MAIL_LOG_CHANNEL'),
+ ],
+
+ 'array' => [
+ 'transport' => 'array',
+ ],
+
+ 'failover' => [
+ 'transport' => 'failover',
+ 'mailers' => [
+ 'smtp',
+ 'log',
+ ],
+ 'retry_after' => 60,
+ ],
+
+ 'roundrobin' => [
+ 'transport' => 'roundrobin',
+ 'mailers' => [
+ 'ses',
+ 'postmark',
+ ],
+ 'retry_after' => 60,
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Global "From" Address
+ |--------------------------------------------------------------------------
+ |
+ | You may wish for all emails sent by your application to be sent from
+ | the same address. Here you may specify a name and address that is
+ | used globally for all emails that are sent by your application.
+ |
+ */
+
+ 'from' => [
+ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
+ 'name' => env('MAIL_FROM_NAME', env('APP_NAME', 'Laravel')),
+ ],
+
+];
diff --git a/config/nativephp.php b/config/nativephp.php
new file mode 100644
index 0000000..19ccedd
--- /dev/null
+++ b/config/nativephp.php
@@ -0,0 +1,177 @@
+ env('NATIVEPHP_APP_VERSION', '1.0.0'),
+
+ /**
+ * The ID of your application. This should be a unique identifier
+ * usually in the form of a reverse domain name.
+ * For example: com.nativephp.app
+ */
+ 'app_id' => env('NATIVEPHP_APP_ID', 'com.matab.panel'),
+
+ /**
+ * If your application allows deep linking, you can specify the scheme
+ * to use here. This is the scheme that will be used to open your
+ * application from within other applications.
+ * For example: "nativephp"
+ *
+ * This would allow you to open your application using a URL like:
+ * nativephp://some/path
+ */
+ 'deeplink_scheme' => env('NATIVEPHP_DEEPLINK_SCHEME'),
+
+ /**
+ * The author of your application.
+ */
+ 'author' => env('NATIVEPHP_APP_AUTHOR'),
+
+ /**
+ * The copyright notice for your application.
+ */
+ 'copyright' => env('NATIVEPHP_APP_COPYRIGHT'),
+
+ /**
+ * The description of your application.
+ */
+ 'description' => env('NATIVEPHP_APP_DESCRIPTION', 'سیستم مدیریت مطب'),
+
+ /**
+ * The Website of your application.
+ */
+ 'website' => env('NATIVEPHP_APP_WEBSITE', 'https://nativephp.com'),
+
+ /**
+ * The default service provider for your application. This provider
+ * takes care of bootstrapping your application and configuring
+ * any global hotkeys, menus, windows, etc.
+ */
+ 'provider' => \App\Providers\NativeAppServiceProvider::class,
+
+ /**
+ * A list of environment keys that should be removed from the
+ * .env file when the application is bundled for production.
+ * You may use wildcards to match multiple keys.
+ */
+ 'cleanup_env_keys' => [
+ 'AWS_*',
+ 'AZURE_*',
+ 'GITHUB_*',
+ 'DO_SPACES_*',
+ '*_SECRET',
+ 'BIFROST_*',
+ 'NATIVEPHP_UPDATER_PATH',
+ 'NATIVEPHP_APPLE_ID',
+ 'NATIVEPHP_APPLE_ID_PASS',
+ 'NATIVEPHP_APPLE_TEAM_ID',
+ 'NATIVEPHP_AZURE_PUBLISHER_NAME',
+ 'NATIVEPHP_AZURE_ENDPOINT',
+ 'NATIVEPHP_AZURE_CERTIFICATE_PROFILE_NAME',
+ 'NATIVEPHP_AZURE_CODE_SIGNING_ACCOUNT_NAME',
+ ],
+
+ /**
+ * A list of files and folders that should be removed from the
+ * final app before it is bundled for production.
+ * You may use glob / wildcard patterns here.
+ */
+ 'cleanup_exclude_files' => [
+ 'build',
+ 'temp',
+ 'content',
+ 'node_modules',
+ '*/tests',
+ ],
+
+ /**
+ * The NativePHP updater configuration.
+ */
+ 'updater' => [
+ /**
+ * Whether or not the updater is enabled. Please note that the
+ * updater will only work when your application is bundled
+ * for production.
+ */
+ 'enabled' => env('NATIVEPHP_UPDATER_ENABLED', false),
+
+ /**
+ * The updater provider to use.
+ * Supported: "github", "s3", "spaces"
+ * Note: The "s3" provider is compatible with S3-compatible services like Cloudflare R2.
+ */
+ 'default' => env('NATIVEPHP_UPDATER_PROVIDER', 'spaces'),
+
+ 'providers' => [
+ 'github' => [
+ 'driver' => 'github',
+ 'repo' => env('GITHUB_REPO'),
+ 'owner' => env('GITHUB_OWNER'),
+ 'token' => env('GITHUB_TOKEN'),
+ 'vPrefixedTagName' => env('GITHUB_V_PREFIXED_TAG_NAME', true),
+ 'private' => env('GITHUB_PRIVATE', false),
+ 'autoupdate_token' => env('GITHUB_AUTOUPDATE_TOKEN'), // Read-only token used by the updater for private repos
+ 'channel' => env('GITHUB_CHANNEL', 'latest'),
+ 'releaseType' => env('GITHUB_RELEASE_TYPE', 'draft'),
+ ],
+
+ 's3' => [
+ 'driver' => 's3',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION'),
+ 'bucket' => env('AWS_BUCKET'),
+ 'endpoint' => env('AWS_ENDPOINT'),
+ 'path' => env('NATIVEPHP_UPDATER_PATH', null),
+ /**
+ * Optional public URL for serving updates (e.g., CDN or custom domain).
+ * When set, updates will be downloaded from this URL instead of the S3 endpoint.
+ * Useful for S3 with CloudFront or Cloudflare R2 with public access
+ * Example: 'https://updates.yourdomain.com'
+ */
+ 'public_url' => env('AWS_PUBLIC_URL'),
+ ],
+
+ 'spaces' => [
+ 'driver' => 'spaces',
+ 'key' => env('DO_SPACES_KEY_ID'),
+ 'secret' => env('DO_SPACES_SECRET_ACCESS_KEY'),
+ 'name' => env('DO_SPACES_NAME'),
+ 'region' => env('DO_SPACES_REGION'),
+ 'path' => env('NATIVEPHP_UPDATER_PATH', null),
+ ],
+ ],
+ ],
+
+ /**
+ * The queue workers that get auto-started on your application start.
+ */
+ 'queue_workers' => [
+ 'default' => [
+ 'queues' => ['default'],
+ 'memory_limit' => 128,
+ 'timeout' => 60,
+ 'sleep' => 3,
+ ],
+ ],
+
+ /**
+ * Define your own scripts to run before and after the build process.
+ */
+ 'prebuild' => [
+ 'npm run build',
+ ],
+
+ 'postbuild' => [
+ // 'rm -rf public/build',
+ ],
+
+ /**
+ * Custom PHP binary path.
+ */
+ 'binary_path' => env('NATIVEPHP_PHP_BINARY_PATH', null),
+];
diff --git a/config/permission.php b/config/permission.php
new file mode 100644
index 0000000..f39f6b5
--- /dev/null
+++ b/config/permission.php
@@ -0,0 +1,202 @@
+ [
+
+ /*
+ * When using the "HasPermissions" trait from this package, we need to know which
+ * Eloquent model should be used to retrieve your permissions. Of course, it
+ * is often just the "Permission" model but you may use whatever you like.
+ *
+ * The model you want to use as a Permission model needs to implement the
+ * `Spatie\Permission\Contracts\Permission` contract.
+ */
+
+ 'permission' => Spatie\Permission\Models\Permission::class,
+
+ /*
+ * When using the "HasRoles" trait from this package, we need to know which
+ * Eloquent model should be used to retrieve your roles. Of course, it
+ * is often just the "Role" model but you may use whatever you like.
+ *
+ * The model you want to use as a Role model needs to implement the
+ * `Spatie\Permission\Contracts\Role` contract.
+ */
+
+ 'role' => Spatie\Permission\Models\Role::class,
+
+ ],
+
+ 'table_names' => [
+
+ /*
+ * When using the "HasRoles" trait from this package, we need to know which
+ * table should be used to retrieve your roles. We have chosen a basic
+ * default value but you may easily change it to any table you like.
+ */
+
+ 'roles' => 'roles',
+
+ /*
+ * When using the "HasPermissions" trait from this package, we need to know which
+ * table should be used to retrieve your permissions. We have chosen a basic
+ * default value but you may easily change it to any table you like.
+ */
+
+ 'permissions' => 'permissions',
+
+ /*
+ * When using the "HasPermissions" trait from this package, we need to know which
+ * table should be used to retrieve your models permissions. We have chosen a
+ * basic default value but you may easily change it to any table you like.
+ */
+
+ 'model_has_permissions' => 'model_has_permissions',
+
+ /*
+ * When using the "HasRoles" trait from this package, we need to know which
+ * table should be used to retrieve your models roles. We have chosen a
+ * basic default value but you may easily change it to any table you like.
+ */
+
+ 'model_has_roles' => 'model_has_roles',
+
+ /*
+ * When using the "HasRoles" trait from this package, we need to know which
+ * table should be used to retrieve your roles permissions. We have chosen a
+ * basic default value but you may easily change it to any table you like.
+ */
+
+ 'role_has_permissions' => 'role_has_permissions',
+ ],
+
+ 'column_names' => [
+ /*
+ * Change this if you want to name the related pivots other than defaults
+ */
+ 'role_pivot_key' => null, // default 'role_id',
+ 'permission_pivot_key' => null, // default 'permission_id',
+
+ /*
+ * Change this if you want to name the related model primary key other than
+ * `model_id`.
+ *
+ * For example, this would be nice if your primary keys are all UUIDs. In
+ * that case, name this `model_uuid`.
+ */
+
+ 'model_morph_key' => 'model_id',
+
+ /*
+ * Change this if you want to use the teams feature and your related model's
+ * foreign key is other than `team_id`.
+ */
+
+ 'team_foreign_key' => 'team_id',
+ ],
+
+ /*
+ * When set to true, the method for checking permissions will be registered on the gate.
+ * Set this to false if you want to implement custom logic for checking permissions.
+ */
+
+ 'register_permission_check_method' => true,
+
+ /*
+ * When set to true, Laravel\Octane\Events\OperationTerminated event listener will be registered
+ * this will refresh permissions on every TickTerminated, TaskTerminated and RequestTerminated
+ * NOTE: This should not be needed in most cases, but an Octane/Vapor combination benefited from it.
+ */
+ 'register_octane_reset_listener' => false,
+
+ /*
+ * Events will fire when a role or permission is assigned/unassigned:
+ * \Spatie\Permission\Events\RoleAttached
+ * \Spatie\Permission\Events\RoleDetached
+ * \Spatie\Permission\Events\PermissionAttached
+ * \Spatie\Permission\Events\PermissionDetached
+ *
+ * To enable, set to true, and then create listeners to watch these events.
+ */
+ 'events_enabled' => false,
+
+ /*
+ * Teams Feature.
+ * When set to true the package implements teams using the 'team_foreign_key'.
+ * If you want the migrations to register the 'team_foreign_key', you must
+ * set this to true before doing the migration.
+ * If you already did the migration then you must make a new migration to also
+ * add 'team_foreign_key' to 'roles', 'model_has_roles', and 'model_has_permissions'
+ * (view the latest version of this package's migration file)
+ */
+
+ 'teams' => false,
+
+ /*
+ * The class to use to resolve the permissions team id
+ */
+ 'team_resolver' => \Spatie\Permission\DefaultTeamResolver::class,
+
+ /*
+ * Passport Client Credentials Grant
+ * When set to true the package will use Passports Client to check permissions
+ */
+
+ 'use_passport_client_credentials' => false,
+
+ /*
+ * When set to true, the required permission names are added to exception messages.
+ * This could be considered an information leak in some contexts, so the default
+ * setting is false here for optimum safety.
+ */
+
+ 'display_permission_in_exception' => false,
+
+ /*
+ * When set to true, the required role names are added to exception messages.
+ * This could be considered an information leak in some contexts, so the default
+ * setting is false here for optimum safety.
+ */
+
+ 'display_role_in_exception' => false,
+
+ /*
+ * By default wildcard permission lookups are disabled.
+ * See documentation to understand supported syntax.
+ */
+
+ 'enable_wildcard_permission' => false,
+
+ /*
+ * The class to use for interpreting wildcard permissions.
+ * If you need to modify delimiters, override the class and specify its name here.
+ */
+ // 'wildcard_permission' => Spatie\Permission\WildcardPermission::class,
+
+ /* Cache-specific settings */
+
+ 'cache' => [
+
+ /*
+ * By default all permissions are cached for 24 hours to speed up performance.
+ * When permissions or roles are updated the cache is flushed automatically.
+ */
+
+ 'expiration_time' => \DateInterval::createFromDateString('24 hours'),
+
+ /*
+ * The cache key used to store all permissions.
+ */
+
+ 'key' => 'spatie.permission.cache',
+
+ /*
+ * You may optionally indicate a specific cache driver to use for permission and
+ * role caching using any of the `store` drivers listed in the cache.php config
+ * file. Using 'default' here means to use the `default` set in cache.php.
+ */
+
+ 'store' => 'default',
+ ],
+];
diff --git a/config/queue.php b/config/queue.php
new file mode 100644
index 0000000..79c2c0a
--- /dev/null
+++ b/config/queue.php
@@ -0,0 +1,129 @@
+ env('QUEUE_CONNECTION', 'database'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Queue Connections
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the connection options for every queue backend
+ | used by your application. An example configuration is provided for
+ | each backend supported by Laravel. You're also free to add more.
+ |
+ | Drivers: "sync", "database", "beanstalkd", "sqs", "redis",
+ | "deferred", "background", "failover", "null"
+ |
+ */
+
+ 'connections' => [
+
+ 'sync' => [
+ 'driver' => 'sync',
+ ],
+
+ 'database' => [
+ 'driver' => 'database',
+ 'connection' => env('DB_QUEUE_CONNECTION'),
+ 'table' => env('DB_QUEUE_TABLE', 'jobs'),
+ 'queue' => env('DB_QUEUE', 'default'),
+ 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),
+ 'after_commit' => false,
+ ],
+
+ 'beanstalkd' => [
+ 'driver' => 'beanstalkd',
+ 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
+ 'queue' => env('BEANSTALKD_QUEUE', 'default'),
+ 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
+ 'block_for' => 0,
+ 'after_commit' => false,
+ ],
+
+ 'sqs' => [
+ 'driver' => 'sqs',
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
+ 'queue' => env('SQS_QUEUE', 'default'),
+ 'suffix' => env('SQS_SUFFIX'),
+ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+ 'after_commit' => false,
+ ],
+
+ 'redis' => [
+ 'driver' => 'redis',
+ 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
+ 'queue' => env('REDIS_QUEUE', 'default'),
+ 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),
+ 'block_for' => null,
+ 'after_commit' => false,
+ ],
+
+ 'deferred' => [
+ 'driver' => 'deferred',
+ ],
+
+ 'background' => [
+ 'driver' => 'background',
+ ],
+
+ 'failover' => [
+ 'driver' => 'failover',
+ 'connections' => [
+ 'database',
+ 'deferred',
+ ],
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Job Batching
+ |--------------------------------------------------------------------------
+ |
+ | The following options configure the database and table that store job
+ | batching information. These options can be updated to any database
+ | connection and table which has been defined by your application.
+ |
+ */
+
+ 'batching' => [
+ 'database' => env('DB_CONNECTION', 'sqlite'),
+ 'table' => 'job_batches',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Failed Queue Jobs
+ |--------------------------------------------------------------------------
+ |
+ | These options configure the behavior of failed queue job logging so you
+ | can control how and where failed jobs are stored. Laravel ships with
+ | support for storing failed jobs in a simple file or in a database.
+ |
+ | Supported drivers: "database-uuids", "dynamodb", "file", "null"
+ |
+ */
+
+ 'failed' => [
+ 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
+ 'database' => env('DB_CONNECTION', 'sqlite'),
+ 'table' => 'failed_jobs',
+ ],
+
+];
diff --git a/config/services.php b/config/services.php
new file mode 100644
index 0000000..6a90eb8
--- /dev/null
+++ b/config/services.php
@@ -0,0 +1,38 @@
+ [
+ 'key' => env('POSTMARK_API_KEY'),
+ ],
+
+ 'resend' => [
+ 'key' => env('RESEND_API_KEY'),
+ ],
+
+ 'ses' => [
+ 'key' => env('AWS_ACCESS_KEY_ID'),
+ 'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+ ],
+
+ 'slack' => [
+ 'notifications' => [
+ 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
+ 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
+ ],
+ ],
+
+];
diff --git a/config/session.php b/config/session.php
new file mode 100644
index 0000000..5b541b7
--- /dev/null
+++ b/config/session.php
@@ -0,0 +1,217 @@
+ env('SESSION_DRIVER', 'database'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Lifetime
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the number of minutes that you wish the session
+ | to be allowed to remain idle before it expires. If you want them
+ | to expire immediately when the browser is closed then you may
+ | indicate that via the expire_on_close configuration option.
+ |
+ */
+
+ 'lifetime' => (int) env('SESSION_LIFETIME', 120),
+
+ 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Encryption
+ |--------------------------------------------------------------------------
+ |
+ | This option allows you to easily specify that all of your session data
+ | should be encrypted before it's stored. All encryption is performed
+ | automatically by Laravel and you may use the session like normal.
+ |
+ */
+
+ 'encrypt' => env('SESSION_ENCRYPT', false),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session File Location
+ |--------------------------------------------------------------------------
+ |
+ | When utilizing the "file" session driver, the session files are placed
+ | on disk. The default storage location is defined here; however, you
+ | are free to provide another location where they should be stored.
+ |
+ */
+
+ 'files' => storage_path('framework/sessions'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Database Connection
+ |--------------------------------------------------------------------------
+ |
+ | When using the "database" or "redis" session drivers, you may specify a
+ | connection that should be used to manage these sessions. This should
+ | correspond to a connection in your database configuration options.
+ |
+ */
+
+ 'connection' => env('SESSION_CONNECTION'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Database Table
+ |--------------------------------------------------------------------------
+ |
+ | When using the "database" session driver, you may specify the table to
+ | be used to store sessions. Of course, a sensible default is defined
+ | for you; however, you're welcome to change this to another table.
+ |
+ */
+
+ 'table' => env('SESSION_TABLE', 'sessions'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cache Store
+ |--------------------------------------------------------------------------
+ |
+ | When using one of the framework's cache driven session backends, you may
+ | define the cache store which should be used to store the session data
+ | between requests. This must match one of your defined cache stores.
+ |
+ | Affects: "dynamodb", "memcached", "redis"
+ |
+ */
+
+ 'store' => env('SESSION_STORE'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Sweeping Lottery
+ |--------------------------------------------------------------------------
+ |
+ | Some session drivers must manually sweep their storage location to get
+ | rid of old sessions from storage. Here are the chances that it will
+ | happen on a given request. By default, the odds are 2 out of 100.
+ |
+ */
+
+ 'lottery' => [2, 100],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Name
+ |--------------------------------------------------------------------------
+ |
+ | Here you may change the name of the session cookie that is created by
+ | the framework. Typically, you should not need to change this value
+ | since doing so does not grant a meaningful security improvement.
+ |
+ */
+
+ 'cookie' => env(
+ 'SESSION_COOKIE',
+ Str::slug((string) env('APP_NAME', 'laravel')).'-session'
+ ),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Path
+ |--------------------------------------------------------------------------
+ |
+ | The session cookie path determines the path for which the cookie will
+ | be regarded as available. Typically, this will be the root path of
+ | your application, but you're free to change this when necessary.
+ |
+ */
+
+ 'path' => env('SESSION_PATH', '/'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Session Cookie Domain
+ |--------------------------------------------------------------------------
+ |
+ | This value determines the domain and subdomains the session cookie is
+ | available to. By default, the cookie will be available to the root
+ | domain without subdomains. Typically, this shouldn't be changed.
+ |
+ */
+
+ 'domain' => env('SESSION_DOMAIN'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | HTTPS Only Cookies
+ |--------------------------------------------------------------------------
+ |
+ | By setting this option to true, session cookies will only be sent back
+ | to the server if the browser has a HTTPS connection. This will keep
+ | the cookie from being sent to you when it can't be done securely.
+ |
+ */
+
+ 'secure' => env('SESSION_SECURE_COOKIE'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | HTTP Access Only
+ |--------------------------------------------------------------------------
+ |
+ | Setting this value to true will prevent JavaScript from accessing the
+ | value of the cookie and the cookie will only be accessible through
+ | the HTTP protocol. It's unlikely you should disable this option.
+ |
+ */
+
+ 'http_only' => env('SESSION_HTTP_ONLY', true),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Same-Site Cookies
+ |--------------------------------------------------------------------------
+ |
+ | This option determines how your cookies behave when cross-site requests
+ | take place, and can be used to mitigate CSRF attacks. By default, we
+ | will set this value to "lax" to permit secure cross-site requests.
+ |
+ | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
+ |
+ | Supported: "lax", "strict", "none", null
+ |
+ */
+
+ 'same_site' => env('SESSION_SAME_SITE', 'lax'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Partitioned Cookies
+ |--------------------------------------------------------------------------
+ |
+ | Setting this value to true will tie the cookie to the top-level site for
+ | a cross-site context. Partitioned cookies are accepted by the browser
+ | when flagged "secure" and the Same-Site attribute is set to "none".
+ |
+ */
+
+ 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
+
+];
diff --git a/config/sms.php b/config/sms.php
new file mode 100644
index 0000000..cdb73b2
--- /dev/null
+++ b/config/sms.php
@@ -0,0 +1,7 @@
+ env('SMS_API_URL', 'http://94.101.184.91/api/sms'),
+ 'api_key' => env('SMS_API_KEY', ''),
+];
diff --git a/config/sync.php b/config/sync.php
new file mode 100644
index 0000000..c92f909
--- /dev/null
+++ b/config/sync.php
@@ -0,0 +1,7 @@
+ env('SYNC_PEER_IP', ''),
+ 'peer_port' => env('SYNC_PEER_PORT', 80),
+ 'token' => env('SYNC_TOKEN', ''),
+];
diff --git a/database/.gitignore b/database/.gitignore
new file mode 100644
index 0000000..9b19b93
--- /dev/null
+++ b/database/.gitignore
@@ -0,0 +1 @@
+*.sqlite*
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
new file mode 100644
index 0000000..dcb9498
--- /dev/null
+++ b/database/factories/UserFactory.php
@@ -0,0 +1,32 @@
+ fake()->name(),
+ 'email' => fake()->unique()->safeEmail(),
+ 'email_verified_at' => now(),
+ 'password' => static::$password ??= Hash::make('password'),
+ 'remember_token' => Str::random(10),
+ ];
+ }
+
+ public function unverified(): static
+ {
+ return $this->state(fn (array $attributes) => [
+ 'email_verified_at' => null,
+ ]);
+ }
+}
diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php
new file mode 100644
index 0000000..b6eff6e
--- /dev/null
+++ b/database/migrations/0001_01_01_000000_create_users_table.php
@@ -0,0 +1,46 @@
+id();
+ $table->string('name');
+ $table->string('username')->unique();
+ $table->string('email')->unique()->nullable();
+ $table->timestamp('email_verified_at')->nullable();
+ $table->string('password');
+ $table->rememberToken();
+ $table->timestamps();
+ });
+
+ Schema::create('password_reset_tokens', function (Blueprint $table) {
+ $table->string('email')->primary();
+ $table->string('token');
+ $table->timestamp('created_at')->nullable();
+ });
+
+ Schema::create('sessions', function (Blueprint $table) {
+ $table->string('id')->primary();
+ $table->foreignId('user_id')->nullable()->index();
+ $table->string('ip_address', 45)->nullable();
+ $table->text('user_agent')->nullable();
+ $table->longText('payload');
+ $table->integer('last_activity')->index();
+ });
+ }
+
+
+ public function down(): void
+ {
+ Schema::dropIfExists('users');
+ Schema::dropIfExists('password_reset_tokens');
+ Schema::dropIfExists('sessions');
+ }
+};
diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php
new file mode 100644
index 0000000..a677569
--- /dev/null
+++ b/database/migrations/0001_01_01_000001_create_cache_table.php
@@ -0,0 +1,31 @@
+string('key')->primary();
+ $table->mediumText('value');
+ $table->integer('expiration')->index();
+ });
+
+ Schema::create('cache_locks', function (Blueprint $table) {
+ $table->string('key')->primary();
+ $table->string('owner');
+ $table->integer('expiration')->index();
+ });
+ }
+
+
+ public function down(): void
+ {
+ Schema::dropIfExists('cache');
+ Schema::dropIfExists('cache_locks');
+ }
+};
diff --git a/database/migrations/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php
new file mode 100644
index 0000000..909e339
--- /dev/null
+++ b/database/migrations/0001_01_01_000002_create_jobs_table.php
@@ -0,0 +1,55 @@
+id();
+ $table->string('queue');
+ $table->longText('payload');
+ $table->unsignedTinyInteger('attempts');
+ $table->unsignedInteger('reserved_at')->nullable();
+ $table->unsignedInteger('available_at');
+ $table->unsignedInteger('created_at');
+
+ $table->index(['queue', 'reserved_at', 'available_at']);
+ });
+
+ Schema::create('job_batches', function (Blueprint $table) {
+ $table->string('id')->primary();
+ $table->string('name');
+ $table->integer('total_jobs');
+ $table->integer('pending_jobs');
+ $table->integer('failed_jobs');
+ $table->longText('failed_job_ids');
+ $table->mediumText('options')->nullable();
+ $table->integer('cancelled_at')->nullable();
+ $table->integer('created_at');
+ $table->integer('finished_at')->nullable();
+ });
+
+ Schema::create('failed_jobs', function (Blueprint $table) {
+ $table->id();
+ $table->string('uuid')->unique();
+ $table->text('connection');
+ $table->text('queue');
+ $table->longText('payload');
+ $table->longText('exception');
+ $table->timestamp('failed_at')->useCurrent();
+ });
+ }
+
+
+ public function down(): void
+ {
+ Schema::dropIfExists('jobs');
+ Schema::dropIfExists('job_batches');
+ Schema::dropIfExists('failed_jobs');
+ }
+};
diff --git a/database/migrations/2026_03_14_123609_create_permission_tables.php b/database/migrations/2026_03_14_123609_create_permission_tables.php
new file mode 100644
index 0000000..d15c9f3
--- /dev/null
+++ b/database/migrations/2026_03_14_123609_create_permission_tables.php
@@ -0,0 +1,130 @@
+engine('InnoDB');
+ $table->bigIncrements('id');
+ $table->string('name');
+ $table->string('guard_name');
+ $table->timestamps();
+
+ $table->unique(['name', 'guard_name']);
+ });
+
+ Schema::create($tableNames['roles'], static function (Blueprint $table) use ($teams, $columnNames) {
+ // $table->engine('InnoDB');
+ $table->bigIncrements('id');
+ if ($teams || config('permission.testing')) {
+ $table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable();
+ $table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index');
+ }
+ $table->string('name');
+ $table->string('guard_name');
+ $table->timestamps();
+ if ($teams || config('permission.testing')) {
+ $table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']);
+ } else {
+ $table->unique(['name', 'guard_name']);
+ }
+ });
+
+ Schema::create($tableNames['model_has_permissions'], static function (Blueprint $table) use ($tableNames, $columnNames, $pivotPermission, $teams) {
+ $table->unsignedBigInteger($pivotPermission);
+
+ $table->string('model_type');
+ $table->unsignedBigInteger($columnNames['model_morph_key']);
+ $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index');
+
+ $table->foreign($pivotPermission)
+ ->references('id')
+ ->on($tableNames['permissions'])
+ ->onDelete('cascade');
+ if ($teams) {
+ $table->unsignedBigInteger($columnNames['team_foreign_key']);
+ $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index');
+
+ $table->primary([$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'],
+ 'model_has_permissions_permission_model_type_primary');
+ } else {
+ $table->primary([$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
+ 'model_has_permissions_permission_model_type_primary');
+ }
+
+ });
+
+ Schema::create($tableNames['model_has_roles'], static function (Blueprint $table) use ($tableNames, $columnNames, $pivotRole, $teams) {
+ $table->unsignedBigInteger($pivotRole);
+
+ $table->string('model_type');
+ $table->unsignedBigInteger($columnNames['model_morph_key']);
+ $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index');
+
+ $table->foreign($pivotRole)
+ ->references('id')
+ ->on($tableNames['roles'])
+ ->onDelete('cascade');
+ if ($teams) {
+ $table->unsignedBigInteger($columnNames['team_foreign_key']);
+ $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index');
+
+ $table->primary([$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'],
+ 'model_has_roles_role_model_type_primary');
+ } else {
+ $table->primary([$pivotRole, $columnNames['model_morph_key'], 'model_type'],
+ 'model_has_roles_role_model_type_primary');
+ }
+ });
+
+ Schema::create($tableNames['role_has_permissions'], static function (Blueprint $table) use ($tableNames, $pivotRole, $pivotPermission) {
+ $table->unsignedBigInteger($pivotPermission);
+ $table->unsignedBigInteger($pivotRole);
+
+ $table->foreign($pivotPermission)
+ ->references('id')
+ ->on($tableNames['permissions'])
+ ->onDelete('cascade');
+
+ $table->foreign($pivotRole)
+ ->references('id')
+ ->on($tableNames['roles'])
+ ->onDelete('cascade');
+
+ $table->primary([$pivotPermission, $pivotRole], 'role_has_permissions_permission_id_role_id_primary');
+ });
+
+ app('cache')
+ ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)
+ ->forget(config('permission.cache.key'));
+ }
+
+
+ public function down(): void
+ {
+ $tableNames = config('permission.table_names');
+
+ throw_if(empty($tableNames), Exception::class, 'Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.');
+
+ Schema::drop($tableNames['role_has_permissions']);
+ Schema::drop($tableNames['model_has_roles']);
+ Schema::drop($tableNames['model_has_permissions']);
+ Schema::drop($tableNames['roles']);
+ Schema::drop($tableNames['permissions']);
+ }
+};
diff --git a/database/migrations/2026_03_15_210542_create_notifications_table.php b/database/migrations/2026_03_15_210542_create_notifications_table.php
new file mode 100644
index 0000000..02fd199
--- /dev/null
+++ b/database/migrations/2026_03_15_210542_create_notifications_table.php
@@ -0,0 +1,27 @@
+uuid('id')->primary();
+ $table->string('type');
+ $table->morphs('notifiable');
+ $table->text('data');
+ $table->timestamp('read_at')->nullable();
+ $table->timestamps();
+ });
+ }
+
+
+ public function down(): void
+ {
+ Schema::dropIfExists('notifications');
+ }
+};
diff --git a/database/migrations/2026_03_15_210543_create_imports_table.php b/database/migrations/2026_03_15_210543_create_imports_table.php
new file mode 100644
index 0000000..92df8a3
--- /dev/null
+++ b/database/migrations/2026_03_15_210543_create_imports_table.php
@@ -0,0 +1,30 @@
+id();
+ $table->timestamp('completed_at')->nullable();
+ $table->string('file_name');
+ $table->string('file_path');
+ $table->string('importer');
+ $table->unsignedInteger('processed_rows')->default(0);
+ $table->unsignedInteger('total_rows');
+ $table->unsignedInteger('successful_rows')->default(0);
+ $table->foreignId('user_id')->constrained()->cascadeOnDelete();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('imports');
+ }
+};
diff --git a/database/migrations/2026_03_15_210544_create_exports_table.php b/database/migrations/2026_03_15_210544_create_exports_table.php
new file mode 100644
index 0000000..5818c7a
--- /dev/null
+++ b/database/migrations/2026_03_15_210544_create_exports_table.php
@@ -0,0 +1,30 @@
+id();
+ $table->timestamp('completed_at')->nullable();
+ $table->string('file_disk');
+ $table->string('file_name')->nullable();
+ $table->string('exporter');
+ $table->unsignedInteger('processed_rows')->default(0);
+ $table->unsignedInteger('total_rows');
+ $table->unsignedInteger('successful_rows')->default(0);
+ $table->foreignId('user_id')->constrained()->cascadeOnDelete();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('exports');
+ }
+};
diff --git a/database/migrations/2026_03_15_210545_create_failed_import_rows_table.php b/database/migrations/2026_03_15_210545_create_failed_import_rows_table.php
new file mode 100644
index 0000000..4c1cb48
--- /dev/null
+++ b/database/migrations/2026_03_15_210545_create_failed_import_rows_table.php
@@ -0,0 +1,25 @@
+id();
+ $table->json('data');
+ $table->foreignId('import_id')->constrained()->cascadeOnDelete();
+ $table->text('validation_error')->nullable();
+ $table->timestamps();
+ });
+ }
+
+
+ public function down(): void
+ {
+ Schema::dropIfExists('failed_import_rows');
+ }
+};
diff --git a/database/migrations/2026_03_16_000001_create_doctors_table.php b/database/migrations/2026_03_16_000001_create_doctors_table.php
new file mode 100644
index 0000000..1d69fa0
--- /dev/null
+++ b/database/migrations/2026_03_16_000001_create_doctors_table.php
@@ -0,0 +1,25 @@
+id();
+ $table->string('first_name', 50);
+ $table->string('last_name', 50);
+ $table->string('speciality', 100)->nullable();
+ $table->string('license_id', 50)->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('doctors');
+ }
+};
diff --git a/database/migrations/2026_03_16_000002_create_payment_types_table.php b/database/migrations/2026_03_16_000002_create_payment_types_table.php
new file mode 100644
index 0000000..63161ca
--- /dev/null
+++ b/database/migrations/2026_03_16_000002_create_payment_types_table.php
@@ -0,0 +1,25 @@
+id();
+ $table->string('payment_type', 50);
+ $table->string('account_no', 50)->nullable();
+ $table->string('pos_no', 50)->nullable();
+ $table->mediumText('description')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('payment_types');
+ }
+};
diff --git a/database/migrations/2026_03_16_000003_create_patient_illness_table.php b/database/migrations/2026_03_16_000003_create_patient_illness_table.php
new file mode 100644
index 0000000..814787e
--- /dev/null
+++ b/database/migrations/2026_03_16_000003_create_patient_illness_table.php
@@ -0,0 +1,24 @@
+id();
+ $table->string('illness', 200);
+ $table->tinyInteger('row_no')->nullable();
+ $table->tinyInteger('priority')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('patient_illness');
+ }
+};
\ No newline at end of file
diff --git a/database/migrations/2026_03_16_000004_create_treatments_table.php b/database/migrations/2026_03_16_000004_create_treatments_table.php
new file mode 100644
index 0000000..2032e5c
--- /dev/null
+++ b/database/migrations/2026_03_16_000004_create_treatments_table.php
@@ -0,0 +1,25 @@
+id();
+ $table->string('treatment_type', 50)->nullable();
+ $table->string('treatment_name', 50)->nullable();
+ $table->mediumText('descriptions')->nullable();
+ $table->integer('treatment_cost')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('treatments');
+ }
+};
diff --git a/database/migrations/2026_03_16_000005_create_surgery_centers_table.php b/database/migrations/2026_03_16_000005_create_surgery_centers_table.php
new file mode 100644
index 0000000..2711f2b
--- /dev/null
+++ b/database/migrations/2026_03_16_000005_create_surgery_centers_table.php
@@ -0,0 +1,27 @@
+id();
+ $table->string('name', 255);
+ $table->text('address')->nullable();
+ $table->string('phone', 50)->default('0');
+ $table->string('email', 100)->nullable();
+ $table->string('contact_person', 100)->nullable();
+ $table->text('description')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('surgery_centers');
+ }
+};
\ No newline at end of file
diff --git a/database/migrations/2026_03_17_000001_create_patients_table.php b/database/migrations/2026_03_17_000001_create_patients_table.php
new file mode 100644
index 0000000..60b8546
--- /dev/null
+++ b/database/migrations/2026_03_17_000001_create_patients_table.php
@@ -0,0 +1,60 @@
+id();
+ $table->string('icno', 11)->index();
+ $table->string('first_name', 50)->nullable();
+ $table->string('last_name', 50)->nullable();
+ $table->string('father_name', 50)->nullable();
+ $table->string('gender', 50)->nullable();
+ $table->string('birth_date', 50)->nullable();
+ $table->integer('age')->nullable();
+ $table->string('marital_status', 50)->nullable();
+ $table->string('education', 50)->nullable();
+ $table->string('job', 50)->nullable();
+ $table->string('hand_phone', 50)->nullable();
+ $table->string('home_phone', 50)->nullable();
+ $table->string('work_phone', 50)->nullable();
+ $table->string('other_phone', 50)->nullable();
+ $table->mediumText('home_address')->nullable();
+ $table->mediumText('work_address')->nullable();
+ $table->string('refered_by', 50)->nullable();
+ $table->mediumText('referal_reason')->nullable();
+ $table->string('doc_id', 50)->nullable();
+ $table->string('insurance', 50)->nullable();
+ $table->string('insurance_no', 50)->nullable();
+ $table->integer('blood_pressure')->nullable();
+ $table->integer('blood_sugar')->nullable();
+ $table->string('current_illness_1', 50)->nullable();
+ $table->string('current_illness_2', 50)->nullable();
+ $table->string('is_undercare', 50)->nullable();
+ $table->string('undercare_reason', 50)->nullable();
+ $table->string('is_usingdrug', 50)->nullable();
+ $table->string('underdrug_reason', 50)->nullable();
+ $table->string('has_alergyto', 50)->nullable();
+ $table->string('alergy_reason', 50)->nullable();
+ $table->string('description', 50)->nullable();
+ $table->boolean('has_surgery_appointment')->default(false);
+ $table->mediumText('surgery_before')->nullable();
+ $table->mediumText('sergery_after')->nullable();
+ $table->mediumText('photos_before')->nullable();
+ $table->mediumText('photos_after')->nullable();
+ $table->mediumText('videos')->nullable();
+ $table->mediumText('audio_files')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('patients');
+ }
+};
diff --git a/database/migrations/2026_03_17_000002_add_user_stamps_to_patients_table.php b/database/migrations/2026_03_17_000002_add_user_stamps_to_patients_table.php
new file mode 100644
index 0000000..dfa87d9
--- /dev/null
+++ b/database/migrations/2026_03_17_000002_add_user_stamps_to_patients_table.php
@@ -0,0 +1,23 @@
+unsignedBigInteger('created_by')->nullable()->after('audio_files');
+ $table->unsignedBigInteger('updated_by')->nullable()->after('created_by');
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::table('patients', function (Blueprint $table) {
+ $table->dropColumn(['created_by', 'updated_by']);
+ });
+ }
+};
diff --git a/database/migrations/2026_03_17_000003_update_patient_illness_columns.php b/database/migrations/2026_03_17_000003_update_patient_illness_columns.php
new file mode 100644
index 0000000..b2b995e
--- /dev/null
+++ b/database/migrations/2026_03_17_000003_update_patient_illness_columns.php
@@ -0,0 +1,28 @@
+json('current_illness_1')->nullable()->change();
+ $table->json('current_illness_2')->nullable()->change();
+ $table->json('has_alergyto')->nullable()->change();
+ $table->text('description')->nullable()->change();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::table('patients', function (Blueprint $table) {
+ $table->string('current_illness_1', 50)->nullable()->change();
+ $table->string('current_illness_2', 50)->nullable()->change();
+ $table->string('has_alergyto', 50)->nullable()->change();
+ $table->string('description', 50)->nullable()->change();
+ });
+ }
+};
diff --git a/database/migrations/2026_03_17_000004_create_medications_table.php b/database/migrations/2026_03_17_000004_create_medications_table.php
new file mode 100644
index 0000000..9bc6b94
--- /dev/null
+++ b/database/migrations/2026_03_17_000004_create_medications_table.php
@@ -0,0 +1,31 @@
+id();
+ $table->string('name', 255)->comment('نام دارو');
+ $table->string('dosage_form', 50)->nullable()->comment('شکل دارویی (Tab, Cap, Amp, Drop, Serum, Cream, ...)');
+ $table->string('strength', 100)->nullable()->comment('دوز (مثلاً 500mg, 5mg/5ml)');
+ $table->integer('quantity')->nullable();
+ $table->string('timing', 100)->nullable()->comment('زمان مصرف (مثلاً q8h, q12h)');
+ $table->text('notes')->nullable()->comment('یادداشتها');
+ $table->boolean('is_default')->default(false);
+ $table->boolean('is_active')->default(true)->comment('فعال/غیرفعال');
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('medications');
+ }
+};
diff --git a/database/migrations/2026_03_17_100000_create_sync_log_table.php b/database/migrations/2026_03_17_100000_create_sync_log_table.php
new file mode 100644
index 0000000..42975da
--- /dev/null
+++ b/database/migrations/2026_03_17_100000_create_sync_log_table.php
@@ -0,0 +1,27 @@
+id();
+ $table->timestamp('datetime')->useCurrent();
+ $table->string('ip', 50)->nullable();
+ $table->string('user', 100)->nullable();
+ $table->string('table_name', 100);
+ $table->string('action', 20);
+ $table->unsignedBigInteger('record_id')->nullable();
+ $table->json('changed_data')->nullable();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('sync_log');
+ }
+};
diff --git a/database/migrations/2026_03_17_200000_create_osurg_initials_table.php b/database/migrations/2026_03_17_200000_create_osurg_initials_table.php
new file mode 100644
index 0000000..e9a54af
--- /dev/null
+++ b/database/migrations/2026_03_17_200000_create_osurg_initials_table.php
@@ -0,0 +1,24 @@
+id();
+ $table->string('init_parameter', 50)->unique();
+ $table->string('init_value', 50)->nullable();
+ $table->mediumText('attachment')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('osurg_initials');
+ }
+};
diff --git a/database/migrations/2026_03_18_000001_create_prescriptions_table.php b/database/migrations/2026_03_18_000001_create_prescriptions_table.php
new file mode 100644
index 0000000..2938e7a
--- /dev/null
+++ b/database/migrations/2026_03_18_000001_create_prescriptions_table.php
@@ -0,0 +1,28 @@
+id();
+ $table->unsignedBigInteger('patient')->nullable()->comment('شناسه بیمار');
+ $table->string('issue_date', 50)->nullable()->comment('تاریخ صدور (شمسی)');
+ $table->dateTime('issue_datetime')->nullable()->comment('تاریخ و ساعت صدور');
+ $table->string('doctor', 50)->nullable()->comment('نام پزشک');
+ $table->mediumText('content')->nullable()->comment('محتوای نسخه');
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('prescriptions');
+ }
+};
diff --git a/database/migrations/2026_03_18_000001_create_surgery_appointments_table.php b/database/migrations/2026_03_18_000001_create_surgery_appointments_table.php
new file mode 100644
index 0000000..eef533d
--- /dev/null
+++ b/database/migrations/2026_03_18_000001_create_surgery_appointments_table.php
@@ -0,0 +1,29 @@
+id();
+ $table->foreignId('patient_id')->constrained('patients')->cascadeOnDelete();
+ $table->dateTime('surgery_date');
+ $table->foreignId('surgery_center_id')->nullable()->constrained('surgery_centers')->nullOnDelete();
+ $table->unsignedBigInteger('created_by')->nullable();
+ $table->unsignedBigInteger('updated_by')->nullable();
+ $table->timestamps();
+
+ $table->index('patient_id');
+ $table->index('surgery_center_id');
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('surgery_appointments');
+ }
+};
diff --git a/database/migrations/2026_03_18_000002_add_user_stamps_to_prescriptions_table.php b/database/migrations/2026_03_18_000002_add_user_stamps_to_prescriptions_table.php
new file mode 100644
index 0000000..035e4c2
--- /dev/null
+++ b/database/migrations/2026_03_18_000002_add_user_stamps_to_prescriptions_table.php
@@ -0,0 +1,25 @@
+unsignedBigInteger('created_by')->nullable()->after('content');
+ $table->unsignedBigInteger('updated_by')->nullable()->after('created_by');
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::table('prescriptions', function (Blueprint $table) {
+ $table->dropColumn(['created_by', 'updated_by']);
+ });
+ }
+};
diff --git a/database/migrations/2026_03_18_000002_remove_has_surgery_appointment_from_patients_table.php b/database/migrations/2026_03_18_000002_remove_has_surgery_appointment_from_patients_table.php
new file mode 100644
index 0000000..bc04221
--- /dev/null
+++ b/database/migrations/2026_03_18_000002_remove_has_surgery_appointment_from_patients_table.php
@@ -0,0 +1,22 @@
+dropColumn('has_surgery_appointment');
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::table('patients', function (Blueprint $table) {
+ $table->boolean('has_surgery_appointment')->default(false);
+ });
+ }
+};
diff --git a/database/migrations/2026_03_18_000003_add_medication_ids_to_prescriptions_table.php b/database/migrations/2026_03_18_000003_add_medication_ids_to_prescriptions_table.php
new file mode 100644
index 0000000..220e4b2
--- /dev/null
+++ b/database/migrations/2026_03_18_000003_add_medication_ids_to_prescriptions_table.php
@@ -0,0 +1,24 @@
+json('medication_ids')->nullable()->after('doctor')->comment('شناسه داروهای انتخابشده');
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::table('prescriptions', function (Blueprint $table) {
+ $table->dropColumn('medication_ids');
+ });
+ }
+};
diff --git a/database/migrations/2026_03_28_000001_create_visits_table.php b/database/migrations/2026_03_28_000001_create_visits_table.php
new file mode 100644
index 0000000..fa3235f
--- /dev/null
+++ b/database/migrations/2026_03_28_000001_create_visits_table.php
@@ -0,0 +1,38 @@
+id();
+ $table->unsignedBigInteger('patient')->nullable()->comment('شناسه بیمار');
+ $table->string('visit_date', 50)->nullable()->comment('تاریخ ویزیت (شمسی)');
+ $table->string('visit_time', 50)->nullable()->comment('ساعت ویزیت');
+ $table->unsignedBigInteger('treatment')->nullable()->comment('شناسه نوع درمان');
+ $table->unsignedInteger('treatment_cost')->nullable()->comment('هزینه درمان');
+ $table->unsignedBigInteger('payment_type')->nullable()->comment('شناسه روش پرداخت');
+ $table->unsignedInteger('paid_amount')->nullable()->comment('مبلغ پرداخت شده');
+ $table->tinyInteger('pos_ul')->nullable()->comment('موقعیت دندان: بالا چپ');
+ $table->tinyInteger('pos_ll')->nullable()->comment('موقعیت دندان: پایین چپ');
+ $table->tinyInteger('pos_ur')->nullable()->comment('موقعیت دندان: بالا راست');
+ $table->tinyInteger('pos_lr')->nullable()->comment('موقعیت دندان: پایین راست');
+ $table->mediumText('treatment_description')->nullable()->comment('شرح درمان');
+ $table->unsignedBigInteger('doctor')->nullable()->comment('شناسه پزشک');
+ $table->unsignedBigInteger('created_by')->nullable();
+ $table->unsignedBigInteger('updated_by')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('visits');
+ }
+};
\ No newline at end of file
diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php
new file mode 100644
index 0000000..079bf67
--- /dev/null
+++ b/database/seeders/DatabaseSeeder.php
@@ -0,0 +1,25 @@
+call([
+ UserSeeder::class,
+ DoctorSeeder::class,
+ PaymentTypeSeeder::class,
+ PatientIllnessSeeder::class,
+ TreatmentSeeder::class,
+ SurgeryCenterSeeder::class,
+ MedicationSeeder::class,
+ OsurgInitialSeeder::class,
+ ]);
+ }
+}
diff --git a/database/seeders/DoctorSeeder.php b/database/seeders/DoctorSeeder.php
new file mode 100644
index 0000000..05cb131
--- /dev/null
+++ b/database/seeders/DoctorSeeder.php
@@ -0,0 +1,28 @@
+ 'مسعود',
+ 'last_name' => 'شایگان',
+ 'speciality' => 'متخصص جراحی فک و صورت',
+ 'license_id' => '126900',
+ ],
+ ];
+
+ foreach ($doctors as $doctor) {
+ Doctor::firstOrCreate(
+ ['license_id' => $doctor['license_id']],
+ $doctor
+ );
+ }
+ }
+}
diff --git a/database/seeders/MedicationSeeder.php b/database/seeders/MedicationSeeder.php
new file mode 100644
index 0000000..af88d3e
--- /dev/null
+++ b/database/seeders/MedicationSeeder.php
@@ -0,0 +1,37 @@
+ 'Cephalexin', 'dosage_form' => 'Cap', 'strength' => '500mg', 'quantity' => 20, 'timing' => 'q8h', 'notes' => '', 'is_default' => true, 'is_active' => true],
+ ['name' => 'Brozyne Ultra', 'dosage_form' => 'Cap', 'strength' => '8mg', 'quantity' => 11, 'timing' => 'q12h', 'notes' => '', 'is_default' => true, 'is_active' => true],
+ ['name' => 'Acetaminophen', 'dosage_form' => 'Tab', 'strength' => '#20', 'quantity' => null, 'timing' => '8h', 'notes' => '', 'is_default' => false, 'is_active' => true],
+ ['name' => 'Cetirizin', 'dosage_form' => 'Tab', 'strength' => '#20', 'quantity' => null, 'timing' => '12h', 'notes' => null, 'is_default' => false, 'is_active' => true],
+ ['name' => 'Serum', 'dosage_form' => 'Serum', 'strength' => 'N/S', 'quantity' => null, 'timing' => '11h', 'notes' => '', 'is_default' => false, 'is_active' => true],
+ ['name' => 'Pedia', 'dosage_form' => 'Amp', 'strength' => '8mg', 'quantity' => null, 'timing' => '10h', 'notes' => null, 'is_default' => false, 'is_active' => true],
+ ['name' => 'Phenyle Phrine', 'dosage_form' => 'Nasal Drop', 'strength' => '#1', 'quantity' => null, 'timing' => '8h', 'notes' => null, 'is_default' => false, 'is_active' => true],
+ ['name' => 'Sodium Chloride', 'dosage_form' => 'Nasal Drop', 'strength' => '#1', 'quantity' => null, 'timing' => '8h', 'notes' => null, 'is_default' => false, 'is_active' => true],
+ ['name' => 'آموکسیسیلین', 'dosage_form' => 'Cap', 'strength' => '500mg', 'quantity' => null, 'timing' => '8h', 'notes' => null, 'is_default' => false, 'is_active' => true],
+ ['name' => 'متروندیازول', 'dosage_form' => 'Tab', 'strength' => '250mg', 'quantity' => null, 'timing' => '8h', 'notes' => null, 'is_default' => false, 'is_active' => true],
+ ['name' => 'ایبوپروفن', 'dosage_form' => 'Tab', 'strength' => '400mg', 'quantity' => null, 'timing' => '8h', 'notes' => '', 'is_default' => false, 'is_active' => true],
+ ['name' => 'دیکلوفناک', 'dosage_form' => 'Tab', 'strength' => '50mg', 'quantity' => null, 'timing' => '12h', 'notes' => null, 'is_default' => false, 'is_active' => true],
+ ['name' => 'پردنیزولون', 'dosage_form' => 'Tab', 'strength' => '5mg', 'quantity' => null, 'timing' => '8&12h', 'notes' => null, 'is_default' => false, 'is_active' => true],
+ ['name' => 'اومپرازول', 'dosage_form' => 'Cap', 'strength' => '20mg', 'quantity' => null, 'timing' => '24h', 'notes' => null, 'is_default' => false, 'is_active' => true],
+ ['name' => 'ویتامین C', 'dosage_form' => 'Tab', 'strength' => '500mg', 'quantity' => null, 'timing' => '12h', 'notes' => null, 'is_default' => false, 'is_active' => true],
+ ];
+
+ foreach ($medications as $item) {
+ Medication::firstOrCreate(
+ ['name' => $item['name'], 'dosage_form' => $item['dosage_form']],
+ $item
+ );
+ }
+ }
+}
diff --git a/database/seeders/OsurgInitialSeeder.php b/database/seeders/OsurgInitialSeeder.php
new file mode 100644
index 0000000..aeb83db
--- /dev/null
+++ b/database/seeders/OsurgInitialSeeder.php
@@ -0,0 +1,97 @@
+ 'login_bg.png',
+ 'init_value' => null,
+ 'attachment' => 'initials/login_bg.png',
+ ],
+ [
+ 'init_parameter' => 'list_bg.png',
+ 'init_value' => null,
+ 'attachment' => 'initials/list_bg.png',
+ ],
+ [
+ 'init_parameter' => 'listlogo_per.png',
+ 'init_value' => null,
+ 'attachment' => 'initials/listlogo_per.png',
+ ],
+ [
+ 'init_parameter' => 'listlogo_eng.png',
+ 'init_value' => null,
+ 'attachment' => 'initials/listlogo_eng.png',
+ ],
+ [
+ 'init_parameter' => 'loginlogo_per.png',
+ 'init_value' => null,
+ 'attachment' => 'initials/loginlogo_per.png',
+ ],
+ [
+ 'init_parameter' => 'loginlogo_eng.png',
+ 'init_value' => null,
+ 'attachment' => 'initials/loginlogo_eng.png',
+ ],
+ [
+ 'init_parameter' => 'sync_peer_ip',
+ 'init_value' => '192.168.1.XX',
+ 'attachment' => null,
+ ],
+ [
+ 'init_parameter' => 'sync_peer_port',
+ 'init_value' => '8000',
+ 'attachment' => null,
+ ],
+ [
+ 'init_parameter' => 'sync_token',
+ 'init_value' => 'change-this-to-a-secret-token',
+ 'attachment' => null,
+ ],
+ [
+ 'init_parameter' => 'sms_api_url',
+ 'init_value' => 'http://94.101.184.91/api/sms',
+ 'attachment' => null,
+ ],
+ [
+ 'init_parameter' => 'sms_api_key',
+ 'init_value' => 'surgery-sms-2024',
+ 'attachment' => null,
+ ],
+ [
+ 'init_parameter' => 'ftp_user',
+ 'init_value' => 'root',
+ 'attachment' => null,
+ ],
+ [
+ 'init_parameter' => 'ftp_pass',
+ 'init_value' => 'Mjoshanitcm7717',
+ 'attachment' => null,
+ ],
+ [
+ 'init_parameter' => 'ftp_port',
+ 'init_value' => '2121',
+ 'attachment' => null,
+ ],
+ [
+ 'init_parameter' => 'ftp_remote_path',
+ 'init_value' => 'C:/wamp64/www/matab-panel/storage/app/public',
+ 'attachment' => null,
+ ],
+ ];
+
+ foreach ($initials as $item) {
+ OsurgInitial::firstOrCreate(
+ ['init_parameter' => $item['init_parameter']],
+ $item
+ );
+ }
+ }
+}
diff --git a/database/seeders/PatientIllnessSeeder.php b/database/seeders/PatientIllnessSeeder.php
new file mode 100644
index 0000000..a40aa36
--- /dev/null
+++ b/database/seeders/PatientIllnessSeeder.php
@@ -0,0 +1,39 @@
+ 'بیماری کبدی یا هپاتیت', 'row_no' => 2, 'priority' => 4],
+ ['illness' => 'اعتیاد به مواد مخدر', 'row_no' => 2, 'priority' => 3],
+ ['illness' => 'سابقه سکته', 'row_no' => 2, 'priority' => 2],
+ ['illness' => 'سابقه ضربه به فک و مفصل گیجگاهی فکی', 'row_no' => 2, 'priority' => 1],
+ ['illness' => 'ضایعات مادرزادی قلبی', 'row_no' => 1, 'priority' => 8],
+ ['illness' => 'رماتیسم قلبی یا ضایعات دریچه ای قلبی', 'row_no' => 1, 'priority' => 7],
+ ['illness' => 'دیابت (قند خون)', 'row_no' => 1, 'priority' => 6],
+ ['illness' => 'بیماری تنفسی یا آسم', 'row_no' => 1, 'priority' => 5],
+ ['illness' => 'بیماری کلیوی', 'row_no' => 1, 'priority' => 4],
+ ['illness' => 'بیماری عصبی یا صرع', 'row_no' => 1, 'priority' => 3],
+ ['illness' => 'فشار خون بالا', 'row_no' => 1, 'priority' => 2],
+ ['illness' => 'بیماری قلبی و عروقی', 'row_no' => 1, 'priority' => 1],
+ ['illness' => 'ایدز', 'row_no' => 2, 'priority' => 8],
+ ['illness' => 'سابقه عمل جراحی', 'row_no' => 2, 'priority' => 7],
+ ['illness' => 'اختلالات خونریزی دهنده و هموفیلی', 'row_no' => 2, 'priority' => 6],
+ ['illness' => 'بیماری غددی و تیروئید، پانکراس', 'row_no' => 2, 'priority' => 5],
+ ['illness' => 'الرژی', 'row_no' => 1, 'priority' => 1],
+ ];
+
+ foreach ($illnesses as $item) {
+ PatientIllness::firstOrCreate(
+ ['illness' => $item['illness']],
+ $item
+ );
+ }
+ }
+}
diff --git a/database/seeders/PaymentTypeSeeder.php b/database/seeders/PaymentTypeSeeder.php
new file mode 100644
index 0000000..a0ff135
--- /dev/null
+++ b/database/seeders/PaymentTypeSeeder.php
@@ -0,0 +1,29 @@
+ 'بانک ملت', 'account_no' => '222', 'pos_no' => null, 'description' => null],
+ ['payment_type' => 'بانک سامان', 'account_no' => '111', 'pos_no' => null, 'description' => null],
+ ['payment_type' => 'پرداخت نقدی', 'account_no' => null, 'pos_no' => null, 'description' => null],
+ ['payment_type' => 'بانک صادرات', 'account_no' => null, 'pos_no' => null, 'description' => null],
+ ['payment_type' => 'کارت به کارت بانکی', 'account_no' => '123', 'pos_no' => '456', 'description' => null],
+ ['payment_type' => 'نقد و کارت', 'account_no' => null, 'pos_no' => null, 'description' => null],
+ ['payment_type' => 'توسعه عصر', 'account_no' => null, 'pos_no' => null, 'description' => null],
+ ];
+
+ foreach ($paymentTypes as $item) {
+ PaymentType::firstOrCreate(
+ ['payment_type' => $item['payment_type']],
+ $item
+ );
+ }
+ }
+}
diff --git a/database/seeders/SurgeryCenterSeeder.php b/database/seeders/SurgeryCenterSeeder.php
new file mode 100644
index 0000000..5d5d7a5
--- /dev/null
+++ b/database/seeders/SurgeryCenterSeeder.php
@@ -0,0 +1,30 @@
+ 'کلینیک پارس',
+ 'address' => 'مازندران، ساری، میدان امام، مجتمع برلیان',
+ 'phone' => '9122283482',
+ 'email' => null,
+ 'contact_person' => 'دکتر شایگان',
+ 'description' => null,
+ ],
+ ];
+
+ foreach ($centers as $item) {
+ SurgeryCenter::firstOrCreate(
+ ['name' => $item['name']],
+ $item
+ );
+ }
+ }
+}
diff --git a/database/seeders/TreatmentSeeder.php b/database/seeders/TreatmentSeeder.php
new file mode 100644
index 0000000..e3e634d
--- /dev/null
+++ b/database/seeders/TreatmentSeeder.php
@@ -0,0 +1,42 @@
+ 'ویزیت', 'treatment_name' => 'دندان', 'descriptions' => null, 'treatment_cost' => 0],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'ویزیت', 'descriptions' => null, 'treatment_cost' => 300000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'بررسی وضعیت بیمار', 'descriptions' => null, 'treatment_cost' => 0],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'تزریق ژل', 'descriptions' => null, 'treatment_cost' => null],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'تزریق تریامیسنولون', 'descriptions' => null, 'treatment_cost' => null],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'خارج کردن اسپلینت ها و بخیه', 'descriptions' => null, 'treatment_cost' => 300000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'تعویض چسب', 'descriptions' => null, 'treatment_cost' => 150000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'مشاوره', 'descriptions' => null, 'treatment_cost' => 300000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'کشیدن تامپون', 'descriptions' => null, 'treatment_cost' => 300000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'ودیعه', 'descriptions' => null, 'treatment_cost' => 1000000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'بوتاکس', 'descriptions' => null, 'treatment_cost' => null],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'مزوتراپی', 'descriptions' => null, 'treatment_cost' => null],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'چک کردن', 'descriptions' => null, 'treatment_cost' => 150000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'جراحی سرپایی', 'descriptions' => null, 'treatment_cost' => null],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'چسب سفید', 'descriptions' => null, 'treatment_cost' => 200000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'چسب کرم', 'descriptions' => null, 'treatment_cost' => 250000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'کشیدن بخیه', 'descriptions' => null, 'treatment_cost' => 150000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'نوزونت تیوبی', 'descriptions' => null, 'treatment_cost' => 500000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'نوستریل ریتینر', 'descriptions' => null, 'treatment_cost' => 1500000],
+ ['treatment_type' => 'ویزیت', 'treatment_name' => 'نوزونت مخروطی', 'descriptions' => null, 'treatment_cost' => 500000],
+ ];
+
+ foreach ($treatments as $item) {
+ Treatment::firstOrCreate(
+ ['treatment_name' => $item['treatment_name']],
+ $item
+ );
+ }
+ }
+}
diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php
new file mode 100644
index 0000000..3e7e868
--- /dev/null
+++ b/database/seeders/UserSeeder.php
@@ -0,0 +1,53 @@
+ 'مدیر برنامه',
+ 'username' => 'admin',
+ 'email' => null,
+ 'password' => Hash::make('nn'),
+ ],
+ [
+ 'name' => 'مسعود شایگان',
+ 'username' => 'shaygan',
+ 'email' => null,
+ 'password' => Hash::make('nn'),
+ ],
+ [
+ 'name' => 'امامی',
+ 'username' => '09120861101',
+ 'email' => null,
+ 'password' => Hash::make('09120861101'),
+ ],
+ [
+ 'name' => 'رمضانی',
+ 'username' => '09365233699',
+ 'email' => null,
+ 'password' => Hash::make('09365233699'),
+ ],
+ [
+ 'name' => 'رضایی',
+ 'username' => '09118989216',
+ 'email' => null,
+ 'password' => Hash::make('09118989216'),
+ ],
+ ];
+
+ foreach ($users as $data) {
+ User::updateOrCreate(
+ ['username' => $data['username']],
+ $data
+ );
+ }
+ }
+}
diff --git a/lang/en/doctors.php b/lang/en/doctors.php
new file mode 100644
index 0000000..e311c7e
--- /dev/null
+++ b/lang/en/doctors.php
@@ -0,0 +1,11 @@
+ [
+ 'first_name' => 'First Name',
+ 'last_name' => 'Last Name',
+ 'speciality' => 'Speciality',
+ 'license_id' => 'License ID',
+ 'created_at' => 'Created At',
+ ],
+];
diff --git a/lang/en/medications.php b/lang/en/medications.php
new file mode 100644
index 0000000..739f9d3
--- /dev/null
+++ b/lang/en/medications.php
@@ -0,0 +1,18 @@
+ [
+ 'info' => 'Medication Information',
+ ],
+ 'fields' => [
+ 'name' => 'Medication Name',
+ 'dosage_form' => 'Dosage Form',
+ 'strength' => 'Strength',
+ 'quantity' => 'Quantity',
+ 'timing' => 'Timing',
+ 'notes' => 'Notes',
+ 'is_default' => 'Default',
+ 'is_active' => 'Active',
+ 'created_at' => 'Created At',
+ ],
+];
diff --git a/lang/en/navigation.php b/lang/en/navigation.php
new file mode 100644
index 0000000..241dc24
--- /dev/null
+++ b/lang/en/navigation.php
@@ -0,0 +1,123 @@
+ [
+ 'title' => 'Dashboard',
+ ],
+ 'roles' => [
+ 'title' => 'Roles',
+ 'description' => 'Manage roles and user access levels',
+ ],
+ 'users' => [
+ 'title' => 'User Management',
+ 'singular' => 'User',
+ 'description' => 'Manage clinic staff user accounts and access levels.',
+ ],
+ 'doctors' => [
+ 'title' => 'Doctors',
+ 'singular' => 'Doctor',
+ 'description' => 'Log and manage list of your clinic doctors',
+ ],
+ 'payment_types' => [
+ 'title' => 'Payment Types',
+ 'singular' => 'Payment Type',
+ 'description' => 'List of POS information and payment methods.',
+ ],
+ 'patient_illness' => [
+ 'title' => 'Patient Illness',
+ 'singular' => 'Patient Illness',
+ 'description' => 'Manage list of probable illnesses for patients.',
+ ],
+ 'treatments' => [
+ 'title' => 'Treatments',
+ 'singular' => 'Treatment',
+ 'description' => 'Log different visits or operations for doctors and patients.',
+ ],
+ 'surgery_centers' => [
+ 'title' => 'Surgery Centers',
+ 'singular' => 'Surgery Center',
+ 'description' => 'Manage and configure surgery centers affiliated with your clinic.',
+ ],
+ 'patients' => [
+ 'title' => 'Patients',
+ 'singular' => 'Patient',
+ 'description' => 'Log & Manage Patients Information, Including surgery & payment logs',
+ ],
+ 'medications' => [
+ 'title' => 'Medications',
+ 'singular' => 'Medication',
+ 'description' => 'Manage and configure medications list for your clinic.',
+ ],
+ 'visits' => [
+ 'title' => 'Visits',
+ 'singular' => 'Visit',
+ 'description' => 'Log and manage all patient visits with treatment details, costs and payment records.',
+ ],
+ 'prescriptions' => [
+ 'title' => 'Prescriptions',
+ 'singular' => 'Prescription',
+ 'description' => 'Issue and manage free prescriptions with your clinic letterhead for patients.',
+ ],
+ 'surgery_appointments' => [
+ 'title' => 'Surgery Appointments',
+ 'singular' => 'Surgery Appointment',
+ 'description' => 'View and manage surgery appointments. Track surgery date, center, and status for each patient.',
+ ],
+ 'osurg_initials' => [
+ 'title' => 'Initial Settings',
+ 'singular' => 'Initial Setting',
+ 'description' => 'Few preferences for program are logged here.',
+ ],
+ 'sms_logs' => [
+ 'label' => 'SMS Logs',
+ 'title' => 'SMS Logs',
+ 'description' => 'View and track reminder SMS messages sent to patients.',
+ ],
+ 'osurg_audit' => [
+ 'title' => 'Audit Log',
+ 'singular' => 'Audit',
+ 'description' => 'Every changes made in database is logged in audit table.',
+ ],
+ 'sync' => [
+ 'label' => 'Sync',
+ 'title' => 'Database Synchronization',
+ 'details' => 'Sync Details',
+ 'confirm_heading' => 'Two-way Synchronization',
+ 'confirm_description' => 'This system\'s data will be synchronized with the peer system. Are you sure?',
+ 'confirm_button' => 'Yes, Sync Now',
+ 'error_title' => 'Configuration Error',
+ 'error_not_configured' => 'Peer IP address or sync token is not configured in Initial Settings.',
+ 'success' => 'Synchronization completed successfully ✓',
+ 'failed' => 'Synchronization failed',
+ 'see_report' => 'Check the report for details.',
+ 'last_sync' => 'Last Sync',
+ 'pending_changes' => 'Pending Changes',
+ 'peer_address' => 'Peer System Address',
+ 'never' => 'Never',
+ 'setup_guide' => 'Setup Guide',
+ 'setup_description' => 'To enable synchronization, set the following values in the .env file on both systems:',
+ 'setup_description_dynamic' => 'Sync settings are managed via the "Initial Settings" section. The following parameters must be configured on both systems:',
+ 'field_peer_ip' => 'Peer system IP address',
+ 'field_peer_port' => 'Peer system port (default 80)',
+ 'field_sync_token' => 'Security token (must be identical on both systems)',
+ 'setup_warning' => 'The sync_token value must be identical on both systems.',
+ 'last_report' => 'Last Sync Report',
+ 'sync_with_peer' => 'Sync with Peer System',
+ 'status_connecting' => 'Connecting to peer system...',
+ 'status_receiving' => 'Receiving changes...',
+ 'status_sending' => 'Sending changes...',
+ 'close' => 'Close',
+ ],
+ 'backup' => [
+ 'label' => 'Backup (Download JSON)',
+ ],
+ 'groups' => [
+ 'patients' => 'Patients & Visits',
+ 'diseases' => 'Illnesses & Treatments',
+ 'treatment' => 'Illnesses & Treatments',
+ 'clinic' => 'Clinic Information',
+ 'settings' => 'Program Administration',
+ 'users' => 'User Management',
+ 'system' => 'System',
+ ],
+];
diff --git a/lang/en/osurg_initials.php b/lang/en/osurg_initials.php
new file mode 100644
index 0000000..fe01d03
--- /dev/null
+++ b/lang/en/osurg_initials.php
@@ -0,0 +1,10 @@
+ [
+ 'init_parameter' => 'Parameter',
+ 'init_value' => 'Value',
+ 'attachment' => 'Attachment',
+ 'created_at' => 'Created At',
+ ],
+];
diff --git a/lang/en/patient_illness.php b/lang/en/patient_illness.php
new file mode 100644
index 0000000..5ea48f0
--- /dev/null
+++ b/lang/en/patient_illness.php
@@ -0,0 +1,14 @@
+ [
+ 'illness' => 'Illness',
+ 'row_no' => 'Column',
+ 'priority' => 'Priority',
+ 'created_at' => 'Created At',
+ ],
+ 'row_options' => [
+ 'first' => 'Column 1',
+ 'second' => 'Column 2',
+ ],
+];
diff --git a/lang/en/patients.php b/lang/en/patients.php
new file mode 100644
index 0000000..56dee0d
--- /dev/null
+++ b/lang/en/patients.php
@@ -0,0 +1,84 @@
+ [
+ 'personal' => 'Personal Information',
+ 'contact' => 'Contact Information',
+ 'medical' => 'Medical Information',
+ 'other' => 'Other Information',
+ 'patient_info' => '1. Patient Information',
+ 'illness' => '2. Medical History',
+ 'surgery_notes' => '3. Surgery Notes',
+ 'media' => '4. Patient Media',
+ ],
+ 'fields' => [
+ 'icno' => 'National ID',
+ 'first_name' => 'First Name',
+ 'last_name' => 'Last Name',
+ 'full_name' => 'Full Name',
+ 'father_name' => 'Father Name',
+ 'gender' => 'Gender',
+ 'birth_date' => 'Birth Date',
+ 'age' => 'Age',
+ 'marital_status' => 'Marital Status',
+ 'education' => 'Education',
+ 'job' => 'Job',
+ 'hand_phone' => 'Mobile',
+ 'home_phone' => 'Home Phone',
+ 'work_phone' => 'Work Phone',
+ 'other_phone' => 'Other Phone',
+ 'home_address' => 'Home Address',
+ 'work_address' => 'Work Address',
+ 'refered_by' => 'Referred By',
+ 'referal_reason' => 'Referral Reason',
+ 'doc_id' => 'Doctor ID',
+ 'insurance' => 'Insurance',
+ 'insurance_no' => 'Insurance No.',
+ 'blood_pressure' => 'Blood Pressure',
+ 'blood_sugar' => 'Blood Sugar',
+ 'current_illness_1' => 'Current Illness (1)',
+ 'current_illness_2' => 'Current Illness (2)',
+ 'is_undercare' => 'Under Medical Care',
+ 'undercare_reason' => 'Care Reason',
+ 'is_usingdrug' => 'Using Medication',
+ 'underdrug_reason' => 'Medication Name',
+ 'has_alergyto' => 'Has Allergy',
+ 'alergy_reason' => 'Allergy Reason',
+ 'description' => 'Description',
+ 'has_surgery_appointment' => 'Surgery Appointment',
+ 'surgery_appointment' => 'Surgery Appointment',
+ 'surgery_date' => 'Surgery Date',
+ 'surgery_time' => 'Surgery Time',
+ 'surgery_center' => 'Surgery Center',
+ 'surgery_before' => 'Pre-surgery Notes',
+ 'sergery_after' => 'Post-surgery Notes',
+ 'photos_before' => 'Before Photos',
+ 'photos_after' => 'After Photos',
+ 'videos' => 'Videos',
+ 'audio_files' => 'Audio Files',
+ 'audio_speed' => 'Audio Playback Speed',
+ 'created_at' => 'Created At',
+ 'updated_at' => 'Last Updated',
+ 'created_by' => 'Created By',
+ 'updated_by' => 'Updated By',
+ ],
+ 'actions' => [
+ 'surgery_appointment' => 'Surgery Appointment',
+ 'save_appointment' => 'Save Appointment',
+ 'delete_appointment' => 'Delete Appointment',
+ 'appointment_saved' => 'Surgery appointment saved successfully',
+ 'appointment_deleted' => 'Surgery appointment deleted',
+ 'sms_sent' => 'Reminder SMS sent successfully',
+ 'sms_failed' => 'Failed to send reminder SMS',
+ 'api_failed' => 'Server connection failed — appointment not saved',
+ 'save_and_print_admission' => 'Save & Print Admission',
+ 'print_admission' => 'Print Admission',
+ 'view_files' => 'Patient Files',
+ ],
+ 'validation' => [
+ 'first_name_required' => 'First name is required.',
+ 'last_name_required' => 'Last name is required.',
+ 'father_name_required' => 'Father name is required.',
+ 'hand_phone_required' => 'Mobile number is required.',
+ ],
+];
diff --git a/lang/en/payment_types.php b/lang/en/payment_types.php
new file mode 100644
index 0000000..07d2acf
--- /dev/null
+++ b/lang/en/payment_types.php
@@ -0,0 +1,11 @@
+ [
+ 'payment_type' => 'Payment Type',
+ 'account_no' => 'Account No',
+ 'pos_no' => 'POS No',
+ 'description' => 'Description',
+ 'created_at' => 'Created At',
+ ],
+];
diff --git a/lang/en/prescriptions.php b/lang/en/prescriptions.php
new file mode 100644
index 0000000..548d5ec
--- /dev/null
+++ b/lang/en/prescriptions.php
@@ -0,0 +1,27 @@
+ [
+ 'info' => 'Prescription Info',
+ 'medications' => 'Select Medications',
+ 'content' => 'Prescription Content',
+ ],
+ 'fields' => [
+ 'patient' => 'Patient',
+ 'doctor' => 'Doctor',
+ 'issue_date' => 'Issue Date',
+ 'issue_datetime' => 'Issue Date & Time',
+ 'medication_ids' => 'Prescribed Medications',
+ 'content' => 'Prescription Content',
+ 'created_by' => 'Created By',
+ 'created_at' => 'Created At',
+ ],
+ 'actions' => [
+ 'create' => 'New Prescription',
+ 'saved' => 'Prescription saved successfully',
+ 'save_and_print' => 'Save & Print',
+ 'print_prescription' => 'Print Prescription',
+ 'print_admission' => 'Print Admission',
+ 'print_lab' => 'Print Lab Order',
+ ],
+];
diff --git a/lang/en/surgery_appointments.php b/lang/en/surgery_appointments.php
new file mode 100644
index 0000000..304131a
--- /dev/null
+++ b/lang/en/surgery_appointments.php
@@ -0,0 +1,15 @@
+ [
+ 'info' => 'Surgery Appointment Information',
+ ],
+ 'fields' => [
+ 'patient' => 'Patient',
+ 'surgery_center' => 'Surgery Center',
+ 'surgery_date' => 'Surgery Date',
+ 'surgery_time' => 'Surgery Time',
+ 'created_by' => 'Created By',
+ 'created_at' => 'Created At',
+ ],
+];
diff --git a/lang/en/surgery_centers.php b/lang/en/surgery_centers.php
new file mode 100644
index 0000000..e17ad5e
--- /dev/null
+++ b/lang/en/surgery_centers.php
@@ -0,0 +1,13 @@
+ [
+ 'name' => 'Center Name',
+ 'address' => 'Address',
+ 'phone' => 'Phone',
+ 'email' => 'Email',
+ 'contact_person' => 'Contact Person',
+ 'description' => 'Description',
+ 'created_at' => 'Created At',
+ ],
+];
diff --git a/lang/en/sync_log.php b/lang/en/sync_log.php
new file mode 100644
index 0000000..b529c7d
--- /dev/null
+++ b/lang/en/sync_log.php
@@ -0,0 +1,13 @@
+ [
+ 'id' => 'ID',
+ 'datetime' => 'Date & Time',
+ 'ip' => 'IP Address',
+ 'user' => 'User',
+ 'table_name' => 'Table',
+ 'action' => 'Action',
+ 'record_id' => 'Record ID',
+ ],
+];
diff --git a/lang/en/table.php b/lang/en/table.php
new file mode 100644
index 0000000..f1fb8a6
--- /dev/null
+++ b/lang/en/table.php
@@ -0,0 +1,8 @@
+ 'Export',
+ 'export_excel' => 'Export Excel',
+ 'export_pdf' => 'Export PDF',
+ 'export_excel_selected' => 'Export Excel (Selected)',
+];
diff --git a/lang/en/treatments.php b/lang/en/treatments.php
new file mode 100644
index 0000000..30e7607
--- /dev/null
+++ b/lang/en/treatments.php
@@ -0,0 +1,11 @@
+ [
+ 'treatment_type' => 'Treatment Type',
+ 'treatment_name' => 'Treatment Name',
+ 'descriptions' => 'Descriptions',
+ 'treatment_cost' => 'Cost (Rial)',
+ 'created_at' => 'Created At',
+ ],
+];
diff --git a/lang/en/users.php b/lang/en/users.php
new file mode 100644
index 0000000..c05343d
--- /dev/null
+++ b/lang/en/users.php
@@ -0,0 +1,11 @@
+ [
+ 'name' => 'Name',
+ 'username' => 'Username',
+ 'password' => 'Password',
+ 'roles' => 'Roles',
+ 'created_at' => 'Created At',
+ ],
+];
diff --git a/lang/en/visits.php b/lang/en/visits.php
new file mode 100644
index 0000000..c1f933b
--- /dev/null
+++ b/lang/en/visits.php
@@ -0,0 +1,28 @@
+ [
+ 'visit_info' => 'Visit Information',
+ 'financial_info' => 'Financial Information',
+ 'treatment_details' => 'Treatment Details',
+ ],
+ 'fields' => [
+ 'patient' => 'Patient',
+ 'visit_date' => 'Visit Date',
+ 'visit_time' => 'Visit Time',
+ 'doctor' => 'Doctor',
+ 'treatment' => 'Service / Treatment',
+ 'treatment_cost' => 'Treatment Cost',
+ 'paid_amount' => 'Paid Amount',
+ 'remained_amount' => 'Remaining Balance',
+ 'payment_type' => 'Payment Method',
+ 'treatment_description' => 'Treatment Description',
+ 'currency' => 'IRR',
+ 'created_by' => 'Created By',
+ 'created_at' => 'Created At',
+ ],
+ 'actions' => [
+ 'create' => 'New Visit',
+ 'saved' => 'Visit saved successfully',
+ ],
+];
diff --git a/lang/fa/doctors.php b/lang/fa/doctors.php
new file mode 100644
index 0000000..96b9469
--- /dev/null
+++ b/lang/fa/doctors.php
@@ -0,0 +1,11 @@
+ [
+ 'first_name' => 'نام',
+ 'last_name' => 'نام خانوادگی',
+ 'speciality' => 'تخصص',
+ 'license_id' => 'شماره نظام پزشکی',
+ 'created_at' => 'تاریخ ثبت',
+ ],
+];
diff --git a/lang/fa/medications.php b/lang/fa/medications.php
new file mode 100644
index 0000000..88ab7e0
--- /dev/null
+++ b/lang/fa/medications.php
@@ -0,0 +1,18 @@
+ [
+ 'info' => 'اطلاعات دارو',
+ ],
+ 'fields' => [
+ 'name' => 'نام دارو',
+ 'dosage_form' => 'شکل دارویی',
+ 'strength' => 'دوز',
+ 'quantity' => 'تعداد',
+ 'timing' => 'زمان مصرف',
+ 'notes' => 'یادداشت',
+ 'is_default' => 'پیشفرض',
+ 'is_active' => 'فعال',
+ 'created_at' => 'تاریخ ثبت',
+ ],
+];
diff --git a/lang/fa/navigation.php b/lang/fa/navigation.php
new file mode 100644
index 0000000..0a30a66
--- /dev/null
+++ b/lang/fa/navigation.php
@@ -0,0 +1,122 @@
+ [
+ 'title' => 'داشبورد',
+ ],
+ 'roles' => [
+ 'title' => 'نقشها',
+ 'description' => 'تعریف و مدیریت نقشهای کاربری و سطح دسترسی هر نقش در سامانه',
+ ],
+ 'users' => [
+ 'title' => 'مدیریت کاربران',
+ 'singular' => 'کاربر',
+ 'description' => 'مدیریت حسابهای کاربری و سطح دسترسی کارکنان کلینیک.',
+ ],
+ 'doctors' => [
+ 'title' => 'لیست مشخصات پزشکان',
+ 'singular' => 'پزشک',
+ 'description' => 'مشخصات پزشکان کلینیک خود را در این لیست ثبت و مدیریت نمایید.',
+ ],
+ 'payment_types' => [
+ 'title' => 'لیست انواع پرداخت',
+ 'singular' => 'روش پرداخت',
+ 'description' => 'لیست انواع روشهای پرداخت مشتریان بهمراه نام و شماره های درگاه های پرداخت',
+ ],
+ 'patient_illness' => [
+ 'title' => 'لیست بیماری ها',
+ 'singular' => 'بیماری',
+ 'description' => 'لیست بیماری های ممکن برای قبت وضعیت بیماران را در این نما ثبت نمایید.',
+ ],
+ 'treatments' => [
+ 'title' => 'لیست انواع درمان',
+ 'singular' => 'خدمت درمانی',
+ 'description' => 'عناوین درمان و ویزیت و عمل ها را در این لیست ثبت و مدیریت نمایید.',
+ ],
+ 'surgery_centers' => [
+ 'title' => 'مراکز جراحی',
+ 'singular' => 'مرکز جراحی',
+ 'description' => 'مدیریت و تنظیمات مراکز جراحی وابسته به کلینیک شما.',
+ ],
+ 'patients' => [
+ 'title' => 'لیست بیماران',
+ 'singular' => 'بیمار',
+ 'description' => 'لیست بیماران کلینیک خود را در این نما ثبت و مدیریت کنید. می توانید برای هر بیمار تمامی مستندات ویزیت، جراحی و پرداختهای بیمار را در این لیست مشاهده نمایید.',
+ ],
+ 'medications' => [
+ 'title' => 'داروها',
+ 'singular' => 'دارو',
+ 'description' => 'مدیریت و تنظیمات لیست داروهای کلینیک شما.',
+ ],
+ 'visits' => [
+ 'title' => 'لیست ویزیتها',
+ 'singular' => 'ویزیت',
+ 'description' => 'تمام ویزیتهای بیماران را با جزئیات درمان، هزینه و پرداخت در این بخش ثبت و مدیریت نمایید.',
+ ],
+ 'prescriptions' => [
+ 'title' => 'صدور نسخه',
+ 'singular' => 'نسخه',
+ 'description' => 'برای بیماران کلینیک نسخه های آزاد با سربرگ کلینیک خود ثبت و صادر نمایید.',
+ ],
+ 'surgery_appointments' => [
+ 'title' => 'نوبت عمل',
+ 'singular' => 'نوبت عمل',
+ 'description' => 'نوبتهای عمل جراحی بیماران را در این بخش مشاهده و مدیریت نمایید. زمانبندی عمل، مرکز جراحی و وضعیت نوبت هر بیمار در این لیست قابل پیگیری است.',
+ ],
+ 'osurg_initials' => [
+ 'title' => 'تنظیمات مدیریتی برنامه',
+ 'singular' => 'تنظیم اولیه',
+ 'description' => 'تنظیمات اولیه شبکه ای و گرافیکی برنامه در این لیست ثبت شده اند.',
+ ],
+ 'sync' => [
+ 'label' => 'همگامسازی',
+ 'title' => 'همگامسازی پایگاه داده',
+ 'details' => 'جزییات همگامسازی',
+ 'confirm_heading' => 'همگامسازی دو طرفه',
+ 'confirm_description' => 'اطلاعات این سیستم با سیستم مقابل همگامسازی خواهد شد. آیا مطمئنید؟',
+ 'confirm_button' => 'بله، همگام کن',
+ 'error_title' => 'خطا در تنظیمات',
+ 'error_not_configured' => 'آدرس IP سیستم مقابل یا توکن در تنظیمات اولیه تنظیم نشده است.',
+ 'success' => 'همگامسازی انجام شد ✓',
+ 'failed' => 'همگامسازی با خطا مواجه شد',
+ 'see_report' => 'برای جزئیات، گزارش را ببینید.',
+ 'last_sync' => 'آخرین همگامسازی',
+ 'pending_changes' => 'تغییرات ارسال نشده',
+ 'peer_address' => 'آدرس سیستم مقابل',
+ 'never' => 'هرگز',
+ 'setup_guide' => 'راهنمای تنظیم',
+ 'setup_description' => 'برای فعالسازی همگامسازی، مقادیر زیر را در فایل .env هر دو سیستم تنظیم کنید:',
+ 'setup_description_dynamic' => 'تنظیمات همگامسازی از بخش «تنظیمات اولیه» قابل مدیریت است. پارامترهای زیر باید روی هر دو سیستم تنظیم شوند:',
+ 'field_peer_ip' => 'آدرس IP سیستم مقابل',
+ 'field_peer_port' => 'پورت سیستم مقابل (پیشفرض ۸۰)',
+ 'field_sync_token' => 'توکن امنیتی (باید روی هر دو سیستم یکسان باشد)',
+ 'setup_warning' => 'مقدار sync_token باید روی هر دو سیستم کاملاً یکسان باشد.',
+ 'last_report' => 'گزارش آخرین همگامسازی',
+ 'sync_with_peer' => 'همگامسازی با سیستم مقابل',
+ 'status_connecting' => 'در حال اتصال به سیستم مقابل...',
+ 'status_receiving' => 'در حال دریافت تغییرات...',
+ 'status_sending' => 'در حال ارسال تغییرات...',
+ 'close' => 'بستن',
+ ],
+ 'sms_logs' => [
+ 'label' => 'لاگ پیامکها',
+ 'title' => 'لاگ پیامکها',
+ 'description' => 'مشاهده و پیگیری وضعیت پیامکهای یادآوری ارسالشده به بیماران.',
+ ],
+ 'osurg_audit' => [
+ 'title' => 'لیست عملیات کاربران',
+ 'singular' => 'عملیات',
+ 'description' => 'تمامی عملیات انجام شده توسط کاربران در لیست عملیات کاربران ثبت می گردد. همچنین عملیات همگام سازی دستگاههای آقلاین نیز در این لیست می آید.',
+ ],
+ 'backup' => [
+ 'label' => 'پشتیبانگیری',
+ ],
+ 'groups' => [
+ 'patients' => 'بیماران و ویزیت',
+ 'diseases' => 'بیماریها و روشهای درمان',
+ 'clinic' => 'اطلاعات کلینیک',
+ 'settings' => 'تنظیمات',
+ 'users' => 'مدیریت کاربران',
+ 'system' => 'سیستم',
+ ],
+];
diff --git a/lang/fa/osurg_initials.php b/lang/fa/osurg_initials.php
new file mode 100644
index 0000000..a323091
--- /dev/null
+++ b/lang/fa/osurg_initials.php
@@ -0,0 +1,10 @@
+ [
+ 'init_parameter' => 'پارامتر',
+ 'init_value' => 'مقدار',
+ 'attachment' => 'فایل پیوست',
+ 'created_at' => 'تاریخ ثبت',
+ ],
+];
diff --git a/lang/fa/patient_illness.php b/lang/fa/patient_illness.php
new file mode 100644
index 0000000..f29cb46
--- /dev/null
+++ b/lang/fa/patient_illness.php
@@ -0,0 +1,14 @@
+ [
+ 'illness' => 'بیماری',
+ 'row_no' => 'ستون',
+ 'priority' => 'اولویت',
+ 'created_at' => 'تاریخ ثبت',
+ ],
+ 'row_options' => [
+ 'first' => 'ستون اول',
+ 'second' => 'ستون دوم',
+ ],
+];
diff --git a/lang/fa/patients.php b/lang/fa/patients.php
new file mode 100644
index 0000000..9e0ae6a
--- /dev/null
+++ b/lang/fa/patients.php
@@ -0,0 +1,84 @@
+ [
+ 'surgery_appointment' => 'نوبت عمل',
+ 'save_appointment' => 'ثبت نوبت',
+ 'delete_appointment' => 'حذف نوبت',
+ 'appointment_saved' => 'نوبت عمل با موفقیت ثبت شد',
+ 'appointment_deleted' => 'نوبت عمل حذف شد',
+ 'sms_sent' => 'پیامک یادآوری با موفقیت ارسال شد',
+ 'sms_failed' => 'خطا در ارسال پیامک یادآوری',
+ 'api_failed' => 'خطا در ارتباط با سرور — نوبت ذخیره نشد',
+ 'print_admission' => 'نسخه پذیرش',
+ 'save_and_print_admission' => 'ثبت و نسخه پذیرش',
+ 'view_files' => 'فایلهای بیمار',
+ ],
+ 'sections' => [
+ 'personal' => 'اطلاعات شخصی',
+ 'contact' => 'اطلاعات تماس',
+ 'medical' => 'اطلاعات پزشکی',
+ 'other' => 'سایر اطلاعات',
+ 'patient_info' => '۱. مشخصات بیمار',
+ 'illness' => '۲. کدامیک از بیماریهای زیر را داشته و یا دارید؟',
+ 'surgery_notes' => '۳. توضیحات عمل',
+ 'media' => '۴. تصاویر بیمار',
+ ],
+ 'fields' => [
+ 'icno' => 'کد ملی',
+ 'first_name' => 'نام',
+ 'last_name' => 'نام خانوادگی',
+ 'full_name' => 'نام و نام خانوادگی',
+ 'father_name' => 'نام پدر',
+ 'gender' => 'جنسیت',
+ 'birth_date' => 'تاریخ تولد',
+ 'age' => 'سن',
+ 'marital_status' => 'وضعیت تأهل',
+ 'education' => 'تحصیلات',
+ 'job' => 'شغل',
+ 'hand_phone' => 'موبایل',
+ 'home_phone' => 'تلفن منزل',
+ 'work_phone' => 'تلفن محل کار',
+ 'other_phone' => 'تلفن دیگر',
+ 'home_address' => 'آدرس منزل',
+ 'work_address' => 'آدرس محل کار',
+ 'refered_by' => 'معرف',
+ 'referal_reason' => 'علت مراجعه',
+ 'doc_id' => 'شناسه پزشک',
+ 'insurance' => 'بیمه',
+ 'insurance_no' => 'شماره بیمه',
+ 'blood_pressure' => 'فشار خون',
+ 'blood_sugar' => 'قند خون',
+ 'current_illness_1' => 'بیماری فعلی (۱)',
+ 'current_illness_2' => 'بیماری فعلی (۲)',
+ 'is_undercare' => 'تحت درمان',
+ 'undercare_reason' => 'علت درمان',
+ 'is_usingdrug' => 'مصرف دارو',
+ 'underdrug_reason' => 'نام دارو',
+ 'has_alergyto' => 'آلرژی',
+ 'alergy_reason' => 'علت آلرژی',
+ 'description' => 'توضیحات',
+ 'has_surgery_appointment' => 'نوبت جراحی',
+ 'surgery_appointment' => 'نوبت عمل',
+ 'surgery_date' => 'تاریخ عمل',
+ 'surgery_time' => 'ساعت عمل',
+ 'surgery_center' => 'مرکز جراحی',
+ 'surgery_before' => 'توضیحات قبل از عمل',
+ 'sergery_after' => 'توضیحات بعد از عمل',
+ 'photos_before' => 'تصاویر قبل از عمل',
+ 'photos_after' => 'تصاویر بعد از عمل',
+ 'videos' => 'فیلمها',
+ 'audio_files' => 'فایلهای صوتی',
+ 'audio_speed' => 'سرعت پخش صدا',
+ 'created_at' => 'تاریخ ثبت',
+ 'updated_at' => 'زمان ویرایش',
+ 'created_by' => 'ثبتکننده',
+ 'updated_by' => 'ویرایشکننده',
+ ],
+ 'validation' => [
+ 'first_name_required' => 'وارد کردن نام الزامی است.',
+ 'last_name_required' => 'وارد کردن نام خانوادگی الزامی است.',
+ 'father_name_required' => 'وارد کردن نام پدر الزامی است.',
+ 'hand_phone_required' => 'وارد کردن شماره موبایل الزامی است.',
+ ],
+];
diff --git a/lang/fa/payment_types.php b/lang/fa/payment_types.php
new file mode 100644
index 0000000..ef3732e
--- /dev/null
+++ b/lang/fa/payment_types.php
@@ -0,0 +1,11 @@
+ [
+ 'payment_type' => 'نوع پرداخت',
+ 'account_no' => 'شماره حساب',
+ 'pos_no' => 'شماره POS',
+ 'description' => 'توضیحات',
+ 'created_at' => 'تاریخ ثبت',
+ ],
+];
diff --git a/lang/fa/prescriptions.php b/lang/fa/prescriptions.php
new file mode 100644
index 0000000..5d16ab9
--- /dev/null
+++ b/lang/fa/prescriptions.php
@@ -0,0 +1,27 @@
+ [
+ 'info' => 'اطلاعات نسخه',
+ 'medications' => 'انتخاب دارو',
+ 'content' => 'متن نسخه',
+ ],
+ 'fields' => [
+ 'patient' => 'بیمار',
+ 'doctor' => 'پزشک / ثبتکننده',
+ 'issue_date' => 'تاریخ صدور',
+ 'issue_datetime' => 'تاریخ و ساعت صدور',
+ 'medication_ids' => 'داروهای تجویزشده',
+ 'content' => 'متن نسخه',
+ 'created_by' => 'ایجادکننده',
+ 'created_at' => 'تاریخ ایجاد',
+ ],
+ 'actions' => [
+ 'create' => 'ثبت نسخه',
+ 'saved' => 'نسخه با موفقیت ثبت شد',
+ 'save_and_print' => 'ثبت و پرینت نسخه',
+ 'print_prescription' => 'پرینت نسخه',
+ 'print_admission' => 'پرینت نسخه پذیرش',
+ 'print_lab' => 'پرینت آزمایش',
+ ],
+];
diff --git a/lang/fa/surgery_appointments.php b/lang/fa/surgery_appointments.php
new file mode 100644
index 0000000..5e528f5
--- /dev/null
+++ b/lang/fa/surgery_appointments.php
@@ -0,0 +1,15 @@
+ [
+ 'info' => 'اطلاعات نوبت عمل',
+ ],
+ 'fields' => [
+ 'patient' => 'بیمار',
+ 'surgery_center' => 'مرکز جراحی',
+ 'surgery_date' => 'تاریخ عمل',
+ 'surgery_time' => 'ساعت عمل',
+ 'created_by' => 'ثبتکننده',
+ 'created_at' => 'تاریخ ثبت',
+ ],
+];
diff --git a/lang/fa/surgery_centers.php b/lang/fa/surgery_centers.php
new file mode 100644
index 0000000..10ebfc8
--- /dev/null
+++ b/lang/fa/surgery_centers.php
@@ -0,0 +1,13 @@
+ [
+ 'name' => 'نام مرکز',
+ 'address' => 'آدرس',
+ 'phone' => 'تلفن',
+ 'email' => 'ایمیل',
+ 'contact_person' => 'نام مسئول',
+ 'description' => 'توضیحات',
+ 'created_at' => 'تاریخ ثبت',
+ ],
+];
diff --git a/lang/fa/sync_log.php b/lang/fa/sync_log.php
new file mode 100644
index 0000000..9960c81
--- /dev/null
+++ b/lang/fa/sync_log.php
@@ -0,0 +1,13 @@
+ [
+ 'id' => 'شناسه',
+ 'datetime' => 'تاریخ و زمان',
+ 'ip' => 'آدرس IP',
+ 'user' => 'کاربر',
+ 'table_name' => 'جدول',
+ 'action' => 'عملیات',
+ 'record_id' => 'شناسه رکورد',
+ ],
+];
diff --git a/lang/fa/table.php b/lang/fa/table.php
new file mode 100644
index 0000000..eb64c25
--- /dev/null
+++ b/lang/fa/table.php
@@ -0,0 +1,8 @@
+ 'دریافت خروجی',
+ 'export_excel' => 'خروجی Excel',
+ 'export_pdf' => 'خروجی PDF',
+ 'export_excel_selected' => 'خروجی Excel (انتخابشدهها)',
+];
diff --git a/lang/fa/treatments.php b/lang/fa/treatments.php
new file mode 100644
index 0000000..9498027
--- /dev/null
+++ b/lang/fa/treatments.php
@@ -0,0 +1,11 @@
+ [
+ 'treatment_type' => 'نوع درمان',
+ 'treatment_name' => 'نام درمان',
+ 'descriptions' => 'توضیحات',
+ 'treatment_cost' => 'هزینه (ریال)',
+ 'created_at' => 'تاریخ ثبت',
+ ],
+];
\ No newline at end of file
diff --git a/lang/fa/users.php b/lang/fa/users.php
new file mode 100644
index 0000000..07c1e5b
--- /dev/null
+++ b/lang/fa/users.php
@@ -0,0 +1,11 @@
+ [
+ 'name' => 'نام',
+ 'username' => 'نام کاربری',
+ 'password' => 'رمز عبور',
+ 'roles' => 'نقشها',
+ 'created_at' => 'تاریخ ایجاد',
+ ],
+];
diff --git a/lang/fa/visits.php b/lang/fa/visits.php
new file mode 100644
index 0000000..b26799a
--- /dev/null
+++ b/lang/fa/visits.php
@@ -0,0 +1,28 @@
+ [
+ 'visit_info' => 'اطلاعات ویزیت',
+ 'financial_info' => 'اطلاعات مالی',
+ 'treatment_details'=> 'شرح درمان',
+ ],
+ 'fields' => [
+ 'patient' => 'بیمار',
+ 'visit_date' => 'تاریخ ویزیت',
+ 'visit_time' => 'ساعت ویزیت',
+ 'doctor' => 'پزشک',
+ 'treatment' => 'نوع خدمت / درمان',
+ 'treatment_cost' => 'هزینه درمان',
+ 'paid_amount' => 'مبلغ پرداخت شده',
+ 'remained_amount' => 'مانده بدهی',
+ 'payment_type' => 'روش پرداخت',
+ 'treatment_description' => 'شرح درمان',
+ 'currency' => 'ریال',
+ 'created_by' => 'ثبتکننده',
+ 'created_at' => 'تاریخ ثبت',
+ ],
+ 'actions' => [
+ 'create' => 'ثبت ویزیت',
+ 'saved' => 'ویزیت با موفقیت ثبت شد',
+ ],
+];
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..5269b35
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,2653 @@
+{
+ "name": "matab-panel",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "@fontsource/vazirmatn": "^5.2.8"
+ },
+ "devDependencies": {
+ "@tailwindcss/vite": "^4.2.1",
+ "@tauri-apps/cli": "^2",
+ "axios": "^1.11.0",
+ "concurrently": "^9.0.1",
+ "laravel-vite-plugin": "^2.0.0",
+ "tailwindcss": "^4.2.1",
+ "vite": "^7.0.7"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz",
+ "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz",
+ "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz",
+ "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz",
+ "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz",
+ "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz",
+ "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz",
+ "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz",
+ "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz",
+ "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz",
+ "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz",
+ "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz",
+ "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz",
+ "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz",
+ "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz",
+ "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz",
+ "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz",
+ "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz",
+ "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz",
+ "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz",
+ "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz",
+ "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz",
+ "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz",
+ "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz",
+ "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz",
+ "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz",
+ "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@fontsource/vazirmatn": {
+ "version": "5.2.8",
+ "resolved": "https://registry.npmjs.org/@fontsource/vazirmatn/-/vazirmatn-5.2.8.tgz",
+ "integrity": "sha512-WoDgv8R/y1gwgTS8Q2uL8d2ayeSGNv2IrYQ4wHmJkVwYPb8KVODrqbbvEjBqLOo5WP5kLJIrO06FRDMnSFuCaA==",
+ "license": "OFL-1.1",
+ "funding": {
+ "url": "https://github.com/sponsors/ayuhito"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz",
+ "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz",
+ "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz",
+ "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz",
+ "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz",
+ "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz",
+ "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz",
+ "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz",
+ "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz",
+ "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz",
+ "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz",
+ "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz",
+ "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz",
+ "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz",
+ "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz",
+ "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz",
+ "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz",
+ "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
+ "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz",
+ "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz",
+ "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz",
+ "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz",
+ "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz",
+ "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz",
+ "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz",
+ "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@tailwindcss/node": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.1.tgz",
+ "integrity": "sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/remapping": "^2.3.5",
+ "enhanced-resolve": "^5.19.0",
+ "jiti": "^2.6.1",
+ "lightningcss": "1.31.1",
+ "magic-string": "^0.30.21",
+ "source-map-js": "^1.2.1",
+ "tailwindcss": "4.2.1"
+ }
+ },
+ "node_modules/@tailwindcss/oxide": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.1.tgz",
+ "integrity": "sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20"
+ },
+ "optionalDependencies": {
+ "@tailwindcss/oxide-android-arm64": "4.2.1",
+ "@tailwindcss/oxide-darwin-arm64": "4.2.1",
+ "@tailwindcss/oxide-darwin-x64": "4.2.1",
+ "@tailwindcss/oxide-freebsd-x64": "4.2.1",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.1",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.2.1",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.2.1",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.2.1",
+ "@tailwindcss/oxide-linux-x64-musl": "4.2.1",
+ "@tailwindcss/oxide-wasm32-wasi": "4.2.1",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.2.1",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.2.1"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-android-arm64": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.1.tgz",
+ "integrity": "sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.1.tgz",
+ "integrity": "sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-x64": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.1.tgz",
+ "integrity": "sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.1.tgz",
+ "integrity": "sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.1.tgz",
+ "integrity": "sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.1.tgz",
+ "integrity": "sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.1.tgz",
+ "integrity": "sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.1.tgz",
+ "integrity": "sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.1.tgz",
+ "integrity": "sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-wasm32-wasi": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.1.tgz",
+ "integrity": "sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==",
+ "bundleDependencies": [
+ "@napi-rs/wasm-runtime",
+ "@emnapi/core",
+ "@emnapi/runtime",
+ "@tybys/wasm-util",
+ "@emnapi/wasi-threads",
+ "tslib"
+ ],
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.8.1",
+ "@emnapi/runtime": "^1.8.1",
+ "@emnapi/wasi-threads": "^1.1.0",
+ "@napi-rs/wasm-runtime": "^1.1.1",
+ "@tybys/wasm-util": "^0.10.1",
+ "tslib": "^2.8.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.1.tgz",
+ "integrity": "sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.1.tgz",
+ "integrity": "sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/vite": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.1.tgz",
+ "integrity": "sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tailwindcss/node": "4.2.1",
+ "@tailwindcss/oxide": "4.2.1",
+ "tailwindcss": "4.2.1"
+ },
+ "peerDependencies": {
+ "vite": "^5.2.0 || ^6 || ^7"
+ }
+ },
+ "node_modules/@tauri-apps/cli": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.10.1.tgz",
+ "integrity": "sha512-jQNGF/5quwORdZSSLtTluyKQ+o6SMa/AUICfhf4egCGFdMHqWssApVgYSbg+jmrZoc8e1DscNvjTnXtlHLS11g==",
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "bin": {
+ "tauri": "tauri.js"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/tauri"
+ },
+ "optionalDependencies": {
+ "@tauri-apps/cli-darwin-arm64": "2.10.1",
+ "@tauri-apps/cli-darwin-x64": "2.10.1",
+ "@tauri-apps/cli-linux-arm-gnueabihf": "2.10.1",
+ "@tauri-apps/cli-linux-arm64-gnu": "2.10.1",
+ "@tauri-apps/cli-linux-arm64-musl": "2.10.1",
+ "@tauri-apps/cli-linux-riscv64-gnu": "2.10.1",
+ "@tauri-apps/cli-linux-x64-gnu": "2.10.1",
+ "@tauri-apps/cli-linux-x64-musl": "2.10.1",
+ "@tauri-apps/cli-win32-arm64-msvc": "2.10.1",
+ "@tauri-apps/cli-win32-ia32-msvc": "2.10.1",
+ "@tauri-apps/cli-win32-x64-msvc": "2.10.1"
+ }
+ },
+ "node_modules/@tauri-apps/cli-darwin-arm64": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.10.1.tgz",
+ "integrity": "sha512-Z2OjCXiZ+fbYZy7PmP3WRnOpM9+Fy+oonKDEmUE6MwN4IGaYqgceTjwHucc/kEEYZos5GICve35f7ZiizgqEnQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tauri-apps/cli-darwin-x64": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.10.1.tgz",
+ "integrity": "sha512-V/irQVvjPMGOTQqNj55PnQPVuH4VJP8vZCN7ajnj+ZS8Kom1tEM2hR3qbbIRoS3dBKs5mbG8yg1WC+97dq17Pw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.10.1.tgz",
+ "integrity": "sha512-Hyzwsb4VnCWKGfTw+wSt15Z2pLw2f0JdFBfq2vHBOBhvg7oi6uhKiF87hmbXOBXUZaGkyRDkCHsdzJcIfoJC2w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tauri-apps/cli-linux-arm64-gnu": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.10.1.tgz",
+ "integrity": "sha512-OyOYs2t5GkBIvyWjA1+h4CZxTcdz1OZPCWAPz5DYEfB0cnWHERTnQ/SLayQzncrT0kwRoSfSz9KxenkyJoTelA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tauri-apps/cli-linux-arm64-musl": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.10.1.tgz",
+ "integrity": "sha512-MIj78PDDGjkg3NqGptDOGgfXks7SYJwhiMh8SBoZS+vfdz7yP5jN18bNaLnDhsVIPARcAhE1TlsZe/8Yxo2zqg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tauri-apps/cli-linux-riscv64-gnu": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.10.1.tgz",
+ "integrity": "sha512-X0lvOVUg8PCVaoEtEAnpxmnkwlE1gcMDTqfhbefICKDnOTJ5Est3qL0SrWxizDackIOKBcvtpejrSiVpuJI1kw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tauri-apps/cli-linux-x64-gnu": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.10.1.tgz",
+ "integrity": "sha512-2/12bEzsJS9fAKybxgicCDFxYD1WEI9kO+tlDwX5znWG2GwMBaiWcmhGlZ8fi+DMe9CXlcVarMTYc0L3REIRxw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tauri-apps/cli-linux-x64-musl": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.10.1.tgz",
+ "integrity": "sha512-Y8J0ZzswPz50UcGOFuXGEMrxbjwKSPgXftx5qnkuMs2rmwQB5ssvLb6tn54wDSYxe7S6vlLob9vt0VKuNOaCIQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tauri-apps/cli-win32-arm64-msvc": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.10.1.tgz",
+ "integrity": "sha512-iSt5B86jHYAPJa/IlYw++SXtFPGnWtFJriHn7X0NFBVunF6zu9+/zOn8OgqIWSl8RgzhLGXQEEtGBdR4wzpVgg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tauri-apps/cli-win32-ia32-msvc": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.10.1.tgz",
+ "integrity": "sha512-gXyxgEzsFegmnWywYU5pEBURkcFN/Oo45EAwvZrHMh+zUSEAvO5E8TXsgPADYm31d1u7OQU3O3HsYfVBf2moHw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tauri-apps/cli-win32-x64-msvc": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.10.1.tgz",
+ "integrity": "sha512-6Cn7YpPFwzChy0ERz6djKEmUehWrYlM+xTaNzGPgZocw3BD7OfwfWHKVWxXzdjEW2KfKkHddfdxK1XXTYqBRLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 OR MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/axios": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz",
+ "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.11",
+ "form-data": "^4.0.5",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/concurrently": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz",
+ "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "4.1.2",
+ "rxjs": "7.8.2",
+ "shell-quote": "1.8.3",
+ "supports-color": "8.1.1",
+ "tree-kill": "1.2.2",
+ "yargs": "17.7.2"
+ },
+ "bin": {
+ "conc": "dist/bin/concurrently.js",
+ "concurrently": "dist/bin/concurrently.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.20.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz",
+ "integrity": "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.3.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz",
+ "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.27.4",
+ "@esbuild/android-arm": "0.27.4",
+ "@esbuild/android-arm64": "0.27.4",
+ "@esbuild/android-x64": "0.27.4",
+ "@esbuild/darwin-arm64": "0.27.4",
+ "@esbuild/darwin-x64": "0.27.4",
+ "@esbuild/freebsd-arm64": "0.27.4",
+ "@esbuild/freebsd-x64": "0.27.4",
+ "@esbuild/linux-arm": "0.27.4",
+ "@esbuild/linux-arm64": "0.27.4",
+ "@esbuild/linux-ia32": "0.27.4",
+ "@esbuild/linux-loong64": "0.27.4",
+ "@esbuild/linux-mips64el": "0.27.4",
+ "@esbuild/linux-ppc64": "0.27.4",
+ "@esbuild/linux-riscv64": "0.27.4",
+ "@esbuild/linux-s390x": "0.27.4",
+ "@esbuild/linux-x64": "0.27.4",
+ "@esbuild/netbsd-arm64": "0.27.4",
+ "@esbuild/netbsd-x64": "0.27.4",
+ "@esbuild/openbsd-arm64": "0.27.4",
+ "@esbuild/openbsd-x64": "0.27.4",
+ "@esbuild/openharmony-arm64": "0.27.4",
+ "@esbuild/sunos-x64": "0.27.4",
+ "@esbuild/win32-arm64": "0.27.4",
+ "@esbuild/win32-ia32": "0.27.4",
+ "@esbuild/win32-x64": "0.27.4"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
+ "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
+ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "lib/jiti-cli.mjs"
+ }
+ },
+ "node_modules/laravel-vite-plugin": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-2.1.0.tgz",
+ "integrity": "sha512-z+ck2BSV6KWtYcoIzk9Y5+p4NEjqM+Y4i8/H+VZRLq0OgNjW2DqyADquwYu5j8qRvaXwzNmfCWl1KrMlV1zpsg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picocolors": "^1.0.0",
+ "vite-plugin-full-reload": "^1.1.0"
+ },
+ "bin": {
+ "clean-orphaned-assets": "bin/clean.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "peerDependencies": {
+ "vite": "^7.0.0"
+ }
+ },
+ "node_modules/lightningcss": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz",
+ "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-android-arm64": "1.31.1",
+ "lightningcss-darwin-arm64": "1.31.1",
+ "lightningcss-darwin-x64": "1.31.1",
+ "lightningcss-freebsd-x64": "1.31.1",
+ "lightningcss-linux-arm-gnueabihf": "1.31.1",
+ "lightningcss-linux-arm64-gnu": "1.31.1",
+ "lightningcss-linux-arm64-musl": "1.31.1",
+ "lightningcss-linux-x64-gnu": "1.31.1",
+ "lightningcss-linux-x64-musl": "1.31.1",
+ "lightningcss-win32-arm64-msvc": "1.31.1",
+ "lightningcss-win32-x64-msvc": "1.31.1"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.31.1.tgz",
+ "integrity": "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.31.1.tgz",
+ "integrity": "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.31.1.tgz",
+ "integrity": "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.31.1.tgz",
+ "integrity": "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.31.1.tgz",
+ "integrity": "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.31.1.tgz",
+ "integrity": "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.31.1.tgz",
+ "integrity": "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.31.1.tgz",
+ "integrity": "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.31.1.tgz",
+ "integrity": "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.31.1.tgz",
+ "integrity": "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.31.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz",
+ "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.8",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
+ "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz",
+ "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.59.0",
+ "@rollup/rollup-android-arm64": "4.59.0",
+ "@rollup/rollup-darwin-arm64": "4.59.0",
+ "@rollup/rollup-darwin-x64": "4.59.0",
+ "@rollup/rollup-freebsd-arm64": "4.59.0",
+ "@rollup/rollup-freebsd-x64": "4.59.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.59.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.59.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.59.0",
+ "@rollup/rollup-linux-arm64-musl": "4.59.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.59.0",
+ "@rollup/rollup-linux-loong64-musl": "4.59.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.59.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.59.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.59.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.59.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.59.0",
+ "@rollup/rollup-linux-x64-gnu": "4.59.0",
+ "@rollup/rollup-linux-x64-musl": "4.59.0",
+ "@rollup/rollup-openbsd-x64": "4.59.0",
+ "@rollup/rollup-openharmony-arm64": "4.59.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.59.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.59.0",
+ "@rollup/rollup-win32-x64-gnu": "4.59.0",
+ "@rollup/rollup-win32-x64-msvc": "4.59.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "7.8.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
+ "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
+ "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz",
+ "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tapable": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
+ "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/vite": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
+ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "esbuild": "^0.27.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-full-reload": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz",
+ "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picocolors": "^1.0.0",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "node_modules/vite-plugin-full-reload/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..c087537
--- /dev/null
+++ b/package.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://www.schemastore.org/package.json",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "build": "vite build",
+ "dev": "vite",
+ "tauri": "tauri",
+ "tauri:dev": "tauri dev",
+ "tauri:build": "tauri build",
+ "tauri:icon": "tauri icon"
+ },
+ "devDependencies": {
+ "@tailwindcss/vite": "^4.2.1",
+ "@tauri-apps/cli": "^2",
+ "axios": "^1.11.0",
+ "concurrently": "^9.0.1",
+ "laravel-vite-plugin": "^2.0.0",
+ "tailwindcss": "^4.2.1",
+ "vite": "^7.0.7"
+ },
+ "dependencies": {
+ "@fontsource/vazirmatn": "^5.2.8"
+ }
+}
diff --git a/phpunit.xml b/phpunit.xml
new file mode 100644
index 0000000..e7f0a48
--- /dev/null
+++ b/phpunit.xml
@@ -0,0 +1,36 @@
+
+
+
+
+ tests/Unit
+
+
+ tests/Feature
+
+
+
+
+ app
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/.htaccess b/public/.htaccess
new file mode 100644
index 0000000..b574a59
--- /dev/null
+++ b/public/.htaccess
@@ -0,0 +1,25 @@
+
+
+ Options -MultiViews -Indexes
+
+
+ RewriteEngine On
+
+ # Handle Authorization Header
+ RewriteCond %{HTTP:Authorization} .
+ RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+
+ # Handle X-XSRF-Token Header
+ RewriteCond %{HTTP:x-xsrf-token} .
+ RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]
+
+ # Redirect Trailing Slashes If Not A Folder...
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_URI} (.+)/$
+ RewriteRule ^ %1 [L,R=301]
+
+ # Send Requests To Front Controller...
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteRule ^ index.php [L]
+
diff --git a/public/css/filament/filament/app.css b/public/css/filament/filament/app.css
new file mode 100644
index 0000000..bc46fd3
--- /dev/null
+++ b/public/css/filament/filament/app.css
@@ -0,0 +1,2 @@
+/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
+@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: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-tracking:initial;--tw-duration:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-ease:initial;--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-x-reverse:0;--tw-content:"";--tw-outline-style:solid;--tw-space-x-reverse:0}}}@layer theme{:root,:host{--font-mono:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-sky-400:oklch(74.6% .16 232.661);--color-gray-100:var(--gray-100);--color-gray-200:var(--gray-200);--color-gray-300:var(--gray-300);--color-gray-400:var(--gray-400);--color-gray-500:var(--gray-500);--color-gray-600:var(--gray-600);--color-gray-700:var(--gray-700);--color-gray-900:var(--gray-900);--color-gray-950:var(--gray-950);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--leading-loose:2;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--default-mono-font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-primary-400:var(--primary-400)}}@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;-webkit-text-decoration: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}button:not(:disabled),[role=button]:not(:disabled){cursor:pointer}:root.dark{color-scheme:dark}[data-field-wrapper]{scroll-margin-top:8rem}}@layer components{.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{color:#fff;white-space:normal;background-color:#333;border-radius:4px;outline:0;font-size:14px;line-height:1.4;transition-property:transform,visibility,opacity;position:relative}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{border-width:8px 8px 0;border-top-color:initial;transform-origin:top;bottom:-7px;left:0}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-width:0 8px 8px;border-bottom-color:initial;transform-origin:bottom;top:-7px;left:0}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;transform-origin:0;right:-7px}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:100%;left:-7px}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{color:#333;width:16px;height:16px}.tippy-arrow:before{content:"";border-style:solid;border-color:#0000;position:absolute}.tippy-content{z-index:1;padding:5px 9px;position:relative}.tippy-box[data-theme~=light]{color:#26323d;background-color:#fff;box-shadow:0 0 20px 4px #9aa1b126,0 4px 80px -8px #24282f40,0 4px 4px -2px #5b5e6926}.tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}.fi-avatar{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8);border-radius:var(--radius-md);object-fit:cover;object-position:center}.fi-avatar.fi-circular{border-radius:3.40282e38px}.fi-avatar.fi-size-sm{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.fi-avatar.fi-size-lg{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.fi-badge{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*1);border-radius:var(--radius-md);background-color:var(--gray-50);min-width:1.5rem;padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-600);--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);--tw-ring-color:var(--gray-600);display:inline-flex}@supports (color:color-mix(in lab, red, red)){.fi-badge{--tw-ring-color:color-mix(in oklab,var(--gray-600)10%,transparent)}}.fi-badge{--tw-ring-inset:inset}.fi-badge:where(.dark,.dark *){background-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-badge:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}.fi-badge:where(.dark,.dark *){color:var(--gray-200);--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-badge:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-400)20%,transparent)}}.fi-badge:not(.fi-wrapped){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fi-badge.fi-disabled:not(.fi-force-enabled),.fi-badge[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}:is(.fi-badge.fi-disabled:not(.fi-force-enabled),.fi-badge[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.fi-badge .fi-badge-label-ctn{display:grid}.fi-badge .fi-badge-label.fi-wrapped{text-wrap:wrap;word-break:break-word}.fi-badge .fi-badge-label:not(.fi-wrapped){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fi-badge .fi-icon{flex-shrink:0}.fi-badge.fi-size-xs{min-width:1rem;padding-inline:calc(var(--spacing)*.5);padding-block:calc(var(--spacing)*0);--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.fi-badge.fi-size-sm{min-width:1.25rem;padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*.5);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.fi-badge.fi-color{background-color:var(--color-50);color:var(--text);--tw-ring-color:var(--color-600)}@supports (color:color-mix(in lab, red, red)){.fi-badge.fi-color{--tw-ring-color:color-mix(in oklab,var(--color-600)10%,transparent)}}.fi-badge.fi-color:where(.dark,.dark *){background-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-badge.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}.fi-badge.fi-color:where(.dark,.dark *){color:var(--dark-text);--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-badge.fi-color:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-400)30%,transparent)}}.fi-badge.fi-color .fi-badge-delete-btn>.fi-icon{color:var(--color-700)}@supports (color:color-mix(in lab, red, red)){.fi-badge.fi-color .fi-badge-delete-btn>.fi-icon{color:color-mix(in oklab,var(--color-700)50%,transparent)}}.fi-badge.fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:var(--color-300)}@supports (color:color-mix(in lab, red, red)){.fi-badge.fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:color-mix(in oklab,var(--color-300)50%,transparent)}}.fi-badge:not(.fi-color) .fi-icon{color:var(--gray-400)}.fi-badge:not(.fi-color) .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-badge .fi-icon.fi-color{color:var(--color-500)}.fi-badge .fi-badge-delete-btn{margin-block:calc(var(--spacing)*-1);padding:calc(var(--spacing)*1);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;outline-style:none;justify-content:center;align-items:center;margin-inline-start:calc(var(--spacing)*-1);margin-inline-end:calc(var(--spacing)*-2);transition-duration:75ms;display:flex}.fi-badge .fi-badge-delete-btn>.fi-icon{color:var(--gray-700)}@supports (color:color-mix(in lab, red, red)){.fi-badge .fi-badge-delete-btn>.fi-icon{color:color-mix(in oklab,var(--gray-700)50%,transparent)}}.fi-badge .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-300)}@supports (color:color-mix(in lab, red, red)){.fi-badge .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *){color:color-mix(in oklab,var(--gray-300)50%,transparent)}}:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:focus-visible{color:var(--gray-700)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:focus-visible{color:color-mix(in oklab,var(--gray-700)75%,transparent)}}@media (hover:hover){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:var(--gray-300)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:color-mix(in oklab,var(--gray-300)75%,transparent)}}}:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:var(--gray-300)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])) .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:color-mix(in oklab,var(--gray-300)75%,transparent)}}@media (hover:hover){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:hover{color:var(--color-700)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:hover{color:color-mix(in oklab,var(--color-700)75%,transparent)}}}:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:focus-visible{color:var(--color-700)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:focus-visible{color:color-mix(in oklab,var(--color-700)75%,transparent)}}@media (hover:hover){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:var(--color-300)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):hover{color:color-mix(in oklab,var(--color-300)75%,transparent)}}}:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:var(--color-300)}@supports (color:color-mix(in lab, red, red)){:is(.fi-badge.fi-force-enabled,.fi-badge:not(.fi-disabled):not([disabled])).fi-color .fi-badge-delete-btn>.fi-icon:where(.dark,.dark *):focus-visible{color:color-mix(in oklab,var(--color-300)75%,transparent)}}.fi-breadcrumbs ol{align-items:center;column-gap:calc(var(--spacing)*2);flex-wrap:wrap;display:flex}.fi-breadcrumbs ol li{align-items:center;column-gap:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);display:flex}.fi-breadcrumbs ol li:where(.dark,.dark *){color:var(--gray-400)}.fi-breadcrumbs ol li a{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-breadcrumbs ol li a:hover{color:var(--gray-700)}.fi-breadcrumbs ol li a:where(.dark,.dark *):hover{color:var(--gray-200)}}.fi-breadcrumbs ol li .fi-icon{color:var(--gray-400);display:flex}.fi-breadcrumbs ol li .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-breadcrumbs ol li .fi-icon.fi-ltr:where(:dir(rtl),[dir=rtl],[dir=rtl] *),.fi-breadcrumbs ol li .fi-icon.fi-rtl:where(:dir(ltr),[dir=ltr],[dir=ltr] *){display:none}.fi-btn{justify-content:center;align-items:center;gap:calc(var(--spacing)*1.5);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;outline-style:none;grid-auto-flow:column;transition-duration:75ms;display:inline-grid;position:relative}:is(.fi-btn.fi-force-enabled,.fi-btn:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn.fi-disabled:not(.fi-force-enabled),.fi-btn[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}:is(.fi-btn.fi-disabled:not(.fi-force-enabled),.fi-btn[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.fi-btn>.fi-icon{color:var(--gray-400);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-btn.fi-size-xs{gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-btn.fi-size-sm{gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-btn.fi-size-lg{gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3.5);padding-block:calc(var(--spacing)*2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-btn.fi-size-xl{gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-btn.fi-outlined{color:var(--gray-950);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:var(--gray-300)}.fi-btn.fi-outlined:where(.dark,.dark *){color:var(--color-white);--tw-ring-color:var(--gray-700)}@media (hover:hover){:is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):hover{background-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):hover{background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}}:is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-force-enabled,.fi-btn.fi-outlined:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:color-mix(in oklab,var(--gray-400)40%,transparent)}}.fi-btn.fi-outlined.fi-color{color:var(--text);--tw-ring-color:var(--color-600)}.fi-btn.fi-outlined.fi-color:where(.dark,.dark *){color:var(--dark-text);--tw-ring-color:var(--color-500)}@media (hover:hover){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):hover{background-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):hover{background-color:color-mix(in oklab,var(--color-500)10%,transparent)}}}:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-500)40%,transparent)}}@media (hover:hover){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--color-600)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-600)10%,transparent)}}}:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn.fi-outlined.fi-color.fi-force-enabled,.fi-btn.fi-outlined.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-400)40%,transparent)}}.fi-btn.fi-outlined.fi-color>.fi-icon{color:var(--color-600)}.fi-btn.fi-outlined.fi-color>.fi-icon:where(.dark,.dark *){color:var(--color-400)}.fi-btn:not(.fi-outlined){background-color:var(--color-white);color:var(--gray-950)}.fi-btn:not(.fi-outlined):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-btn:not(.fi-outlined):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-btn:not(.fi-outlined):where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){:is(.fi-btn:not(.fi-outlined).fi-force-enabled,.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):hover{background-color:var(--gray-50)}:is(.fi-btn:not(.fi-outlined).fi-force-enabled,.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn:not(.fi-outlined).fi-force-enabled,.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}}input:checked+label.fi-btn:not(.fi-outlined){background-color:var(--gray-400);color:var(--color-white);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}input:checked+label.fi-btn:not(.fi-outlined):where(.dark,.dark *){background-color:var(--gray-600)}@media (hover:hover){:is(input:checked+label.fi-btn:not(.fi-outlined).fi-force-enabled,input:checked+label.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):hover{background-color:var(--gray-300)}:is(input:checked+label.fi-btn:not(.fi-outlined).fi-force-enabled,input:checked+label.fi-btn:not(.fi-outlined):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--gray-500)}}.fi-btn:not(.fi-outlined).fi-color:not(label){background-color:var(--bg);color:var(--text)}.fi-btn:not(.fi-outlined).fi-color:not(label):where(.dark,.dark *){background-color:var(--dark-bg);color:var(--dark-text)}@media (hover:hover){:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):hover{background-color:var(--hover-bg);color:var(--hover-text)}}:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-500)50%,transparent)}}@media (hover:hover){:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--dark-hover-bg);color:var(--dark-hover-text)}}:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn:not(.fi-outlined).fi-color:not(label).fi-force-enabled,.fi-btn:not(.fi-outlined).fi-color:not(label):not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-400)50%,transparent)}}.fi-btn:not(.fi-outlined).fi-color:not(label)>.fi-icon{color:var(--text)}.fi-btn:not(.fi-outlined).fi-color:not(label)>.fi-icon:where(.dark,.dark *){color:var(--dark-text)}input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color){background-color:var(--bg);color:var(--text);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color):where(.dark,.dark *){background-color:var(--dark-bg);color:var(--dark-text)}@media (hover:hover){input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):hover{background-color:var(--hover-bg);color:var(--hover-text)}input:checked+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{background-color:var(--dark-hover-bg);color:var(--dark-hover-text)}}input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){z-index:10;--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);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){input:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){--tw-ring-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])){--tw-ring-color:color-mix(in oklab,var(--color-500)50%,transparent)}}input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){input:checked:focus-visible+:is(label.fi-btn:not(.fi-outlined).fi-color.fi-force-enabled,label.fi-btn:not(.fi-outlined).fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-400)50%,transparent)}}label.fi-btn{cursor:pointer}label.fi-btn>.fi-icon:is(:checked+label>.fi-icon){color:var(--text)}label.fi-btn>.fi-icon:is(:checked+label>.fi-icon):where(.dark,.dark *){color:var(--dark-text)}.fi-btn:not(.fi-color),label.fi-btn{--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);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-btn:not(.fi-color),label.fi-btn{--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}:is(.fi-btn:not(.fi-color),label.fi-btn):where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){:is(.fi-btn:not(.fi-color),label.fi-btn):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-btn.fi-labeled-from-sm,.fi-btn.fi-labeled-from-md,.fi-btn.fi-labeled-from-lg,.fi-btn.fi-labeled-from-xl,.fi-btn.fi-labeled-from-2xl{display:none}@media (min-width:40rem){.fi-btn.fi-labeled-from-sm{display:inline-grid}}@media (min-width:48rem){.fi-btn.fi-labeled-from-md{display:inline-grid}}@media (min-width:64rem){.fi-btn.fi-labeled-from-lg{display:inline-grid}}@media (min-width:80rem){.fi-btn.fi-labeled-from-xl{display:inline-grid}}@media (min-width:96rem){.fi-btn.fi-labeled-from-2xl{display:inline-grid}}.fi-btn .fi-btn-badge-ctn{inset-inline-start:100%;top:calc(var(--spacing)*0);z-index:1;--tw-translate-x:calc(calc(1/2*100%)*-1);--tw-translate-y:calc(calc(1/2*100%)*-1);width:max-content;translate:var(--tw-translate-x)var(--tw-translate-y);border-radius:var(--radius-md);background-color:var(--color-white);display:flex;position:absolute}.fi-btn .fi-btn-badge-ctn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(1/2*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-btn .fi-btn-badge-ctn:where(.dark,.dark *){background-color:var(--gray-900)}.fi-btn-group{border-radius:var(--radius-lg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);grid-auto-flow:column;display:grid}.fi-btn-group:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-btn-group:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-btn-group>.fi-btn{border-radius:0;flex:1}.fi-btn-group>.fi-btn:nth-child(1 of .fi-btn){border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.fi-btn-group>.fi-btn:nth-last-child(1 of .fi-btn){border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}.fi-btn-group>.fi-btn:not(:nth-child(1 of .fi-btn)){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,var(--color-gray-200));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn-group>.fi-btn:not(:nth-child(1 of .fi-btn)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-shadow:1px 0 0 0 var(--tw-shadow-color,var(--color-gray-200));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn-group>.fi-btn:not(:nth-child(1 of .fi-btn)):where(.dark,.dark *){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,#fff3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn-group>.fi-btn:not(:nth-child(1 of .fi-btn)):where(:dir(rtl),[dir=rtl],[dir=rtl] *):where(.dark,.dark *){--tw-shadow:1px 0 0 0 var(--tw-shadow-color,#fff3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn-group>.fi-btn:not(:nth-last-child(1 of .fi-btn)){margin-inline-end:1px}.fi-btn-group>.fi-btn.fi-processing:enabled{cursor:wait;opacity:.7}.fi-btn-group>.fi-btn:not(.fi-outlined){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-btn-group>.fi-btn:not(.fi-color),label:is(.fi-btn-group>.fi-btn){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}.fi-callout{gap:calc(var(--spacing)*3);border-radius:var(--radius-xl);background-color:var(--color-white);width:100%;padding:calc(var(--spacing)*4);--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);--tw-ring-color:var(--gray-950);display:flex}@supports (color:color-mix(in lab, red, red)){.fi-callout{--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.fi-callout:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-callout:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-callout .fi-callout-icon{color:var(--gray-400)}.fi-callout .fi-callout-icon.fi-color{color:var(--color-400)}.fi-callout .fi-callout-main{margin-top:calc(var(--spacing)*.5);gap:calc(var(--spacing)*3);flex:1;display:grid}.fi-callout .fi-callout-text{gap:calc(var(--spacing)*1);display:grid}.fi-callout .fi-callout-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-callout .fi-callout-heading:where(.dark,.dark *){color:var(--color-white)}.fi-callout .fi-callout-description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));text-wrap:pretty;overflow-wrap:break-word;color:var(--gray-500);overflow:hidden}.fi-callout .fi-callout-description:where(.dark,.dark *){color:var(--gray-400)}.fi-callout .fi-callout-description>p:not(:first-of-type){margin-top:calc(var(--spacing)*1)}.fi-callout .fi-callout-footer{gap:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}.fi-callout .fi-callout-controls{align-self:flex-start}.fi-callout.fi-color{--tw-ring-color:var(--color-600)}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color{--tw-ring-color:color-mix(in oklab,var(--color-600)20%,transparent)}}.fi-callout.fi-color:where(.dark,.dark *){--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-400)30%,transparent)}}.fi-callout.fi-color{background-color:#fff}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color{background-color:color-mix(in oklab,white 90%,var(--color-400))}}.fi-callout.fi-color:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)90%,var(--color-400))}}.fi-callout.fi-color .fi-callout-description{color:var(--gray-700)}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color .fi-callout-description{color:color-mix(in oklab,var(--gray-700)75%,transparent)}}.fi-callout.fi-color .fi-callout-description:where(.dark,.dark *){color:var(--gray-300)}@supports (color:color-mix(in lab, red, red)){.fi-callout.fi-color .fi-callout-description:where(.dark,.dark *){color:color-mix(in oklab,var(--gray-300)75%,transparent)}}.fi-dropdown-header{gap:calc(var(--spacing)*2);width:100%;padding:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);display:flex}.fi-dropdown-header .fi-icon{color:var(--gray-400)}.fi-dropdown-header .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-dropdown-header span{text-overflow:ellipsis;white-space:nowrap;text-align:start;color:var(--gray-700);flex:1;overflow:hidden}.fi-dropdown-header span:where(.dark,.dark *){color:var(--gray-200)}.fi-dropdown-header.fi-color .fi-icon{color:var(--color-500)}.fi-dropdown-header.fi-color .fi-icon:where(.dark,.dark *){color:var(--color-400)}.fi-dropdown-header.fi-color span{color:var(--text)}.fi-dropdown-header.fi-color span:where(.dark,.dark *){color:var(--dark-text)}:scope .fi-dropdown-trigger{cursor:pointer;display:flex}:scope .fi-dropdown-panel{z-index:20;border-radius:var(--radius-lg);background-color:var(--color-white);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);width:100vw;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:absolute;max-width:14rem!important}:scope .fi-dropdown-panel:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:scope .fi-dropdown-panel:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}:where(:scope .fi-dropdown-panel:not(.fi-dropdown-list)>: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)));border-color:var(--gray-100)}:where(:scope .fi-dropdown-panel:not(.fi-dropdown-list):where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(:scope .fi-dropdown-panel:not(.fi-dropdown-list):where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:scope .fi-dropdown-panel.fi-opacity-0{opacity:0}:scope .fi-dropdown-panel.fi-width-xs{max-width:var(--container-xs)!important}:scope .fi-dropdown-panel.fi-width-sm{max-width:var(--container-sm)!important}:scope .fi-dropdown-panel.fi-width-md{max-width:var(--container-md)!important}:scope .fi-dropdown-panel.fi-width-lg{max-width:var(--container-lg)!important}:scope .fi-dropdown-panel.fi-width-xl{max-width:var(--container-xl)!important}:scope .fi-dropdown-panel.fi-width-2xl{max-width:var(--container-2xl)!important}:scope .fi-dropdown-panel.fi-width-3xl{max-width:var(--container-3xl)!important}:scope .fi-dropdown-panel.fi-width-4xl{max-width:var(--container-4xl)!important}:scope .fi-dropdown-panel.fi-width-5xl{max-width:var(--container-5xl)!important}:scope .fi-dropdown-panel.fi-width-6xl{max-width:var(--container-6xl)!important}:scope .fi-dropdown-panel.fi-width-7xl{max-width:var(--container-7xl)!important}:scope .fi-dropdown-panel.fi-scrollable{overflow-y:auto}.fi-dropdown-list{padding:calc(var(--spacing)*1);gap:1px;display:grid}.fi-dropdown-list>.fi-grid{overflow-x:hidden}.fi-dropdown-list-item{align-items:center;gap:calc(var(--spacing)*2);border-radius:var(--radius-md);width:100%;padding:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;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));--tw-duration:75ms;--tw-outline-style:none;-webkit-user-select:none;user-select:none;outline-style:none;transition-duration:75ms;display:flex;overflow:hidden}@media (hover:hover){.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):hover{background-color:var(--gray-50)}}.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):focus-visible{background-color:var(--gray-50)}@media (hover:hover){.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-dropdown-list-item:not(.fi-disabled):not([disabled]).fi-selected{background-color:var(--gray-50)}.fi-dropdown-list-item:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-dropdown-list-item.fi-disabled,.fi-dropdown-list-item[disabled]{cursor:default;opacity:.7}:is(.fi-dropdown-list-item.fi-disabled,.fi-dropdown-list-item[disabled]):not([x-tooltip]){pointer-events:none}.fi-dropdown-list-item .fi-icon{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-dropdown-list-item .fi-dropdown-list-item-image{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);background-position:50%;background-size:cover;border-radius:3.40282e38px}.fi-dropdown-list-item>.fi-icon{color:var(--gray-400)}.fi-dropdown-list-item>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-dropdown-list-item>.fi-icon.fi-color{color:var(--color-500)}.fi-dropdown-list-item>.fi-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}@media (hover:hover){.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):hover{background-color:var(--color-50)}}.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):focus-visible{background-color:var(--color-50)}@media (hover:hover){.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}}.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]):where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]).fi-selected{background-color:var(--color-50)}.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-dropdown-list-item.fi-color:not(.fi-disabled):not([disabled]).fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-400)10%,transparent)}}.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label{color:var(--text)}@media (hover:hover){.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label:hover{color:var(--hover-text)}}.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label:where(.dark,.dark *){color:var(--dark-text)}@media (hover:hover){.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label:where(.dark,.dark *):hover{color:var(--dark-hover-text)}}.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label.fi-selected{color:var(--hover-text)}.fi-dropdown-list-item.fi-color .fi-dropdown-list-item-label.fi-selected:where(.dark,.dark *){color:var(--dark-hover-text)}.fi-dropdown-list-item .fi-badge{min-width:1.25rem;padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*.5);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.fi-dropdown-list-item-label{text-overflow:ellipsis;white-space:nowrap;text-align:start;color:var(--gray-700);flex:1;overflow:hidden}.fi-dropdown-list-item-label:where(.dark,.dark *){color:var(--gray-200)}.fi-dropdown-list-item-badge-placeholder{color:var(--gray-400);align-items:center;display:flex}.fi-dropdown-list-item-badge-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-empty-state{padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*12)}.fi-empty-state:not(.fi-empty-state-not-contained){border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-empty-state:not(.fi-empty-state-not-contained):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-empty-state:not(.fi-empty-state-not-contained):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-empty-state .fi-empty-state-content{max-width:var(--container-lg);text-align:center;justify-items:center;margin-inline:auto;display:grid}.fi-empty-state .fi-empty-state-text-ctn{text-align:center;justify-items:center;display:grid}.fi-empty-state .fi-empty-state-icon-bg{margin-bottom:calc(var(--spacing)*4);background-color:var(--gray-100);padding:calc(var(--spacing)*3);border-radius:3.40282e38px}.fi-empty-state .fi-empty-state-icon-bg:where(.dark,.dark *){background-color:var(--gray-500)}@supports (color:color-mix(in lab, red, red)){.fi-empty-state .fi-empty-state-icon-bg:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-500)20%,transparent)}}.fi-empty-state .fi-empty-state-icon-bg.fi-color{background-color:var(--color-100)}.fi-empty-state .fi-empty-state-icon-bg.fi-color:where(.dark,.dark *){background-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){.fi-empty-state .fi-empty-state-icon-bg.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-500)20%,transparent)}}.fi-empty-state .fi-empty-state-icon-bg .fi-icon{color:var(--gray-500)}.fi-empty-state .fi-empty-state-icon-bg .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-empty-state .fi-empty-state-icon-bg .fi-icon.fi-color{color:var(--color-500)}.fi-empty-state .fi-empty-state-icon-bg .fi-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}.fi-empty-state .fi-empty-state-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-empty-state .fi-empty-state-heading:where(.dark,.dark *){color:var(--color-white)}.fi-empty-state .fi-empty-state-description{margin-top:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-empty-state .fi-empty-state-description:where(.dark,.dark *){color:var(--gray-400)}.fi-empty-state .fi-empty-state-footer{margin-top:calc(var(--spacing)*6)}.fi-empty-state.fi-compact{padding-block:calc(var(--spacing)*6)}.fi-empty-state.fi-compact .fi-empty-state-content{margin-inline:calc(var(--spacing)*0);align-items:flex-start;gap:calc(var(--spacing)*4);text-align:start;max-width:none;display:flex}.fi-empty-state.fi-compact .fi-empty-state-icon-bg{margin-bottom:calc(var(--spacing)*0);flex-shrink:0}.fi-empty-state.fi-compact .fi-empty-state-text-ctn{text-align:start;flex:1;justify-items:start}.fi-empty-state.fi-compact .fi-empty-state-description{margin-top:calc(var(--spacing)*1)}.fi-empty-state.fi-compact .fi-empty-state-footer{margin-top:calc(var(--spacing)*4)}.fi-fieldset>legend{padding-inline:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950);margin-inline-start:calc(var(--spacing)*-2)}.fi-fieldset>legend:where(.dark,.dark *){color:var(--color-white)}.fi-fieldset>legend .fi-fieldset-label-required-mark{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--danger-600)}.fi-fieldset>legend .fi-fieldset-label-required-mark:where(.dark,.dark *){color:var(--danger-400)}.fi-fieldset.fi-fieldset-label-hidden>legend{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.fi-fieldset:not(.fi-fieldset-not-contained){border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-200);padding:calc(var(--spacing)*6)}.fi-fieldset:not(.fi-fieldset-not-contained):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fieldset:not(.fi-fieldset-not-contained):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fieldset.fi-fieldset-not-contained{padding-top:calc(var(--spacing)*6)}.fi-grid:not(.fi-grid-direction-col){grid-template-columns:var(--cols-default);display:grid}@media (min-width:40rem){.fi-grid:not(.fi-grid-direction-col).sm\:fi-grid-cols{grid-template-columns:var(--cols-sm)}}@media (min-width:48rem){.fi-grid:not(.fi-grid-direction-col).md\:fi-grid-cols{grid-template-columns:var(--cols-md)}}@media (min-width:64rem){.fi-grid:not(.fi-grid-direction-col).lg\:fi-grid-cols{grid-template-columns:var(--cols-lg)}}@media (min-width:80rem){.fi-grid:not(.fi-grid-direction-col).xl\:fi-grid-cols{grid-template-columns:var(--cols-xl)}}@media (min-width:96rem){.fi-grid:not(.fi-grid-direction-col).\32 xl\:fi-grid-cols{grid-template-columns:var(--cols-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.fi-grid:not(.fi-grid-direction-col).\@3xs\:fi-grid-cols{grid-template-columns:var(--cols-c3xs)}}@container (min-width:18rem){.fi-grid:not(.fi-grid-direction-col).\@2xs\:fi-grid-cols{grid-template-columns:var(--cols-c2xs)}}@container (min-width:20rem){.fi-grid:not(.fi-grid-direction-col).\@xs\:fi-grid-cols{grid-template-columns:var(--cols-cxs)}}@container (min-width:24rem){.fi-grid:not(.fi-grid-direction-col).\@sm\:fi-grid-cols{grid-template-columns:var(--cols-csm)}}@container (min-width:28rem){.fi-grid:not(.fi-grid-direction-col).\@md\:fi-grid-cols{grid-template-columns:var(--cols-cmd)}}@container (min-width:32rem){.fi-grid:not(.fi-grid-direction-col).\@lg\:fi-grid-cols{grid-template-columns:var(--cols-clg)}}@container (min-width:36rem){.fi-grid:not(.fi-grid-direction-col).\@xl\:fi-grid-cols{grid-template-columns:var(--cols-cxl)}}@container (min-width:42rem){.fi-grid:not(.fi-grid-direction-col).\@2xl\:fi-grid-cols{grid-template-columns:var(--cols-c2xl)}}@container (min-width:48rem){.fi-grid:not(.fi-grid-direction-col).\@3xl\:fi-grid-cols{grid-template-columns:var(--cols-c3xl)}}@container (min-width:56rem){.fi-grid:not(.fi-grid-direction-col).\@4xl\:fi-grid-cols{grid-template-columns:var(--cols-c4xl)}}@container (min-width:64rem){.fi-grid:not(.fi-grid-direction-col).\@5xl\:fi-grid-cols{grid-template-columns:var(--cols-c5xl)}}@container (min-width:72rem){.fi-grid:not(.fi-grid-direction-col).\@6xl\:fi-grid-cols{grid-template-columns:var(--cols-c6xl)}}@container (min-width:80rem){.fi-grid:not(.fi-grid-direction-col).\@7xl\:fi-grid-cols{grid-template-columns:var(--cols-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-grid:not(.fi-grid-direction-col).\!\@sm\:fi-grid-cols{grid-template-columns:var(--cols-ncsm)}}@media (min-width:48rem){.fi-grid:not(.fi-grid-direction-col).\!\@md\:fi-grid-cols{grid-template-columns:var(--cols-ncmd)}}@media (min-width:64rem){.fi-grid:not(.fi-grid-direction-col).\!\@lg\:fi-grid-cols{grid-template-columns:var(--cols-nclg)}}@media (min-width:80rem){.fi-grid:not(.fi-grid-direction-col).\!\@xl\:fi-grid-cols{grid-template-columns:var(--cols-ncxl)}}@media (min-width:96rem){.fi-grid:not(.fi-grid-direction-col).\!\@2xl\:fi-grid-cols{grid-template-columns:var(--cols-nc2xl)}}}.fi-grid.fi-grid-direction-col{columns:var(--cols-default)}@media (min-width:40rem){.fi-grid.fi-grid-direction-col.sm\:fi-grid-cols{columns:var(--cols-sm)}}@media (min-width:48rem){.fi-grid.fi-grid-direction-col.md\:fi-grid-cols{columns:var(--cols-md)}}@media (min-width:64rem){.fi-grid.fi-grid-direction-col.lg\:fi-grid-cols{columns:var(--cols-lg)}}@media (min-width:80rem){.fi-grid.fi-grid-direction-col.xl\:fi-grid-cols{columns:var(--cols-xl)}}@media (min-width:96rem){.fi-grid.fi-grid-direction-col.\32 xl\:fi-grid-cols{columns:var(--cols-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.fi-grid.fi-grid-direction-col.\@3xs\:fi-grid-cols{columns:var(--cols-c3xs)}}@container (min-width:18rem){.fi-grid.fi-grid-direction-col.\@2xs\:fi-grid-cols{columns:var(--cols-c2xs)}}@container (min-width:20rem){.fi-grid.fi-grid-direction-col.\@xs\:fi-grid-cols{columns:var(--cols-cxs)}}@container (min-width:24rem){.fi-grid.fi-grid-direction-col.\@sm\:fi-grid-cols{columns:var(--cols-csm)}}@container (min-width:28rem){.fi-grid.fi-grid-direction-col.\@md\:fi-grid-cols{columns:var(--cols-cmd)}}@container (min-width:32rem){.fi-grid.fi-grid-direction-col.\@lg\:fi-grid-cols{columns:var(--cols-clg)}}@container (min-width:36rem){.fi-grid.fi-grid-direction-col.\@xl\:fi-grid-cols{columns:var(--cols-cxl)}}@container (min-width:42rem){.fi-grid.fi-grid-direction-col.\@2xl\:fi-grid-cols{columns:var(--cols-c2xl)}}@container (min-width:48rem){.fi-grid.fi-grid-direction-col.\@3xl\:fi-grid-cols{columns:var(--cols-c3xl)}}@container (min-width:56rem){.fi-grid.fi-grid-direction-col.\@4xl\:fi-grid-cols{columns:var(--cols-c4xl)}}@container (min-width:64rem){.fi-grid.fi-grid-direction-col.\@5xl\:fi-grid-cols{columns:var(--cols-c5xl)}}@container (min-width:72rem){.fi-grid.fi-grid-direction-col.\@6xl\:fi-grid-cols{columns:var(--cols-c6xl)}}@container (min-width:80rem){.fi-grid.fi-grid-direction-col.\@7xl\:fi-grid-cols{columns:var(--cols-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-grid.fi-grid-direction-col.\!\@sm\:fi-grid-cols{columns:var(--cols-ncsm)}}@media (min-width:48rem){.fi-grid.fi-grid-direction-col.\!\@md\:fi-grid-cols{columns:var(--cols-ncmd)}}@media (min-width:64rem){.fi-grid.fi-grid-direction-col.\!\@lg\:fi-grid-cols{columns:var(--cols-nclg)}}@media (min-width:80rem){.fi-grid.fi-grid-direction-col.\!\@xl\:fi-grid-cols{columns:var(--cols-ncxl)}}@media (min-width:96rem){.fi-grid.fi-grid-direction-col.\!\@2xl\:fi-grid-cols{columns:var(--cols-nc2xl)}}}@supports (container-type:inline-size){.fi-grid-ctn{container-type:inline-size}}.fi-grid-col{grid-column:var(--col-span-default)}@media (min-width:40rem){.fi-grid-col.sm\:fi-grid-col-span{grid-column:var(--col-span-sm)}}@media (min-width:48rem){.fi-grid-col.md\:fi-grid-col-span{grid-column:var(--col-span-md)}}@media (min-width:64rem){.fi-grid-col.lg\:fi-grid-col-span{grid-column:var(--col-span-lg)}}@media (min-width:80rem){.fi-grid-col.xl\:fi-grid-col-span{grid-column:var(--col-span-xl)}}@media (min-width:96rem){.fi-grid-col.\32 xl\:fi-grid-col-span{grid-column:var(--col-span-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.fi-grid-col.\@3xs\:fi-grid-col-span{grid-column:var(--col-span-c3xs)}}@container (min-width:18rem){.fi-grid-col.\@2xs\:fi-grid-col-span{grid-column:var(--col-span-c2xs)}}@container (min-width:20rem){.fi-grid-col.\@xs\:fi-grid-col-span{grid-column:var(--col-span-cxs)}}@container (min-width:24rem){.fi-grid-col.\@sm\:fi-grid-col-span{grid-column:var(--col-span-csm)}}@container (min-width:28rem){.fi-grid-col.\@md\:fi-grid-col-span{grid-column:var(--col-span-cmd)}}@container (min-width:32rem){.fi-grid-col.\@lg\:fi-grid-col-span{grid-column:var(--col-span-clg)}}@container (min-width:36rem){.fi-grid-col.\@xl\:fi-grid-col-span{grid-column:var(--col-span-cxl)}}@container (min-width:42rem){.fi-grid-col.\@2xl\:fi-grid-col-span{grid-column:var(--col-span-c2xl)}}@container (min-width:48rem){.fi-grid-col.\@3xl\:fi-grid-col-span{grid-column:var(--col-span-c3xl)}}@container (min-width:56rem){.fi-grid-col.\@4xl\:fi-grid-col-span{grid-column:var(--col-span-c4xl)}}@container (min-width:64rem){.fi-grid-col.\@5xl\:fi-grid-col-span{grid-column:var(--col-span-c5xl)}}@container (min-width:72rem){.fi-grid-col.\@6xl\:fi-grid-col-span{grid-column:var(--col-span-c6xl)}}@container (min-width:80rem){.fi-grid-col.\@7xl\:fi-grid-col-span{grid-column:var(--col-span-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-grid-col.\!\@sm\:fi-grid-col-span{grid-column:var(--col-span-ncsm)}}@media (min-width:48rem){.fi-grid-col.\!\@md\:fi-grid-col-span{grid-column:var(--col-span-ncmd)}}@media (min-width:64rem){.fi-grid-col.\!\@lg\:fi-grid-col-span{grid-column:var(--col-span-nclg)}}@media (min-width:80rem){.fi-grid-col.\!\@xl\:fi-grid-col-span{grid-column:var(--col-span-ncxl)}}@media (min-width:96rem){.fi-grid-col.\!\@2xl\:fi-grid-col-span{grid-column:var(--col-span-nc2xl)}}}.fi-grid-col.fi-grid-col-start{grid-column-start:var(--col-start-default)}@media (min-width:40rem){.fi-grid-col.sm\:fi-grid-col-start{grid-column-start:var(--col-start-sm)}}@media (min-width:48rem){.fi-grid-col.md\:fi-grid-col-start{grid-column-start:var(--col-start-md)}}@media (min-width:64rem){.fi-grid-col.lg\:fi-grid-col-start{grid-column-start:var(--col-start-lg)}}@media (min-width:80rem){.fi-grid-col.xl\:fi-grid-col-start{grid-column-start:var(--col-start-xl)}}@media (min-width:96rem){.fi-grid-col.\32 xl\:fi-grid-col-start{grid-column-start:var(--col-start-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.fi-grid-col.\@3xs\:fi-grid-col-start{grid-column-start:var(--col-start-c3xs)}}@container (min-width:18rem){.fi-grid-col.\@2xs\:fi-grid-col-start{grid-column-start:var(--col-start-c2xs)}}@container (min-width:20rem){.fi-grid-col.\@xs\:fi-grid-col-start{grid-column-start:var(--col-start-cxs)}}@container (min-width:24rem){.fi-grid-col.\@sm\:fi-grid-col-start{grid-column-start:var(--col-start-csm)}}@container (min-width:28rem){.fi-grid-col.\@md\:fi-grid-col-start{grid-column-start:var(--col-start-cmd)}}@container (min-width:32rem){.fi-grid-col.\@lg\:fi-grid-col-start{grid-column-start:var(--col-start-clg)}}@container (min-width:36rem){.fi-grid-col.\@xl\:fi-grid-col-start{grid-column-start:var(--col-start-cxl)}}@container (min-width:42rem){.fi-grid-col.\@2xl\:fi-grid-col-start{grid-column-start:var(--col-start-c2xl)}}@container (min-width:48rem){.fi-grid-col.\@3xl\:fi-grid-col-start{grid-column-start:var(--col-start-c3xl)}}@container (min-width:56rem){.fi-grid-col.\@4xl\:fi-grid-col-start{grid-column-start:var(--col-start-c4xl)}}@container (min-width:64rem){.fi-grid-col.\@5xl\:fi-grid-col-start{grid-column-start:var(--col-start-c5xl)}}@container (min-width:72rem){.fi-grid-col.\@6xl\:fi-grid-col-start{grid-column-start:var(--col-start-c6xl)}}@container (min-width:80rem){.fi-grid-col.\@7xl\:fi-grid-col-start{grid-column-start:var(--col-start-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-grid-col.\!\@sm\:fi-grid-col-start{grid-column-start:var(--col-start-ncsm)}}@media (min-width:48rem){.fi-grid-col.\!\@md\:fi-grid-col-start{grid-column-start:var(--col-start-ncmd)}}@media (min-width:64rem){.fi-grid-col.\!\@lg\:fi-grid-col-start{grid-column-start:var(--col-start-nclg)}}@media (min-width:80rem){.fi-grid-col.\!\@xl\:fi-grid-col-start{grid-column-start:var(--col-start-ncxl)}}@media (min-width:96rem){.fi-grid-col.\!\@2xl\:fi-grid-col-start{grid-column-start:var(--col-start-nc2xl)}}}.fi-grid-col.fi-grid-col-order{order:var(--col-order-default)}@media (min-width:40rem){.fi-grid-col.sm\:fi-grid-col-order{order:var(--col-order-sm)}}@media (min-width:48rem){.fi-grid-col.md\:fi-grid-col-order{order:var(--col-order-md)}}@media (min-width:64rem){.fi-grid-col.lg\:fi-grid-col-order{order:var(--col-order-lg)}}@media (min-width:80rem){.fi-grid-col.xl\:fi-grid-col-order{order:var(--col-order-xl)}}@media (min-width:96rem){.fi-grid-col.\32 xl\:fi-grid-col-order{order:var(--col-order-2xl)}}@supports (container-type:inline-size){@container (min-width:16rem){.fi-grid-col.\@3xs\:fi-grid-col-order{order:var(--col-order-c3xs)}}@container (min-width:18rem){.fi-grid-col.\@2xs\:fi-grid-col-order{order:var(--col-order-c2xs)}}@container (min-width:20rem){.fi-grid-col.\@xs\:fi-grid-col-order{order:var(--col-order-cxs)}}@container (min-width:24rem){.fi-grid-col.\@sm\:fi-grid-col-order{order:var(--col-order-csm)}}@container (min-width:28rem){.fi-grid-col.\@md\:fi-grid-col-order{order:var(--col-order-cmd)}}@container (min-width:32rem){.fi-grid-col.\@lg\:fi-grid-col-order{order:var(--col-order-clg)}}@container (min-width:36rem){.fi-grid-col.\@xl\:fi-grid-col-order{order:var(--col-order-cxl)}}@container (min-width:42rem){.fi-grid-col.\@2xl\:fi-grid-col-order{order:var(--col-order-c2xl)}}@container (min-width:48rem){.fi-grid-col.\@3xl\:fi-grid-col-order{order:var(--col-order-c3xl)}}@container (min-width:56rem){.fi-grid-col.\@4xl\:fi-grid-col-order{order:var(--col-order-c4xl)}}@container (min-width:64rem){.fi-grid-col.\@5xl\:fi-grid-col-order{order:var(--col-order-c5xl)}}@container (min-width:72rem){.fi-grid-col.\@6xl\:fi-grid-col-order{order:var(--col-order-c6xl)}}@container (min-width:80rem){.fi-grid-col.\@7xl\:fi-grid-col-order{order:var(--col-order-c7xl)}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-grid-col.\!\@sm\:fi-grid-col-order{order:var(--col-order-ncsm)}}@media (min-width:48rem){.fi-grid-col.\!\@md\:fi-grid-col-order{order:var(--col-order-ncmd)}}@media (min-width:64rem){.fi-grid-col.\!\@lg\:fi-grid-col-order{order:var(--col-order-nclg)}}@media (min-width:80rem){.fi-grid-col.\!\@xl\:fi-grid-col-order{order:var(--col-order-ncxl)}}@media (min-width:96rem){.fi-grid-col.\!\@2xl\:fi-grid-col-order{order:var(--col-order-nc2xl)}}}.fi-grid-col.fi-hidden{display:none}.fi-icon{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.fi-icon.fi-size-xs{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.fi-icon.fi-size-sm{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.fi-icon.fi-size-md{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.fi-icon.fi-size-lg{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.fi-icon.fi-size-xl{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.fi-icon.fi-size-2xl{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.fi-icon>svg{height:inherit;width:inherit}.fi-icon-btn{margin:calc(var(--spacing)*-2);width:calc(var(--spacing)*9);height:calc(var(--spacing)*9);border-radius:var(--radius-lg);color:var(--gray-500);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;outline-style:none;justify-content:center;align-items:center;transition-duration:75ms;display:flex;position:relative}.fi-icon-btn:where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){:is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):hover{color:var(--gray-600)}}:is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600)}@media (hover:hover){:is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{color:var(--gray-400)}}:is(.fi-icon-btn.fi-force-enabled,.fi-icon-btn:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--primary-500)}.fi-icon-btn.fi-disabled:not(.fi-force-enabled),.fi-icon-btn[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}:is(.fi-icon-btn.fi-disabled:not(.fi-force-enabled),.fi-icon-btn[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.fi-icon-btn.fi-size-xs{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.fi-icon-btn.fi-size-xs:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-1.5)}.fi-icon-btn.fi-size-xs:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-1)}.fi-icon-btn.fi-size-xs:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-.5)}.fi-icon-btn.fi-size-sm{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.fi-icon-btn.fi-size-sm:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-2)}.fi-icon-btn.fi-size-sm:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-1.5)}.fi-icon-btn.fi-size-sm:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-1)}.fi-icon-btn.fi-size-md:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-2.5)}.fi-icon-btn.fi-size-md:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-1.5)}.fi-icon-btn.fi-size-lg{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.fi-icon-btn.fi-size-lg:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-3)}.fi-icon-btn.fi-size-lg:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-2.5)}.fi-icon-btn.fi-size-lg:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-2)}.fi-icon-btn.fi-size-xl{width:calc(var(--spacing)*11);height:calc(var(--spacing)*11)}.fi-icon-btn.fi-size-xl:has(.fi-icon.fi-size-sm){margin:calc(var(--spacing)*-3.5)}.fi-icon-btn.fi-size-xl:has(.fi-icon.fi-size-md){margin:calc(var(--spacing)*-3)}.fi-icon-btn.fi-size-xl:has(.fi-icon.fi-size-lg){margin:calc(var(--spacing)*-2.5)}.fi-icon-btn.fi-color{color:var(--text)}.fi-icon-btn.fi-color:where(.dark,.dark *){color:var(--dark-text)}@media (hover:hover){:is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):hover{color:var(--hover-text)}}:is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):focus-visible{--tw-ring-color:var(--color-600)}@media (hover:hover){:is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):hover{color:var(--dark-hover-text)}}:is(.fi-icon-btn.fi-color.fi-force-enabled,.fi-icon-btn.fi-color:not(.fi-disabled):not([disabled])):where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-500)}.fi-icon-btn>.fi-icon-btn-badge-ctn{inset-inline-start:100%;top:calc(var(--spacing)*1);z-index:1;--tw-translate-x:calc(calc(1/2*100%)*-1);--tw-translate-y:calc(calc(1/2*100%)*-1);width:max-content;translate:var(--tw-translate-x)var(--tw-translate-y);border-radius:var(--radius-md);background-color:var(--color-white);display:flex;position:absolute}.fi-icon-btn>.fi-icon-btn-badge-ctn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(1/2*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-icon-btn>.fi-icon-btn-badge-ctn:where(.dark,.dark *){background-color:var(--gray-900)}@media (min-width:40rem){.fi-icon-btn:has(+.fi-btn.fi-labeled-from-sm){display:none}}@media (min-width:48rem){.fi-icon-btn:has(+.fi-btn.fi-labeled-from-md){display:none}}@media (min-width:64rem){.fi-icon-btn:has(+.fi-btn.fi-labeled-from-lg){display:none}}@media (min-width:80rem){.fi-icon-btn:has(+.fi-btn.fi-labeled-from-xl){display:none}}@media (min-width:96rem){.fi-icon-btn:has(+.fi-btn.fi-labeled-from-2xl){display:none}}input[type=checkbox].fi-checkbox-input{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;--tw-border-style:none;background-color:var(--color-white);vertical-align:middle;color:var(--primary-600);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);border-style:none;border-radius:.25rem}input[type=checkbox].fi-checkbox-input:checked{background-color:var(--primary-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}input[type=checkbox].fi-checkbox-input: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);--tw-ring-color:var(--primary-600);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}input[type=checkbox].fi-checkbox-input:checked:focus{--tw-ring-color:var(--primary-500)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-500)50%,transparent)}}input[type=checkbox].fi-checkbox-input:disabled{pointer-events:none;background-color:var(--gray-50);color:var(--gray-50)}input[type=checkbox].fi-checkbox-input:disabled:checked{background-color:var(--gray-400);color:var(--gray-400)}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){color:var(--primary-500);--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):checked{background-color:var(--primary-500)}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):focus{--tw-ring-color:var(--primary-500)}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--primary-400)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-400)50%,transparent)}}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):disabled{--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):disabled{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}input[type=checkbox].fi-checkbox-input:where(.dark,.dark *):disabled:checked{background-color:var(--gray-600)}input[type=checkbox].fi-checkbox-input:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}input[type=checkbox].fi-checkbox-input:indeterminate{background-color:var(--primary-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}input[type=checkbox].fi-checkbox-input:indeterminate:where(.dark,.dark *){background-color:var(--primary-500)}input[type=checkbox].fi-checkbox-input:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.5 6.75a1.25 1.25 0 0 0 0 2.5h7a1.25 1.25 0 0 0 0-2.5h-7z'/%3E%3C/svg%3E")}input[type=checkbox].fi-checkbox-input:indeterminate: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);--tw-ring-color:var(--primary-500)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:indeterminate:focus{--tw-ring-color:color-mix(in oklab,var(--primary-500)50%,transparent)}}input[type=checkbox].fi-checkbox-input:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:var(--primary-400)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--primary-400)50%,transparent)}}input[type=checkbox].fi-checkbox-input:indeterminate:disabled{background-color:var(--gray-400)}input[type=checkbox].fi-checkbox-input:indeterminate:disabled:where(.dark,.dark *){background-color:var(--gray-600)}input[type=checkbox].fi-checkbox-input.fi-invalid{color:var(--danger-600);--tw-ring-color:var(--danger-600)}input[type=checkbox].fi-checkbox-input.fi-invalid:checked{background-color:var(--danger-600)}input[type=checkbox].fi-checkbox-input.fi-invalid:focus{--tw-ring-color:var(--danger-600)}input[type=checkbox].fi-checkbox-input.fi-invalid:checked:focus{--tw-ring-color:var(--danger-500)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input.fi-invalid:checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-500)50%,transparent)}}input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *){color:var(--danger-500);--tw-ring-color:var(--danger-500)}input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):checked{background-color:var(--danger-500)}input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):focus{--tw-ring-color:var(--danger-500)}input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--danger-400)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-400)50%,transparent)}}input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate{background-color:var(--danger-600)}input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:where(.dark,.dark *){background-color:var(--danger-500)}input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus{--tw-ring-color:var(--danger-500)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus{--tw-ring-color:color-mix(in oklab,var(--danger-500)50%,transparent)}}input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:var(--danger-400)}@supports (color:color-mix(in lab, red, red)){input[type=checkbox].fi-checkbox-input.fi-invalid:indeterminate:focus:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--danger-400)50%,transparent)}}input.fi-input{appearance:none;--tw-border-style:none;width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-950);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;background-color:#0000;border-style:none;transition-duration:75ms;display:block}input.fi-input::placeholder{color:var(--gray-400)}input.fi-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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);--tw-outline-style:none;outline-style:none}input.fi-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}input.fi-input:disabled::placeholder{-webkit-text-fill-color:var(--color-gray-400)}input.fi-input:where(.dark,.dark *){color:var(--color-white)}input.fi-input:where(.dark,.dark *)::placeholder{color:var(--gray-500)}input.fi-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}input.fi-input:where(.dark,.dark *):disabled::placeholder{-webkit-text-fill-color:var(--color-gray-500)}@supports (-webkit-touch-callout:none){input.fi-input{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}input.fi-input.fi-input-has-inline-prefix{padding-inline-start:calc(var(--spacing)*0)}input.fi-input.fi-input-has-inline-suffix{padding-inline-end:calc(var(--spacing)*0)}input.fi-input.fi-align-center{text-align:center}input.fi-input.fi-align-end{text-align:end}input.fi-input.fi-align-left{text-align:left}input.fi-input.fi-align-right{text-align:end}input.fi-input.fi-align-justify,input.fi-input.fi-align-between{text-align:justify}input[type=date].fi-input,input[type=datetime-local].fi-input,input[type=time].fi-input{background-color:#ffffff03}@supports (color:color-mix(in lab, red, red)){input[type=date].fi-input,input[type=datetime-local].fi-input,input[type=time].fi-input{background-color:color-mix(in oklab,var(--color-white)1%,transparent)}}input[type=range].fi-input{appearance:auto;width:calc(100% - 1.5rem);margin-inline:auto}input[type=text].fi-one-time-code-input{inset-block:calc(var(--spacing)*0);right:calc(var(--spacing)*-8);left:calc(var(--spacing)*0);--tw-border-style:none;padding-inline:calc(var(--spacing)*3);font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--tw-tracking:1.72rem;letter-spacing:1.72rem;color:var(--gray-950);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;background-color:#0000;border-style:none;transition-duration:75ms;display:block;position:absolute}input[type=text].fi-one-time-code-input::placeholder{color:var(--gray-400)}input[type=text].fi-one-time-code-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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);--tw-outline-style:none;outline-style:none}input[type=text].fi-one-time-code-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}input[type=text].fi-one-time-code-input:disabled::placeholder{-webkit-text-fill-color:var(--color-gray-400)}input[type=text].fi-one-time-code-input:where(.dark,.dark *){color:var(--color-white)}input[type=text].fi-one-time-code-input:where(.dark,.dark *)::placeholder{color:var(--gray-500)}input[type=text].fi-one-time-code-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}input[type=text].fi-one-time-code-input:where(.dark,.dark *):disabled::placeholder{-webkit-text-fill-color:var(--color-gray-500)}input[type=text].fi-one-time-code-input.fi-valid{caret-color:#0000}.fi-one-time-code-input-ctn{height:calc(var(--spacing)*12);position:relative}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field{height:100%;width:calc(var(--spacing)*8);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-950);display:inline-block}@supports (color:color-mix(in lab, red, red)){.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field{border-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field{background-color:var(--color-white)}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field.fi-active{border-style:var(--tw-border-style);border-width:2px;border-color:var(--primary-600)}.fi-one-time-code-input-ctn>.fi-one-time-code-input-digit-field.fi-active:where(.dark,.dark *){border-color:var(--primary-500)}input[type=radio].fi-radio-input{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);appearance:none;--tw-border-style:none;background-color:var(--color-white);color:var(--primary-600);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);border-style:none;border-radius:3.40282e38px}input[type=radio].fi-radio-input:checked{background-color:var(--primary-600);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}input[type=radio].fi-radio-input: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);--tw-ring-color:var(--primary-600);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}input[type=radio].fi-radio-input:checked:focus{--tw-ring-color:var(--primary-500)}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input:checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-500)50%,transparent)}}input[type=radio].fi-radio-input:disabled{background-color:var(--gray-50);color:var(--gray-50)}input[type=radio].fi-radio-input:disabled:checked{background-color:var(--gray-400);color:var(--gray-400)}input[type=radio].fi-radio-input:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}input[type=radio].fi-radio-input:where(.dark,.dark *){color:var(--primary-500);--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}input[type=radio].fi-radio-input:where(.dark,.dark *):checked{background-color:var(--primary-500)}input[type=radio].fi-radio-input:where(.dark,.dark *):focus{--tw-ring-color:var(--primary-500)}input[type=radio].fi-radio-input:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--primary-400)}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--primary-400)50%,transparent)}}input[type=radio].fi-radio-input:where(.dark,.dark *):disabled{--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input:where(.dark,.dark *):disabled{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}input[type=radio].fi-radio-input:where(.dark,.dark *):disabled:checked{background-color:var(--gray-600)}input[type=radio].fi-radio-input:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}input[type=radio].fi-radio-input.fi-invalid{color:var(--danger-600);--tw-ring-color:var(--danger-600)}input[type=radio].fi-radio-input.fi-invalid:checked{background-color:var(--danger-600)}input[type=radio].fi-radio-input.fi-invalid:focus{--tw-ring-color:var(--danger-600)}input[type=radio].fi-radio-input.fi-invalid:checked:focus{--tw-ring-color:var(--danger-500)}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input.fi-invalid:checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-500)50%,transparent)}}input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *){color:var(--danger-500);--tw-ring-color:var(--danger-500)}input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):checked{background-color:var(--danger-500)}input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):focus{--tw-ring-color:var(--danger-500)}input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:var(--danger-400)}@supports (color:color-mix(in lab, red, red)){input[type=radio].fi-radio-input.fi-invalid:where(.dark,.dark *):checked:focus{--tw-ring-color:color-mix(in oklab,var(--danger-400)50%,transparent)}}select.fi-select-input{appearance:none;--tw-border-style:none;width:100%;padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-950);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;background-color:#0000;border-style:none;padding-inline-start:calc(var(--spacing)*3);padding-inline-end:calc(var(--spacing)*8);transition-duration:75ms;display:block}select.fi-select-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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);--tw-outline-style:none;outline-style:none}select.fi-select-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}select.fi-select-input:where(.dark,.dark *){color:var(--color-white)}select.fi-select-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}select.fi-select-input optgroup{background-color:var(--color-white)}select.fi-select-input optgroup:where(.dark,.dark *){background-color:var(--gray-900)}select.fi-select-input option{background-color:var(--color-white)}select.fi-select-input option:where(.dark,.dark *){background-color:var(--gray-900)}@supports (-webkit-touch-callout:none){select.fi-select-input{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}select.fi-select-input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em}select.fi-select-input:where(:dir(rtl),[dir=rtl],[dir=rtl] *){background-position:.5rem}select.fi-select-input.fi-select-input-has-inline-prefix{padding-inline-start:calc(var(--spacing)*0)}.fi-select-input .fi-select-input-ctn{position:relative}.fi-select-input div[x-ref=select]{min-height:calc(var(--spacing)*9)}.fi-select-input .fi-select-input-btn{min-height:calc(var(--spacing)*9);border-radius:var(--radius-lg);width:100%;padding-block:calc(var(--spacing)*1.5);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-950);padding-inline-start:calc(var(--spacing)*3);padding-inline-end:calc(var(--spacing)*8);display:flex}.fi-select-input .fi-select-input-btn:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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);--tw-outline-style:none;outline-style:none}.fi-select-input .fi-select-input-btn:where(.dark,.dark *){color:var(--color-white)}.fi-select-input .fi-select-input-btn{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em}.fi-select-input .fi-select-input-btn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){background-position:.5rem}.fi-select-input .fi-select-input-value-ctn{text-wrap:wrap;word-break:break-word;align-items:center;width:100%;display:flex}.fi-select-input .fi-select-input-value-badges-ctn{gap:calc(var(--spacing)*1.5);flex-wrap:wrap;display:flex}.fi-select-input .fi-select-input-value-label{flex:1}.fi-select-input .fi-select-input-value-remove-btn{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);color:var(--gray-500);inset-inline-end:calc(var(--spacing)*8);position:absolute;top:50%}@media (hover:hover){.fi-select-input .fi-select-input-value-remove-btn:hover{color:var(--gray-600)}}.fi-select-input .fi-select-input-value-remove-btn:focus-visible{color:var(--gray-600);--tw-outline-style:none;outline-style:none}@media (hover:hover){.fi-select-input .fi-select-input-value-remove-btn:where(.dark,.dark *):hover{color:var(--gray-300)}}.fi-select-input .fi-select-input-value-remove-btn:where(.dark,.dark *):focus-visible{color:var(--gray-300)}.fi-select-input .fi-select-input-ctn-clearable .fi-select-input-btn{padding-inline-end:calc(var(--spacing)*14)}.fi-select-input .fi-dropdown-panel{max-height:calc(var(--spacing)*60);max-width:100%!important}:where(.fi-select-input .fi-select-input-options-ctn>: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)));border-color:var(--gray-100)}:where(.fi-select-input .fi-select-input-options-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-select-input .fi-select-input-options-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:where(.fi-select-input .fi-select-input-option-group>: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)));border-color:var(--gray-100)}:where(.fi-select-input .fi-select-input-option-group:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-select-input .fi-select-input-option-group:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-select-input .fi-select-input-option-group .fi-dropdown-header{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500)}.fi-select-input .fi-select-input-option-group .fi-dropdown-header:where(.dark,.dark *){color:var(--gray-400)}.fi-select-input .fi-select-input-search-ctn{top:calc(var(--spacing)*0);z-index:10;background-color:var(--color-white);position:sticky}.fi-select-input .fi-select-input-search-ctn:where(.dark,.dark *){background-color:var(--gray-900)}.fi-select-input .fi-select-input-option{text-wrap:wrap;word-break:break-word;min-width:1px}.fi-select-input .fi-select-input-placeholder{color:var(--gray-400)}.fi-select-input .fi-select-input-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-select-input .fi-disabled{cursor:not-allowed;opacity:.7}.fi-select-input .fi-disabled .fi-select-input-placeholder{color:var(--gray-400)}.fi-select-input .fi-disabled .fi-select-input-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-select-input .fi-select-input-message{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-select-input .fi-select-input-message:where(.dark,.dark *){color:var(--gray-400)}.fi-select-input .fi-select-input-ctn.fi-select-input-ctn-option-labels-not-wrapped .fi-select-input-value-ctn>span{text-overflow:ellipsis;white-space:nowrap;text-wrap:nowrap;overflow-wrap:normal;word-break:normal;overflow:hidden}.fi-select-input .fi-select-input-ctn.fi-select-input-ctn-option-labels-not-wrapped .fi-select-input-option>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fi-input-wrp{border-radius:var(--radius-lg);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms;display:flex}.fi-input-wrp:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-input-wrp:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-input-wrp:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-input-wrp:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)):focus-within{--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);--tw-ring-color:var(--primary-600)}.fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)):where(.dark,.dark *):focus-within{--tw-ring-color:var(--primary-500)}.fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)).fi-invalid:focus-within{--tw-ring-color:var(--danger-600)}.fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)).fi-invalid:where(.dark,.dark *):focus-within{--tw-ring-color:var(--danger-500)}.fi-input-wrp.fi-disabled{background-color:var(--gray-50)}.fi-input-wrp.fi-disabled:where(.dark,.dark *){background-color:#0000}.fi-input-wrp.fi-disabled:not(.fi-invalid):where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-input-wrp.fi-disabled:not(.fi-invalid):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-input-wrp.fi-invalid{--tw-ring-color:var(--danger-600)}.fi-input-wrp.fi-invalid:where(.dark,.dark *){--tw-ring-color:var(--danger-500)}.fi-input-wrp .fi-input-wrp-prefix{align-items:center;column-gap:calc(var(--spacing)*3);padding-inline-start:calc(var(--spacing)*3);display:none}.fi-input-wrp .fi-input-wrp-prefix.fi-input-wrp-prefix-has-content{display:flex}.fi-input-wrp .fi-input-wrp-prefix.fi-inline{padding-inline-end:calc(var(--spacing)*2)}.fi-input-wrp .fi-input-wrp-prefix.fi-inline.fi-input-wrp-prefix-has-label{padding-inline-end:calc(var(--spacing)*1)}.fi-input-wrp .fi-input-wrp-prefix:not(.fi-inline){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px;border-color:var(--gray-200);padding-inline-start:calc(var(--spacing)*3);padding-inline-end:calc(var(--spacing)*3)}.fi-input-wrp .fi-input-wrp-prefix:not(.fi-inline):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-input-wrp .fi-input-wrp-prefix:not(.fi-inline):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-input-wrp .fi-input-wrp-content-ctn,.fi-input-wrp:not(:has(.fi-input-wrp-content-ctn))>*{min-width:calc(var(--spacing)*0);flex:1}:is(.fi-input-wrp .fi-input-wrp-content-ctn,.fi-input-wrp:not(:has(.fi-input-wrp-content-ctn))>*).fi-input-wrp-content-ctn-ps{padding-inline-start:calc(var(--spacing)*3)}.fi-input-wrp .fi-input-wrp-suffix{align-items:center;column-gap:calc(var(--spacing)*3);padding-inline-end:calc(var(--spacing)*3);display:flex}.fi-input-wrp .fi-input-wrp-suffix.fi-inline{padding-inline-start:calc(var(--spacing)*2)}.fi-input-wrp .fi-input-wrp-suffix.fi-inline.fi-input-wrp-suffix-has-label{padding-inline-start:calc(var(--spacing)*1)}.fi-input-wrp .fi-input-wrp-suffix:not(.fi-inline){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-color:var(--gray-200);padding-inline-start:calc(var(--spacing)*3)}.fi-input-wrp .fi-input-wrp-suffix:not(.fi-inline):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-input-wrp .fi-input-wrp-suffix:not(.fi-inline):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-input-wrp .fi-input-wrp-actions{align-items:center;gap:calc(var(--spacing)*3);display:flex}.fi-input-wrp .fi-input-wrp-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;color:var(--gray-500)}.fi-input-wrp .fi-input-wrp-label:where(.dark,.dark *),:is(.fi-input-wrp .fi-input-wrp-prefix,.fi-input-wrp .fi-input-wrp-suffix)>.fi-icon{color:var(--gray-400)}:is(.fi-input-wrp .fi-input-wrp-prefix,.fi-input-wrp .fi-input-wrp-suffix)>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}:is(.fi-input-wrp .fi-input-wrp-prefix,.fi-input-wrp .fi-input-wrp-suffix)>.fi-icon.fi-color{color:var(--color-500)}.fi-link{justify-content:center;align-items:center;gap:calc(var(--spacing)*1.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);--tw-outline-style:none;outline-style:none;display:inline-flex;position:relative}.fi-link:where(.dark,.dark *){color:var(--gray-200)}@media (hover:hover){:is(.fi-link.fi-force-enabled,.fi-link:not(.fi-disabled):not([disabled])):hover{text-decoration-line:underline}}:is(.fi-link.fi-force-enabled,.fi-link:not(.fi-disabled):not([disabled])):focus-visible{text-decoration-line:underline}.fi-link.fi-disabled:not(.fi-force-enabled),.fi-link[disabled]:not(.fi-force-enabled){cursor:default;opacity:.7}:is(.fi-link.fi-disabled:not(.fi-force-enabled),.fi-link[disabled]:not(.fi-force-enabled)):not([x-tooltip]){pointer-events:none}.fi-link.fi-size-xs{gap:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-link.fi-size-sm{gap:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-link.fi-size-md,.fi-link.fi-size-lg,.fi-link.fi-size-xl{gap:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-link.fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.fi-link.fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.fi-link.fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.fi-link.fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.fi-link.fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.fi-link.fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.fi-link.fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.fi-link.fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.fi-link.fi-color{color:var(--text)}.fi-link.fi-color:where(.dark,.dark *){color:var(--dark-text)}.fi-link:not(.fi-color)>.fi-icon{color:var(--gray-400)}.fi-link:not(.fi-color)>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-link .fi-link-badge-ctn{inset-inline-start:100%;top:calc(var(--spacing)*0);z-index:1;--tw-translate-x:calc(calc(1/4*100%)*-1);--tw-translate-y:calc(calc(3/4*100%)*-1);width:max-content;translate:var(--tw-translate-x)var(--tw-translate-y);border-radius:var(--radius-md);background-color:var(--color-white);--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);display:flex;position:absolute}@media (hover:hover){.fi-link .fi-link-badge-ctn:hover{text-decoration-line:none}}.fi-link .fi-link-badge-ctn:focus-visible{text-decoration-line:none}.fi-link .fi-link-badge-ctn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(1/4*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-link .fi-link-badge-ctn:where(.dark,.dark *){background-color:var(--gray-900)}p>.fi-link,span>.fi-link{vertical-align:middle;text-align:inherit;padding-bottom:2px}.fi-loading-indicator{animation:var(--animate-spin)}.fi-loading-section{animation:var(--animate-pulse)}:is(.fi-modal.fi-modal-slide-over,.fi-modal.fi-width-screen)>.fi-modal-window-ctn>.fi-modal-window{height:100dvh}:is(.fi-modal.fi-modal-slide-over,.fi-modal.fi-width-screen)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content{flex:1}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window{margin-inline-start:auto;overflow-y:auto}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-start,.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-end{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-start,.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-end):where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-end,.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-start{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window .fi-modal-header{column-gap:calc(var(--spacing)*3)}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg{margin-block:calc(var(--spacing)*-2);padding:calc(var(--spacing)*2);margin-inline-start:calc(var(--spacing)*-2)}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window .fi-modal-close-btn{inset-inline-end:calc(var(--spacing)*6);top:calc(var(--spacing)*6)}.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen):not(.fi-modal-has-sticky-header):not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn{overflow-y:auto}:is(.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-header,.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window{max-height:calc(100dvh - 2rem);overflow-y:auto}.fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-start,.fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-end{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:0}.fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter-end,.fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave-start{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:1}.fi-modal:not(.fi-modal-slide-over)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-close-btn{inset-inline-end:calc(var(--spacing)*4);top:calc(var(--spacing)*4)}.fi-modal.fi-align-start:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window-has-icon .fi-modal-content,.fi-modal.fi-align-start:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window-has-icon .fi-modal-footer:not(.fi-align-center){padding-inline-start:5.25rem;padding-inline-end:calc(var(--spacing)*6)}.fi-modal:not(.fi-align-start)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content,.fi-modal:not(.fi-align-start)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer{padding-inline:calc(var(--spacing)*6)}.fi-modal>.fi-modal-close-overlay{inset:calc(var(--spacing)*0);z-index:40;background-color:var(--gray-950);position:fixed}@supports (color:color-mix(in lab, red, red)){.fi-modal>.fi-modal-close-overlay{background-color:color-mix(in oklab,var(--gray-950)50%,transparent)}}.fi-modal>.fi-modal-close-overlay{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.fi-modal>.fi-modal-close-overlay:where(.dark,.dark *){background-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-modal>.fi-modal-close-overlay:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-950)75%,transparent)}}.fi-modal.fi-modal-open:has(~.fi-modal.fi-modal-open)>.fi-modal-close-overlay{opacity:0}.fi-modal.fi-modal-open~.fi-modal.fi-modal-open>.fi-modal-close-overlay,.fi-modal.fi-modal-open~.fi-modal.fi-modal-open>.fi-modal-window-ctn{z-index:50}.fi-modal>.fi-modal-window-ctn{inset:calc(var(--spacing)*0);z-index:40;grid-template-rows:1fr auto 1fr;justify-items:center;min-height:100%;display:grid;position:fixed}@media (min-width:40rem){.fi-modal>.fi-modal-window-ctn{grid-template-rows:1fr auto 3fr}}.fi-modal>.fi-modal-window-ctn.fi-clickable{cursor:pointer}.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen)>.fi-modal-window-ctn{padding:calc(var(--spacing)*4)}.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen)>.fi-modal-window-ctn .fi-modal-window{border-radius:var(--radius-xl);margin-inline:auto}.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.fi-modal:not(.fi-modal-slide-over):not(.fi-width-screen).fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window{pointer-events:auto;cursor:default;background-color:var(--color-white);--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);width:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);flex-direction:column;grid-row-start:2;display:flex;position:relative}.fi-modal>.fi-modal-window-ctn>.fi-modal-window:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-modal>.fi-modal-window-ctn>.fi-modal-window:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-header{padding-inline:calc(var(--spacing)*6);padding-top:calc(var(--spacing)*6);display:flex}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-header.fi-vertical-align-center{align-items:center}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-heading:where(.dark,.dark *){color:var(--color-white)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-description{margin-top:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-description:where(.dark,.dark *){color:var(--gray-400)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content{row-gap:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*6);flex-direction:column;display:flex}:is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-left) .fi-modal-header{column-gap:calc(var(--spacing)*5)}:is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-left) .fi-modal-icon-bg{padding:calc(var(--spacing)*2)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-center .fi-modal-header{text-align:center;flex-direction:column}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-center .fi-modal-icon-ctn{margin-bottom:calc(var(--spacing)*5);justify-content:center;align-items:center;display:flex}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-align-center .fi-modal-icon-bg{padding:calc(var(--spacing)*3)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-hidden{display:none}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-xs{max-width:var(--container-xs)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-sm{max-width:var(--container-sm)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-md{max-width:var(--container-md)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-lg{max-width:var(--container-lg)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-xl{max-width:var(--container-xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-2xl{max-width:var(--container-2xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-3xl{max-width:var(--container-3xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-4xl{max-width:var(--container-4xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-5xl{max-width:var(--container-5xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-6xl{max-width:var(--container-6xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-7xl{max-width:var(--container-7xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-full{max-width:100%}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-min{max-width:min-content}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-max{max-width:max-content}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-fit{max-width:fit-content}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-prose{max-width:65ch}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-sm{max-width:var(--breakpoint-sm)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-md{max-width:var(--breakpoint-md)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-lg{max-width:var(--breakpoint-lg)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-xl{max-width:var(--breakpoint-xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen-2xl{max-width:var(--breakpoint-2xl)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-width-screen{inset:calc(var(--spacing)*0);position:fixed}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-transition-enter,.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-transition-leave{--tw-duration:.3s;transition-duration:.3s}.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn.fi-align-center:not(.fi-modal-window-has-icon) .fi-modal-heading{margin-inline-start:calc(var(--spacing)*6)}:is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn:not(.fi-modal-window-has-icon),.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-close-btn.fi-align-left) .fi-modal-heading{margin-inline-end:calc(var(--spacing)*6)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-close-btn{position:absolute}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer{width:100%}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer .fi-modal-footer-actions{gap:calc(var(--spacing)*3)}:is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-start,.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-left) .fi-modal-footer-actions{flex-wrap:wrap;align-items:center;display:flex}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center{padding-inline:calc(var(--spacing)*6)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center .fi-modal-footer-actions{flex-direction:column-reverse;display:flex}:is(.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-end,.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-right) .fi-modal-footer-actions{flex-flow:row-reverse wrap;align-items:center;display:flex}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg{background-color:var(--gray-100);border-radius:3.40282e38px}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg:where(.dark,.dark *){background-color:var(--gray-500)}@supports (color:color-mix(in lab, red, red)){.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-500)20%,transparent)}}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg>.fi-icon{color:var(--gray-500)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg>.fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color{background-color:var(--color-100)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color:where(.dark,.dark *){background-color:var(--color-500)}@supports (color:color-mix(in lab, red, red)){.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-500)20%,transparent)}}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color>.fi-icon{color:var(--color-600)}.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-icon-bg.fi-color>.fi-icon:where(.dark,.dark *){color:var(--color-400)}.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header{top:calc(var(--spacing)*0);z-index:10;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--color-white);padding-bottom:calc(var(--spacing)*6);position:sticky}.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-header:where(.dark,.dark *){background-color:var(--gray-900)}.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window .fi-modal-content,.fi-modal.fi-modal-has-sticky-header>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer{padding-inline:calc(var(--spacing)*6)}.fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer{bottom:calc(var(--spacing)*0);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);background-color:var(--color-white);padding-block:calc(var(--spacing)*5);position:sticky}.fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-modal.fi-modal-has-sticky-footer>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer:where(.dark,.dark *){background-color:var(--gray-900)}.fi-modal:not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-content) .fi-modal-footer{margin-top:calc(var(--spacing)*6)}.fi-modal:not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-content):not(.fi-modal-window-has-footer) .fi-modal-header,.fi-modal:not(.fi-modal-has-sticky-footer)>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer{padding-bottom:calc(var(--spacing)*6)}.fi-modal:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-icon) .fi-modal-content,.fi-modal:not(.fi-modal-has-sticky-header)>.fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-icon) .fi-modal-footer{padding-inline:calc(var(--spacing)*6)}.fi-modal.fi-modal-slide-over>.fi-modal-window-ctn>.fi-modal-window>.fi-modal-footer{margin-top:auto}@supports (container-type:inline-size){.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center{container-type:inline-size}@container (min-width:24rem){.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center .fi-modal-footer-actions{grid-template-columns:repeat(auto-fit,minmax(0,1fr));display:grid}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-modal>.fi-modal-window-ctn>.fi-modal-window .fi-modal-footer.fi-align-center .fi-modal-footer-actions{grid-template-columns:repeat(auto-fit,minmax(0,1fr));display:grid}}}:scope .fi-modal-trigger{display:flex}.fi-pagination{align-items:center;column-gap:calc(var(--spacing)*3);grid-template-columns:1fr auto 1fr;display:grid}.fi-pagination:empty{display:none}.fi-pagination .fi-pagination-previous-btn{justify-self:flex-start}.fi-pagination .fi-pagination-overview{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);display:none}.fi-pagination .fi-pagination-overview:where(.dark,.dark *){color:var(--gray-200)}.fi-pagination .fi-pagination-records-per-page-select-ctn{grid-column-start:2;justify-self:center}.fi-pagination .fi-pagination-records-per-page-select:not(.fi-compact){display:none}.fi-pagination .fi-pagination-next-btn{grid-column-start:3;justify-self:flex-end}.fi-pagination .fi-pagination-items{border-radius:var(--radius-lg);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);justify-self:flex-end;display:none}.fi-pagination .fi-pagination-items:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-pagination .fi-pagination-items:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-pagination .fi-pagination-items:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-pagination .fi-pagination-items:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-pagination .fi-pagination-item{border-inline-style:var(--tw-border-style);border-inline-width:.5px;border-color:var(--gray-200)}.fi-pagination .fi-pagination-item:first-child{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.fi-pagination .fi-pagination-item:last-child{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.fi-pagination .fi-pagination-item:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-pagination .fi-pagination-item:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-btn{background-color:var(--gray-50)}.fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-btn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-label{color:var(--primary-700)}.fi-pagination .fi-pagination-item.fi-active .fi-pagination-item-label:where(.dark,.dark *){color:var(--primary-400)}.fi-pagination .fi-pagination-item:first-of-type .fi-pagination-item-btn{border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.fi-pagination .fi-pagination-item:last-of-type .fi-pagination-item-btn{border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}.fi-pagination .fi-pagination-item.fi-disabled .fi-pagination-item-label{color:var(--gray-500)}.fi-pagination .fi-pagination-item.fi-disabled .fi-pagination-item-label:where(.dark,.dark *){color:var(--gray-400)}.fi-pagination .fi-pagination-item-btn{padding:calc(var(--spacing)*2);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;outline-style:none;transition-duration:75ms;display:flex;position:relative;overflow:hidden}@media (hover:hover){.fi-pagination .fi-pagination-item-btn:enabled:hover{background-color:var(--gray-50)}}.fi-pagination .fi-pagination-item-btn:enabled:focus-visible{z-index:10;--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);--tw-ring-color:var(--primary-600)}@media (hover:hover){.fi-pagination .fi-pagination-item-btn:enabled:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-pagination .fi-pagination-item-btn:enabled:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-pagination .fi-pagination-item-btn:enabled:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--primary-500)}.fi-pagination .fi-pagination-item-btn:hover .fi-icon{color:var(--gray-500)}.fi-pagination .fi-pagination-item-btn:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-pagination .fi-pagination-item-btn .fi-icon{color:var(--gray-400);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-pagination .fi-pagination-item-btn .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-pagination .fi-pagination-item-btn .fi-pagination-item-label{padding-inline:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-700)}.fi-pagination .fi-pagination-item-btn .fi-pagination-item-label:where(.dark,.dark *){color:var(--gray-200)}@supports (container-type:inline-size){.fi-pagination{container-type:inline-size}@container (min-width:28rem){.fi-pagination .fi-pagination-records-per-page-select:not(.fi-compact){display:inline}.fi-pagination .fi-pagination-records-per-page-select.fi-compact{display:none}}@container (min-width:56rem){.fi-pagination:not(.fi-simple) .fi-pagination-previous-btn,.fi-pagination:not(.fi-simple) .fi-pagination-next-btn{display:none}.fi-pagination .fi-pagination-overview{display:inline}.fi-pagination .fi-pagination-items{display:flex}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-pagination .fi-pagination-records-per-page-select:not(.fi-compact){display:inline}.fi-pagination .fi-pagination-records-per-page-select.fi-compact{display:none}}@media (min-width:48rem){.fi-pagination:not(.fi-simple) .fi-pagination-previous-btn,.fi-pagination:not(.fi-simple) .fi-pagination-next-btn{display:none}.fi-pagination .fi-pagination-overview{display:inline}.fi-pagination .fi-pagination-items{display:flex}}}.fi-section:not(.fi-section-not-contained):not(.fi-divided)>.fi-section-content-ctn>.fi-section-content,.fi-section:not(.fi-section-not-contained).fi-divided>.fi-section-content-ctn>.fi-section-content>*{padding:calc(var(--spacing)*6)}.fi-section:not(.fi-section-not-contained)>.fi-section-content-ctn>.fi-section-footer{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*4)}.fi-section:not(.fi-section-not-contained)>.fi-section-content-ctn>.fi-section-footer:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained)>.fi-section-content-ctn>.fi-section-footer:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-section:not(.fi-section-not-contained):not(.fi-aside){border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-section:not(.fi-section-not-contained):not(.fi-aside):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained):not(.fi-aside):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-compact{border-radius:var(--radius-lg)}.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-secondary{background-color:var(--gray-50)}.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-secondary:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-secondary:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-section:not(.fi-section-not-contained):not(.fi-aside)>.fi-section-header{padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*4)}.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-section-has-header:not(.fi-collapsed)>.fi-section-content-ctn{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200)}.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-section-has-header:not(.fi-collapsed)>.fi-section-content-ctn:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained):not(.fi-aside).fi-section-has-header:not(.fi-collapsed)>.fi-section-content-ctn:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}@media (min-width:48rem){.fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn{grid-column:span 2/span 2}}.fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained).fi-aside>.fi-section-content-ctn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-section:not(.fi-section-not-contained).fi-aside.fi-compact>.fi-section-content-ctn{border-radius:var(--radius-lg)}.fi-section:not(.fi-section-not-contained).fi-aside.fi-secondary>.fi-section-content-ctn{background-color:var(--gray-50)}.fi-section:not(.fi-section-not-contained).fi-aside.fi-secondary>.fi-section-content-ctn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-section:not(.fi-section-not-contained).fi-aside.fi-secondary>.fi-section-content-ctn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-section:not(.fi-section-not-contained).fi-compact:not(.fi-aside)>.fi-section-header{padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2.5)}.fi-section:not(.fi-section-not-contained).fi-compact:not(.fi-divided)>.fi-section-content-ctn>.fi-section-content,.fi-section:not(.fi-section-not-contained).fi-compact.fi-divided>.fi-section-content-ctn>.fi-section-content>*{padding:calc(var(--spacing)*4)}.fi-section:not(.fi-section-not-contained).fi-compact>.fi-section-footer{padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2.5)}@media (min-width:48rem){.fi-section.fi-section-not-contained.fi-aside>.fi-section-content-ctn{grid-column:span 2/span 2}}.fi-section.fi-section-not-contained:not(.fi-aside),.fi-section.fi-section-not-contained:not(.fi-aside)>.fi-section-content-ctn{row-gap:calc(var(--spacing)*4);display:grid}.fi-section.fi-section-not-contained:not(.fi-aside).fi-divided>.fi-section-content-ctn>.fi-section-content>*{padding-block:calc(var(--spacing)*6)}.fi-section.fi-section-not-contained:not(.fi-aside).fi-compact,.fi-section.fi-section-not-contained:not(.fi-aside).fi-compact>.fi-section-content-ctn{row-gap:calc(var(--spacing)*2.5)}.fi-section.fi-section-not-contained:not(.fi-aside).fi-compact.fi-divided>.fi-section-content-ctn>.fi-section-content>*{padding-block:calc(var(--spacing)*4)}.fi-section.fi-divided>.fi-section-content-ctn>.fi-section-content{gap:calc(var(--spacing)*0)}:where(.fi-section.fi-divided>.fi-section-content-ctn>.fi-section-content>: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)));border-color:var(--gray-200)}:where(.fi-section.fi-divided>.fi-section-content-ctn>.fi-section-content:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-section.fi-divided>.fi-section-content-ctn>.fi-section-content:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-section.fi-aside{align-items:flex-start;column-gap:calc(var(--spacing)*6);row-gap:calc(var(--spacing)*4);grid-template-columns:repeat(1,minmax(0,1fr));display:grid}@media (min-width:48rem){.fi-section.fi-aside{grid-template-columns:repeat(3,minmax(0,1fr))}}.fi-section.fi-collapsible>.fi-section-header{cursor:pointer}.fi-section.fi-collapsed>.fi-section-header>.fi-section-collapse-btn{rotate:180deg}.fi-section.fi-collapsed>.fi-section-content-ctn{visibility:hidden;height:calc(var(--spacing)*0);--tw-border-style:none;border-style:none;position:absolute;overflow:hidden}@media (min-width:48rem){.fi-section.fi-section-has-content-before>.fi-section-content-ctn{order:-9999}}.fi-section>.fi-section-header{align-items:flex-start;gap:calc(var(--spacing)*3);display:flex}.fi-section>.fi-section-header>.fi-icon{color:var(--gray-400);flex-shrink:0}.fi-section>.fi-section-header>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-section>.fi-section-header>.fi-icon.fi-color{color:var(--color-500)}.fi-section>.fi-section-header>.fi-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}.fi-section>.fi-section-header>.fi-icon.fi-size-sm{margin-top:calc(var(--spacing)*1)}.fi-section>.fi-section-header>.fi-icon.fi-size-md{margin-top:calc(var(--spacing)*.5)}.fi-section>.fi-section-header>.fi-section-header-after-ctn{align-self:center}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-sc-text:not(.fi-section-header-after-ctn .fi-dropdown-panel *),.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-link:not(.fi-section-header-after-ctn .fi-dropdown-panel *){--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn:not(.fi-section-header-after-ctn .fi-dropdown-panel *).fi-size-xs{margin-block:calc(var(--spacing)*-.5)}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn:not(.fi-section-header-after-ctn .fi-dropdown-panel *).fi-size-sm{margin-block:calc(var(--spacing)*-1)}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn:not(.fi-section-header-after-ctn .fi-dropdown-panel *).fi-size-md{margin-block:calc(var(--spacing)*-1.5)}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn:not(.fi-section-header-after-ctn .fi-dropdown-panel *).fi-size-lg{margin-block:calc(var(--spacing)*-2)}.fi-section>.fi-section-header>.fi-section-header-after-ctn .fi-btn:not(.fi-section-header-after-ctn .fi-dropdown-panel *).fi-size-xl{margin-block:calc(var(--spacing)*-2.5)}.fi-section>.fi-section-header>.fi-section-collapse-btn{margin-block:calc(var(--spacing)*-1.5);flex-shrink:0}.fi-section .fi-section-header-text-ctn{row-gap:calc(var(--spacing)*1);flex:1;display:grid}.fi-section .fi-section-header-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-section .fi-section-header-heading:where(.dark,.dark *){color:var(--color-white)}.fi-section .fi-section-header-description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-wrap:break-word;color:var(--gray-500);overflow:hidden}.fi-section .fi-section-header-description:where(.dark,.dark *){color:var(--gray-400)}.fi-tabs{column-gap:calc(var(--spacing)*1);max-width:100%;display:flex;overflow-x:auto}.fi-tabs.fi-contained{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2.5)}.fi-tabs.fi-contained:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-tabs.fi-contained:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-tabs:not(.fi-contained){border-radius:var(--radius-xl);background-color:var(--color-white);padding:calc(var(--spacing)*2);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);margin-inline:auto}.fi-tabs:not(.fi-contained):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-tabs:not(.fi-contained):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-tabs.fi-vertical{column-gap:calc(var(--spacing)*0);row-gap:calc(var(--spacing)*1);flex-direction:column;overflow:hidden auto}.fi-tabs.fi-vertical.fi-contained{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0}.fi-tabs.fi-vertical:not(.fi-contained){margin-inline:calc(var(--spacing)*0)}.fi-tabs.fi-vertical .fi-tabs-item{justify-content:flex-start}.fi-tabs-item{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*2);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;--tw-outline-style:none;outline-style:none;transition-duration:75ms;display:flex}@media (hover:hover){.fi-tabs-item:hover{background-color:var(--gray-50)}}.fi-tabs-item:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.fi-tabs-item:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-tabs-item:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-tabs-item:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-tabs-item:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-tabs-item.fi-active{background-color:var(--gray-50)}.fi-tabs-item.fi-active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-tabs-item.fi-active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-tabs-item.fi-active .fi-tabs-item-label,.fi-tabs-item.fi-active>.fi-icon{color:var(--primary-700)}:is(.fi-tabs-item.fi-active .fi-tabs-item-label,.fi-tabs-item.fi-active>.fi-icon):where(.dark,.dark *){color:var(--primary-400)}.fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label,.fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label:is(:where(.group):focus-visible *){color:var(--gray-700)}.fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label:where(.dark,.dark *),.fi-tabs-item :not(.fi-active):hover .fi-tabs-item-label:where(.dark,.dark *):is(:where(.group):focus-visible *){color:var(--gray-200)}.fi-tabs-item :not(.fi-active):focus-visible .fi-tabs-item-label{color:var(--gray-700)}.fi-tabs-item :not(.fi-active):focus-visible .fi-tabs-item-label:where(.dark,.dark *){color:var(--gray-200)}.fi-tabs-item .fi-tabs-item-label{color:var(--gray-500);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-tabs-item .fi-tabs-item-label:where(.dark,.dark *){color:var(--gray-400)}.fi-tabs-item>.fi-icon{color:var(--gray-400);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;flex-shrink:0;transition-duration:75ms}.fi-tabs-item>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-tabs-item .fi-badge{width:max-content}.fi-tabs-item .fi-tabs-item-badge-placeholder{color:var(--gray-400);align-items:center;display:flex}.fi-tabs-item .fi-tabs-item-badge-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-toggle{height:calc(var(--spacing)*6);width:calc(var(--spacing)*11);cursor:pointer;border-style:var(--tw-border-style);background-color:var(--gray-200);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));--tw-duration:.2s;--tw-ease:var(--ease-in-out);transition-duration:.2s;transition-timing-function:var(--ease-in-out);--tw-outline-style:none;border-width:2px;border-color:#0000;border-radius:3.40282e38px;outline-style:none;flex-shrink:0;display:inline-flex;position:relative}.fi-toggle:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary-600);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.fi-toggle:disabled{pointer-events:none;opacity:.7}.fi-toggle:where(.dark,.dark *){background-color:var(--gray-700)}.fi-toggle:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--primary-500);--tw-ring-offset-color:var(--gray-900)}.fi-toggle:disabled,.fi-toggle[disabled]{pointer-events:none;opacity:.7}.fi-toggle.fi-color{background-color:var(--bg)}.fi-toggle.fi-color:where(.dark,.dark *){background-color:var(--dark-bg)}.fi-toggle.fi-color .fi-icon{color:var(--text)}.fi-toggle.fi-hidden{display:none}.fi-toggle>:first-child{pointer-events:none;width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;--tw-ease:var(--ease-in-out);transition-duration:.2s;transition-timing-function:var(--ease-in-out);border-radius:3.40282e38px;display:inline-block;position:relative}.fi-toggle>:first-child>*{inset:calc(var(--spacing)*0);width:100%;height:100%;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));justify-content:center;align-items:center;display:flex;position:absolute}.fi-toggle .fi-icon{color:var(--gray-400)}.fi-toggle .fi-icon:where(.dark,.dark *){color:var(--gray-700)}.fi-toggle.fi-toggle-on>:first-child{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-toggle.fi-toggle-on>:first-child:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-5);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-toggle.fi-toggle-on>:first-child>:first-child{opacity:0;--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out)}.fi-toggle.fi-toggle-on>:first-child>:last-child{opacity:1;--tw-duration:.2s;--tw-ease:var(--ease-in);transition-duration:.2s;transition-timing-function:var(--ease-in)}.fi-toggle.fi-toggle-off>:first-child{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-toggle.fi-toggle-off>:first-child>:first-child{opacity:1;--tw-duration:.2s;--tw-ease:var(--ease-in);transition-duration:.2s;transition-timing-function:var(--ease-in)}.fi-toggle.fi-toggle-off>:first-child>:last-child{opacity:0;--tw-duration:.1s;--tw-ease:var(--ease-out);transition-duration:.1s;transition-timing-function:var(--ease-out)}.fi-sortable-ghost{opacity:.3}.fi-ac{gap:calc(var(--spacing)*3)}.fi-ac:not(.fi-width-full){flex-wrap:wrap;align-items:center;display:flex}.fi-ac:not(.fi-width-full).fi-align-start,.fi-ac:not(.fi-width-full).fi-align-left{justify-content:flex-start}.fi-ac:not(.fi-width-full).fi-align-center{justify-content:center}.fi-ac:not(.fi-width-full).fi-align-end,.fi-ac:not(.fi-width-full).fi-align-right{flex-direction:row-reverse}.fi-ac:not(.fi-width-full).fi-align-between,.fi-ac:not(.fi-width-full).fi-align-justify{justify-content:space-between}.fi-ac.fi-width-full{grid-template-columns:repeat(auto-fit,minmax(0,1fr));display:grid}.CodeMirror{color:#000;direction:ltr;height:300px;font-family:monospace}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{white-space:nowrap;background-color:#f7f7f7;border-right:1px solid #ddd}.CodeMirror-linenumber{text-align:right;color:#999;white-space:nowrap;min-width:20px;padding:0 3px 0 5px}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;width:auto;border:0!important}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection{background:0 0}.cm-fat-cursor .CodeMirror-line>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection{background:0 0}.cm-fat-cursor .CodeMirror-line>span::-moz-selection{background:0 0}.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:#0000}@keyframes blink{50%{background-color:#0000}}.cm-tab{-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;display:inline-block}.CodeMirror-rulers{position:absolute;inset:-50px 0 0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute;top:0;bottom:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error,.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:#ff96004d}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;position:relative;overflow:hidden}.CodeMirror-scroll{z-index:0;outline:0;height:100%;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;position:relative;overflow:scroll!important}.CodeMirror-sizer{border-right:50px solid #0000;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{z-index:6;outline:0;display:none;position:absolute}.CodeMirror-vscrollbar{top:0;right:0;overflow:hidden scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow:scroll hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{z-index:3;min-height:100%;position:absolute;top:0;left:0}.CodeMirror-gutter{white-space:normal;vertical-align:top;height:100%;margin-bottom:-50px;display:inline-block}.CodeMirror-gutter-wrapper{z-index:4;position:absolute;background:0 0!important;border:none!important}.CodeMirror-gutter-background{z-index:4;position:absolute;top:0;bottom:0}.CodeMirror-gutter-elt{cursor:default;z-index:4;position:absolute}.CodeMirror-gutter-wrapper ::selection{background-color:#0000}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{font-family:inherit;font-size:inherit;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual;background:0 0;border-width:0;border-radius:0;margin:0;position:relative;overflow:visible}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{z-index:0;position:absolute;inset:0}.CodeMirror-linewidget{z-index:2;padding:.1px;position:relative}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{visibility:hidden;width:100%;height:0;position:absolute;overflow:hidden}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;z-index:3;position:relative}div.CodeMirror-dragcursors,.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection{background:#d7d4f0}.CodeMirror-line>span::selection{background:#d7d4f0}.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection{background:#d7d4f0}.CodeMirror-line>span::-moz-selection{background:#d7d4f0}.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{flex-flow:wrap;display:flex}.EasyMDEContainer .CodeMirror{box-sizing:border-box;height:auto;font:inherit;z-index:0;word-wrap:break-word;border:1px solid #ced4da;border-bottom-right-radius:4px;border-bottom-left-radius:4px;padding:10px}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{z-index:8;background:#fff;height:auto;inset:50px 0 0;border-right:none!important;border-bottom-right-radius:0!important;position:fixed!important}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-bottom-right-radius:0;flex:auto;position:relative;border-right:none!important}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{-webkit-user-select:none;user-select:none;-o-user-select:none;border-top:1px solid #ced4da;border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px;padding:9px 10px;position:relative}.editor-toolbar.fullscreen{box-sizing:border-box;opacity:1;z-index:9;background:#fff;border:0;width:100%;height:50px;padding-top:10px;padding-bottom:10px;position:fixed;top:0;left:0}.editor-toolbar.fullscreen:before{background:-o-linear-gradient(270deg,#fff 0,#fff0 100%);background:-ms-linear-gradient(left,#fff 0,#fff0 100%);background:linear-gradient(90deg,#fff 0,#fff0);width:20px;height:50px;margin:0;padding:0;position:fixed;top:0;left:0}.editor-toolbar.fullscreen:after{background:-o-linear-gradient(270deg,#fff0 0,#fff 100%);background:-ms-linear-gradient(left,#fff0 0,#fff 100%);background:linear-gradient(90deg,#fff0 0,#fff);width:20px;height:50px;margin:0;padding:0;position:fixed;top:0;right:0}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{text-align:center;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:3px;height:30px;margin:0;padding:0;display:inline-block;text-decoration:none!important}.editor-toolbar button{white-space:nowrap;min-width:30px;padding:0 6px;font-weight:700}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{color:#0000;text-indent:-10px;border-left:1px solid #d9d9d9;border-right:1px solid #fff;width:0;margin:0 6px;display:inline-block}.editor-toolbar button:after{vertical-align:text-bottom;font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;position:relative;top:2px}.editor-toolbar button.heading-1:after{content:"1"}.editor-toolbar button.heading-2:after{content:"2"}.editor-toolbar button.heading-3:after{content:"3"}.editor-toolbar button.heading-bigger:after{content:"▲"}.editor-toolbar button.heading-smaller:after{content:"▼"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{color:#959694;text-align:right;padding:8px 10px;font-size:12px}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{min-width:4em;margin-left:1em;display:inline-block}.editor-statusbar .lines:before{content:"lines: "}.editor-statusbar .words:before{content:"words: "}.editor-statusbar .characters:before{content:"characters: "}.editor-preview-full{z-index:7;box-sizing:border-box;width:100%;height:100%;display:none;position:absolute;top:0;left:0;overflow:auto}.editor-preview-side{z-index:9;box-sizing:border-box;word-wrap:break-word;border:1px solid #ddd;width:50%;display:none;position:fixed;top:50px;bottom:0;right:0;overflow:auto}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{background:#fafafa;padding:10px}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.cm-s-easymde .cm-header-5{font-size:1.25rem}.cm-s-easymde .cm-header-6{font-size:1rem}.cm-s-easymde .cm-header-1,.cm-s-easymde .cm-header-2,.cm-s-easymde .cm-header-3,.cm-s-easymde .cm-header-4,.cm-s-easymde .cm-header-5,.cm-s-easymde .cm-header-6{margin-bottom:.5rem;line-height:1.2}.cm-s-easymde .cm-comment{background:#0000000d;border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{background:linear-gradient(to bottom right,#fff 0 84%,#333 50% 100%);border:1px solid #fff;border-radius:0;position:relative}.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff 0 84%,#333 50% 100%)}.easymde-dropdown-content{visibility:hidden;z-index:2;background-color:#f9f9f9;padding:8px;display:block;position:absolute;top:30px;box-shadow:0 8px 16px #0003}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.easymde-dropdown-content button{display:block}span[data-img-src]:after{content:"";background-image:var(--bg-image);max-width:100%;height:0;max-height:100%;padding-top:var(--height);width:var(--width);background-repeat:no-repeat;background-size:contain;display:block}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:#ff000026}.cropper-container{-webkit-touch-callout:none;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;user-select:none;direction:ltr;font-size:0;line-height:0;position:relative}.cropper-container img{backface-visibility:hidden;image-orientation:0deg;width:100%;height:100%;display:block;min-width:0!important;max-width:none!important;min-height:0!important;max-height:none!important}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{position:absolute;inset:0}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{opacity:0;background-color:#fff}.cropper-modal{opacity:.5;background-color:#000}.cropper-view-box{outline:1px solid #3399ffbf;width:100%;height:100%;display:block;overflow:hidden}.cropper-dashed{opacity:.5;border:0 dashed #eee;display:block;position:absolute}.cropper-dashed.dashed-h{border-top-width:1px;border-bottom-width:1px;width:100%;height:33.3333%;top:33.3333%;left:0}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;width:33.3333%;height:100%;top:0;left:33.3333%}.cropper-center{opacity:.75;width:0;height:0;display:block;position:absolute;top:50%;left:50%}.cropper-center:after,.cropper-center:before{content:" ";background-color:#eee;display:block;position:absolute}.cropper-center:before{width:7px;height:1px;top:0;left:-3px}.cropper-center:after{width:1px;height:7px;top:-3px;left:0}.cropper-face,.cropper-line,.cropper-point{opacity:.1;width:100%;height:100%;display:block;position:absolute}.cropper-face{background-color:#fff;top:0;left:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;width:5px;top:0;right:-3px}.cropper-line.line-n{cursor:ns-resize;height:5px;top:-3px;left:0}.cropper-line.line-w{cursor:ew-resize;width:5px;top:0;left:-3px}.cropper-line.line-s{cursor:ns-resize;height:5px;bottom:-3px;left:0}.cropper-point{opacity:.75;background-color:#39f;width:5px;height:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;top:50%;right:-3px}.cropper-point.point-n{cursor:ns-resize;margin-left:-3px;top:-3px;left:50%}.cropper-point.point-w{cursor:ew-resize;margin-top:-3px;top:50%;left:-3px}.cropper-point.point-s{cursor:s-resize;margin-left:-3px;bottom:-3px;left:50%}.cropper-point.point-ne{cursor:nesw-resize;top:-3px;right:-3px}.cropper-point.point-nw{cursor:nwse-resize;top:-3px;left:-3px}.cropper-point.point-sw{cursor:nesw-resize;bottom:-3px;left:-3px}.cropper-point.point-se{cursor:nwse-resize;opacity:1;width:20px;height:20px;bottom:-3px;right:-3px}@media (min-width:768px){.cropper-point.point-se{width:15px;height:15px}}@media (min-width:992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width:1200px){.cropper-point.point-se{opacity:.75;width:5px;height:5px}}.cropper-point.point-se:before{content:" ";opacity:0;background-color:#39f;width:200%;height:200%;display:block;position:absolute;bottom:-50%;right:-50%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-hide{width:0;height:0;display:block;position:absolute}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.filepond--assistant{clip:rect(1px,1px,1px,1px);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.filepond--browser.filepond--browser{opacity:0;width:calc(100% - 2em);margin:0;padding:0;font-size:0;position:absolute;top:1.75em;left:1em}.filepond--data{visibility:hidden;pointer-events:none;contain:strict;border:none;width:0;height:0;margin:0;padding:0;position:absolute}.filepond--drip{opacity:.1;pointer-events:none;background:#00000003;border-radius:.5em;position:absolute;inset:0;overflow:hidden}.filepond--drip-blob{transform-origin:50%;background:#292625;border-radius:50%;width:8em;height:8em;margin-top:-4em;margin-left:-4em}.filepond--drip-blob,.filepond--drop-label{will-change:transform,opacity;position:absolute;top:0;left:0}.filepond--drop-label{color:#4f4f4f;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;height:0;margin:0;display:flex;right:0}.filepond--drop-label.filepond--drop-label label{margin:0;padding:.5em;display:block}.filepond--drop-label label{cursor:default;text-align:center;font-size:.875em;font-weight:400;line-height:1.5}.filepond--label-action{-webkit-text-decoration-skip:ink;-webkit-text-decoration-skip-ink:auto;text-decoration-skip-ink:auto;cursor:pointer;-webkit-text-decoration:underline #a7a4a4;text-decoration:underline #a7a4a4}.filepond--root[data-disabled] .filepond--drop-label label{opacity:.5}.filepond--file-action-button.filepond--file-action-button{width:1.625em;height:1.625em;font-family:inherit;font-size:1em;line-height:inherit;will-change:transform,opacity;border:none;outline:none;margin:0;padding:0}.filepond--file-action-button.filepond--file-action-button span{clip:rect(1px,1px,1px,1px);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.filepond--file-action-button.filepond--file-action-button svg{width:100%;height:100%}.filepond--file-action-button.filepond--file-action-button:after{content:"";position:absolute;inset:-.75em}.filepond--file-action-button{cursor:auto;color:#fff;background-color:#00000080;background-image:none;border-radius:50%;transition:box-shadow .25s ease-in;box-shadow:0 0 #fff0}.filepond--file-action-button:focus,.filepond--file-action-button:hover{box-shadow:0 0 0 .125em #ffffffe6}.filepond--file-action-button[disabled]{color:#ffffff80;background-color:#00000040}.filepond--file-action-button[hidden]{display:none}.filepond--file-info{will-change:transform,opacity;pointer-events:none;-webkit-user-select:none;user-select:none;flex-direction:column;flex:1;align-items:flex-start;min-width:0;margin:0 .5em 0 0;display:flex;position:static}.filepond--file-info *{margin:0}.filepond--file-info .filepond--file-info-main{text-overflow:ellipsis;white-space:nowrap;width:100%;font-size:.75em;line-height:1.2;overflow:hidden}.filepond--file-info .filepond--file-info-sub{opacity:.5;white-space:nowrap;font-size:.625em;transition:opacity .25s ease-in-out}.filepond--file-info .filepond--file-info-sub:empty{display:none}.filepond--file-status{text-align:right;will-change:transform,opacity;pointer-events:none;-webkit-user-select:none;user-select:none;flex-direction:column;flex-grow:0;flex-shrink:0;align-items:flex-end;min-width:2.25em;margin:0;display:flex;position:static}.filepond--file-status *{white-space:nowrap;margin:0}.filepond--file-status .filepond--file-status-main{font-size:.75em;line-height:1.2}.filepond--file-status .filepond--file-status-sub{opacity:.5;font-size:.625em;transition:opacity .25s ease-in-out}.filepond--file-wrapper.filepond--file-wrapper{border:none;min-width:0;height:100%;margin:0;padding:0}.filepond--file-wrapper.filepond--file-wrapper>legend{clip:rect(1px,1px,1px,1px);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.filepond--file{color:#fff;border-radius:.5em;align-items:flex-start;height:100%;padding:.5625em;display:flex;position:static}.filepond--file .filepond--file-status{margin-left:auto;margin-right:2.25em}.filepond--file .filepond--processing-complete-indicator{pointer-events:none;-webkit-user-select:none;user-select:none;z-index:3}.filepond--file .filepond--file-action-button,.filepond--file .filepond--processing-complete-indicator,.filepond--file .filepond--progress-indicator{position:absolute}.filepond--file [data-align*=left]{left:.5625em}.filepond--file [data-align*=right]{right:.5625em}.filepond--file [data-align*=center]{left:calc(50% - .8125em)}.filepond--file [data-align*=bottom]{bottom:1.125em}.filepond--file [data-align=center]{top:calc(50% - .8125em)}.filepond--file .filepond--progress-indicator{margin-top:.1875em}.filepond--file .filepond--progress-indicator[data-align*=right]{margin-right:.1875em}.filepond--file .filepond--progress-indicator[data-align*=left]{margin-left:.1875em}[data-filepond-item-state*=error] .filepond--file-info,[data-filepond-item-state*=invalid] .filepond--file-info,[data-filepond-item-state=cancelled] .filepond--file-info{margin-right:2.25em}[data-filepond-item-state~=processing] .filepond--file-status-sub{opacity:0}[data-filepond-item-state~=processing] .filepond--action-abort-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-error] .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-error] .filepond--action-retry-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing svg{animation:.5s linear .125s both fall}[data-filepond-item-state=processing-complete] .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--file-info-sub,[data-filepond-item-state=processing-complete] .filepond--processing-complete-indicator:not([style*=hidden])~.filepond--file-status .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing~.filepond--file-info .filepond--file-info-sub{opacity:.5}[data-filepond-item-state*=error] .filepond--file-wrapper,[data-filepond-item-state*=error] .filepond--panel,[data-filepond-item-state*=invalid] .filepond--file-wrapper,[data-filepond-item-state*=invalid] .filepond--panel{animation:.65s linear both shake}[data-filepond-item-state*=busy] .filepond--progress-indicator svg{animation:1s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes shake{10%,90%{transform:translate(-.0625em)}20%,80%{transform:translate(.125em)}30%,50%,70%{transform:translate(-.25em)}40%,60%{transform:translate(.25em)}}@keyframes fall{0%{opacity:0;animation-timing-function:ease-out;transform:scale(.5)}70%{opacity:1;animation-timing-function:ease-in-out;transform:scale(1.1)}to{animation-timing-function:ease-out;transform:scale(1)}}.filepond--hopper[data-hopper-state=drag-over]>*{pointer-events:none}.filepond--hopper[data-hopper-state=drag-over]:after{content:"";z-index:100;position:absolute;inset:0}.filepond--progress-indicator{z-index:103}.filepond--file-action-button{z-index:102}.filepond--file-status{z-index:101}.filepond--file-info{z-index:100}.filepond--item{z-index:1;will-change:transform,opacity;touch-action:auto;margin:.25em;padding:0;position:absolute;top:0;left:0;right:0}.filepond--item>.filepond--panel{z-index:-1}.filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:0 .0625em .125em -.0625em #00000040}.filepond--item>.filepond--file-wrapper,.filepond--item>.filepond--panel{transition:opacity .15s ease-out}.filepond--item[data-drag-state]{cursor:-webkit-grab;cursor:grab}.filepond--item[data-drag-state]>.filepond--panel{transition:box-shadow .125s ease-in-out;box-shadow:0 0 #0000}.filepond--item[data-drag-state=drag]{cursor:-webkit-grabbing;cursor:grabbing}.filepond--item[data-drag-state=drag]>.filepond--panel{box-shadow:0 .125em .3125em #00000053}.filepond--item[data-drag-state]:not([data-drag-state=idle]){z-index:2}.filepond--item-panel{background-color:#64605e}[data-filepond-item-state=processing-complete] .filepond--item-panel{background-color:#369763}[data-filepond-item-state*=error] .filepond--item-panel,[data-filepond-item-state*=invalid] .filepond--item-panel{background-color:#c44e47}.filepond--item-panel{border-radius:.5em;transition:background-color .25s}.filepond--list-scroller{will-change:transform;margin:0;position:absolute;top:0;left:0;right:0}.filepond--list-scroller[data-state=overflow] .filepond--list{bottom:0;right:0}.filepond--list-scroller[data-state=overflow]{-webkit-overflow-scrolling:touch;overflow:hidden scroll;-webkit-mask:linear-gradient(#000 calc(100% - .5em),#0000);mask:linear-gradient(#000 calc(100% - .5em),#0000)}.filepond--list-scroller::-webkit-scrollbar{background:0 0}.filepond--list-scroller::-webkit-scrollbar:vertical{width:1em}.filepond--list-scroller::-webkit-scrollbar:horizontal{height:0}.filepond--list-scroller::-webkit-scrollbar-thumb{background-color:#0000004d;background-clip:content-box;border:.3125em solid #0000;border-radius:99999px}.filepond--list.filepond--list{will-change:transform;margin:0;padding:0;list-style-type:none;position:absolute;top:0}.filepond--list{left:.75em;right:.75em}.filepond--root[data-style-panel-layout~=integrated]{width:100%;max-width:none;height:100%;margin:0}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root{border-radius:0}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root>*,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root>*{display:none}.filepond--root[data-style-panel-layout~=circle] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7;justify-content:center;align-items:center;height:auto;display:flex;bottom:0}.filepond--root[data-style-panel-layout~=circle] .filepond--item-panel,.filepond--root[data-style-panel-layout~=integrated] .filepond--item-panel{display:none}.filepond--root[data-style-panel-layout~=compact] .filepond--list-scroller,.filepond--root[data-style-panel-layout~=integrated] .filepond--list-scroller{height:100%;margin-top:0;margin-bottom:0;overflow:hidden}.filepond--root[data-style-panel-layout~=compact] .filepond--list,.filepond--root[data-style-panel-layout~=integrated] .filepond--list{height:100%;left:0;right:0}.filepond--root[data-style-panel-layout~=compact] .filepond--item,.filepond--root[data-style-panel-layout~=integrated] .filepond--item{margin:0}.filepond--root[data-style-panel-layout~=compact] .filepond--file-wrapper,.filepond--root[data-style-panel-layout~=integrated] .filepond--file-wrapper{height:100%}.filepond--root[data-style-panel-layout~=compact] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7}.filepond--root[data-style-panel-layout~=circle]{border-radius:99999rem;overflow:hidden}.filepond--root[data-style-panel-layout~=circle]>.filepond--panel{border-radius:inherit}.filepond--root[data-style-panel-layout~=circle]>.filepond--panel>*,.filepond--root[data-style-panel-layout~=circle] .filepond--file-info,.filepond--root[data-style-panel-layout~=circle] .filepond--file-status{display:none}@media not all and (min-resolution:.001dpcm){@supports ((-webkit-appearance:none)) and (stroke-color:transparent){.filepond--root[data-style-panel-layout~=circle]{will-change:transform}}}.filepond--panel-root{background-color:#f1f0ef;border-radius:.5em}.filepond--panel{pointer-events:none;margin:0;position:absolute;top:0;left:0;right:0;height:100%!important}.filepond-panel:not([data-scalable=false]){height:auto!important}.filepond--panel[data-scalable=false]>div{display:none}.filepond--panel[data-scalable=true]{-webkit-transform-style:preserve-3d;transform-style:preserve-3d;background-color:#0000!important;border:none!important}.filepond--panel-bottom,.filepond--panel-center,.filepond--panel-top{margin:0;padding:0;position:absolute;top:0;left:0;right:0}.filepond--panel-bottom,.filepond--panel-top{height:.5em}.filepond--panel-top{border-bottom:none!important;border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.filepond--panel-top:after{content:"";background-color:inherit;height:2px;position:absolute;bottom:-1px;left:0;right:0}.filepond--panel-bottom,.filepond--panel-center{will-change:transform;backface-visibility:hidden;transform-origin:0 0;transform:translateY(.5em)}.filepond--panel-bottom{border-top:none!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.filepond--panel-bottom:before{content:"";background-color:inherit;height:2px;position:absolute;top:-1px;left:0;right:0}.filepond--panel-center{border-top:none!important;border-bottom:none!important;border-radius:0!important;height:100px!important}.filepond--panel-center:not([style]){visibility:hidden}.filepond--progress-indicator{color:#fff;pointer-events:none;will-change:transform,opacity;width:1.25em;height:1.25em;margin:0;position:static}.filepond--progress-indicator svg{vertical-align:top;transform-box:fill-box;width:100%;height:100%}.filepond--progress-indicator path{fill:none;stroke:currentColor}.filepond--list-scroller{z-index:6}.filepond--drop-label{z-index:5}.filepond--drip{z-index:3}.filepond--root>.filepond--panel{z-index:2}.filepond--browser{z-index:1}.filepond--root{box-sizing:border-box;text-align:left;text-rendering:optimizeLegibility;contain:layout style size;direction:ltr;margin-bottom:1em;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1rem;font-weight:450;line-height:normal;position:relative}.filepond--root *{box-sizing:inherit;line-height:inherit}.filepond--root :not(text){font-size:inherit}.filepond--root[data-disabled]{pointer-events:none}.filepond--root[data-disabled] .filepond--list-scroller{pointer-events:all}.filepond--root[data-disabled] .filepond--list{pointer-events:none}.filepond--root .filepond--drop-label{min-height:4.75em}.filepond--root .filepond--list-scroller{margin-top:1em;margin-bottom:1em}.filepond--root .filepond--credits{opacity:.4;color:inherit;z-index:3;font-size:11px;line-height:.85;text-decoration:none;position:absolute;bottom:-14px;right:0}.filepond--root .filepond--credits[style]{margin-top:14px;top:0;bottom:auto}.filepond--action-edit-item.filepond--action-edit-item{width:2em;height:2em;padding:.1875em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=center]{margin-left:-.1875em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=bottom]{margin-bottom:-.1875em}.filepond--action-edit-item-alt{line-height:inherit;color:inherit;pointer-events:all;background:0 0;border:none;outline:none;margin:0 0 0 .25em;padding:0;font-family:inherit;position:absolute}.filepond--action-edit-item-alt svg{width:1.3125em;height:1.3125em}.filepond--action-edit-item-alt span{opacity:0;font-size:0}.filepond--root[data-style-panel-layout~=circle] .filepond--action-edit-item{opacity:1!important;visibility:visible!important}.filepond--image-preview-markup{position:absolute;top:0;left:0}.filepond--image-preview-wrapper{z-index:2}.filepond--image-preview-overlay{opacity:0;z-index:2;pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;min-height:5rem;max-height:7rem;margin:0;display:block;position:absolute;top:0;left:0}.filepond--image-preview-overlay svg{width:100%;height:auto;color:inherit;max-height:inherit}.filepond--image-preview-overlay-idle{mix-blend-mode:multiply;color:#282828d9}.filepond--image-preview-overlay-success{mix-blend-mode:normal;color:#369763}.filepond--image-preview-overlay-failure{mix-blend-mode:normal;color:#c44e47}@supports (-webkit-marquee-repetition:infinite) and ((-o-object-fit:fill) or (object-fit:fill)){.filepond--image-preview-overlay-idle{mix-blend-mode:normal}}.filepond--image-preview-wrapper{-webkit-user-select:none;user-select:none;background:#00000003;border-radius:.45em;height:100%;margin:0;position:absolute;top:0;left:0;right:0;overflow:hidden}.filepond--image-preview{z-index:1;pointer-events:none;will-change:transform,opacity;background:#222;align-items:center;width:100%;height:100%;display:flex;position:absolute;top:0;left:0}.filepond--image-clip{margin:0 auto;position:relative;overflow:hidden}.filepond--image-clip[data-transparency-indicator=grid] img,.filepond--image-clip[data-transparency-indicator=grid] canvas{background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg' fill='%23eee'%3E%3Cpath d='M0 0 H50 V50 H0'/%3E%3Cpath d='M50 50 H100 V100 H50'/%3E%3C/svg%3E");background-size:1.25em 1.25em}.filepond--image-bitmap,.filepond--image-vector{will-change:transform;position:absolute;top:0;left:0}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview-wrapper{border-radius:0}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview{justify-content:center;align-items:center;height:100%;display:flex}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-wrapper{border-radius:99999rem}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-overlay{top:auto;bottom:0;transform:scaleY(-1)}.filepond--root[data-style-panel-layout~=circle] .filepond--file .filepond--file-action-button[data-align*=bottom]:not([data-align*=center]){margin-bottom:.325em}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=left]{left:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=right]{right:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=left],.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=right]{margin-bottom:.5125em}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=center]{margin-top:0;margin-bottom:.1875em;margin-left:.1875em}.filepond--media-preview audio{display:none}.filepond--media-preview .audioplayer{width:calc(100% - 1.4em);margin:2.3em auto auto}.filepond--media-preview .playpausebtn{float:left;cursor:pointer;background-position:50%;background-repeat:no-repeat;border:none;border-radius:25px;outline:none;width:25px;height:25px;margin-top:.3em;margin-right:.3em}.filepond--media-preview .playpausebtn:hover{background-color:#00000080}.filepond--media-preview .play{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyElEQVQ4T9XUsWoCQRRG4XPaFL5SfIy8gKYKBCysrax8Ahs7qzQ2qVIFOwsrsbEWLEK6EBFGBrIQhN2d3dnGgalm+Jh7789Ix8uOPe4YDCH0gZ66atKW0pJDCE/AEngDXtRjCpwCRucbGANzNVTBqWBhfAJDdV+GNgWj8wtM41bPt3AbsDB2f69d/0dzwC0wUDe54A8wAWbqJbfkD+BZPeQO5QsYqYu6LKb0MIb7VT3VYfG8CnwEHtT3FKi4c8e/TZMyk3LYFrwCgMdHFbRDKS8AAAAASUVORK5CYII=)}.filepond--media-preview .pause{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAh0lEQVQ4T+2UsQkCURBE30PLMbAMMResQrAPsQ0TK9AqDKxGZeTLD74aGNwlhzfZssvADDMrPcOe+RggYZIJcG2s2KinMidZAvu6u6uzT8u+JCeZArfmcKUeK+EaONTdQy23bxgJX8aPHvIHsSnVuzTx36rn2pQFsGuqN//ZlK7vbIDvq6vkJ9yteBXzecYbAAAAAElFTkSuQmCC)}.filepond--media-preview .timeline{float:left;background:#ffffff4d;border-radius:15px;width:calc(100% - 2.5em);height:3px;margin-top:1em}.filepond--media-preview .playhead{background:#fff;border-radius:50%;width:13px;height:13px;margin-top:-5px}.filepond--media-preview-wrapper{pointer-events:auto;background:#00000003;border-radius:.45em;height:100%;margin:0;position:absolute;top:0;left:0;right:0;overflow:hidden}.filepond--media-preview-wrapper:before{content:" ";width:100%;height:2em;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#000000",endColorstr="#00000000",GradientType=0);z-index:3;background:linear-gradient(#000,#0000);position:absolute}.filepond--media-preview{z-index:1;transform-origin:50%;will-change:transform,opacity;width:100%;height:100%;display:block;position:relative}.filepond--media-preview video,.filepond--media-preview audio{will-change:transform;width:100%}.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:#0000;-webkit-user-select:none;user-select:none;-ms-touch-action:none;touch-action:none;box-sizing:border-box}.noUi-target{position:relative}.noUi-base,.noUi-connects{z-index:1;width:100%;height:100%;position:relative}.noUi-connects{z-index:0;overflow:hidden}.noUi-connect,.noUi-origin{will-change:transform;z-index:1;transform-origin:0 0;width:100%;height:100%;-webkit-transform-style:preserve-3d;transform-style:flat;position:absolute;top:0;right:0}.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:0;right:auto}.noUi-vertical .noUi-origin{width:0;top:-100%}.noUi-horizontal .noUi-origin{height:0}.noUi-handle{backface-visibility:hidden;position:absolute}.noUi-touch-area{width:100%;height:100%}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{transition:transform .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;top:-6px;right:-17px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;bottom:-17px;right:-6px}.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:-17px;right:auto}.noUi-target{background:#fafafa;border:1px solid #d3d3d3;border-radius:4px;box-shadow:inset 0 1px 1px #f0f0f0,0 3px 6px -5px #bbb}.noUi-connects{border-radius:3px}.noUi-connect{background:#3fb8af}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{cursor:default;background:#fff;border:1px solid #d9d9d9;border-radius:3px;box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ebebeb,0 3px 6px -3px #bbb}.noUi-active{box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ddd,0 3px 6px -3px #bbb}.noUi-handle:before,.noUi-handle:after{content:"";background:#e8e7e6;width:1px;height:14px;display:block;position:absolute;top:6px;left:14px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:before,.noUi-vertical .noUi-handle:after{width:14px;height:1px;top:14px;left:6px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect{background:#b8b8b8}[disabled].noUi-target,[disabled].noUi-handle,[disabled] .noUi-handle{cursor:not-allowed}.noUi-pips,.noUi-pips *{box-sizing:border-box}.noUi-pips{color:#999;position:absolute}.noUi-value{white-space:nowrap;text-align:center;position:absolute}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{background:#ccc;position:absolute}.noUi-marker-sub,.noUi-marker-large{background:#aaa}.noUi-pips-horizontal{width:100%;height:80px;padding:10px 0;top:100%;left:0}.noUi-value-horizontal{transform:translate(-50%,50%)}.noUi-rtl .noUi-value-horizontal{transform:translate(50%,50%)}.noUi-marker-horizontal.noUi-marker{width:2px;height:5px;margin-left:-1px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{height:100%;padding:0 10px;top:0;left:100%}.noUi-value-vertical{padding-left:25px;transform:translateY(-50%)}.noUi-rtl .noUi-value-vertical{transform:translateY(50%)}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{color:#000;text-align:center;white-space:nowrap;background:#fff;border:1px solid #d9d9d9;border-radius:3px;padding:5px;display:block;position:absolute}.noUi-horizontal .noUi-tooltip{bottom:120%;left:50%;transform:translate(-50%)}.noUi-vertical .noUi-tooltip{top:50%;right:120%;transform:translateY(-50%)}.noUi-horizontal .noUi-origin>.noUi-tooltip{bottom:10px;left:auto;transform:translate(50%)}.noUi-vertical .noUi-origin>.noUi-tooltip{top:auto;right:28px;transform:translateY(-18px)}.fi-fo-builder{row-gap:calc(var(--spacing)*4);grid-template-columns:repeat(1,minmax(0,1fr));display:grid}.fi-fo-builder .fi-fo-builder-actions{column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-builder .fi-fo-builder-actions.fi-hidden{display:none}.fi-fo-builder .fi-fo-builder-items{grid-template-columns:repeat(1,minmax(0,1fr));display:grid}.fi-fo-builder .fi-fo-builder-items>*+*{margin-top:calc(var(--spacing)*4)}.fi-fo-builder .fi-fo-builder-item{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-builder .fi-fo-builder-item:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-builder .fi-fo-builder-item.fi-collapsed .fi-fo-builder-item-header-collapsible-actions{rotate:-180deg}.fi-fo-builder .fi-fo-builder-item.fi-collapsed .fi-fo-builder-item-header-collapse-action,.fi-fo-builder .fi-fo-builder-item:not(.fi-collapsed) .fi-fo-builder-item-header-expand-action{pointer-events:none;opacity:0}.fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-item{--tw-shadow:0 0 #0000;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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);background-color:#0000;border-radius:0}.fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-item>.fi-fo-builder-item-content{padding:calc(var(--spacing)*0)}.fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-label-between-items-ctn>.fi-fo-builder-label-between-items-divider-before{width:calc(var(--spacing)*0)}.fi-fo-builder.fi-fo-builder-not-contained>.fi-fo-builder-items>.fi-fo-builder-label-between-items-ctn>.fi-fo-builder-label-between-items{padding-inline-start:calc(var(--spacing)*0)}.fi-fo-builder .fi-fo-builder-item-header{align-items:center;column-gap:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);display:flex;overflow:hidden}.fi-fo-builder.fi-collapsible .fi-fo-builder-item-header{cursor:pointer;-webkit-user-select:none;user-select:none}.fi-fo-builder .fi-fo-builder-item-header-start-actions{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-builder .fi-fo-builder-item-header-icon{color:var(--gray-400);flex-shrink:0}.fi-fo-builder .fi-fo-builder-item-header-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-fo-builder .fi-fo-builder-item-header-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-fo-builder .fi-fo-builder-item-header-label:where(.dark,.dark *){color:var(--color-white)}.fi-fo-builder .fi-fo-builder-item-header-label.fi-truncated{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fi-fo-builder .fi-fo-builder-item-header-end-actions{align-items:center;column-gap:calc(var(--spacing)*3);margin-inline-start:auto;display:flex}.fi-fo-builder .fi-fo-builder-item-header-collapsible-actions{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:relative}.fi-fo-builder .fi-fo-builder-item-header-collapse-action{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.fi-fo-builder .fi-fo-builder-item-header-expand-action{inset:calc(var(--spacing)*0);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:absolute;rotate:180deg}.fi-fo-builder .fi-fo-builder-item-content:not(.fi-fo-builder-item-content-has-preview){padding:calc(var(--spacing)*4)}.fi-fo-builder .fi-fo-builder-item-content.fi-fo-builder-item-content-has-preview{position:relative}.fi-fo-builder .fi-fo-builder-item-has-header>.fi-fo-builder-item-content{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-100)}.fi-fo-builder .fi-fo-builder-item-has-header>.fi-fo-builder-item-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-builder .fi-fo-builder-item-has-header>.fi-fo-builder-item-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-builder .fi-fo-builder-item-preview:not(.fi-interactive){pointer-events:none}.fi-fo-builder .fi-fo-builder-item-preview-edit-overlay{inset:calc(var(--spacing)*0);z-index:1;cursor:pointer;position:absolute}.fi-fo-builder .fi-fo-builder-block-picker-ctn{border-radius:var(--radius-lg);background-color:var(--color-white)}.fi-fo-builder .fi-fo-builder-block-picker-ctn:where(.dark,.dark *){background-color:var(--gray-900)}.fi-fo-builder .fi-fo-builder-add-between-items-ctn{pointer-events:none;visibility:hidden;margin-top:calc(var(--spacing)*0);height:calc(var(--spacing)*0);opacity:0;width:100%;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));justify-content:center;display:flex;position:relative;overflow:visible}.fi-fo-builder .fi-fo-builder-item:hover+.fi-fo-builder-add-between-items-ctn,.fi-fo-builder .fi-fo-builder-add-between-items-ctn:has(+.fi-fo-builder-item:hover),.fi-fo-builder .fi-fo-builder-add-between-items-ctn:hover,.fi-fo-builder .fi-fo-builder-add-between-items-ctn:focus-within{pointer-events:auto;visibility:visible;opacity:1}.fi-fo-builder .fi-fo-builder-add-between-items{z-index:10;--tw-translate-y:calc(-50% + .5rem);translate:var(--tw-translate-x)var(--tw-translate-y);border-radius:var(--radius-lg);background-color:var(--color-white);position:absolute;top:50%}.fi-fo-builder .fi-fo-builder-add-between-items:where(.dark,.dark *){background-color:var(--gray-900)}.fi-fo-builder .fi-fo-builder-label-between-items-ctn{margin-top:calc(var(--spacing)*1);margin-bottom:calc(var(--spacing)*-3);align-items:center;display:flex;position:relative}.fi-fo-builder .fi-fo-builder-label-between-items-divider-before{width:calc(var(--spacing)*3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);flex-shrink:0}.fi-fo-builder .fi-fo-builder-label-between-items-divider-before:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-builder .fi-fo-builder-label-between-items-divider-before:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-builder .fi-fo-builder-label-between-items{padding-inline:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);flex-shrink:0}.fi-fo-builder .fi-fo-builder-label-between-items:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-builder .fi-fo-builder-label-between-items-divider-after{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);flex:1}.fi-fo-builder .fi-fo-builder-label-between-items-divider-after:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-builder .fi-fo-builder-label-between-items-divider-after:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-builder .fi-fo-builder-block-picker{justify-content:center;display:flex}.fi-fo-builder .fi-fo-builder-block-picker.fi-align-start,.fi-fo-builder .fi-fo-builder-block-picker.fi-align-left{justify-content:flex-start}.fi-fo-builder .fi-fo-builder-block-picker.fi-align-end,.fi-fo-builder .fi-fo-builder-block-picker.fi-align-right{justify-content:flex-end}.fi-fo-checkbox-list .fi-fo-checkbox-list-search-input-wrp{margin-bottom:calc(var(--spacing)*4)}.fi-fo-checkbox-list .fi-fo-checkbox-list-actions{margin-bottom:calc(var(--spacing)*2)}.fi-fo-checkbox-list .fi-fo-checkbox-list-options{gap:calc(var(--spacing)*4)}.fi-fo-checkbox-list .fi-fo-checkbox-list-options.fi-grid-direction-col{margin-top:calc(var(--spacing)*-4)}.fi-fo-checkbox-list .fi-fo-checkbox-list-options.fi-grid-direction-col .fi-fo-checkbox-list-option-ctn{break-inside:avoid;padding-top:calc(var(--spacing)*4)}.fi-fo-checkbox-list .fi-fo-checkbox-list-option{column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-checkbox-input{margin-top:calc(var(--spacing)*1);flex-shrink:0}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);display:grid}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);overflow-wrap:break-word;color:var(--gray-950);overflow:hidden}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-label:where(.dark,.dark *){color:var(--color-white)}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-description{color:var(--gray-500)}.fi-fo-checkbox-list .fi-fo-checkbox-list-option .fi-fo-checkbox-list-option-description:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-checkbox-list .fi-fo-checkbox-list-no-search-results-message{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-fo-checkbox-list .fi-fo-checkbox-list-no-search-results-message:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-code-editor{overflow:hidden}.fi-fo-code-editor .cm-editor.cm-focused{--tw-outline-style:none!important;outline-style:none!important}.fi-fo-code-editor .cm-editor .cm-gutters{min-height:calc(var(--spacing)*48)!important;border-inline-end-color:var(--gray-300)!important;background-color:var(--gray-100)!important}.fi-fo-code-editor .cm-editor .cm-gutters:where(.dark,.dark *){border-inline-end-color:var(--gray-800)!important;background-color:var(--gray-950)!important}.fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement{border-start-start-radius:var(--radius-md);border-end-start-radius:var(--radius-md);margin-inline-start:calc(var(--spacing)*1)}.fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement.cm-activeLineGutter{background-color:var(--gray-200)!important}.fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement.cm-activeLineGutter:where(.dark,.dark *){background-color:var(--gray-800)!important}.fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-foldGutter .cm-gutterElement.cm-activeLineGutter{background-color:var(--gray-200)!important}.fi-fo-code-editor .cm-editor .cm-gutters .cm-gutter.cm-foldGutter .cm-gutterElement.cm-activeLineGutter:where(.dark,.dark *){background-color:var(--gray-800)!important}.fi-fo-code-editor .cm-editor .cm-scroller{min-height:calc(var(--spacing)*48)!important}.fi-fo-code-editor .cm-editor .cm-line{border-start-end-radius:var(--radius-md);border-end-end-radius:var(--radius-md);margin-inline-end:calc(var(--spacing)*1)}.fi-fo-code-editor.fi-disabled .cm-editor .cm-gutters .cm-gutter.cm-lineNumbers .cm-gutterElement.cm-activeLineGutter,.fi-fo-code-editor.fi-disabled .cm-editor .cm-gutters .cm-gutter.cm-foldGutter .cm-gutterElement.cm-activeLineGutter,.fi-fo-code-editor.fi-disabled .cm-editor .cm-line.cm-activeLine{background-color:#0000!important}.fi-fo-color-picker .fi-input-wrp-content{display:flex}.fi-fo-color-picker .fi-fo-color-picker-preview{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);-webkit-user-select:none;user-select:none;border-radius:3.40282e38px;flex-shrink:0;margin-block:auto;margin-inline-end:calc(var(--spacing)*3)}.fi-fo-color-picker .fi-fo-color-picker-preview.fi-empty{--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);--tw-ring-color:var(--gray-200);--tw-ring-inset:inset}.fi-fo-color-picker .fi-fo-color-picker-preview.fi-empty:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-color-picker .fi-fo-color-picker-preview.fi-empty:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-color-picker .fi-fo-color-picker-panel{z-index:10;border-radius:var(--radius-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);display:none;position:absolute}.fi-fo-date-time-picker input::-webkit-datetime-edit{padding:0;display:block}.fi-fo-date-time-picker .fi-fo-date-time-picker-trigger{width:100%}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input{--tw-border-style:none;width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-950);--tw-outline-style:none;background-color:#0000;border-style:none;outline-style:none}@media (forced-colors:active){.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input{outline-offset:2px;outline:2px solid #0000}}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input::placeholder{color:var(--gray-400)}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:where(.dark,.dark *){color:var(--color-white)}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:where(.dark,.dark *)::placeholder{color:var(--gray-500)}.fi-fo-date-time-picker .fi-fo-date-time-picker-display-text-input:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}.fi-fo-date-time-picker .fi-fo-date-time-picker-panel{z-index:10;position:absolute}:where(.fi-fo-date-time-picker .fi-fo-date-time-picker-panel>: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)))}.fi-fo-date-time-picker .fi-fo-date-time-picker-panel{border-radius:var(--radius-lg);background-color:var(--color-white);padding:calc(var(--spacing)*4);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-fo-date-time-picker .fi-fo-date-time-picker-panel:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-date-time-picker .fi-fo-date-time-picker-panel:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-date-time-picker .fi-fo-date-time-picker-panel .fi-fo-date-time-picker-panel-header{justify-content:space-between;align-items:center;display:flex}.fi-fo-date-time-picker .fi-fo-date-time-picker-month-select{cursor:pointer;--tw-border-style:none;padding:calc(var(--spacing)*0);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950);background-color:#0000;border-style:none;flex-grow:1}.fi-fo-date-time-picker .fi-fo-date-time-picker-month-select:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}.fi-fo-date-time-picker .fi-fo-date-time-picker-month-select:where(.dark,.dark *){background-color:var(--gray-900);color:var(--color-white)}.fi-fo-date-time-picker .fi-fo-date-time-picker-year-input{width:calc(var(--spacing)*16);--tw-border-style:none;padding:calc(var(--spacing)*0);text-align:right;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-950);background-color:#0000;border-style:none}.fi-fo-date-time-picker .fi-fo-date-time-picker-year-input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}.fi-fo-date-time-picker .fi-fo-date-time-picker-year-input:where(.dark,.dark *){color:var(--color-white)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar-header{gap:calc(var(--spacing)*1);grid-template-columns:repeat(7,minmax(0,1fr));display:grid}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar-header .fi-fo-date-time-picker-calendar-header-day{text-align:center;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar-header .fi-fo-date-time-picker-calendar-header-day:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar{grid-template-columns:repeat(7,minmax(calc(var(--spacing)*7),1fr));gap:calc(var(--spacing)*1);display:grid}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day{text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-loose);line-height:var(--leading-loose);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;border-radius:3.40282e38px;transition-duration:75ms}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-disabled{pointer-events:none;opacity:.5}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day:not(.fi-disabled){cursor:pointer}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected{background-color:var(--gray-50);color:var(--primary-600)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-selected:where(.dark,.dark *){color:var(--primary-400)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-focused:not(.fi-selected):not(.fi-disabled){background-color:var(--gray-100)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-focused:not(.fi-selected):not(.fi-disabled):where(.dark,.dark *){background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-focused:not(.fi-selected):not(.fi-disabled):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-fo-date-time-picker-calendar-day-today:not(.fi-focused):not(.fi-selected):not(.fi-disabled){color:var(--primary-600)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day.fi-fo-date-time-picker-calendar-day-today:not(.fi-focused):not(.fi-selected):not(.fi-disabled):where(.dark,.dark *){color:var(--primary-400)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day:not(.fi-fo-date-time-picker-calendar-day-today):not(.fi-selected){color:var(--gray-950)}.fi-fo-date-time-picker .fi-fo-date-time-picker-calendar .fi-fo-date-time-picker-calendar-day:not(.fi-fo-date-time-picker-calendar-day-today):not(.fi-selected):where(.dark,.dark *){color:var(--color-white)}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs{justify-content:center;align-items:center;display:flex}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs input{width:calc(var(--spacing)*10);--tw-border-style:none;padding:calc(var(--spacing)*0);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-950);background-color:#0000;border-style:none;margin-inline-end:calc(var(--spacing)*1)}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs input:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs input:where(.dark,.dark *){color:var(--color-white)}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs .fi-fo-date-time-picker-time-input-separator{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500)}.fi-fo-date-time-picker .fi-fo-date-time-picker-time-inputs .fi-fo-date-time-picker-time-input-separator:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-field{row-gap:calc(var(--spacing)*2);display:grid}@media (min-width:40rem){.fi-fo-field.fi-fo-field-has-inline-label{align-items:flex-start;column-gap:calc(var(--spacing)*4);grid-template-columns:repeat(3,minmax(0,1fr))}.fi-fo-field.fi-fo-field-has-inline-label .fi-fo-field-content-col{grid-column:span 2/span 2}}.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label{align-items:flex-start;column-gap:calc(var(--spacing)*3);display:flex}:is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label)>.fi-checkbox-input{margin-top:calc(var(--spacing)*.5);flex-shrink:0}:is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label)>.fi-toggle{margin-block:calc(var(--spacing)*-.5)}:is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label)>.fi-sc:first-child{flex-grow:0}:is(.fi-fo-field .fi-fo-field-label-ctn,.fi-fo-field .fi-fo-field-label).fi-hidden{display:none}.fi-fo-field .fi-fo-field-label-content{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-fo-field .fi-fo-field-label-content:where(.dark,.dark *){color:var(--color-white)}.fi-fo-field .fi-fo-field-label-content .fi-fo-field-label-required-mark{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--danger-600)}.fi-fo-field .fi-fo-field-label-content .fi-fo-field-label-required-mark:where(.dark,.dark *){color:var(--danger-400)}.fi-fo-field .fi-fo-field-label-col{row-gap:calc(var(--spacing)*2);grid-auto-columns:minmax(0,1fr);height:100%;display:grid}@media (min-width:40rem){.fi-fo-field .fi-fo-field-label-col.fi-vertical-align-start{align-items:flex-start}.fi-fo-field .fi-fo-field-label-col.fi-vertical-align-center{align-items:center}.fi-fo-field .fi-fo-field-label-col.fi-vertical-align-end{align-items:flex-end}}.fi-fo-field .fi-fo-field-content-col{row-gap:calc(var(--spacing)*2);grid-auto-columns:minmax(0,1fr);display:grid}.fi-fo-field .fi-fo-field-content-ctn{align-items:center;column-gap:calc(var(--spacing)*3);width:100%;display:flex}.fi-fo-field .fi-fo-field-content{width:100%}.fi-fo-field .fi-fo-field-wrp-error-message{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--danger-600)}.fi-fo-field .fi-fo-field-wrp-error-message:where(.dark,.dark *){color:var(--danger-400)}.fi-fo-field .fi-fo-field-wrp-error-list{list-style-type:disc;list-style-position:inside}:where(.fi-fo-field .fi-fo-field-wrp-error-list>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}.fi-fo-file-upload{row-gap:calc(var(--spacing)*2);flex-direction:column;display:flex}.fi-fo-file-upload.fi-align-start,.fi-fo-file-upload.fi-align-left{align-items:flex-start}.fi-fo-file-upload.fi-align-center{align-items:center}.fi-fo-file-upload.fi-align-end,.fi-fo-file-upload.fi-align-right{align-items:flex-end}.fi-fo-file-upload .fi-fo-file-upload-input-ctn{width:100%;height:100%}.fi-fo-file-upload.fi-fo-file-upload-avatar .fi-fo-file-upload-input-ctn{height:100%;width:calc(var(--spacing)*32)}.fi-fo-file-upload .fi-fo-file-upload-error-message{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--danger-600)}.fi-fo-file-upload .fi-fo-file-upload-error-message:where(.dark,.dark *){color:var(--danger-400)}.fi-fo-file-upload .filepond--root{margin-bottom:calc(var(--spacing)*0);border-radius:var(--radius-lg);background-color:var(--color-white);font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);overflow:hidden}.fi-fo-file-upload .filepond--root:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--root:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-file-upload .filepond--root:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--root:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-file-upload .filepond--root[data-disabled=disabled]{background-color:var(--gray-50)}.fi-fo-file-upload .filepond--root[data-disabled=disabled]:where(.dark,.dark *){--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--root[data-disabled=disabled]:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-file-upload .filepond--root[data-style-panel-layout=compact\ circle]{border-radius:3.40282e38px}.fi-fo-file-upload .filepond--panel-root{background-color:#0000}.fi-fo-file-upload .filepond--drop-label label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-600);padding:calc(var(--spacing)*3)!important}.fi-fo-file-upload .filepond--drop-label label:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-file-upload .filepond--label-action{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--primary-600);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;text-decoration-line:none;transition-duration:75ms}@media (hover:hover){.fi-fo-file-upload .filepond--label-action:hover{color:var(--primary-500)}}.fi-fo-file-upload .filepond--label-action:where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.fi-fo-file-upload .filepond--label-action:where(.dark,.dark *):hover{color:var(--primary-500)}}.fi-fo-file-upload .filepond--drip-blob{background-color:var(--gray-400)}.fi-fo-file-upload .filepond--drip-blob:where(.dark,.dark *){background-color:var(--gray-500)}.fi-fo-file-upload .filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(50% - .5rem);display:inline}@media (min-width:64rem){.fi-fo-file-upload .filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(33.33% - .5rem)}}.fi-fo-file-upload .filepond--download-icon{pointer-events:auto;width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);background-color:var(--color-white);vertical-align:bottom;margin-inline-end:calc(var(--spacing)*1);display:inline-block}@media (hover:hover){.fi-fo-file-upload .filepond--download-icon:hover{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--download-icon:hover{background-color:color-mix(in oklab,var(--color-white)70%,transparent)}}}.fi-fo-file-upload .filepond--download-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZG93bmxvYWQiPjxwYXRoIGQ9Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00Ij48L3BhdGg+PHBvbHlsaW5lIHBvaW50cz0iNyAxMCAxMiAxNSAxNyAxMCI+PC9wb2x5bGluZT48bGluZSB4MT0iMTIiIHkxPSIxNSIgeDI9IjEyIiB5Mj0iMyI+PC9saW5lPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZG93bmxvYWQiPjxwYXRoIGQ9Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00Ij48L3BhdGg+PHBvbHlsaW5lIHBvaW50cz0iNyAxMCAxMiAxNSAxNyAxMCI+PC9wb2x5bGluZT48bGluZSB4MT0iMTIiIHkxPSIxNSIgeDI9IjEyIiB5Mj0iMyI+PC9saW5lPjwvc3ZnPg==);-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.fi-fo-file-upload .filepond--open-icon{pointer-events:auto;width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);background-color:var(--color-white);vertical-align:bottom;margin-inline-end:calc(var(--spacing)*1);display:inline-block}@media (hover:hover){.fi-fo-file-upload .filepond--open-icon:hover{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--open-icon:hover{background-color:color-mix(in oklab,var(--color-white)70%,transparent)}}}.fi-fo-file-upload .filepond--open-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwMC0yIDJ2MTBhMiAyIDAgMDAyIDJoMTBhMiAyIDAgMDAyLTJ2LTRNMTQgNGg2bTAgMHY2bTAtNkwxMCAxNCIgLz4KPC9zdmc+Cg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwMC0yIDJ2MTBhMiAyIDAgMDAyIDJoMTBhMiAyIDAgMDAyLTJ2LTRNMTQgNGg2bTAgMHY2bTAtNkwxMCAxNCIgLz4KPC9zdmc+Cg==);-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.fi-fo-file-upload .filepond--file-action-button.filepond--action-edit-item{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .filepond--file-action-button.filepond--action-edit-item{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor{inset:calc(var(--spacing)*0);isolation:isolate;z-index:50;width:100vw;height:100dvh;padding:calc(var(--spacing)*2);position:fixed}@media (min-width:40rem){.fi-fo-file-upload .fi-fo-file-upload-editor{padding:calc(var(--spacing)*10)}}@media (min-width:48rem){.fi-fo-file-upload .fi-fo-file-upload-editor{padding:calc(var(--spacing)*20)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay{inset:calc(var(--spacing)*0);cursor:pointer;background-color:var(--gray-950);width:100%;height:100%;position:fixed}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay{background-color:color-mix(in oklab,var(--gray-950)50%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay:where(.dark,.dark *){background-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-950)75%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-overlay{will-change:transform}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window{isolation:isolate;border-radius:var(--radius-xl);background-color:var(--color-white);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);width:100%;height:100%;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--gray-900);flex-direction:column;margin-inline:auto;display:flex;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window{--tw-ring-color:color-mix(in oklab,var(--gray-900)10%,transparent)}}@media (min-width:64rem){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window{flex-direction:row}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window:where(.dark,.dark *){background-color:var(--gray-800);--tw-ring-color:var(--gray-50)}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-window:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-50)10%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-image-ctn{margin:calc(var(--spacing)*4);flex:1;max-width:100%;max-height:100%}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-image{width:auto;height:100%}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel{background-color:var(--gray-50);flex-direction:column;flex:1;width:100%;height:100%;display:flex;overflow-y:auto}@media (min-width:64rem){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel{max-width:var(--container-xs)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)30%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-main{flex:1}:where(.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-main>: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)))}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-main{padding:calc(var(--spacing)*4);overflow:auto}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group{gap:calc(var(--spacing)*3);display:grid}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-btn-group{width:100%}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-btn.fi-active{background-color:var(--gray-50)}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-btn.fi-active:where(.dark,.dark *){background-color:var(--gray-700)}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-fo-file-upload-editor-control-panel-group-title{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--gray-950)}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-group .fi-fo-file-upload-editor-control-panel-group-title:where(.dark,.dark *){color:var(--color-white)}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-footer{align-items:center;gap:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);display:flex}.fi-fo-file-upload .fi-fo-file-upload-editor .fi-fo-file-upload-editor-control-panel .fi-fo-file-upload-editor-control-panel-reset-action{margin-left:auto}.fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal{background-color:var(--gray-100)}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal{background-color:color-mix(in oklab,var(--gray-100)50%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal{opacity:1}.fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-fo-file-upload .fi-fo-file-upload-editor .cropper-drag-box.cropper-crop.cropper-modal:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)80%,transparent)}}.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-circle-cropper .cropper-view-box,.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-circle-cropper .cropper-face{border-radius:50%}.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-window{max-width:var(--container-3xl);flex-direction:column}.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-image-ctn{min-height:calc(var(--spacing)*0);flex:1;overflow:hidden}.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-control-panel{flex:none;height:auto}@media (min-width:64rem){.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-control-panel{max-width:none}}.fi-fo-file-upload .fi-fo-file-upload-editor.fi-fo-file-upload-editor-crop-only .fi-fo-file-upload-editor-control-panel-footer{justify-content:flex-start}:where(.fi-fo-key-value .fi-fo-key-value-table-ctn>: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)));border-color:var(--gray-200)}:where(.fi-fo-key-value .fi-fo-key-value-table-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-key-value .fi-fo-key-value-table-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-key-value .fi-fo-key-value-table{table-layout:auto;width:100%}:where(.fi-fo-key-value .fi-fo-key-value-table>: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)));border-color:var(--gray-200)}:where(.fi-fo-key-value .fi-fo-key-value-table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-key-value .fi-fo-key-value-table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-key-value .fi-fo-key-value-table>thead>tr>th{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700)}.fi-fo-key-value .fi-fo-key-value-table>thead>tr>th:where(.dark,.dark *){color:var(--gray-200)}.fi-fo-key-value .fi-fo-key-value-table>thead>tr>th.fi-has-action{width:calc(var(--spacing)*9);padding:calc(var(--spacing)*0)}:where(.fi-fo-key-value .fi-fo-key-value-table>tbody>: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)));border-color:var(--gray-200)}:where(.fi-fo-key-value .fi-fo-key-value-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-key-value .fi-fo-key-value-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));border-color:var(--gray-200)}:where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-divide-x-reverse:1}:where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-key-value .fi-fo-key-value-table>tbody>tr:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td{width:50%;padding:calc(var(--spacing)*0)}.fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td.fi-has-action{width:auto;padding:calc(var(--spacing)*.5)}.fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td.fi-has-action .fi-fo-key-value-table-row-sortable-handle{display:flex}.fi-fo-key-value .fi-fo-key-value-table>tbody>tr>td .fi-input{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.fi-fo-key-value .fi-fo-key-value-add-action-ctn{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);justify-content:center;display:flex}@media (min-width:40rem){.fi-fo-key-value-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.fi-fo-markdown-editor{--color-cm-red:#991b1b;--color-cm-orange:#9a3412;--color-cm-amber:#92400e;--color-cm-yellow:#854d0e;--color-cm-lime:#3f6212;--color-cm-green:#166534;--color-cm-emerald:#065f46;--color-cm-teal:#115e59;--color-cm-cyan:#155e75;--color-cm-sky:#075985;--color-cm-blue:#1e40af;--color-cm-indigo:#3730a3;--color-cm-violet:#5b21b6;--color-cm-purple:#6b21a8;--color-cm-fuchsia:#86198f;--color-cm-pink:#9d174d;--color-cm-rose:#9f1239;--color-cm-gray:#18181b;--color-cm-gray-muted:#71717a;--color-cm-gray-background:#e4e4e7}.fi-fo-markdown-editor:not(.fi-disabled){max-width:100%;font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-950);overflow:hidden}.fi-fo-markdown-editor:not(.fi-disabled):where(.dark,.dark *){color:var(--color-white)}.fi-fo-markdown-editor.fi-disabled{border-radius:var(--radius-lg);background-color:var(--gray-50);width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);display:block}.fi-fo-markdown-editor.fi-disabled:where(.dark,.dark *){color:var(--gray-400);--tw-ring-color:#ffffff1a;background-color:#0000}@supports (color:color-mix(in lab, red, red)){.fi-fo-markdown-editor.fi-disabled:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-markdown-editor .EasyMDEContainer .CodeMirror{padding-inline:calc(var(--spacing)*4)!important;padding-block:calc(var(--spacing)*3)!important}.fi-fo-markdown-editor .cm-s-easymde .cm-comment{color:var(--color-cm-gray-muted);background-color:#0000}.fi-fo-markdown-editor .EasyMDEContainer .CodeMirror-cursor{border-color:currentColor}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-keyword{color:var(--color-cm-violet)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-atom{color:var(--color-cm-blue)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-number{color:var(--color-cm-green)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-def{color:var(--color-cm-blue)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-variable{color:var(--color-cm-yellow)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-variable-2{color:var(--color-cm-blue)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-variable-3{color:var(--color-cm-emerald)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-property,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-operator{color:var(--color-cm-gray)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-string,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-string-2{color:var(--color-cm-rose)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-meta{color:var(--color-cm-gray-muted)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-error{color:var(--color-cm-red)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-qualifier{color:var(--color-cm-gray-muted)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-builtin{color:var(--color-cm-violet)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-bracket,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-hr{color:var(--color-cm-gray-muted)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-quote{color:var(--color-cm-sky)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-quote~.cm-quote{color:var(--color-cm-gray-muted)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-list,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-list~.cm-variable-2,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-list~.cm-variable-3,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-list~.cm-keyword,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tab~.cm-variable-2,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tab~.cm-variable-3,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tab~.cm-keyword{color:var(--color-cm-gray)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-link{color:var(--color-cm-blue)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-red)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-amber)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-attribute+.cm-string{color:var(--color-cm-green)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-code+.cm-comment:not(.cm-formatting-code){background-color:var(--color-cm-gray-background);color:var(--color-cm-gray)}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-1{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-2{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-3{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-4{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-5{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-header-6{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-comment{background-image:none}.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-formatting-code-block,.fi-fo-markdown-editor .EasyMDEContainer .cm-s-easymde .cm-tab~.cm-comment{color:inherit;background-color:#0000}.fi-fo-markdown-editor .EasyMDEContainer .CodeMirror{--tw-border-style:none;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);color:inherit;background-color:#0000;border-style:none}.fi-fo-markdown-editor .EasyMDEContainer .CodeMirror-scroll{height:auto}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar{gap:calc(var(--spacing)*1);border-style:var(--tw-border-style);border-width:0;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*2);border-radius:0;flex-wrap:wrap;display:flex}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8);border-radius:var(--radius-lg);--tw-border-style:none;padding:calc(var(--spacing)*0);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;border-style:none;place-content:center;transition-duration:75ms;display:grid}@media (hover:hover){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:hover{background-color:var(--gray-50)}}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active{background-color:var(--gray-50)}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button:before{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);background-color:var(--gray-700);content:"";display:block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar button.active:before{background-color:var(--primary-600)}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .separator{width:calc(var(--spacing)*1);--tw-border-style:none;border-style:none;margin:calc(var(--spacing)*0)!important}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .bold:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .italic:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .strikethrough:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .link:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z' /%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z' /%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .heading:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4ZM13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4ZM13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .quote:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .code:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06ZM11.377 2.011a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06ZM11.377 2.011a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .unordered-list:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01ZM1.99 15.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01ZM1.99 10a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01ZM1.99 15.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01ZM1.99 10a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .ordered-list:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3ZM2.97 8.654a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM7.75 9.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM7.75 15.5a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM2.625 13.875a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3ZM2.97 8.654a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM7.75 9.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM7.75 15.5a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5ZM2.625 13.875a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .table:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .upload-image:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .undo:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .redo:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-statusbar{display:none}.fi-fo-markdown-editor:where(.dark,.dark *){--color-cm-red:#f87171;--color-cm-orange:#fb923c;--color-cm-amber:#fbbf24;--color-cm-yellow:#facc15;--color-cm-lime:#a3e635;--color-cm-green:#4ade80;--color-cm-emerald:#4ade80;--color-cm-teal:#2dd4bf;--color-cm-cyan:#22d3ee;--color-cm-sky:#38bdf8;--color-cm-blue:#60a5fa;--color-cm-indigo:#818cf8;--color-cm-violet:#a78bfa;--color-cm-purple:#c084fc;--color-cm-fuchsia:#e879f9;--color-cm-pink:#f472b6;--color-cm-rose:#fb7185;--color-cm-gray:#fafafa;--color-cm-gray-muted:#a1a1aa;--color-cm-gray-background:#52525b}.fi-fo-markdown-editor:where(.dark,.dark *) .EasyMDEContainer .cm-s-easymde span.CodeMirror-selectedtext{filter:invert()}.fi-fo-markdown-editor:where(.dark,.dark *) .EasyMDEContainer .editor-toolbar button:before{background-color:var(--gray-300)}.fi-fo-markdown-editor:where(.dark,.dark *) .EasyMDEContainer .editor-toolbar button.active:before{background-color:var(--primary-400)}[x-sortable]:has(.fi-sortable-ghost) .fi-fo-markdown-editor{pointer-events:none}.fi-fo-modal-table-select:not(.fi-fo-modal-table-select-multiple){align-items:flex-start;column-gap:calc(var(--spacing)*3);--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5);display:flex}.fi-fo-modal-table-select.fi-fo-modal-table-select-multiple{gap:calc(var(--spacing)*2);display:grid}.fi-fo-modal-table-select.fi-fo-modal-table-select-multiple .fi-fo-modal-table-select-badges-ctn{gap:calc(var(--spacing)*1.5);flex-wrap:wrap;display:flex}.fi-fo-modal-table-select .fi-fo-modal-table-select-placeholder{color:var(--gray-400)}.fi-fo-modal-table-select .fi-fo-modal-table-select-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-fo-radio{gap:calc(var(--spacing)*4)}.fi-fo-radio.fi-inline{flex-wrap:wrap;display:flex}.fi-fo-radio:not(.fi-inline).fi-grid-direction-col{margin-top:calc(var(--spacing)*-4)}.fi-fo-radio:not(.fi-inline).fi-grid-direction-col>.fi-fo-radio-label{break-inside:avoid;padding-top:calc(var(--spacing)*4)}.fi-fo-radio>.fi-fo-radio-label{column-gap:calc(var(--spacing)*3);align-self:flex-start;display:flex}.fi-fo-radio>.fi-fo-radio-label>.fi-radio-input{margin-top:calc(var(--spacing)*1);flex-shrink:0}.fi-fo-radio>.fi-fo-radio-label>.fi-fo-radio-label-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950);display:grid}.fi-fo-radio>.fi-fo-radio-label>.fi-fo-radio-label-text:where(.dark,.dark *){color:var(--color-white)}.fi-fo-radio>.fi-fo-radio-label .fi-fo-radio-label-description{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--gray-500)}.fi-fo-radio>.fi-fo-radio-label .fi-fo-radio-label-description:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-repeater{row-gap:calc(var(--spacing)*4);display:grid}.fi-fo-repeater .fi-fo-repeater-actions{column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-repeater .fi-fo-repeater-actions.fi-hidden{display:none}.fi-fo-repeater .fi-fo-repeater-items{align-items:flex-start;gap:calc(var(--spacing)*4)}.fi-fo-repeater .fi-fo-repeater-item{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-repeater .fi-fo-repeater-item:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-repeater .fi-fo-repeater-item.fi-collapsed .fi-fo-repeater-item-header-collapsible-actions{rotate:-180deg}.fi-fo-repeater .fi-fo-repeater-item.fi-collapsed .fi-fo-repeater-item-header-collapse-action,.fi-fo-repeater .fi-fo-repeater-item:not(.fi-collapsed) .fi-fo-repeater-item-header-expand-action{pointer-events:none;opacity:0}.fi-fo-repeater .fi-fo-repeater-item-header{align-items:center;column-gap:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);display:flex;overflow:hidden}.fi-fo-repeater.fi-collapsible .fi-fo-repeater-item-header{cursor:pointer;-webkit-user-select:none;user-select:none}.fi-fo-repeater .fi-fo-repeater-item-header-start-actions{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-repeater .fi-fo-repeater-item-header-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-fo-repeater .fi-fo-repeater-item-header-label:where(.dark,.dark *){color:var(--color-white)}.fi-fo-repeater .fi-fo-repeater-item-header-label.fi-truncated{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fi-fo-repeater .fi-fo-repeater-item-header-end-actions{align-items:center;column-gap:calc(var(--spacing)*3);margin-inline-start:auto;display:flex}.fi-fo-repeater .fi-fo-repeater-item-header-collapsible-actions{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:relative}.fi-fo-repeater .fi-fo-repeater-item-header-collapse-action{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.fi-fo-repeater .fi-fo-repeater-item-header-expand-action{inset:calc(var(--spacing)*0);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:absolute;rotate:180deg}.fi-fo-repeater .fi-fo-repeater-item-has-header>.fi-fo-repeater-item-content{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-100)}.fi-fo-repeater .fi-fo-repeater-item-has-header>.fi-fo-repeater-item-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-repeater .fi-fo-repeater-item-has-header>.fi-fo-repeater-item-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-repeater .fi-fo-repeater-item-content{padding:calc(var(--spacing)*4)}.fi-fo-repeater .fi-fo-repeater-add-between-items-ctn{justify-content:center;width:100%;display:flex}.fi-fo-repeater .fi-fo-repeater-add-between-items{border-radius:var(--radius-lg);background-color:var(--color-white)}.fi-fo-repeater .fi-fo-repeater-add-between-items:where(.dark,.dark *){background-color:var(--gray-900)}.fi-fo-repeater .fi-fo-repeater-label-between-items-ctn{margin-block:calc(var(--spacing)*-2);align-items:center;display:flex;position:relative}.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-before{width:calc(var(--spacing)*3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);flex-shrink:0}.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-before:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-before:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-repeater .fi-fo-repeater-label-between-items{padding-inline:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);flex-shrink:0}.fi-fo-repeater .fi-fo-repeater-label-between-items:where(.dark,.dark *){color:var(--gray-400)}.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-after{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);flex:1}.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-after:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-repeater .fi-fo-repeater-label-between-items-divider-after:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-repeater .fi-fo-repeater-add{justify-content:center;width:100%;display:flex}.fi-fo-repeater .fi-fo-repeater-add.fi-align-start,.fi-fo-repeater .fi-fo-repeater-add.fi-align-left{justify-content:flex-start}.fi-fo-repeater .fi-fo-repeater-add.fi-align-end,.fi-fo-repeater .fi-fo-repeater-add.fi-align-right{justify-content:flex-end}.fi-fo-simple-repeater{row-gap:calc(var(--spacing)*4);display:grid}.fi-fo-simple-repeater .fi-fo-simple-repeater-items{gap:calc(var(--spacing)*4)}.fi-fo-simple-repeater .fi-fo-simple-repeater-item{justify-content:flex-start;column-gap:calc(var(--spacing)*3);display:flex}.fi-fo-simple-repeater .fi-fo-simple-repeater-item-content{flex:1}.fi-fo-simple-repeater .fi-fo-simple-repeater-item-actions{align-items:center;column-gap:calc(var(--spacing)*1);display:flex}.fi-fo-simple-repeater .fi-fo-simple-repeater-add{justify-content:center;width:100%;display:flex}.fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-start,.fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-left{justify-content:flex-start}.fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-end,.fi-fo-simple-repeater .fi-fo-simple-repeater-add.fi-align-right{justify-content:flex-end}.fi-fo-table-repeater{gap:calc(var(--spacing)*3);display:grid}.fi-fo-table-repeater>table{width:100%;display:block}:where(.fi-fo-table-repeater>table>: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)));border-color:var(--gray-200)}.fi-fo-table-repeater>table{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}:where(.fi-fo-table-repeater>table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-table-repeater>table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-table-repeater>table:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-table-repeater>table:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-table-repeater>table>thead{white-space:nowrap;display:none}.fi-fo-table-repeater>table>thead>tr>th{border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-fo-table-repeater>table>thead>tr>th:first-of-type{border-start-start-radius:var(--radius-xl)}.fi-fo-table-repeater>table>thead>tr>th:last-of-type{border-start-end-radius:var(--radius-xl)}.fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-table-repeater>table>thead>tr>th:where(.dark,.dark *){color:var(--color-white)}.fi-fo-table-repeater>table>thead>tr>th:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-fo-table-repeater>table>thead>tr>th:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-fo-table-repeater>table>thead>tr>th.fi-align-start,.fi-fo-table-repeater>table>thead>tr>th.fi-align-left{text-align:start}.fi-fo-table-repeater>table>thead>tr>th.fi-align-end,.fi-fo-table-repeater>table>thead>tr>th.fi-align-right{text-align:end}.fi-fo-table-repeater>table>thead>tr>th.fi-wrapped{white-space:normal}.fi-fo-table-repeater>table>thead>tr>th:not(.fi-wrapped){white-space:nowrap}.fi-fo-table-repeater>table>thead>tr>th.fi-fo-table-repeater-empty-header-cell{width:calc(var(--spacing)*1)}.fi-fo-table-repeater>table>tbody{display:block}:where(.fi-fo-table-repeater>table>tbody>: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)));border-color:var(--gray-200)}:where(.fi-fo-table-repeater>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-table-repeater>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-table-repeater>table>tbody>tr{gap:calc(var(--spacing)*6);padding:calc(var(--spacing)*6);display:grid}.fi-fo-table-repeater>table>tbody>tr>td{display:block}.fi-fo-table-repeater>table>tbody>tr>td.fi-hidden{display:none}.fi-fo-table-repeater>table>tbody>tr>td.fi-vertical-align-start{vertical-align:top}.fi-fo-table-repeater>table>tbody>tr>td.fi-vertical-align-center{vertical-align:middle}.fi-fo-table-repeater>table>tbody>tr>td.fi-vertical-align-end{vertical-align:bottom}.fi-fo-table-repeater>table .fi-fo-table-repeater-header-required-mark{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--danger-600)}.fi-fo-table-repeater>table .fi-fo-table-repeater-header-required-mark:where(.dark,.dark *){color:var(--danger-400)}.fi-fo-table-repeater>table .fi-fo-table-repeater-actions{align-items:center;column-gap:calc(var(--spacing)*3);height:100%;display:flex}@supports (container-type:inline-size){.fi-fo-table-repeater{container-type:inline-size}@container (min-width:36rem){.fi-fo-table-repeater>table{display:table}.fi-fo-table-repeater>table>thead{display:table-header-group}.fi-fo-table-repeater>table>tbody{display:table-row-group}.fi-fo-table-repeater>table>tbody>tr{padding:calc(var(--spacing)*0);display:table-row}.fi-fo-table-repeater>table>tbody>tr>td{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);display:table-cell}.fi-fo-table-repeater>table>tbody>tr>td.fi-hidden{display:table-cell}.fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field,.fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field-label-content,.fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry-label{display:none}.fi-fo-table-repeater>table .fi-fo-table-repeater-actions{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2)}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td{border-color:var(--gray-200);padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*1)}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-fo-table-repeater.fi-compact .fi-input-wrp{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;background-color:#0000!important}.fi-fo-table-repeater.fi-compact .fi-fo-field-wrp-error-message{padding-inline:calc(var(--spacing)*3);padding-bottom:calc(var(--spacing)*2)}.fi-fo-table-repeater.fi-compact .fi-in-entry-content,.fi-fo-table-repeater.fi-compact .fi-fo-radio{padding-inline:calc(var(--spacing)*3)}}}@supports not (container-type:inline-size){@media (min-width:64rem){.fi-fo-table-repeater>table{display:table}.fi-fo-table-repeater>table>thead{display:table-header-group}.fi-fo-table-repeater>table>tbody{display:table-row-group}.fi-fo-table-repeater>table>tbody>tr{padding:calc(var(--spacing)*0);display:table-row}.fi-fo-table-repeater>table>tbody>tr>td{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);display:table-cell}.fi-fo-table-repeater>table>tbody>tr>td.fi-hidden{display:table-cell}.fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field,.fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.fi-fo-table-repeater>table>tbody>tr>td .fi-fo-field-label-content,.fi-fo-table-repeater>table>tbody>tr>td .fi-in-entry-label{display:none}.fi-fo-table-repeater>table .fi-fo-table-repeater-actions{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2)}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td{border-color:var(--gray-200);padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*1)}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-fo-table-repeater.fi-compact>table>tbody>tr>td:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-fo-table-repeater.fi-compact .fi-input-wrp{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;background-color:#0000!important}.fi-fo-table-repeater.fi-compact .fi-fo-field-wrp-error-message{padding-inline:calc(var(--spacing)*3);padding-bottom:calc(var(--spacing)*2)}.fi-fo-table-repeater.fi-compact .fi-in-entry-content,.fi-fo-table-repeater.fi-compact .fi-fo-radio{padding-inline:calc(var(--spacing)*3)}}}.fi-fo-table-repeater .fi-fo-table-repeater-add{justify-content:center;width:100%;display:flex}.fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-start,.fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-left{justify-content:flex-start}.fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-end,.fi-fo-table-repeater .fi-fo-table-repeater-add.fi-align-right{justify-content:flex-end}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file{pointer-events:none;cursor:wait;opacity:.5}.fi-fo-rich-editor .fi-fo-rich-editor-toolbar{column-gap:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*1);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*2);flex-wrap:wrap;display:flex;position:relative}.fi-fo-rich-editor .fi-fo-rich-editor-toolbar:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-toolbar:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-floating-toolbar{visibility:hidden;z-index:20;margin-top:calc(var(--spacing)*-1);column-gap:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*1);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-300);background-color:var(--color-white);max-width:100%;padding:calc(var(--spacing)*1);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-wrap:wrap;display:flex;position:absolute}.fi-fo-rich-editor .fi-fo-rich-editor-floating-toolbar:where(.dark,.dark *){border-color:var(--gray-600);background-color:var(--gray-800)}.fi-fo-rich-editor .fi-fo-rich-editor-toolbar-group{column-gap:calc(var(--spacing)*1);display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-tool{height:calc(var(--spacing)*8);min-width:calc(var(--spacing)*8);border-radius:var(--radius-lg);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-700);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;justify-content:center;align-items:center;transition-duration:75ms;display:flex}@media (hover:hover){.fi-fo-rich-editor .fi-fo-rich-editor-tool:hover{background-color:var(--gray-50)}}.fi-fo-rich-editor .fi-fo-rich-editor-tool:focus-visible{background-color:var(--gray-50)}.fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *){color:var(--gray-200)}@media (hover:hover){.fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-tool:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-tool[disabled]{pointer-events:none;cursor:default;opacity:.7}.fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active{background-color:var(--gray-50);color:var(--primary-600)}.fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-active:where(.dark,.dark *){color:var(--primary-400)}.fi-fo-rich-editor .fi-fo-rich-editor-tool.fi-fo-rich-editor-tool-with-label{align-items:center;column-gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*1.5)}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message{align-items:center;column-gap:calc(var(--spacing)*3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*5);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message:where(.dark,.dark *){color:var(--gray-200)}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message .fi-loading-indicator{color:var(--gray-400)}.fi-fo-rich-editor .fi-fo-rich-editor-uploading-file-message .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message{align-items:center;column-gap:calc(var(--spacing)*3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--danger-200);background-color:var(--danger-50);padding-inline:calc(var(--spacing)*5);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--danger-700);display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-file-validation-message:where(.dark,.dark *){color:var(--danger-200)}.fi-fo-rich-editor .fi-fo-rich-editor-main{flex-direction:column-reverse;display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-content{min-height:calc(var(--spacing)*12);width:100%;padding-inline:calc(var(--spacing)*5);padding-block:calc(var(--spacing)*3);flex:1;position:relative}.fi-fo-rich-editor span[data-type=mergeTag]{margin-block:calc(var(--spacing)*0);white-space:nowrap;display:inline-block}.fi-fo-rich-editor span[data-type=mergeTag]:before{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);opacity:.6;content:"{{";margin-inline-end:calc(var(--spacing)*1)}.fi-fo-rich-editor span[data-type=mergeTag]:after{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);opacity:.6;content:"}}";margin-inline-start:calc(var(--spacing)*1)}.fi-fo-rich-editor span[data-type=mention]{margin-block:calc(var(--spacing)*0);background-color:var(--primary-50);padding-inline:calc(var(--spacing)*1);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--primary-600);border-radius:.25rem;display:inline-block}.fi-fo-rich-editor span[data-type=mention]:where(.dark,.dark *){background-color:var(--primary-400)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor span[data-type=mention]:where(.dark,.dark *){background-color:color-mix(in oklab,var(--primary-400)10%,transparent)}}.fi-fo-rich-editor span[data-type=mention]:where(.dark,.dark *){color:var(--primary-400)}.fi-fo-rich-editor .fi-fo-rich-editor-panels{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);width:100%}.fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-panels:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)30%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-panel-header{align-items:flex-start;gap:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-panel-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950);flex:1}.fi-fo-rich-editor .fi-fo-rich-editor-panel-heading:where(.dark,.dark *){color:var(--color-white)}.fi-fo-rich-editor .fi-fo-rich-editor-panel-close-btn-ctn{flex-shrink:0}.fi-fo-rich-editor .fi-fo-rich-editor-panel{display:grid}:where(.fi-fo-rich-editor .fi-fo-rich-editor-panel>: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)));border-color:var(--gray-200)}:where(.fi-fo-rich-editor .fi-fo-rich-editor-panel:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-rich-editor .fi-fo-rich-editor-panel:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-merge-tags-list{gap:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn{cursor:move;border-radius:var(--radius-lg);background-color:var(--color-white);padding:calc(var(--spacing)*1);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-600);--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);--tw-ring-color:var(--gray-600)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn{--tw-ring-color:color-mix(in oklab,var(--gray-600)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){background-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){color:var(--gray-200);--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-merge-tag-btn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-400)20%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-custom-blocks-list{gap:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn{cursor:move;gap:calc(var(--spacing)*1.5);border-radius:var(--radius-lg);background-color:var(--color-white);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-600);--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);--tw-ring-color:var(--gray-600);display:flex}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn{--tw-ring-color:color-mix(in oklab,var(--gray-600)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){background-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-400)10%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){color:var(--gray-200);--tw-ring-color:var(--gray-400)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-btn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--gray-400)20%,transparent)}}.fi-fo-rich-editor .tiptap{height:100%}.fi-fo-rich-editor .tiptap:focus{--tw-outline-style:none;outline-style:none}div:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode)[data-type=customBlock],img:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode){--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);--tw-ring-color:var(--primary-600)}:is(div:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode)[data-type=customBlock],img:is(.fi-fo-rich-editor .tiptap:focus .ProseMirror-selectednode)):where(.dark,.dark *){--tw-ring-color:var(--primary-500)}.fi-fo-rich-editor .tiptap p.is-editor-empty:first-child:before{pointer-events:none;float:inline-start;height:calc(var(--spacing)*0);color:var(--gray-400);content:attr(data-placeholder)}.fi-fo-rich-editor .tiptap p.is-editor-empty:first-child:where(.dark,.dark *):before{color:var(--gray-500)}.fi-fo-rich-editor .tiptap [data-type=details]{margin-block:calc(var(--spacing)*6);gap:calc(var(--spacing)*1);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-950);display:flex}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap [data-type=details]{border-color:color-mix(in oklab,var(--gray-950)20%,transparent)}}.fi-fo-rich-editor .tiptap [data-type=details]{padding:calc(var(--spacing)*4)}.fi-fo-rich-editor .tiptap [data-type=details]:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap [data-type=details]:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-rich-editor .tiptap [data-type=details]>div:first-of-type{margin-top:calc(var(--spacing)*0)!important}.fi-fo-rich-editor .tiptap [data-type=details] summary{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);list-style-type:none}.fi-fo-rich-editor .tiptap [data-type=details]>button{margin-top:1px;margin-right:calc(var(--spacing)*2);width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);border-radius:var(--radius-md);padding:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:1;background-color:#0000;justify-content:center;align-items:center;line-height:1;display:flex}@media (hover:hover){.fi-fo-rich-editor .tiptap [data-type=details]>button:hover{background-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap [data-type=details]>button:hover{background-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.fi-fo-rich-editor .tiptap [data-type=details]>button:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap [data-type=details]>button:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-fo-rich-editor .tiptap [data-type=details]>button:before{content:"▶"}.fi-fo-rich-editor .tiptap [data-type=details].is-open>button:before{transform:rotate(90deg)}.fi-fo-rich-editor .tiptap [data-type=details]>div{gap:calc(var(--spacing)*4);flex-direction:column;width:100%;display:flex}.fi-fo-rich-editor .tiptap [data-type=details]>div>[data-type=detailsContent]{margin-top:calc(var(--spacing)*0)!important}.fi-fo-rich-editor .tiptap [data-type=details]>div>[data-type=detailsContent]>:last-child{margin-bottom:calc(var(--spacing)*4)}.fi-fo-rich-editor .tiptap table{margin:calc(var(--spacing)*0);table-layout:fixed;border-collapse:collapse;width:100%;overflow:hidden}.fi-fo-rich-editor .tiptap table:first-child{margin-top:calc(var(--spacing)*0)}.fi-fo-rich-editor .tiptap table td,.fi-fo-rich-editor .tiptap table th{border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-300);vertical-align:top;min-width:1em;position:relative;padding:calc(var(--spacing)*2)!important}:is(.fi-fo-rich-editor .tiptap table td,.fi-fo-rich-editor .tiptap table th):where(.dark,.dark *){border-color:var(--gray-600)}:is(.fi-fo-rich-editor .tiptap table td,.fi-fo-rich-editor .tiptap table th)>*{margin-bottom:calc(var(--spacing)*0)}.fi-fo-rich-editor .tiptap table th{background-color:var(--gray-100);text-align:start;--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.fi-fo-rich-editor .tiptap table th:where(.dark,.dark *){background-color:var(--gray-800);color:var(--color-white)}.fi-fo-rich-editor .tiptap table .selectedCell:after{pointer-events:none;inset-inline-start:calc(var(--spacing)*0);inset-inline-end:calc(var(--spacing)*0);top:calc(var(--spacing)*0);bottom:calc(var(--spacing)*0);z-index:2;background-color:var(--gray-200);position:absolute}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap table .selectedCell:after{background-color:color-mix(in oklab,var(--gray-200)80%,transparent)}}.fi-fo-rich-editor .tiptap table .selectedCell:after{--tw-content:"";content:var(--tw-content)}.fi-fo-rich-editor .tiptap table .selectedCell:where(.dark,.dark *):after{background-color:var(--gray-800)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap table .selectedCell:where(.dark,.dark *):after{background-color:color-mix(in oklab,var(--gray-800)80%,transparent)}}.fi-fo-rich-editor .tiptap table .column-resize-handle{pointer-events:none;inset-inline-end:calc(var(--spacing)*0);top:calc(var(--spacing)*0);bottom:calc(var(--spacing)*0);width:calc(var(--spacing)*1);background-color:var(--primary-600);position:absolute;margin:calc(var(--spacing)*0)!important}.fi-fo-rich-editor .tiptap .tableWrapper{overflow-x:auto}.fi-fo-rich-editor .tiptap.resize-cursor{cursor:col-resize;cursor:ew-resize}.fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col{border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col{border-color:color-mix(in oklab,var(--gray-950)20%,transparent)}}.fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col{padding:calc(var(--spacing)*4)}.fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .tiptap .grid-layout>.grid-layout-col:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-rich-editor .tiptap [data-resize-handle]{z-index:10;background:#00000080;border:1px solid #fffc;border-radius:2px;position:absolute}.fi-fo-rich-editor .tiptap [data-resize-handle]:hover{background:#000c}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle]{margin:0!important}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-left],.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-right],.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-left],.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-right]{width:8px;height:8px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-left]{cursor:nwse-resize;top:-4px;left:-4px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top-right]{cursor:nesw-resize;top:-4px;right:-4px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-left]{cursor:nesw-resize;bottom:-4px;left:-4px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom-right]{cursor:nwse-resize;bottom:-4px;right:-4px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top],.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom]{height:6px;left:8px;right:8px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=top]{cursor:ns-resize;top:-3px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=bottom]{cursor:ns-resize;bottom:-3px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=left],.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=right]{width:6px;top:8px;bottom:8px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=left]{cursor:ew-resize;left:-3px}.fi-fo-rich-editor .tiptap [data-resize-handle][data-resize-handle=right]{cursor:ew-resize;right:-3px}.fi-fo-rich-editor .tiptap [data-resize-state=true] [data-resize-wrapper]{border-radius:.125rem;outline:1px solid #00000040;position:relative}.fi-fo-rich-editor .tiptap [data-resize-container]{display:inline-block!important}@supports (-webkit-touch-callout:none){.fi-fo-rich-editor .tiptap.ProseMirror{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}.fi-fo-rich-editor img{display:inline-block}.fi-fo-rich-editor div[data-type=customBlock]{display:grid}:where(.fi-fo-rich-editor div[data-type=customBlock]>: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)));border-color:var(--gray-200)}.fi-fo-rich-editor div[data-type=customBlock]{border-radius:var(--radius-lg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);overflow:hidden}:where(.fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor div[data-type=customBlock]:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-header{align-items:flex-start;gap:calc(var(--spacing)*3);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);display:flex}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-header:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-header:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)30%,transparent)}}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950);flex:1}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-heading:where(.dark,.dark *){color:var(--color-white)}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-edit-btn-ctn,.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-delete-btn-ctn{flex-shrink:0}.fi-fo-rich-editor .fi-fo-rich-editor-custom-block-preview{padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3)}@supports (container-type:inline-size){.fi-fo-rich-editor{container-type:inline-size}@container (min-width:42rem){.fi-fo-rich-editor .fi-fo-rich-editor-main{flex-direction:row}.fi-fo-rich-editor .fi-fo-rich-editor-panels{max-width:var(--container-3xs);border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-end-end-radius:var(--radius-lg)}}}@supports not (container-type:inline-size){@media (min-width:48rem){.fi-fo-rich-editor .fi-fo-rich-editor-main{flex-direction:row}.fi-fo-rich-editor .fi-fo-rich-editor-panels{max-width:var(--container-3xs);border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-end-end-radius:var(--radius-lg)}}}:scope .fi-fo-rich-editor-text-color-select-option{align-items:center;gap:calc(var(--spacing)*2);display:flex}:scope .fi-fo-rich-editor-text-color-select-option .fi-fo-rich-editor-text-color-select-option-preview{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5);background-color:var(--color);border-radius:3.40282e38px;flex-shrink:0}:scope .fi-fo-rich-editor-text-color-select-option .fi-fo-rich-editor-text-color-select-option-preview:where(.dark,.dark *){background-color:var(--dark-color)}[x-sortable]:has(.fi-sortable-ghost) .fi-fo-rich-editor{pointer-events:none}.fi-fo-select .fi-hidden{display:none}@media (min-width:40rem){.fi-fo-select-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.fi-fo-slider{gap:calc(var(--spacing)*4);border-radius:var(--radius-lg);border-style:var(--tw-border-style);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);background-color:#0000;border-width:0}.fi-fo-slider:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-slider .noUi-connect{background-color:var(--primary-500)}.fi-fo-slider .noUi-connect:where(.dark,.dark *){background-color:var(--primary-600)}.fi-fo-slider .noUi-connects{border-radius:var(--radius-lg);background-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider .noUi-connects{background-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.fi-fo-slider .noUi-connects:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider .noUi-connects:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-fo-slider .noUi-handle{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-950);position:absolute}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider .noUi-handle{border-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}.fi-fo-slider .noUi-handle{background-color:var(--color-white);--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);backface-visibility:hidden}.fi-fo-slider .noUi-handle:focus{outline-style:var(--tw-outline-style);outline-width:2px;outline-color:var(--primary-600)}.fi-fo-slider .noUi-handle:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider .noUi-handle:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-slider .noUi-handle:where(.dark,.dark *){background-color:var(--gray-700)}.fi-fo-slider .noUi-handle:where(.dark,.dark *):focus{outline-color:var(--primary-500)}.fi-fo-slider .noUi-handle:before,.fi-fo-slider .noUi-handle:after{border-style:var(--tw-border-style);background-color:var(--gray-400);border-width:0}.fi-fo-slider .noUi-tooltip{border-radius:var(--radius-md);border-style:var(--tw-border-style);background-color:var(--color-white);color:var(--gray-950);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);border-width:0}.fi-fo-slider .noUi-tooltip:where(.dark,.dark *){background-color:var(--gray-800);color:var(--color-white);--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-fo-slider .noUi-tooltip:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-fo-slider .noUi-pips .noUi-value{color:var(--gray-950)}.fi-fo-slider .noUi-pips .noUi-value:where(.dark,.dark *){color:var(--color-white)}.fi-fo-slider.fi-fo-slider-vertical{margin-top:calc(var(--spacing)*4);height:calc(var(--spacing)*40)}.fi-fo-slider.fi-fo-slider-vertical.fi-fo-slider-has-tooltips{margin-inline-start:calc(var(--spacing)*10)}.fi-fo-slider:not(.fi-fo-slider-vertical).fi-fo-slider-has-pips{margin-bottom:calc(var(--spacing)*8)}.fi-fo-slider:not(.fi-fo-slider-vertical).fi-fo-slider-has-tooltips{margin-top:calc(var(--spacing)*10)}.fi-fo-slider:not(.fi-fo-slider-vertical) .noUi-pips .noUi-value{margin-top:calc(var(--spacing)*1)}.fi-fo-tags-input.fi-disabled .fi-badge-delete-btn{display:none}.fi-fo-tags-input .fi-fo-tags-input-tags-ctn{gap:calc(var(--spacing)*1.5);border-top-style:var(--tw-border-style);border-top-width:1px;border-top-color:var(--gray-200);width:100%;padding:calc(var(--spacing)*2);flex-wrap:wrap;display:flex}.fi-fo-tags-input .fi-fo-tags-input-tags-ctn:where(.dark,.dark *){border-top-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-fo-tags-input .fi-fo-tags-input-tags-ctn:where(.dark,.dark *){border-top-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-fo-tags-input .fi-fo-tags-input-tags-ctn>template{display:none}.fi-fo-tags-input .fi-fo-tags-input-tags-ctn>.fi-badge.fi-reorderable{cursor:move}.fi-fo-tags-input .fi-fo-tags-input-tags-ctn>.fi-badge .fi-badge-label-ctn{text-align:start;-webkit-user-select:none;user-select:none}@media (min-width:40rem){.fi-fo-tags-input-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.fi-fo-text-input{overflow:hidden}.fi-fo-text-input input.fi-revealable::-ms-reveal{display:none}.fi-fo-textarea{overflow:hidden}.fi-fo-textarea textarea{--tw-border-style:none;width:100%;height:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-950);background-color:#0000;border-style:none;display:block}.fi-fo-textarea textarea::placeholder{color:var(--gray-400)}.fi-fo-textarea textarea:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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);--tw-outline-style:none;outline-style:none}.fi-fo-textarea textarea:disabled{color:var(--gray-500);-webkit-text-fill-color:var(--color-gray-500)}.fi-fo-textarea textarea:disabled::placeholder{-webkit-text-fill-color:var(--color-gray-400)}.fi-fo-textarea textarea:where(.dark,.dark *){color:var(--color-white)}.fi-fo-textarea textarea:where(.dark,.dark *)::placeholder{color:var(--gray-500)}.fi-fo-textarea textarea:where(.dark,.dark *):disabled{color:var(--gray-400);-webkit-text-fill-color:var(--color-gray-400)}.fi-fo-textarea textarea:where(.dark,.dark *):disabled::placeholder{-webkit-text-fill-color:var(--color-gray-500)}@supports (-webkit-touch-callout:none){.fi-fo-textarea textarea{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}.fi-fo-textarea.fi-autosizable textarea{resize:none}@media (min-width:40rem){.fi-fo-textarea-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.fi-fo-toggle-buttons.fi-btn-group{width:max-content}.fi-fo-toggle-buttons:not(.fi-btn-group){gap:calc(var(--spacing)*3)}.fi-fo-toggle-buttons:not(.fi-btn-group).fi-inline{flex-wrap:wrap;display:flex}.fi-fo-toggle-buttons:not(.fi-btn-group):not(.fi-inline).fi-grid-direction-col{margin-top:calc(var(--spacing)*-3)}.fi-fo-toggle-buttons:not(.fi-btn-group):not(.fi-inline).fi-grid-direction-col .fi-fo-toggle-buttons-btn-ctn{break-inside:avoid;padding-top:calc(var(--spacing)*3)}.fi-fo-toggle-buttons .fi-fo-toggle-buttons-input{pointer-events:none;opacity:0;position:absolute}@media (min-width:40rem){.fi-fo-toggle-buttons-wrp.fi-fo-field-has-inline-label .fi-fo-field-label-col{padding-top:calc(var(--spacing)*1.5)}}.fi-in-code .phiki{border-radius:var(--radius-lg);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent);overflow-x:auto}.fi-in-code .phiki:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-in-code .phiki:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-in-code:where(.dark,.dark *) .phiki,.fi-in-code:where(.dark,.dark *) .phiki span{color:var(--phiki-dark-color)!important;background-color:var(--phiki-dark-background-color)!important;font-style:var(--phiki-dark-font-style)!important;font-weight:var(--phiki-dark-font-weight)!important;-webkit-text-decoration:var(--phiki-dark-text-decoration)!important;-webkit-text-decoration:var(--phiki-dark-text-decoration)!important;text-decoration:var(--phiki-dark-text-decoration)!important}.fi-in-code.fi-copyable{cursor:pointer}.fi-in-color{gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-in-color.fi-wrapped{flex-wrap:wrap}.fi-in-color.fi-align-start,.fi-in-color.fi-align-left{justify-content:flex-start}.fi-in-color.fi-align-center{justify-content:center}.fi-in-color.fi-align-end,.fi-in-color.fi-align-right{justify-content:flex-end}.fi-in-color.fi-align-justify,.fi-in-color.fi-align-between{justify-content:space-between}.fi-in-color>.fi-in-color-item{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6);border-radius:var(--radius-md)}.fi-in-color>.fi-in-color-item.fi-copyable{cursor:pointer}.fi-in-entry{row-gap:calc(var(--spacing)*2);display:grid}@media (min-width:40rem){.fi-in-entry.fi-in-entry-has-inline-label{align-items:flex-start;column-gap:calc(var(--spacing)*4);grid-template-columns:repeat(3,minmax(0,1fr))}.fi-in-entry.fi-in-entry-has-inline-label .fi-in-entry-content-col{grid-column:span 2/span 2}}.fi-in-entry .fi-in-entry-label-ctn{align-items:flex-start;column-gap:calc(var(--spacing)*3);display:flex}.fi-in-entry .fi-in-entry-label-ctn>.fi-sc:first-child{flex-grow:0}.fi-in-entry .fi-in-entry-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-in-entry .fi-in-entry-label:where(.dark,.dark *){color:var(--color-white)}.fi-in-entry .fi-in-entry-label.fi-hidden{display:none}.fi-in-entry .fi-in-entry-label-col,.fi-in-entry .fi-in-entry-content-col{row-gap:calc(var(--spacing)*2);grid-auto-columns:minmax(0,1fr);display:grid}.fi-in-entry .fi-in-entry-content-ctn{align-items:center;column-gap:calc(var(--spacing)*3);width:100%;display:flex}.fi-in-entry .fi-in-entry-content{text-align:start;width:100%;display:block}.fi-in-entry .fi-in-entry-content.fi-align-center{text-align:center}.fi-in-entry .fi-in-entry-content.fi-align-end{text-align:end}.fi-in-entry .fi-in-entry-content.fi-align-left{text-align:left}.fi-in-entry .fi-in-entry-content.fi-align-right{text-align:right}.fi-in-entry .fi-in-entry-content.fi-align-justify,.fi-in-entry .fi-in-entry-content.fi-align-between{text-align:justify}.fi-in-entry .fi-in-placeholder{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-400)}.fi-in-entry .fi-in-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-in-key-value{table-layout:auto;width:100%}:where(.fi-in-key-value>: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)));border-color:var(--gray-200)}.fi-in-key-value{border-radius:var(--radius-lg);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}:where(.fi-in-key-value:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-in-key-value:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-key-value:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-in-key-value:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-key-value:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-in-key-value:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-in-key-value th{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700)}.fi-in-key-value th:where(.dark,.dark *){color:var(--gray-200)}:where(.fi-in-key-value tbody>: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)));border-color:var(--gray-200)}.fi-in-key-value tbody{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media (min-width:40rem){.fi-in-key-value tbody{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}}:where(.fi-in-key-value tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-in-key-value tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:where(.fi-in-key-value tr>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));border-color:var(--gray-200)}:where(.fi-in-key-value tr:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-divide-x-reverse:1}:where(.fi-in-key-value tr:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-in-key-value tr:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-key-value td{width:50%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);overflow-wrap:anywhere}.fi-in-key-value td.fi-in-placeholder{width:100%;padding-block:calc(var(--spacing)*2);text-align:center;font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.fi-in-icon{gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-in-icon.fi-wrapped{flex-wrap:wrap}.fi-in-icon.fi-in-icon-has-line-breaks{flex-direction:column}.fi-in-icon.fi-align-start,.fi-in-icon.fi-align-left{justify-content:flex-start}.fi-in-icon.fi-align-center{justify-content:center}.fi-in-icon.fi-align-end,.fi-in-icon.fi-align-right{justify-content:flex-end}.fi-in-icon.fi-align-justify,.fi-in-icon.fi-align-between{justify-content:space-between}.fi-in-icon>.fi-icon,.fi-in-icon>a>.fi-icon{color:var(--gray-400)}:is(.fi-in-icon>.fi-icon,.fi-in-icon>a>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}:is(.fi-in-icon>.fi-icon,.fi-in-icon>a>.fi-icon).fi-color{color:var(--text)}:is(.fi-in-icon>.fi-icon,.fi-in-icon>a>.fi-icon).fi-color:where(.dark,.dark *){color:var(--dark-text)}.fi-in-image{align-items:center;gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-in-image img{object-fit:cover;object-position:center;max-width:none}.fi-in-image.fi-circular img{border-radius:3.40282e38px}.fi-in-image.fi-in-image-ring img,.fi-in-image.fi-in-image-ring .fi-in-image-limited-remaining-text{--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);--tw-ring-color:var(--color-white)}:is(.fi-in-image.fi-in-image-ring img,.fi-in-image.fi-in-image-ring .fi-in-image-limited-remaining-text):where(.dark,.dark *){--tw-ring-color:var(--gray-900)}.fi-in-image.fi-in-image-ring.fi-in-image-ring-1 img,.fi-in-image.fi-in-image-ring.fi-in-image-ring-1 .fi-in-image-limited-remaining-text{--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)}.fi-in-image.fi-in-image-ring.fi-in-image-ring-2 img,.fi-in-image.fi-in-image-ring.fi-in-image-ring-2 .fi-in-image-limited-remaining-text{--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)}.fi-in-image.fi-in-image-ring.fi-in-image-ring-4 img,.fi-in-image.fi-in-image-ring.fi-in-image-ring-4 .fi-in-image-limited-remaining-text{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-in-image.fi-in-image-overlap-1{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-2{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-3{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-3)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-4{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-4)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-5{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-5)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-6{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-6)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-7{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-7>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-7)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-7)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-in-image-overlap-8{column-gap:calc(var(--spacing)*0)}:where(.fi-in-image.fi-in-image-overlap-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-8)*calc(1 - var(--tw-space-x-reverse)))}.fi-in-image.fi-wrapped{flex-wrap:wrap}.fi-in-image.fi-align-start,.fi-in-image.fi-align-left{justify-content:flex-start}.fi-in-image.fi-align-center{justify-content:center}.fi-in-image.fi-align-end,.fi-in-image.fi-align-right{justify-content:flex-end}.fi-in-image.fi-align-justify,.fi-in-image.fi-align-between{justify-content:space-between}.fi-in-image.fi-stacked .fi-in-image-limited-remaining-text{background-color:var(--gray-100);border-radius:3.40282e38px}.fi-in-image.fi-stacked .fi-in-image-limited-remaining-text:where(.dark,.dark *){background-color:var(--gray-800)}.fi-in-image .fi-in-image-limited-remaining-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);justify-content:center;align-items:center;display:flex}.fi-in-image .fi-in-image-limited-remaining-text:where(.dark,.dark *){color:var(--gray-400)}.fi-in-image .fi-in-image-limited-remaining-text.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-in-image .fi-in-image-limited-remaining-text.fi-size-base,.fi-in-image .fi-in-image-limited-remaining-text.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-in-image .fi-in-image-limited-remaining-text.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}ul.fi-in-repeatable{gap:calc(var(--spacing)*4)}.fi-in-repeatable>.fi-in-repeatable-item{display:block}.fi-in-repeatable.fi-contained>.fi-in-repeatable-item{border-radius:var(--radius-xl);background-color:var(--color-white);padding:calc(var(--spacing)*4);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-in-repeatable.fi-contained>.fi-in-repeatable-item:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-in-repeatable.fi-contained>.fi-in-repeatable-item:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-repeatable.fi-contained>.fi-in-repeatable-item:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-in-repeatable.fi-contained>.fi-in-repeatable-item:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-in-table-repeatable{gap:calc(var(--spacing)*3);display:grid}.fi-in-table-repeatable>table{width:100%;display:block}:where(.fi-in-table-repeatable>table>: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)));border-color:var(--gray-200)}.fi-in-table-repeatable>table{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}:where(.fi-in-table-repeatable>table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-in-table-repeatable>table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-in-table-repeatable>table:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-in-table-repeatable>table:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-in-table-repeatable>table>thead{white-space:nowrap;display:none}.fi-in-table-repeatable>table>thead>tr>th{border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-in-table-repeatable>table>thead>tr>th:first-of-type{border-start-start-radius:var(--radius-xl)}.fi-in-table-repeatable>table>thead>tr>th:last-of-type{border-start-end-radius:var(--radius-xl)}.fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-table-repeatable>table>thead>tr>th:where(.dark,.dark *){color:var(--color-white)}.fi-in-table-repeatable>table>thead>tr>th:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-in-table-repeatable>table>thead>tr>th:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-in-table-repeatable>table>thead>tr>th.fi-align-center{text-align:center}.fi-in-table-repeatable>table>thead>tr>th.fi-align-end,.fi-in-table-repeatable>table>thead>tr>th.fi-align-right{text-align:end}.fi-in-table-repeatable>table>thead>tr>th.fi-wrapped{white-space:normal}.fi-in-table-repeatable>table>thead>tr>th:not(.fi-wrapped){white-space:nowrap}.fi-in-table-repeatable>table>thead>tr>th.fi-in-table-repeatable-empty-header-cell{width:calc(var(--spacing)*1)}.fi-in-table-repeatable>table>tbody{display:block}:where(.fi-in-table-repeatable>table>tbody>: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)));border-color:var(--gray-200)}:where(.fi-in-table-repeatable>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-in-table-repeatable>table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-in-table-repeatable>table>tbody>tr{gap:calc(var(--spacing)*6);padding:calc(var(--spacing)*6);display:grid}.fi-in-table-repeatable>table>tbody>tr>td{display:block}.fi-in-table-repeatable>table>tbody>tr>td.fi-hidden{display:none}@supports (container-type:inline-size){.fi-in-table-repeatable{container-type:inline-size}@container (min-width:36rem){.fi-in-table-repeatable>table{display:table}.fi-in-table-repeatable>table>thead{display:table-header-group}.fi-in-table-repeatable>table>tbody{display:table-row-group}.fi-in-table-repeatable>table>tbody>tr{padding:calc(var(--spacing)*0);display:table-row}.fi-in-table-repeatable>table>tbody>tr>td{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);display:table-cell}.fi-in-table-repeatable>table>tbody>tr>td.fi-hidden{display:table-cell}.fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry-label{display:none}.fi-in-table-repeatable>table .fi-in-table-repeatable-actions{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2)}}}@supports not (container-type:inline-size){@media (min-width:64rem){.fi-in-table-repeatable>table{display:table}.fi-in-table-repeatable>table>thead{display:table-header-group}.fi-in-table-repeatable>table>tbody{display:table-row-group}.fi-in-table-repeatable>table>tbody>tr{padding:calc(var(--spacing)*0);display:table-row}.fi-in-table-repeatable>table>tbody>tr>td{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);display:table-cell}.fi-in-table-repeatable>table>tbody>tr>td.fi-hidden{display:table-cell}.fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry{row-gap:calc(var(--spacing)*0)}.fi-in-table-repeatable>table>tbody>tr>td .fi-in-entry-label{display:none}}}.fi-in-text{width:100%}.fi-in-text.fi-in-text-affixed{gap:calc(var(--spacing)*3);display:flex}.fi-in-text .fi-in-text-affixed-content{min-width:calc(var(--spacing)*0);flex:1}.fi-in-text .fi-in-text-affix{align-items:center;gap:calc(var(--spacing)*3);align-self:stretch;display:flex}.fi-in-text.fi-in-text-list-limited{flex-direction:column;display:flex}.fi-in-text.fi-in-text-list-limited.fi-in-text-has-badges{row-gap:calc(var(--spacing)*2)}.fi-in-text.fi-in-text-list-limited:not(.fi-in-text-has-badges){row-gap:calc(var(--spacing)*1)}ul.fi-in-text.fi-bulleted,.fi-in-text.fi-bulleted ul{list-style-type:disc;list-style-position:inside}ul.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges,.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges ul{column-gap:calc(var(--spacing)*1.5);display:flex}:is(ul.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges,.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges ul).fi-wrapped,:is(ul.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges,.fi-in-text:not(.fi-in-text-has-line-breaks).fi-in-text-has-badges ul):is(.fi-wrapped ul){row-gap:calc(var(--spacing)*1);flex-wrap:wrap}:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul).fi-in-text-has-line-breaks,:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):is(.fi-in-text-has-line-breaks ul){row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(ul.fi-in-text-has-line-breaks),:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(.fi-in-text-has-line-breaks ul){column-gap:calc(var(--spacing)*1.5);display:flex}:is(:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(ul.fi-in-text-has-line-breaks),:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(.fi-in-text-has-line-breaks ul)).fi-wrapped,:is(:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(ul.fi-in-text-has-line-breaks),:is(ul.fi-in-text.fi-in-text-has-badges,.fi-in-text.fi-in-text-has-badges ul):not(.fi-in-text-has-line-breaks ul)):is(.fi-wrapped ul){row-gap:calc(var(--spacing)*1);flex-wrap:wrap}.fi-in-text.fi-wrapped:not(.fi-in-text-has-badges.fi-in-text-has-line-breaks){white-space:normal;overflow-wrap:break-word}.fi-in-text.fi-wrapped:not(.fi-in-text-has-badges.fi-in-text-has-line-breaks) .fi-badge,.fi-in-text.fi-wrapped:not(.fi-in-text-has-badges.fi-in-text-has-line-breaks) .fi-in-text-list-limited-message{white-space:nowrap}.fi-in-text>.fi-in-text-list-limited-message{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-in-text>.fi-in-text-list-limited-message:where(.dark,.dark *){color:var(--gray-400)}.fi-in-text.fi-align-center{text-align:center}ul.fi-in-text.fi-align-center,.fi-in-text.fi-align-center ul{justify-content:center}.fi-in-text.fi-align-end,.fi-in-text.fi-align-right{text-align:end}ul:is(.fi-in-text.fi-align-end,.fi-in-text.fi-align-right),:is(.fi-in-text.fi-align-end,.fi-in-text.fi-align-right) ul{justify-content:flex-end}.fi-in-text.fi-align-justify,.fi-in-text.fi-align-between{text-align:justify}ul:is(.fi-in-text.fi-align-justify,.fi-in-text.fi-align-between),:is(.fi-in-text.fi-align-justify,.fi-in-text.fi-align-between) ul{justify-content:space-between}.fi-in-text-item{color:var(--gray-950)}.fi-in-text-item:where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.fi-in-text-item a:hover{text-decoration-line:underline}}.fi-in-text-item a:focus-visible{text-decoration-line:underline}.fi-in-text-item:not(.fi-bulleted li.fi-in-text-item){-webkit-line-clamp:var(--line-clamp,none);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.fi-in-text-item>.fi-copyable{cursor:pointer}.fi-in-text-item.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-in-text-item.fi-size-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-in-text-item.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-in-text-item.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-in-text-item.fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.fi-in-text-item.fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.fi-in-text-item.fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.fi-in-text-item.fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.fi-in-text-item.fi-font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fi-in-text-item.fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.fi-in-text-item.fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.fi-in-text-item.fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.fi-in-text-item.fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.fi-in-text-item.fi-font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.fi-in-text-item.fi-font-serif{font-family:var(--serif-font-family),ui-serif,Georgia,Cambria,"Times New Roman",Times,serif}.fi-in-text-item.fi-font-mono{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.fi-in-text-item.fi-color{color:var(--text)}.fi-in-text-item.fi-color:where(.dark,.dark *){color:var(--dark-text)}li.fi-in-text-item.fi-color::marker{color:var(--gray-950)}li.fi-in-text-item.fi-color:where(.dark,.dark *)::marker{color:var(--color-white)}.fi-in-text-item.fi-color-gray{color:var(--gray-500)}.fi-in-text-item.fi-color-gray:where(.dark,.dark *){color:var(--gray-400)}li.fi-in-text-item.fi-color-gray::marker{color:var(--gray-950)}.fi-in-text-item>.fi-icon,.fi-in-text-item>span:not(.fi-badge)>.fi-icon{color:var(--gray-400);flex-shrink:0;display:inline-block}:is(.fi-in-text-item>.fi-icon,.fi-in-text-item>span:not(.fi-badge)>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}:is(.fi-in-text-item>.fi-icon,.fi-in-text-item>span:not(.fi-badge)>.fi-icon).fi-color{color:var(--color-500)}.fi-no-database{display:flex}.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-heading{display:inline-block;position:relative}.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-heading .fi-badge{inset-inline-start:100%;top:calc(var(--spacing)*-1);width:max-content;margin-inline-start:calc(var(--spacing)*1);position:absolute}.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-header .fi-ac{margin-top:calc(var(--spacing)*2)}.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content{margin-inline:calc(var(--spacing)*-6);margin-top:calc(var(--spacing)*-6);row-gap:calc(var(--spacing)*0)}:where(.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content>: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)));border-color:var(--gray-200)}:where(.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-no-database .fi-modal-window-ctn>.fi-modal-window .fi-modal-content:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-no-database .fi-modal-window-ctn>.fi-modal-window:not(.fi-modal-window-has-footer) .fi-modal-content{margin-bottom:calc(var(--spacing)*-6)}.fi-no-database .fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-footer .fi-modal-content{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200)}.fi-no-database .fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-footer .fi-modal-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-no-database .fi-modal-window-ctn>.fi-modal-window.fi-modal-window-has-footer .fi-modal-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-no-database .fi-no-notification-unread-ctn{position:relative}.fi-no-database .fi-no-notification-unread-ctn:before{content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);height:100%;width:calc(var(--spacing)*.5);content:var(--tw-content);background-color:var(--primary-600);position:absolute;inset-inline-start:calc(var(--spacing)*0)}.fi-no-database .fi-no-notification-unread-ctn:where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--primary-500)}.fi-no-notification{pointer-events:auto;visibility:hidden;gap:calc(var(--spacing)*3);width:100%;padding:calc(var(--spacing)*4);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;flex-shrink:0;transition-duration:.3s;display:flex;overflow:hidden}.fi-no-notification .fi-no-notification-icon{color:var(--gray-400)}.fi-no-notification .fi-no-notification-icon.fi-color{color:var(--color-400)}.fi-no-notification .fi-no-notification-main{margin-top:calc(var(--spacing)*.5);gap:calc(var(--spacing)*3);flex:1;display:grid}.fi-no-notification .fi-no-notification-text{gap:calc(var(--spacing)*1);display:grid}.fi-no-notification .fi-no-notification-title{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-no-notification .fi-no-notification-title:where(.dark,.dark *){color:var(--color-white)}.fi-no-notification .fi-no-notification-date{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-no-notification .fi-no-notification-date:where(.dark,.dark *){color:var(--gray-400)}.fi-no-notification .fi-no-notification-body{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));text-wrap:pretty;overflow-wrap:break-word;color:var(--gray-500);overflow:hidden}.fi-no-notification .fi-no-notification-body:where(.dark,.dark *){color:var(--gray-400)}.fi-no-notification .fi-no-notification-body>p:not(:first-of-type){margin-top:calc(var(--spacing)*1)}.fi-no-notification:not(.fi-inline){max-width:var(--container-sm);gap:calc(var(--spacing)*3);border-radius:var(--radius-xl);background-color:var(--color-white);padding:calc(var(--spacing)*4);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);display:flex}.fi-no-notification:not(.fi-inline):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-no-notification:not(.fi-inline):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-no-notification:not(.fi-inline).fi-color{--tw-ring-color:var(--color-600)}@supports (color:color-mix(in lab, red, red)){.fi-no-notification:not(.fi-inline).fi-color{--tw-ring-color:color-mix(in oklab,var(--color-600)20%,transparent)}}.fi-no-notification:not(.fi-inline).fi-color:where(.dark,.dark *){--tw-ring-color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-no-notification:not(.fi-inline).fi-color:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-400)30%,transparent)}}.fi-no-notification:not(.fi-inline).fi-transition-leave-end{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.fi-no-notification.fi-color{background-color:#fff}@supports (color:color-mix(in lab, red, red)){.fi-no-notification.fi-color{background-color:color-mix(in oklab,white 90%,var(--color-400))}}.fi-no-notification.fi-color:where(.dark,.dark *){background-color:var(--gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-no-notification.fi-color:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-900)90%,var(--color-400))}}.fi-no-notification.fi-color .fi-no-notification-body{color:var(--gray-700)}@supports (color:color-mix(in lab, red, red)){.fi-no-notification.fi-color .fi-no-notification-body{color:color-mix(in oklab,var(--gray-700)75%,transparent)}}.fi-no-notification.fi-color .fi-no-notification-body:where(.dark,.dark *){color:var(--gray-300)}@supports (color:color-mix(in lab, red, red)){.fi-no-notification.fi-color .fi-no-notification-body:where(.dark,.dark *){color:color-mix(in oklab,var(--gray-300)75%,transparent)}}.fi-no-notification.fi-transition-enter-start,.fi-no-notification.fi-transition-leave-end{opacity:0}:is(.fi-no.fi-align-start,.fi-no.fi-align-left) .fi-no-notification.fi-transition-enter-start{--tw-translate-x:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.fi-no.fi-align-end,.fi-no.fi-align-right) .fi-no-notification.fi-transition-enter-start{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-no.fi-align-center.fi-vertical-align-start .fi-no-notification.fi-transition-enter-start{--tw-translate-y:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-no.fi-align-center.fi-vertical-align-end .fi-no-notification.fi-transition-enter-start{--tw-translate-y:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-no{pointer-events:none;inset:calc(var(--spacing)*4);z-index:50;gap:calc(var(--spacing)*3);margin-inline:auto;display:flex;position:fixed}.fi-no.fi-align-start,.fi-no.fi-align-left{align-items:flex-start}.fi-no.fi-align-center{align-items:center}.fi-no.fi-align-end,.fi-no.fi-align-right{align-items:flex-end}.fi-no.fi-vertical-align-start{flex-direction:column-reverse;justify-content:flex-end}.fi-no.fi-vertical-align-center{flex-direction:column;justify-content:center}.fi-no.fi-vertical-align-end{flex-direction:column;justify-content:flex-end}.fi-sc-actions{gap:calc(var(--spacing)*2);flex-direction:column;height:100%;display:flex}.fi-sc-actions .fi-sc-actions-label-ctn{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-sc-actions .fi-sc-actions-label-ctn .fi-sc-actions-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-sc-actions .fi-sc-actions-label-ctn .fi-sc-actions-label:where(.dark,.dark *){color:var(--color-white)}.fi-sc-actions.fi-sticky .fi-ac{bottom:calc(var(--spacing)*0);margin-inline:calc(var(--spacing)*-4);width:100%;transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);background-color:var(--color-white);padding:calc(var(--spacing)*4);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:fixed}@media (min-width:48rem){.fi-sc-actions.fi-sticky .fi-ac{bottom:calc(var(--spacing)*4);border-radius:var(--radius-xl)}}.fi-sc-actions.fi-sticky .fi-ac:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sc-actions.fi-sticky .fi-ac:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sc-actions.fi-vertical-align-start{justify-content:flex-start}.fi-sc-actions.fi-vertical-align-center{justify-content:center}.fi-sc-actions.fi-vertical-align-end{justify-content:flex-end}.fi-sc-flex{gap:calc(var(--spacing)*6);display:flex}.fi-sc-flex.fi-align-start,.fi-sc-flex.fi-align-left{justify-content:flex-start}.fi-sc-flex.fi-align-center{justify-content:center}.fi-sc-flex.fi-align-end,.fi-sc-flex.fi-align-right{justify-content:flex-end}.fi-sc-flex.fi-align-between,.fi-sc-flex.fi-align-justify{justify-content:space-between}.fi-sc-flex.fi-dense{gap:calc(var(--spacing)*3)}.fi-sc-flex>.fi-hidden{display:none}.fi-sc-flex>.fi-growable{flex:1;width:100%}.fi-sc-flex.fi-from-default{align-items:flex-start}.fi-sc-flex.fi-from-default.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-default.fi-vertical-align-end{align-items:flex-end}.fi-sc-flex.fi-from-sm{flex-direction:column}@media (min-width:40rem){.fi-sc-flex.fi-from-sm{flex-direction:row;align-items:flex-start}.fi-sc-flex.fi-from-sm.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-sm.fi-vertical-align-end{align-items:flex-end}}.fi-sc-flex.fi-from-md{flex-direction:column}@media (min-width:48rem){.fi-sc-flex.fi-from-md{flex-direction:row;align-items:flex-start}.fi-sc-flex.fi-from-md.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-md.fi-vertical-align-end{align-items:flex-end}}.fi-sc-flex.fi-from-lg{flex-direction:column}@media (min-width:64rem){.fi-sc-flex.fi-from-lg{flex-direction:row;align-items:flex-start}.fi-sc-flex.fi-from-lg.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-lg.fi-vertical-align-end{align-items:flex-end}}.fi-sc-flex.fi-from-xl{flex-direction:column}@media (min-width:80rem){.fi-sc-flex.fi-from-xl{flex-direction:row;align-items:flex-start}.fi-sc-flex.fi-from-xl.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-xl.fi-vertical-align-end{align-items:flex-end}}.fi-sc-flex.fi-from-2xl{flex-direction:column}@media (min-width:96rem){.fi-sc-flex.fi-from-2xl{flex-direction:row;align-items:flex-start}.fi-sc-flex.fi-from-2xl.fi-vertical-align-center{align-items:center}.fi-sc-flex.fi-from-2xl.fi-vertical-align-end{align-items:flex-end}}.fi-sc-form{gap:calc(var(--spacing)*6);flex-direction:column;display:flex}.fi-sc-form.fi-dense{gap:calc(var(--spacing)*3)}.fi-sc-fused-group>.fi-sc{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)10%,transparent)}.fi-sc-fused-group>.fi-sc:focus-within{--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);--tw-ring-color:var(--primary-600)}.fi-sc-fused-group>.fi-sc:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-sc-fused-group>.fi-sc:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-sc-fused-group>.fi-sc:where(.dark,.dark *):focus-within{--tw-ring-color:var(--primary-500)}:where(.fi-sc-fused-group .fi-sc>: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)));border-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){:where(.fi-sc-fused-group .fi-sc>:not(:last-child)){border-color:color-mix(in oklab,var(--gray-950)10%,transparent)}}.fi-sc-fused-group .fi-sc{border-radius:var(--radius-lg)}:where(.fi-sc-fused-group .fi-sc:where(.dark,.dark *)>:not(:last-child)){border-color:#fff3}@supports (color:color-mix(in lab, red, red)){:where(.fi-sc-fused-group .fi-sc:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-sc-fused-group .fi-sc .fi-sc-component,.fi-sc-fused-group .fi-sc .fi-sc-component .fi-fo-field,.fi-sc-fused-group .fi-sc .fi-sc-component .fi-input{min-height:100%}.fi-sc-fused-group .fi-sc .fi-sc-component .fi-sc-actions{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2)}.fi-sc-fused-group .fi-sc>:first-child .fi-input-wrp{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc>:last-child .fi-input-wrp{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}:where(.fi-sc-fused-group .fi-sc.fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}@media (min-width:40rem){:where(.fi-sc-fused-group .fi-sc.sm\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.sm\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.sm\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:48rem){:where(.fi-sc-fused-group .fi-sc.md\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.md\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.md\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:64rem){:where(.fi-sc-fused-group .fi-sc.lg\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.lg\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.lg\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:80rem){:where(.fi-sc-fused-group .fi-sc.xl\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.xl\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.xl\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:96rem){:where(.fi-sc-fused-group .fi-sc.\32 xl\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\32 xl\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\32 xl\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@supports (container-type:inline-size){@container (min-width:16rem){:where(.fi-sc-fused-group .fi-sc.\@3xs\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@3xs\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@3xs\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:18rem){:where(.fi-sc-fused-group .fi-sc.\@2xs\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@2xs\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@2xs\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:20rem){:where(.fi-sc-fused-group .fi-sc.\@xs\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@xs\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@xs\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:24rem){:where(.fi-sc-fused-group .fi-sc.\@sm\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@sm\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@sm\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:28rem){:where(.fi-sc-fused-group .fi-sc.\@md\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@md\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@md\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:32rem){:where(.fi-sc-fused-group .fi-sc.\@lg\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@lg\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@lg\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:36rem){:where(.fi-sc-fused-group .fi-sc.\@xl\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@xl\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@xl\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:42rem){:where(.fi-sc-fused-group .fi-sc.\@2xl\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@2xl\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@2xl\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:48rem){:where(.fi-sc-fused-group .fi-sc.\@3xl\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@3xl\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@3xl\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:56rem){:where(.fi-sc-fused-group .fi-sc.\@4xl\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@4xl\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@4xl\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:64rem){:where(.fi-sc-fused-group .fi-sc.\@5xl\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@5xl\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@5xl\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:72rem){:where(.fi-sc-fused-group .fi-sc.\@6xl\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@6xl\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@6xl\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@container (min-width:80rem){:where(.fi-sc-fused-group .fi-sc.\@7xl\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\@7xl\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\@7xl\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}}@supports not (container-type:inline-size){@media (min-width:40rem){:where(.fi-sc-fused-group .fi-sc.\!\@sm\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\!\@sm\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\!\@sm\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:48rem){:where(.fi-sc-fused-group .fi-sc.\!\@md\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\!\@md\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\!\@md\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:64rem){:where(.fi-sc-fused-group .fi-sc.\!\@lg\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\!\@lg\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\!\@lg\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:80rem){:where(.fi-sc-fused-group .fi-sc.\!\@xl\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\!\@xl\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\!\@xl\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}@media (min-width:96rem){:where(.fi-sc-fused-group .fi-sc.\!\@2xl\:fi-grid-cols>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)));--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.fi-sc-fused-group .fi-sc.\!\@2xl\:fi-grid-cols>:first-child .fi-input-wrp{border-start-end-radius:0;border-end-start-radius:var(--radius-lg)}.fi-sc-fused-group .fi-sc.\!\@2xl\:fi-grid-cols>:last-child .fi-input-wrp{border-start-end-radius:var(--radius-lg);border-end-start-radius:0}}}.fi-sc-fused-group .fi-input-wrp{--tw-shadow:0 0 #0000;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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);border-radius:0}.fi-sc-fused-group .fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)):focus-within,.fi-sc-fused-group .fi-input-wrp:not(.fi-disabled):not(:has(.fi-ac-action:focus)).fi-invalid:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}.fi-sc-icon{color:var(--gray-400)}.fi-sc-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-sc-icon.fi-color{color:var(--color-500)}.fi-sc-icon.fi-color:where(.dark,.dark *){color:var(--color-400)}.fi-sc-image{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--gray-300)}.fi-sc-image:where(.dark,.dark *){border-color:#0000}.fi-sc-image.fi-align-center{margin-inline:auto}.fi-sc-image.fi-align-end,.fi-sc-image.fi-align-right{margin-inline-start:auto}.fi-sc-section{gap:calc(var(--spacing)*2);flex-direction:column;display:flex}.fi-sc-section .fi-sc-section-label-ctn{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-sc-section .fi-sc-section-label-ctn .fi-sc-section-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-sc-section .fi-sc-section-label-ctn .fi-sc-section-label:where(.dark,.dark *){color:var(--color-white)}.fi-sc-tabs{flex-direction:column;display:flex}.fi-sc-tabs .fi-tabs.fi-invisible{visibility:hidden}.fi-sc-tabs .fi-sc-tabs-tab{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.fi-sc-tabs .fi-sc-tabs-tab{outline-offset:2px;outline:2px solid #0000}}.fi-sc-tabs .fi-sc-tabs-tab.fi-active{margin-top:calc(var(--spacing)*6)}.fi-sc-tabs .fi-sc-tabs-tab:not(.fi-active){visibility:hidden;height:calc(var(--spacing)*0);padding:calc(var(--spacing)*0);position:absolute;overflow:hidden}.fi-sc-tabs.fi-contained{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-sc-tabs.fi-contained:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sc-tabs.fi-contained:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sc-tabs.fi-contained .fi-sc-tabs-tab.fi-active{margin-top:calc(var(--spacing)*0);padding:calc(var(--spacing)*6)}.fi-sc-tabs.fi-vertical{flex-direction:row}.fi-sc-tabs.fi-vertical .fi-sc-tabs-tab.fi-active{margin-inline-start:calc(var(--spacing)*6);margin-top:calc(var(--spacing)*0);flex:1}.fi-sc-text.fi-copyable{cursor:pointer}.fi-sc-text.fi-font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.fi-sc-text.fi-font-serif{font-family:var(--serif-font-family),ui-serif,Georgia,Cambria,"Times New Roman",Times,serif}.fi-sc-text.fi-font-mono{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.fi-sc-text:not(.fi-badge){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-wrap:break-word;color:var(--gray-600);display:inline-block}.fi-sc-text:not(.fi-badge):where(.dark,.dark *){color:var(--gray-400)}.fi-sc-text:not(.fi-badge).fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.fi-sc-text:not(.fi-badge).fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.fi-sc-text:not(.fi-badge).fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.fi-sc-text:not(.fi-badge).fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.fi-sc-text:not(.fi-badge).fi-font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fi-sc-text:not(.fi-badge).fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.fi-sc-text:not(.fi-badge).fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.fi-sc-text:not(.fi-badge).fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.fi-sc-text:not(.fi-badge).fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.fi-sc-text:not(.fi-badge).fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-sc-text:not(.fi-badge).fi-color-neutral{color:var(--gray-950)}.fi-sc-text:not(.fi-badge).fi-color-neutral:where(.dark,.dark *){color:var(--color-white)}.fi-sc-text:not(.fi-badge).fi-color:not(.fi-color-neutral){color:var(--text)}.fi-sc-text:not(.fi-badge).fi-color:not(.fi-color-neutral):where(.dark,.dark *){color:var(--dark-text)}.fi-sc-text:not(.fi-badge).fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-sc-text:not(.fi-badge).fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-sc-unordered-list{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));margin-inline-start:calc(var(--spacing)*3);list-style-type:disc}.fi-sc-unordered-list.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-sc-unordered-list.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-sc-unordered-list.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-sc-wizard{flex-direction:column;display:flex}.fi-sc-wizard .fi-sc-wizard-header{display:grid}@media (min-width:48rem){.fi-sc-wizard .fi-sc-wizard-header{grid-auto-flow:column;overflow-x:auto}}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step{display:flex;position:relative}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active){display:none}@media (min-width:48rem){.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active){display:flex}}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn{align-items:center;column-gap:calc(var(--spacing)*4);height:100%;padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*4);text-align:start;display:flex}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10);border-radius:3.40282e38px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text{justify-items:start;display:grid}@media (min-width:48rem){.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text{width:max-content;max-width:calc(var(--spacing)*60)}}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-description{text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-description:where(.dark,.dark *){color:var(--gray-400)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator{height:100%;width:calc(var(--spacing)*5);color:var(--gray-200);display:none;position:absolute;inset-inline-end:calc(var(--spacing)*0)}@media (min-width:48rem){.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator{display:block}}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator:where(.dark,.dark *){color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step .fi-sc-wizard-header-step-separator:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{background-color:var(--primary-600)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn:where(.dark,.dark *){background-color:var(--primary-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon{color:var(--color-white)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{color:var(--gray-950)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-completed .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label:where(.dark,.dark *){color:var(--color-white)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{border-style:var(--tw-border-style);border-width:2px}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed).fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon{color:var(--primary-600)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed).fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon:where(.dark,.dark *){color:var(--primary-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed):not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon{color:var(--gray-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-completed):not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{border-color:var(--primary-600)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn:where(.dark,.dark *){border-color:var(--primary-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number{color:var(--primary-600)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number:where(.dark,.dark *){color:var(--primary-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{color:var(--primary-700)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step.fi-active .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label:where(.dark,.dark *){color:var(--primary-400)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn{border-color:var(--gray-300)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn:where(.dark,.dark *){border-color:var(--gray-600)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number{color:var(--gray-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-number:where(.dark,.dark *){color:var(--gray-400)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label{color:var(--gray-500)}.fi-sc-wizard .fi-sc-wizard-header .fi-sc-wizard-header-step:not(.fi-active) .fi-sc-wizard-header-step-btn .fi-sc-wizard-header-step-icon-ctn .fi-sc-wizard-header-step-text .fi-sc-wizard-header-step-label:where(.dark,.dark *){color:var(--gray-400)}.fi-sc-wizard .fi-sc-wizard-step{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.fi-sc-wizard .fi-sc-wizard-step{outline-offset:2px;outline:2px solid #0000}}.fi-sc-wizard .fi-sc-wizard-step:not(.fi-active){visibility:hidden;height:calc(var(--spacing)*0);padding:calc(var(--spacing)*0);position:absolute;overflow:hidden}.fi-sc-wizard:not(.fi-sc-wizard-header-hidden) .fi-sc-wizard-step.fi-active{margin-top:calc(var(--spacing)*6)}.fi-sc-wizard .fi-sc-wizard-footer{justify-content:space-between;align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-sc-wizard .fi-sc-wizard-footer>.fi-hidden{display:none}.fi-sc-wizard .fi-sc-wizard-footer>.fi-disabled{pointer-events:none;opacity:.7}.fi-sc-wizard.fi-contained{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-sc-wizard.fi-contained:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sc-wizard.fi-contained:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sc-wizard.fi-contained .fi-sc-wizard-header{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200)}.fi-sc-wizard.fi-contained .fi-sc-wizard-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sc-wizard.fi-contained .fi-sc-wizard-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sc-wizard.fi-contained .fi-sc-wizard-step.fi-active{margin-top:calc(var(--spacing)*0);padding:calc(var(--spacing)*6)}.fi-sc-wizard.fi-contained .fi-sc-wizard-footer{padding-inline:calc(var(--spacing)*6);padding-bottom:calc(var(--spacing)*6)}.fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-header{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-header:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-header:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sc-wizard:not(.fi-contained) .fi-sc-wizard-footer{margin-top:calc(var(--spacing)*6)}.fi-sc{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.fi-sc.fi-inline{flex-wrap:wrap;flex-grow:1;align-items:center;display:flex}.fi-sc.fi-inline>.fi-sc-action:not(.fi-hidden){display:contents}.fi-sc.fi-sc-has-gap{gap:calc(var(--spacing)*6)}.fi-sc.fi-sc-has-gap.fi-sc-dense{gap:calc(var(--spacing)*3)}.fi-sc.fi-align-start,.fi-sc.fi-align-left{justify-content:flex-start}.fi-sc.fi-align-center{justify-content:center}.fi-sc.fi-align-end,.fi-sc.fi-align-right{justify-content:flex-end}.fi-sc.fi-align-between,.fi-sc.fi-align-justify{justify-content:space-between}.fi-sc>.fi-hidden{display:none}.fi-sc>.fi-grid-col.fi-width-xs{max-width:var(--container-xs)}.fi-sc>.fi-grid-col.fi-width-sm{max-width:var(--container-sm)}.fi-sc>.fi-grid-col.fi-width-md{max-width:var(--container-md)}.fi-sc>.fi-grid-col.fi-width-lg{max-width:var(--container-lg)}.fi-sc>.fi-grid-col.fi-width-xl{max-width:var(--container-xl)}.fi-sc>.fi-grid-col.fi-width-2xl{max-width:var(--container-2xl)}.fi-sc>.fi-grid-col.fi-width-3xl{max-width:var(--container-3xl)}.fi-sc>.fi-grid-col.fi-width-4xl{max-width:var(--container-4xl)}.fi-sc>.fi-grid-col.fi-width-5xl{max-width:var(--container-5xl)}.fi-sc>.fi-grid-col.fi-width-6xl{max-width:var(--container-6xl)}.fi-sc>.fi-grid-col.fi-width-7xl{max-width:var(--container-7xl)}.fi-sc>.fi-grid-col>.fi-sc-component{height:100%}.fi-ta-actions{justify-content:flex-end;align-items:center;gap:calc(var(--spacing)*3);flex-shrink:0;max-width:100%;display:flex}.fi-ta-actions>*{flex-shrink:0}.fi-ta-actions.fi-wrapped{flex-wrap:wrap}@media (min-width:40rem){.fi-ta-actions.sm\:fi-not-wrapped{flex-wrap:nowrap}}.fi-ta-actions.fi-align-center{justify-content:center}.fi-ta-actions.fi-align-start{justify-content:flex-start}.fi-ta-actions.fi-align-between{justify-content:space-between}@media (min-width:48rem){.fi-ta-actions.md\:fi-align-end{justify-content:flex-end}}.fi-ta-cell{padding:calc(var(--spacing)*0)}.fi-ta-cell:first-of-type{padding-inline-start:calc(var(--spacing)*1)}.fi-ta-cell:last-of-type{padding-inline-end:calc(var(--spacing)*1)}@media (min-width:40rem){.fi-ta-cell:first-of-type{padding-inline-start:calc(var(--spacing)*3)}.fi-ta-cell:last-of-type{padding-inline-end:calc(var(--spacing)*3)}}.fi-ta-cell.fi-vertical-align-start{vertical-align:top}.fi-ta-cell.fi-vertical-align-end{vertical-align:bottom}@media (min-width:40rem){.fi-ta-cell.sm\:fi-hidden{display:none}}@media (min-width:48rem){.fi-ta-cell.md\:fi-hidden{display:none}}@media (min-width:64rem){.fi-ta-cell.lg\:fi-hidden{display:none}}@media (min-width:80rem){.fi-ta-cell.xl\:fi-hidden{display:none}}@media (min-width:96rem){.fi-ta-cell.\32 xl\:fi-hidden{display:none}}.fi-ta-cell.sm\:fi-visible{display:none}@media (min-width:40rem){.fi-ta-cell.sm\:fi-visible{display:table-cell}}.fi-ta-cell.md\:fi-visible{display:none}@media (min-width:48rem){.fi-ta-cell.md\:fi-visible{display:table-cell}}.fi-ta-cell.lg\:fi-visible{display:none}@media (min-width:64rem){.fi-ta-cell.lg\:fi-visible{display:table-cell}}.fi-ta-cell.xl\:fi-visible{display:none}@media (min-width:80rem){.fi-ta-cell.xl\:fi-visible{display:table-cell}}.fi-ta-cell.\32 xl\:fi-visible{display:none}@media (min-width:96rem){.fi-ta-cell.\32 xl\:fi-visible{display:table-cell}}.fi-ta-cell .fi-ta-col{text-align:start;justify-content:flex-start;width:100%;display:flex}.fi-ta-cell .fi-ta-col:disabled{pointer-events:none}.fi-ta-cell:has(.fi-ta-reorder-handle){width:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3)}.fi-ta-cell:has(.fi-ta-reorder-handle):first-of-type{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-cell:has(.fi-ta-reorder-handle):last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-cell:has(.fi-ta-reorder-handle):first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell:has(.fi-ta-reorder-handle):last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-cell:has(.fi-ta-actions){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);white-space:nowrap}.fi-ta-cell:has(.fi-ta-actions):first-of-type{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-cell:has(.fi-ta-actions):last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-cell:has(.fi-ta-actions):first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell:has(.fi-ta-actions):last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-cell:has(.fi-ta-record-checkbox){width:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-cell:has(.fi-ta-record-checkbox):first-of-type{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-cell:has(.fi-ta-record-checkbox):last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-cell:has(.fi-ta-record-checkbox):first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell:has(.fi-ta-record-checkbox):last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-cell .fi-ta-placeholder{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);color:var(--gray-400)}.fi-ta-cell .fi-ta-placeholder:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-cell.fi-ta-summary-row-heading-cell{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}@media (min-width:40rem){.fi-ta-cell.fi-ta-summary-row-heading-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell.fi-ta-summary-row-heading-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-cell.fi-ta-summary-row-heading-cell:where(.dark,.dark *){color:var(--color-white)}.fi-ta-cell.fi-align-start{text-align:start}.fi-ta-cell.fi-align-center{text-align:center}.fi-ta-cell.fi-align-end{text-align:end}.fi-ta-cell.fi-align-left{text-align:left}.fi-ta-cell.fi-align-right{text-align:right}.fi-ta-cell.fi-align-justify,.fi-ta-cell.fi-align-between{text-align:justify}.fi-ta-cell.fi-ta-summary-header-cell{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}@media (min-width:40rem){.fi-ta-cell.fi-ta-summary-header-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}}.fi-ta-cell.fi-ta-summary-header-cell:where(.dark,.dark *){color:var(--color-white)}.fi-ta-cell.fi-ta-summary-header-cell.fi-wrapped,.fi-ta-cell.fi-ta-summary-header-cell:not(.fi-wrapped){white-space:nowrap}.fi-ta-cell.fi-ta-individual-search-cell{min-width:calc(var(--spacing)*48);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2)}.fi-ta-cell .fi-ta-reorder-handle{cursor:move}.fi-ta-cell.fi-ta-selection-cell{width:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-cell.fi-ta-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-cell.fi-ta-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-cell.fi-ta-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell.fi-ta-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-cell.fi-ta-group-selection-cell{width:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3)}.fi-ta-cell.fi-ta-group-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-cell.fi-ta-group-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-cell.fi-ta-group-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-cell.fi-ta-group-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-checkbox{width:100%}.fi-ta-checkbox:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-checkbox{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-checkbox{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-checkbox.fi-align-center{text-align:center}.fi-ta-checkbox.fi-align-end,.fi-ta-checkbox.fi-align-right{text-align:end}.fi-ta-color{gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-ta-color.fi-wrapped{flex-wrap:wrap}.fi-ta-color:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-color{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-color{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-color.fi-align-start,.fi-ta-color.fi-align-left{justify-content:flex-start}.fi-ta-color.fi-align-center{justify-content:center}.fi-ta-color.fi-align-end,.fi-ta-color.fi-align-right{justify-content:flex-end}.fi-ta-color.fi-align-justify,.fi-ta-color.fi-align-between{justify-content:space-between}.fi-ta-color>.fi-ta-color-item{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6);border-radius:var(--radius-md)}.fi-ta-color>.fi-ta-color-item.fi-copyable{cursor:pointer}.fi-ta-icon{gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-ta-icon.fi-wrapped{flex-wrap:wrap}.fi-ta-icon.fi-ta-icon-has-line-breaks{flex-direction:column}.fi-ta-icon:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-icon{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-icon{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-icon.fi-align-start,.fi-ta-icon.fi-align-left{justify-content:flex-start}.fi-ta-icon.fi-align-center{justify-content:center}.fi-ta-icon.fi-align-end,.fi-ta-icon.fi-align-right{justify-content:flex-end}.fi-ta-icon.fi-align-justify,.fi-ta-icon.fi-align-between{justify-content:space-between}.fi-ta-icon>.fi-icon,.fi-ta-icon>a>.fi-icon{color:var(--gray-400)}:is(.fi-ta-icon>.fi-icon,.fi-ta-icon>a>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}:is(.fi-ta-icon>.fi-icon,.fi-ta-icon>a>.fi-icon).fi-color{color:var(--text)}:is(.fi-ta-icon>.fi-icon,.fi-ta-icon>a>.fi-icon).fi-color:where(.dark,.dark *){color:var(--dark-text)}.fi-ta-image{align-items:center;gap:calc(var(--spacing)*1.5);width:100%;display:flex}.fi-ta-image img{object-fit:cover;object-position:center;max-width:none}.fi-ta-image.fi-circular img{border-radius:3.40282e38px}.fi-ta-image.fi-ta-image-ring img,.fi-ta-image.fi-ta-image-ring .fi-ta-image-limited-remaining-text{--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);--tw-ring-color:var(--color-white)}:is(.fi-ta-image.fi-ta-image-ring img,.fi-ta-image.fi-ta-image-ring .fi-ta-image-limited-remaining-text):where(.dark,.dark *){--tw-ring-color:var(--gray-900)}.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-1 img,.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-1 .fi-ta-image-limited-remaining-text{--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)}.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-2 img,.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-2 .fi-ta-image-limited-remaining-text{--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)}.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-4 img,.fi-ta-image.fi-ta-image-ring.fi-ta-image-ring-4 .fi-ta-image-limited-remaining-text{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.fi-ta-image.fi-ta-image-overlap-1{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-2{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-3{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-3)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-4{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-4)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-5{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-5)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-6{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-6)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-7{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-7>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-7)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-7)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-ta-image-overlap-8{column-gap:calc(var(--spacing)*0)}:where(.fi-ta-image.fi-ta-image-overlap-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-8)*calc(1 - var(--tw-space-x-reverse)))}.fi-ta-image.fi-wrapped{flex-wrap:wrap}.fi-ta-image:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-image{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-image{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-image.fi-align-start,.fi-ta-image.fi-align-left{justify-content:flex-start}.fi-ta-image.fi-align-center{justify-content:center}.fi-ta-image.fi-align-end,.fi-ta-image.fi-align-right{justify-content:flex-end}.fi-ta-image.fi-align-justify,.fi-ta-image.fi-align-between{justify-content:space-between}.fi-ta-image.fi-stacked .fi-ta-image-limited-remaining-text{background-color:var(--gray-100);border-radius:3.40282e38px}.fi-ta-image.fi-stacked .fi-ta-image-limited-remaining-text:where(.dark,.dark *){background-color:var(--gray-800)}.fi-ta-image .fi-ta-image-limited-remaining-text{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);justify-content:center;align-items:center;display:flex}.fi-ta-image .fi-ta-image-limited-remaining-text:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-base,.fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-ta-image .fi-ta-image-limited-remaining-text.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-ta-select{width:100%;min-width:calc(var(--spacing)*48)}.fi-ta-select:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-select{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-select{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-text{width:100%}.fi-ta-text.fi-ta-text-has-descriptions,.fi-ta-text.fi-ta-text-list-limited{flex-direction:column;display:flex}:is(.fi-ta-text.fi-ta-text-has-descriptions,.fi-ta-text.fi-ta-text-list-limited).fi-ta-text-has-badges{row-gap:calc(var(--spacing)*2)}:is(.fi-ta-text.fi-ta-text-has-descriptions,.fi-ta-text.fi-ta-text-list-limited):not(.fi-ta-text-has-badges){row-gap:calc(var(--spacing)*1)}.fi-ta-text:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-text{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-text{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}ul.fi-ta-text.fi-bulleted,.fi-ta-text.fi-bulleted ul{list-style-type:disc;list-style-position:inside}ul.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges,.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges ul{column-gap:calc(var(--spacing)*1.5);display:flex}:is(ul.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges,.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges ul).fi-wrapped,:is(ul.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges,.fi-ta-text:not(.fi-ta-text-has-line-breaks).fi-ta-text-has-badges ul):is(.fi-wrapped ul){row-gap:calc(var(--spacing)*1);flex-wrap:wrap}:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul).fi-ta-text-has-line-breaks,:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):is(.fi-ta-text-has-line-breaks ul){row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(ul.fi-ta-text-has-line-breaks),:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(.fi-ta-text-has-line-breaks ul){column-gap:calc(var(--spacing)*1.5);display:flex}:is(:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(ul.fi-ta-text-has-line-breaks),:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(.fi-ta-text-has-line-breaks ul)).fi-wrapped,:is(:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(ul.fi-ta-text-has-line-breaks),:is(ul.fi-ta-text.fi-ta-text-has-badges,.fi-ta-text.fi-ta-text-has-badges ul):not(.fi-ta-text-has-line-breaks ul)):is(.fi-wrapped ul){row-gap:calc(var(--spacing)*1);flex-wrap:wrap}.fi-ta-text.fi-wrapped:not(.fi-ta-text-has-badges.fi-ta-text-has-line-breaks){white-space:normal}.fi-ta-text.fi-wrapped:not(.fi-ta-text-has-badges.fi-ta-text-has-line-breaks) .fi-badge,.fi-ta-text.fi-wrapped:not(.fi-ta-text-has-badges.fi-ta-text-has-line-breaks) .fi-ta-text-list-limited-message{white-space:nowrap}.fi-ta-text>.fi-ta-text-description,.fi-ta-text>.fi-ta-text-list-limited-message{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}:is(.fi-ta-text>.fi-ta-text-description,.fi-ta-text>.fi-ta-text-list-limited-message):where(.dark,.dark *){color:var(--gray-400)}.fi-ta-text.fi-align-center{text-align:center}ul.fi-ta-text.fi-align-center,.fi-ta-text.fi-align-center ul{justify-content:center}.fi-ta-text.fi-align-end,.fi-ta-text.fi-align-right{text-align:end}ul:is(.fi-ta-text.fi-align-end,.fi-ta-text.fi-align-right),:is(.fi-ta-text.fi-align-end,.fi-ta-text.fi-align-right) ul{justify-content:flex-end}.fi-ta-text.fi-align-justify,.fi-ta-text.fi-align-between{text-align:justify}ul:is(.fi-ta-text.fi-align-justify,.fi-ta-text.fi-align-between),:is(.fi-ta-text.fi-align-justify,.fi-ta-text.fi-align-between) ul{justify-content:space-between}.fi-ta-text-item{color:var(--gray-950)}.fi-ta-text-item:where(.dark,.dark *){color:var(--color-white)}@media (hover:hover){.fi-ta-text-item a:hover{text-decoration-line:underline}}.fi-ta-text-item a:focus-visible{text-decoration-line:underline}.fi-ta-text-item:not(.fi-bulleted li.fi-ta-text-item){-webkit-line-clamp:var(--line-clamp,none);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.fi-ta-text-item>.fi-copyable{cursor:pointer}.fi-ta-text-item.fi-size-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.fi-ta-text-item.fi-size-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.fi-ta-text-item.fi-size-md{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.fi-ta-text-item.fi-size-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.fi-ta-text-item.fi-font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.fi-ta-text-item.fi-font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.fi-ta-text-item.fi-font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.fi-ta-text-item.fi-font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.fi-ta-text-item.fi-font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.fi-ta-text-item.fi-font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.fi-ta-text-item.fi-font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.fi-ta-text-item.fi-font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.fi-ta-text-item.fi-font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.fi-ta-text-item.fi-font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.fi-ta-text-item.fi-font-serif{font-family:var(--serif-font-family),ui-serif,Georgia,Cambria,"Times New Roman",Times,serif}.fi-ta-text-item.fi-font-mono{font-family:var(--mono-font-family),ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.fi-ta-text-item.fi-color{color:var(--text)}.fi-ta-text-item.fi-color:where(.dark,.dark *){color:var(--dark-text)}li.fi-ta-text-item.fi-color::marker{color:var(--gray-950)}li.fi-ta-text-item.fi-color:where(.dark,.dark *)::marker{color:var(--color-white)}.fi-ta-text-item.fi-color-gray{color:var(--gray-500)}.fi-ta-text-item.fi-color-gray:where(.dark,.dark *){color:var(--gray-400)}li.fi-ta-text-item.fi-color-gray::marker{color:var(--gray-950)}li.fi-ta-text-item.fi-color-gray:where(.dark,.dark *)::marker{color:var(--color-white)}.fi-ta-text-item>.fi-icon,.fi-ta-text-item>span:not(.fi-badge)>.fi-icon{color:var(--gray-400);flex-shrink:0;display:inline-block}:is(.fi-ta-text-item>.fi-icon,.fi-ta-text-item>span:not(.fi-badge)>.fi-icon):where(.dark,.dark *){color:var(--gray-500)}:is(.fi-ta-text-item>.fi-icon,.fi-ta-text-item>span:not(.fi-badge)>.fi-icon).fi-color{color:var(--color-500)}.fi-ta-text-item.fi-ta-text-has-badges>.fi-badge{vertical-align:middle}@media (hover:hover){.fi-ta-col-has-column-url .fi-ta-text-item:hover{text-decoration-line:underline}}.fi-ta-col-has-column-url .fi-ta-text-item:focus-visible{text-decoration-line:underline}@media (hover:hover){.fi-ta-col-has-column-url .fi-ta-text-item .fi-icon:hover{text-decoration-line:none}}.fi-ta-col-has-column-url .fi-ta-text-item .fi-icon:focus-visible{text-decoration-line:none}@media (hover:hover){.fi-ta-col-has-column-url .fi-ta-text-item>.fi-badge:hover{text-decoration-line:none}}.fi-ta-col-has-column-url .fi-ta-text-item>.fi-badge:focus-visible{text-decoration-line:none}.fi-ta-text-input{width:100%;min-width:calc(var(--spacing)*48)}.fi-ta-text-input:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-text-input{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-text-input{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-toggle{width:100%}.fi-ta-toggle:not(.fi-inline){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table-stacked-on-mobile .fi-ta-toggle{padding:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-toggle{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-toggle.fi-align-center{text-align:center}.fi-ta-toggle.fi-align-end,.fi-ta-toggle.fi-align-right{text-align:end}.fi-ta-grid.fi-gap-sm{gap:calc(var(--spacing)*1)}@media (min-width:40rem){.fi-ta-grid.sm\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:48rem){.fi-ta-grid.md\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:64rem){.fi-ta-grid.lg\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:80rem){.fi-ta-grid.xl\:fi-gap-sm{gap:calc(var(--spacing)*1)}}@media (min-width:96rem){.fi-ta-grid.\32 xl\:fi-gap-sm{gap:calc(var(--spacing)*1)}}.fi-ta-grid.fi-gap-lg{gap:calc(var(--spacing)*3)}@media (min-width:40rem){.fi-ta-grid.sm\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:48rem){.fi-ta-grid.md\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:64rem){.fi-ta-grid.lg\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:80rem){.fi-ta-grid.xl\:fi-gap-lg{gap:calc(var(--spacing)*3)}}@media (min-width:96rem){.fi-ta-grid.\32 xl\:fi-gap-lg{gap:calc(var(--spacing)*3)}}.fi-ta-panel{border-radius:var(--radius-lg);background-color:var(--gray-50);padding:calc(var(--spacing)*4);--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);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-ta-panel{--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}.fi-ta-panel{--tw-ring-inset:inset}.fi-ta-panel:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-panel:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-panel:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-panel:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-split{display:flex}.fi-ta-split.default\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3)}.fi-ta-split.sm\:fi-ta-split,.fi-ta-split.md\:fi-ta-split,.fi-ta-split.lg\:fi-ta-split,.fi-ta-split.xl\:fi-ta-split,.fi-ta-split.\32 xl\:fi-ta-split{gap:calc(var(--spacing)*2);flex-direction:column}@media (min-width:40rem){.fi-ta-split.sm\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3);flex-direction:row}}@media (min-width:48rem){.fi-ta-split.md\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3);flex-direction:row}}@media (min-width:64rem){.fi-ta-split.lg\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3);flex-direction:row}}@media (min-width:80rem){.fi-ta-split.xl\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3);flex-direction:row}}@media (min-width:96rem){.fi-ta-split.\32 xl\:fi-ta-split{align-items:center;gap:calc(var(--spacing)*3);flex-direction:row}}.fi-ta-stack{flex-direction:column;display:flex}.fi-ta-stack.fi-align-start,.fi-ta-stack.fi-align-left{align-items:flex-start}.fi-ta-stack.fi-align-center{align-items:center}.fi-ta-stack.fi-align-end,.fi-ta-stack.fi-align-right{align-items:flex-end}:where(.fi-ta-stack.fi-gap-sm>: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(.fi-ta-stack.fi-gap-md>: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(.fi-ta-stack.fi-gap-lg>: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)))}.fi-ta-icon-count-summary{row-gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);display:grid}.fi-ta-icon-count-summary:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-table-stacked-on-mobile .fi-ta-icon-count-summary{padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*2)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-icon-count-summary{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-icon-count-summary>.fi-ta-icon-count-summary-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-icon-count-summary>.fi-ta-icon-count-summary-label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-icon-count-summary>ul{row-gap:calc(var(--spacing)*1.5);display:grid}.fi-ta-icon-count-summary>ul>li{justify-content:flex-end;align-items:center;column-gap:calc(var(--spacing)*1.5);display:flex}.fi-ta-icon-count-summary>ul>li>.fi-icon{color:var(--gray-400)}.fi-ta-icon-count-summary>ul>li>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-icon-count-summary>ul>li>.fi-icon.fi-color{color:var(--text)}.fi-ta-icon-count-summary>ul>li>.fi-icon.fi-color:where(.dark,.dark *){color:var(--dark-text)}.fi-ta-range-summary{row-gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);display:grid}.fi-ta-range-summary:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-table-stacked-on-mobile .fi-ta-range-summary{padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*2)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-range-summary{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-range-summary>.fi-ta-range-summary-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-range-summary>.fi-ta-range-summary-label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-text-summary{row-gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);display:grid}.fi-ta-text-summary:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-table-stacked-on-mobile .fi-ta-text-summary{padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*2)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-text-summary{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-text-summary>.fi-ta-text-summary-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-text-summary>.fi-ta-text-summary-label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-values-summary{row-gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);display:grid}.fi-ta-values-summary:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-table-stacked-on-mobile .fi-ta-values-summary{padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*2)}@media (min-width:40rem){.fi-ta-table-stacked-on-mobile .fi-ta-values-summary{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}}.fi-ta-values-summary>.fi-ta-values-summary-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-values-summary>.fi-ta-values-summary-label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-values-summary>ul.fi-bulleted{list-style-type:disc;list-style-position:inside}.fi-ta-ctn{border-radius:var(--radius-xl);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);display:flex;position:relative}.fi-ta-ctn:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn:not(.fi-ta-ctn-with-header){overflow:hidden}.fi-ta-ctn.fi-loading{animation:var(--animate-pulse)}.fi-ta-ctn .fi-ta-header-ctn{margin-top:-1px}.fi-ta-ctn .fi-ta-header{gap:calc(var(--spacing)*3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding:calc(var(--spacing)*4);flex-direction:column;display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-header{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}@media (min-width:40rem){.fi-ta-ctn .fi-ta-header.fi-ta-header-adaptive-actions-position{flex-direction:row;align-items:center}.fi-ta-ctn .fi-ta-header.fi-ta-header-adaptive-actions-position .fi-ta-actions{margin-inline-start:auto}}.fi-ta-ctn .fi-ta-header.fi-ta-header-adaptive-actions-position:not(:has(.fi-ta-header-heading)):not(:has(.fi-ta-header-description)) .fi-ta-actions{margin-inline-start:auto}.fi-ta-ctn .fi-ta-header .fi-ta-header-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-ta-ctn .fi-ta-header .fi-ta-header-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-ctn .fi-ta-header .fi-ta-header-description{margin-top:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-600)}.fi-ta-ctn .fi-ta-header .fi-ta-header-description:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-ctn .fi-ta-header-toolbar{justify-content:space-between;align-items:center;gap:calc(var(--spacing)*4);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-header-toolbar{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-header-toolbar:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-header-toolbar:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-header-toolbar>*{align-items:center;column-gap:calc(var(--spacing)*4);display:flex}.fi-ta-ctn .fi-ta-header-toolbar>:first-child{flex-shrink:0}.fi-ta-ctn .fi-ta-header-toolbar>:nth-child(2){margin-inline-start:auto}@media (min-width:40rem){.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown.sm\:fi-hidden{display:none}}.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown .fi-ta-grouping-settings-fields{row-gap:calc(var(--spacing)*6);padding:calc(var(--spacing)*6);display:grid}.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown .fi-ta-grouping-settings-fields label{row-gap:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950);display:grid}.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings .fi-dropdown .fi-ta-grouping-settings-fields label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings>.fi-ta-grouping-settings-fields{align-items:center;column-gap:calc(var(--spacing)*3);display:none}@media (min-width:40rem){.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-grouping-settings>.fi-ta-grouping-settings-fields{display:flex}}.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-filters-dropdown .fi-ta-filters,.fi-ta-ctn .fi-ta-header-toolbar .fi-ta-col-manager-dropdown .fi-ta-col-manager{padding:calc(var(--spacing)*6)}.fi-ta-ctn .fi-ta-filters{row-gap:calc(var(--spacing)*4);display:grid}.fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);padding:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-filters.fi-ta-filters-below-content:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-header{justify-content:space-between;align-items:center;display:flex}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-ta-filters-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-ta-filters-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-loading-indicator{color:var(--gray-400)}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-header .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-ctn .fi-ta-filters .fi-ta-filters-actions-ctn{gap:calc(var(--spacing)*3);display:flex}.fi-ta-ctn .fi-ta-filters-above-content-ctn{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*4);display:grid}@media (min-width:40rem){.fi-ta-ctn .fi-ta-filters-above-content-ctn{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-filters-above-content-ctn:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-filters-above-content-ctn:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-filters-above-content-ctn .fi-ta-filters-trigger-action-ctn{margin-inline-start:auto}.fi-ta-ctn .fi-ta-filters-above-content-ctn.fi-open .fi-ta-filters-trigger-action-ctn{margin-top:calc(var(--spacing)*3)}.fi-ta-ctn .fi-ta-filters-above-content-ctn.fi-open:has(.fi-ta-filters-actions-ctn) .fi-ta-filters-trigger-action-ctn{margin-top:calc(var(--spacing)*-7)}.fi-ta-ctn .fi-ta-reorder-indicator{align-items:center;column-gap:calc(var(--spacing)*3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-reorder-indicator{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-ctn .fi-ta-reorder-indicator:where(.dark,.dark *){color:var(--gray-200)}.fi-ta-ctn .fi-ta-reorder-indicator .fi-loading-indicator{color:var(--gray-400)}.fi-ta-ctn .fi-ta-reorder-indicator .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-ctn .fi-ta-selection-indicator{justify-content:space-between;row-gap:calc(var(--spacing)*1);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);flex-direction:column;display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-selection-indicator{padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*1.5);flex-direction:row;align-items:center}}.fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-selection-indicator:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-ctn .fi-ta-selection-indicator .fi-loading-indicator{color:var(--gray-400)}.fi-ta-ctn .fi-ta-selection-indicator .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-ctn .fi-ta-selection-indicator .fi-ta-selection-indicator-actions-ctn,.fi-ta-ctn .fi-ta-selection-indicator>*{column-gap:calc(var(--spacing)*3);display:flex}.fi-ta-ctn .fi-ta-selection-indicator>:first-child{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700)}.fi-ta-ctn .fi-ta-selection-indicator>:first-child:where(.dark,.dark *){color:var(--gray-200)}.fi-ta-ctn .fi-ta-selection-indicator>:nth-child(2){margin-inline-start:auto}.fi-ta-ctn .fi-ta-filter-indicators{justify-content:space-between;align-items:flex-start;column-gap:calc(var(--spacing)*3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-filter-indicators{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-ta-filter-indicators:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-ctn .fi-ta-filter-indicators>:first-child{column-gap:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}@media (min-width:40rem){.fi-ta-ctn .fi-ta-filter-indicators>:first-child{flex-direction:row}}.fi-ta-ctn .fi-ta-filter-indicators>:first-child .fi-ta-filter-indicators-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--gray-700)}.fi-ta-ctn .fi-ta-filter-indicators>:first-child .fi-ta-filter-indicators-label:where(.dark,.dark *){color:var(--gray-200)}.fi-ta-ctn .fi-ta-filter-indicators>:first-child .fi-ta-filter-indicators-badges-ctn{gap:calc(var(--spacing)*1.5);flex-wrap:wrap;display:flex}.fi-ta-ctn .fi-ta-filter-indicators>:nth-child(2).fi-icon-btn{margin-top:calc(var(--spacing)*-1)}.fi-ta-ctn .fi-pagination{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3)}@media (min-width:40rem){.fi-ta-ctn .fi-pagination{padding-inline:calc(var(--spacing)*6)}}.fi-ta-ctn .fi-pagination:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-ctn .fi-pagination:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-ctn .fi-ta-table-loading-ctn{height:calc(var(--spacing)*32);justify-content:center;align-items:center;display:flex}.fi-ta-ctn .fi-ta-main{min-width:calc(var(--spacing)*0);flex:1}@media (min-width:64rem){.fi-ta-ctn .fi-ta-filters-trigger-action-ctn.lg\:fi-hidden{display:none}}.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn{z-index:20;border-radius:var(--radius-lg);border-color:var(--gray-200);background-color:var(--color-white);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);width:100vw;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));flex-shrink:0;display:none;position:absolute;max-width:14rem!important}@media (min-width:64rem){.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn{z-index:auto;--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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);position:static}}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn) .fi-ta-filters{padding:calc(var(--spacing)*6)}@media (min-width:64rem){:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn) .fi-ta-filters{padding-block:calc(var(--spacing)*4)}}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-open{display:block}@media (min-width:64rem){:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).lg\:fi-open{display:block}}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-opacity-0{opacity:0}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-xs{max-width:var(--container-xs)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-sm{max-width:var(--container-sm)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-md{max-width:var(--container-md)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-lg{max-width:var(--container-lg)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-xl{max-width:var(--container-xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-2xl{max-width:var(--container-2xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-3xl{max-width:var(--container-3xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-4xl{max-width:var(--container-4xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-5xl{max-width:var(--container-5xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-6xl{max-width:var(--container-6xl)!important}:is(.fi-ta-ctn .fi-ta-filters-before-content-ctn,.fi-ta-ctn .fi-ta-filters-after-content-ctn).fi-width-7xl{max-width:var(--container-7xl)!important}.fi-ta-ctn .fi-ta-filters-before-content-ctn{inset-inline-start:calc(var(--spacing)*0)}@media (min-width:64rem){.fi-ta-ctn .fi-ta-filters-before-content-ctn{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px;border-start-start-radius:var(--radius-xl);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-xl)}}.fi-ta-ctn .fi-ta-filters-after-content-ctn{inset-inline-end:calc(var(--spacing)*0)}@media (min-width:64rem){.fi-ta-ctn .fi-ta-filters-after-content-ctn{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-start-start-radius:0;border-start-end-radius:var(--radius-xl);border-end-end-radius:var(--radius-xl);border-end-start-radius:0}}.fi-ta-content-ctn{position:relative}:where(.fi-ta-content-ctn>: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)));border-color:var(--gray-200)}.fi-ta-content-ctn{overflow-x:auto}:where(.fi-ta-content-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-ta-content-ctn:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-content-ctn:where(.dark,.dark *){border-top-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn:where(.dark,.dark *){border-top-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-content-ctn .fi-ta-content-header{align-items:center;gap:calc(var(--spacing)*4);column-gap:calc(var(--spacing)*6);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*4);display:flex}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content-header{padding-inline:calc(var(--spacing)*6)}}.fi-ta-content-ctn .fi-ta-content-header:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content-header:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content-header .fi-ta-page-checkbox{margin-block:calc(var(--spacing)*4);flex-shrink:0}.fi-ta-content-ctn .fi-ta-content-header .fi-ta-sorting-settings{column-gap:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3);display:flex}.fi-ta-content-ctn:not(.fi-ta-ctn-with-footer .fi-ta-content-ctn){border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.fi-ta-content-ctn:not(.fi-ta-ctn-with-header .fi-ta-content-ctn){border-top-style:var(--tw-border-style);border-top-width:0}.fi-ta-content-ctn .fi-ta-content{display:grid}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid{gap:calc(var(--spacing)*4);padding:calc(var(--spacing)*4)}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid{padding-inline:calc(var(--spacing)*6)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid.fi-ta-content-grouped{padding-top:calc(var(--spacing)*0)}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{margin-inline:calc(var(--spacing)*-4);border-block-style:var(--tw-border-style);border-block-width:1px;border-color:var(--gray-200)}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header:first-child{border-top-style:var(--tw-border-style);border-top-width:0}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{margin-inline:calc(var(--spacing)*-6)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{width:calc(100% + 2rem)}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-group-header{width:calc(100% + 3rem)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record{border-radius:var(--radius-xl);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}@media (hover:hover){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){--tw-ring-color:#fff3}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-selected:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected){background-color:var(--color-white)}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record:not(.fi-selected):where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-actions{padding-inline-start:calc(var(--spacing)*2)}.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content.fi-ta-content-grid .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-actions{padding-inline-end:calc(var(--spacing)*2)}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid){background-color:var(--gray-200);row-gap:1px}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-clickable:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:before{content:var(--tw-content);content:var(--tw-content);inset-block:calc(var(--spacing)*0);content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*.5);content:var(--tw-content);background-color:var(--primary-600);position:absolute;inset-inline-start:calc(var(--spacing)*0)}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-selected:where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--primary-500)}@media (min-width:48rem){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record .fi-ta-record-content-ctn{flex-direction:row;align-items:center}}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-actions{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-actions{padding-inline-end:calc(var(--spacing)*6)}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-prefix{padding-inline-start:calc(var(--spacing)*3)}}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-prefix .fi-ta-actions{padding-inline-start:calc(var(--spacing)*3)}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-suffix{padding-inline-end:calc(var(--spacing)*3)}}.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record.fi-ta-record-with-content-suffix .fi-ta-actions{padding-inline-end:calc(var(--spacing)*3)}@media (min-width:48rem){.fi-ta-content-ctn .fi-ta-content:not(.fi-ta-content-grid) .fi-ta-record .fi-ta-actions{padding-inline-start:calc(var(--spacing)*3)}}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header{align-items:center;column-gap:calc(var(--spacing)*3);background-color:var(--gray-50);width:100%;padding-inline:calc(var(--spacing)*1);padding-block:calc(var(--spacing)*2);grid-column:1/-1;display:flex}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header{padding-inline:calc(var(--spacing)*3)}}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header.fi-collapsible{cursor:pointer}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header.fi-collapsible.fi-collapsed .fi-icon-btn{rotate:-180deg}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-description:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-content-ctn .fi-ta-content .fi-ta-group-header .fi-ta-group-checkbox{margin-inline:calc(var(--spacing)*3)}.fi-ta-content-ctn .fi-ta-content .fi-ta-table{grid-column:1/-1}.fi-ta-content-ctn .fi-ta-content .fi-ta-record{background-color:var(--color-white);height:100%;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;align-items:center;transition-duration:75ms;display:flex;position:relative}.fi-ta-content-ctn .fi-ta-content .fi-ta-record:where(.dark,.dark *){background-color:var(--gray-900)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-ta-record-with-content-prefix{padding-inline-start:calc(var(--spacing)*1)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-ta-record-with-content-suffix{padding-inline-end:calc(var(--spacing)*1)}@media (hover:hover){.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-clickable:hover{background-color:var(--gray-50)}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-collapsed{display:none}.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-selected{background-color:var(--gray-50)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-reorder-handle{margin-inline:calc(var(--spacing)*1);margin-block:calc(var(--spacing)*2)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-checkbox{margin-inline:calc(var(--spacing)*3);margin-block:calc(var(--spacing)*4);flex-shrink:0}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn{row-gap:calc(var(--spacing)*3);width:100%;height:100%;padding-block:calc(var(--spacing)*4);flex-direction:column;display:flex}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn>:first-child{flex:1}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content{width:100%;display:block}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col{text-align:start;justify-content:flex-start;display:flex}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col:disabled{pointer-events:none}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-growable{width:100%}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-center{text-align:center;justify-content:center}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-end{text-align:end;justify-content:flex-end}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-left{text-align:left;justify-content:flex-start}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-right{text-align:right;justify-content:flex-end}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-justify,.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-ta-col.fi-align-between{text-align:justify;justify-content:space-between}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content.fi-collapsible{margin-top:calc(var(--spacing)*3)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .fi-growable{flex:1;width:100%}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .sm\:fi-hidden{display:none}}@media (min-width:48rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .md\:fi-hidden{display:none}}@media (min-width:64rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .lg\:fi-hidden{display:none}}@media (min-width:80rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .xl\:fi-hidden{display:none}}@media (min-width:96rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .\32 xl\:fi-hidden{display:none}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .sm\:fi-visible{display:none}@media (min-width:40rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .sm\:fi-visible{display:block}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .md\:fi-visible{display:none}@media (min-width:48rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .md\:fi-visible{display:block}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .lg\:fi-visible{display:none}@media (min-width:64rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .lg\:fi-visible{display:block}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .xl\:fi-visible{display:none}@media (min-width:80rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .xl\:fi-visible{display:block}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .\32 xl\:fi-visible{display:none}@media (min-width:96rem){.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-content-ctn .fi-ta-record-content .\32 xl\:fi-visible{display:block}}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-record-collapse-btn{margin-inline:calc(var(--spacing)*1);margin-block:calc(var(--spacing)*2);flex-shrink:0}.fi-ta-content-ctn .fi-ta-content .fi-ta-record .fi-ta-actions.fi-ta-actions-before-columns-position{order:-9999}.fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-prefix) .fi-ta-actions{padding-inline-start:calc(var(--spacing)*4)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-record-content,.fi-ta-content-ctn .fi-ta-content .fi-ta-record:not(.fi-ta-record-with-content-suffix) .fi-ta-actions{padding-inline-end:calc(var(--spacing)*4)}.fi-ta-content-ctn .fi-ta-content .fi-ta-record.fi-ta-record-collapsed .fi-ta-record-collapse-btn{rotate:180deg}.fi-ta-empty-state{padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*12)}.fi-ta-empty-state:not(.fi-ta-ctn-with-content-layout .fi-ta-empty-state){border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--gray-200)}.fi-ta-empty-state:not(.fi-ta-ctn-with-content-layout .fi-ta-empty-state):where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-ta-empty-state:not(.fi-ta-ctn-with-content-layout .fi-ta-empty-state):where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-ta-empty-state .fi-ta-empty-state-content{max-width:var(--container-lg);text-align:center;justify-items:center;margin-inline:auto;display:grid}.fi-ta-empty-state .fi-ta-empty-state-icon-bg{margin-bottom:calc(var(--spacing)*4);background-color:var(--gray-100);padding:calc(var(--spacing)*3);border-radius:3.40282e38px}.fi-ta-empty-state .fi-ta-empty-state-icon-bg:where(.dark,.dark *){background-color:var(--gray-500)}@supports (color:color-mix(in lab, red, red)){.fi-ta-empty-state .fi-ta-empty-state-icon-bg:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-500)20%,transparent)}}.fi-ta-empty-state .fi-ta-empty-state-icon-bg .fi-icon{color:var(--gray-500)}.fi-ta-empty-state .fi-ta-empty-state-icon-bg .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-empty-state .fi-ta-empty-state-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-ta-empty-state .fi-ta-empty-state-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-empty-state .fi-ta-empty-state-description{margin-top:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-ta-empty-state .fi-ta-empty-state-description:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-empty-state .fi-ta-actions{margin-top:calc(var(--spacing)*6)}.fi-ta-header-cell{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3.5);text-align:start;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}@media (min-width:40rem){.fi-ta-header-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-header-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-header-cell:where(.dark,.dark *){color:var(--color-white)}.fi-ta-header-cell.fi-growable{width:100%}.fi-ta-header-cell.fi-grouped{border-color:var(--gray-200)}.fi-ta-header-cell.fi-grouped:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-header-cell.fi-grouped:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-header-cell.fi-grouped:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-ta-header-cell.fi-grouped:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-ta-header-cell.fi-align-center{text-align:center}.fi-ta-header-cell.fi-align-center .fi-ta-header-cell-sort-btn{justify-content:center}.fi-ta-header-cell.fi-align-end{text-align:end}.fi-ta-header-cell.fi-align-end .fi-ta-header-cell-sort-btn{justify-content:flex-end}.fi-ta-header-cell.fi-align-left{text-align:left}.fi-ta-header-cell.fi-align-left .fi-ta-header-cell-sort-btn{justify-content:flex-start}.fi-ta-header-cell.fi-align-left .fi-ta-header-cell-sort-btn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.fi-ta-header-cell.fi-align-right{text-align:right}.fi-ta-header-cell.fi-align-right .fi-ta-header-cell-sort-btn{justify-content:flex-end}.fi-ta-header-cell.fi-align-right .fi-ta-header-cell-sort-btn:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.fi-ta-header-cell.fi-align-justify,.fi-ta-header-cell.fi-align-between{text-align:justify}:is(.fi-ta-header-cell.fi-align-justify,.fi-ta-header-cell.fi-align-between) .fi-ta-header-cell-sort-btn{justify-content:space-between}.fi-ta-header-cell.fi-ta-header-cell-sorted .fi-icon{color:var(--gray-950)}.fi-ta-header-cell.fi-ta-header-cell-sorted .fi-icon:where(.dark,.dark *){color:var(--color-white)}.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-icon{color:var(--gray-400)}.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-icon:where(.dark,.dark *),.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:hover .fi-icon{color:var(--gray-500)}.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:focus-visible .fi-icon{color:var(--gray-500)}.fi-ta-header-cell:not(.fi-ta-header-cell-sorted) .fi-ta-header-cell-sort-btn:focus-visible .fi-icon:where(.dark,.dark *){color:var(--gray-400)}@media (min-width:40rem){.fi-ta-header-cell.sm\:fi-hidden{display:none}}@media (min-width:48rem){.fi-ta-header-cell.md\:fi-hidden{display:none}}@media (min-width:64rem){.fi-ta-header-cell.lg\:fi-hidden{display:none}}@media (min-width:80rem){.fi-ta-header-cell.xl\:fi-hidden{display:none}}@media (min-width:96rem){.fi-ta-header-cell.\32 xl\:fi-hidden{display:none}}.fi-ta-header-cell.sm\:fi-visible{display:none}@media (min-width:40rem){.fi-ta-header-cell.sm\:fi-visible{display:table-cell}}.fi-ta-header-cell.md\:fi-visible{display:none}@media (min-width:48rem){.fi-ta-header-cell.md\:fi-visible{display:table-cell}}.fi-ta-header-cell.lg\:fi-visible{display:none}@media (min-width:64rem){.fi-ta-header-cell.lg\:fi-visible{display:table-cell}}.fi-ta-header-cell.xl\:fi-visible{display:none}@media (min-width:80rem){.fi-ta-header-cell.xl\:fi-visible{display:table-cell}}.fi-ta-header-cell.\32 xl\:fi-visible{display:none}@media (min-width:96rem){.fi-ta-header-cell.\32 xl\:fi-visible{display:table-cell}}.fi-ta-header-cell.fi-wrapped{white-space:normal}.fi-ta-header-cell:not(.fi-wrapped){white-space:nowrap}.fi-ta-header-cell .fi-ta-header-cell-sort-btn{cursor:pointer;justify-content:flex-start;align-items:center;column-gap:calc(var(--spacing)*1);width:100%;display:flex}.fi-ta-header-cell .fi-icon{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;flex-shrink:0;transition-duration:75ms}.fi-ta-header-cell .fi-loading-indicator{color:var(--gray-400)}.fi-ta-header-cell .fi-loading-indicator:where(.dark,.dark *){color:var(--gray-500)}.fi-ta-header-group-cell{border-color:var(--gray-200);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}@media (min-width:40rem){.fi-ta-header-group-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-header-group-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-header-group-cell:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-header-group-cell:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-header-group-cell:where(.dark,.dark *){color:var(--color-white)}.fi-ta-header-group-cell:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.fi-ta-header-group-cell:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.fi-ta-header-group-cell.fi-align-start{text-align:start}.fi-ta-header-group-cell.fi-align-center{text-align:center}.fi-ta-header-group-cell.fi-align-end{text-align:end}.fi-ta-header-group-cell.fi-align-left{text-align:left}.fi-ta-header-group-cell.fi-align-right{text-align:right}.fi-ta-header-group-cell.fi-align-justify,.fi-ta-header-group-cell.fi-align-between{text-align:justify}@media (min-width:40rem){.fi-ta-header-group-cell.sm\:fi-hidden{display:none}}@media (min-width:48rem){.fi-ta-header-group-cell.md\:fi-hidden{display:none}}@media (min-width:64rem){.fi-ta-header-group-cell.lg\:fi-hidden{display:none}}@media (min-width:80rem){.fi-ta-header-group-cell.xl\:fi-hidden{display:none}}@media (min-width:96rem){.fi-ta-header-group-cell.\32 xl\:fi-hidden{display:none}}.fi-ta-header-group-cell.sm\:fi-visible{display:none}@media (min-width:40rem){.fi-ta-header-group-cell.sm\:fi-visible{display:table-cell}}.fi-ta-header-group-cell.md\:fi-visible{display:none}@media (min-width:48rem){.fi-ta-header-group-cell.md\:fi-visible{display:table-cell}}.fi-ta-header-group-cell.lg\:fi-visible{display:none}@media (min-width:64rem){.fi-ta-header-group-cell.lg\:fi-visible{display:table-cell}}.fi-ta-header-group-cell.xl\:fi-visible{display:none}@media (min-width:80rem){.fi-ta-header-group-cell.xl\:fi-visible{display:table-cell}}.fi-ta-header-group-cell.\32 xl\:fi-visible{display:none}@media (min-width:96rem){.fi-ta-header-group-cell.\32 xl\:fi-visible{display:table-cell}}.fi-ta-header-group-cell.fi-wrapped{white-space:normal}.fi-ta-header-group-cell:not(.fi-wrapped){white-space:nowrap}.fi-ta-empty-header-cell{width:calc(var(--spacing)*1)}@media (hover:hover){.fi-ta-row{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));--tw-duration:75ms;transition-duration:75ms}.fi-ta-row.fi-clickable:hover{background-color:var(--gray-50)}.fi-ta-row.fi-clickable:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-row.fi-clickable:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-ta-row.fi-striped{background-color:var(--gray-50)}.fi-ta-row.fi-striped:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-row.fi-striped:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-row.fi-collapsed{display:none}.fi-ta-row.fi-ta-group-header-row>td{background-color:var(--gray-50)}.fi-ta-row.fi-ta-group-header-row>td:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-row.fi-ta-group-header-row>td:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-row .fi-ta-group-header-cell{padding-inline:calc(var(--spacing)*3)}@media (min-width:40rem){.fi-ta-row .fi-ta-group-header-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-row .fi-ta-group-header-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-row .fi-ta-group-header{align-items:center;column-gap:calc(var(--spacing)*3);width:100%;padding-block:calc(var(--spacing)*2);display:flex}.fi-ta-row .fi-ta-group-header.fi-collapsible{cursor:pointer}.fi-ta-row .fi-ta-group-header.fi-collapsible.fi-collapsed .fi-icon-btn{rotate:-180deg}.fi-ta-row .fi-ta-group-header .fi-ta-group-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-ta-row .fi-ta-group-header .fi-ta-group-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-row .fi-ta-group-header .fi-ta-group-description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-ta-row .fi-ta-group-header .fi-ta-group-description:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-row.fi-selected:not(.fi-striped){background-color:var(--gray-50)}.fi-ta-row.fi-selected:not(.fi-striped):where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-row.fi-selected:not(.fi-striped):where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-row.fi-selected>:first-child{position:relative}.fi-ta-row.fi-selected>:first-child:before{inset-block:calc(var(--spacing)*0);width:calc(var(--spacing)*.5);background-color:var(--primary-600);content:"";position:absolute;inset-inline-start:calc(var(--spacing)*0)}.fi-ta-row.fi-selected>:first-child:where(.dark,.dark *):before{background-color:var(--primary-500)}.fi-ta-reordering .fi-ta-row:not(.fi-ta-row-not-reorderable){cursor:move}.fi-ta-table{table-layout:auto;width:100%}:where(.fi-ta-table>: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)));border-color:var(--gray-200)}.fi-ta-table{text-align:start}:where(.fi-ta-table:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-ta-table:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table.fi-ta-table-stacked-on-mobile{display:block}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile{table-layout:auto;display:table}}.fi-ta-table.fi-ta-table-stacked-on-mobile>thead{display:block}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>thead{display:table-header-group}}.fi-ta-table.fi-ta-table-stacked-on-mobile>thead:not(:has(.fi-ta-table-stacked-header-row)){display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>thead:not(:has(.fi-ta-table-stacked-header-row)){display:table-header-group}}.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr:not(.fi-ta-table-stacked-header-row){display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr:not(.fi-ta-table-stacked-header-row){display:table-row}}.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr>.fi-ta-header-cell{display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr>.fi-ta-header-cell{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr>.fi-ta-selection-cell{display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>thead>tr>.fi-ta-selection-cell{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody{white-space:normal;display:block}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody{white-space:nowrap;display:table-row-group}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr{padding-block:calc(var(--spacing)*2);display:block;position:relative}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr{padding-block:calc(var(--spacing)*0);display:table-row;position:static}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-collapsed{display:none}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected:before{inset-block:calc(var(--spacing)*0);width:calc(var(--spacing)*.5);background-color:var(--primary-600);position:absolute;inset-inline-start:calc(var(--spacing)*0)}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected:before{display:none}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected:before{content:""}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected:where(.dark,.dark *):before{background-color:var(--primary-500)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected>:first-child:before{display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-selected>:first-child:before{display:block}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-ta-group-header-row{padding-block:calc(var(--spacing)*0)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-ta-group-header-row>td{width:100%;display:block}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-ta-group-header-row>td{width:auto;display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr.fi-ta-summary-row{padding-block:calc(var(--spacing)*0)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-selection-cell{inset-inline-end:calc(var(--spacing)*5);top:calc(var(--spacing)*0);position:absolute}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-selection-cell{width:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4);display:table-cell;position:static}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-selection-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-selection-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell){padding-inline:calc(var(--spacing)*4);display:block}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell){padding-inline:calc(var(--spacing)*0);display:table-cell}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):first-of-type{padding-inline-start:calc(var(--spacing)*3)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):last-of-type{padding-inline-end:calc(var(--spacing)*3)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).fi-ta-summary-row-heading-cell{padding-inline:calc(var(--spacing)*3)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).fi-ta-summary-row-heading-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).fi-ta-summary-row-heading-cell:last-of-type{padding-inline-end:calc(var(--spacing)*6)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).fi-ta-summary-header-cell{padding-inline:calc(var(--spacing)*3)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).fi-ta-summary-header-cell:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).sm\:fi-hidden{display:none}}@media (min-width:48rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).md\:fi-hidden{display:none}}@media (min-width:64rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).lg\:fi-hidden{display:none}}@media (min-width:80rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).xl\:fi-hidden{display:none}}@media (min-width:96rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).\32 xl\:fi-hidden{display:none}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).sm\:fi-visible{display:none}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).sm\:fi-visible{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).md\:fi-visible{display:none}@media (min-width:48rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).md\:fi-visible{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).lg\:fi-visible{display:none}@media (min-width:64rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).lg\:fi-visible{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).xl\:fi-visible{display:none}@media (min-width:80rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).xl\:fi-visible{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).\32 xl\:fi-visible{display:none}@media (min-width:96rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell).\32 xl\:fi-visible{display:table-cell}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-label{padding-top:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-500)}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-label{display:none}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-label:where(.dark,.dark *){color:var(--gray-400)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-content{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-wrap:break-word;color:var(--gray-800)}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-content{display:block}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell)>.fi-ta-cell-content:where(.dark,.dark *){color:var(--gray-200)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions){padding-block:calc(var(--spacing)*2)}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*4)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions):first-of-type{padding-inline-start:calc(var(--spacing)*6)}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions):last-of-type{padding-inline-end:calc(var(--spacing)*6)}}.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions)>.fi-ta-actions{justify-content:flex-start;column-gap:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*2);flex-wrap:wrap;width:100%}@media (min-width:40rem){.fi-ta-table.fi-ta-table-stacked-on-mobile>tbody>tr>.fi-ta-cell:not(.fi-ta-selection-cell):has(.fi-ta-actions)>.fi-ta-actions{justify-content:flex-end;gap:calc(var(--spacing)*3);flex-wrap:nowrap;width:auto}}:where(.fi-ta-table>thead>: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)));border-color:var(--gray-200)}:where(.fi-ta-table>thead:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-ta-table>thead:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table>thead>tr{background-color:var(--gray-50)}.fi-ta-table>thead>tr:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-table>thead>tr:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table>thead>tr.fi-ta-table-head-groups-row{background-color:var(--gray-100)}.fi-ta-table>thead>tr.fi-ta-table-head-groups-row:where(.dark,.dark *){background-color:#0000}:where(.fi-ta-table>tbody>: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)));border-color:var(--gray-200)}.fi-ta-table>tbody{white-space:nowrap}:where(.fi-ta-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){:where(.fi-ta-table>tbody:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table>tfoot{background-color:var(--gray-50)}.fi-ta-table>tfoot:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-table>tfoot:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table-stacked-header-row{border-block-style:var(--tw-border-style);border-block-width:0;width:100%;display:block}@media (min-width:40rem){.fi-ta-table-stacked-header-row{display:none}}.fi-ta-table-stacked-header-row .fi-ta-table-stacked-header-cell{align-items:center;gap:calc(var(--spacing)*4);background-color:var(--gray-50);width:100%;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);display:flex}.fi-ta-table-stacked-header-row .fi-ta-table-stacked-header-cell:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-ta-table-stacked-header-row .fi-ta-table-stacked-header-cell:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-ta-table-stacked-header-row .fi-ta-table-stacked-header-cell .fi-ta-page-checkbox{flex-shrink:0;margin-inline-start:auto}.fi-ta-table-stacked-header-row .fi-ta-table-stacked-header-cell .fi-ta-table-stacked-sorting{column-gap:calc(var(--spacing)*3);flex:1;display:flex}.fi-ta-col-manager{gap:calc(var(--spacing)*4);display:grid}.fi-ta-col-manager .fi-ta-col-manager-header{justify-content:space-between;align-items:center;display:flex}.fi-ta-col-manager .fi-ta-col-manager-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950)}.fi-ta-col-manager .fi-ta-col-manager-heading:where(.dark,.dark *){color:var(--color-white)}.fi-ta-col-manager .fi-ta-col-manager-items{margin-top:calc(var(--spacing)*-6);column-gap:calc(var(--spacing)*6)}.fi-ta-col-manager .fi-ta-col-manager-item{break-inside:avoid;align-items:center;gap:calc(var(--spacing)*3);padding-top:calc(var(--spacing)*6);display:flex}.fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-label{align-items:center;column-gap:calc(var(--spacing)*3);width:100%;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950);flex:1;display:flex}.fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-label:where(.dark,.dark *){color:var(--color-white)}.fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-label .fi-checkbox-input{flex-shrink:0}.fi-ta-col-manager .fi-ta-col-manager-item .fi-ta-col-manager-reorder-handle{cursor:move}.fi-ta-col-manager .fi-ta-col-manager-group{break-inside:avoid}.fi-ta-col-manager .fi-ta-col-manager-group .fi-ta-col-manager-group-items{padding-inline-start:calc(var(--spacing)*8)}.fi-ta-col-manager .fi-ta-col-manager-actions-ctn{gap:calc(var(--spacing)*3);display:flex}.fi-wi-chart .fi-wi-chart-canvas-ctn{margin-inline:auto}.fi-wi-chart .fi-wi-chart-canvas-ctn:not(.fi-wi-chart-canvas-ctn-no-aspect-ratio){aspect-ratio:1}@supports (container-type:inline-size){.fi-wi-chart .fi-section-content{container-type:inline-size}@container (min-width:24rem){.fi-wi-chart .fi-wi-chart-canvas-ctn:not(.fi-wi-chart-canvas-ctn-no-aspect-ratio){aspect-ratio:1.5}}}@supports not (container-type:inline-size){@media (min-width:40rem){.fi-wi-chart .fi-wi-chart-canvas-ctn:not(.fi-wi-chart-canvas-ctn-no-aspect-ratio){aspect-ratio:1.5}}}.fi-wi-chart .fi-wi-chart-filter.fi-input-wrp{width:max-content}@media (min-width:40rem){.fi-wi-chart .fi-wi-chart-filter.fi-input-wrp{margin-block:calc(var(--spacing)*-2)}}.fi-wi-chart .fi-wi-chart-filter.fi-dropdown .fi-wi-chart-filter-content{row-gap:calc(var(--spacing)*4);padding:calc(var(--spacing)*6);display:grid}.fi-wi-chart .fi-wi-chart-filter.fi-dropdown .fi-wi-chart-filter-content-actions-ctn{gap:calc(var(--spacing)*3);display:flex}.fi-wi-chart .fi-color .fi-wi-chart-bg-color{color:var(--color-50)}.fi-wi-chart .fi-color .fi-wi-chart-bg-color:where(.dark,.dark *){color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-wi-chart .fi-color .fi-wi-chart-bg-color:where(.dark,.dark *){color:color-mix(in oklab,var(--color-400)10%,transparent)}}.fi-wi-chart .fi-color .fi-wi-chart-border-color{color:var(--color-500)}.fi-wi-chart .fi-color .fi-wi-chart-border-color:where(.dark,.dark *){color:var(--color-400)}.fi-wi-chart .fi-wi-chart-bg-color{color:var(--gray-100)}.fi-wi-chart .fi-wi-chart-bg-color:where(.dark,.dark *){color:var(--gray-800)}.fi-wi-chart .fi-wi-chart-border-color{color:var(--gray-400)}.fi-wi-chart .fi-wi-chart-grid-color{color:var(--gray-200)}.fi-wi-chart .fi-wi-chart-grid-color:where(.dark,.dark *){color:var(--gray-800)}.fi-wi-chart .fi-wi-chart-text-color{color:var(--gray-500)}.fi-wi-chart .fi-wi-chart-text-color:where(.dark,.dark *){color:var(--gray-400)}.fi-wi-stats-overview-stat{border-radius:var(--radius-xl);background-color:var(--color-white);height:100%;padding:calc(var(--spacing)*6);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);display:block;position:relative}.fi-wi-stats-overview-stat:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-wi-stats-overview-stat:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-wi-stats-overview-stat .fi-icon{color:var(--gray-400);flex-shrink:0}.fi-wi-stats-overview-stat .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-content{row-gap:calc(var(--spacing)*2);display:grid}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-label-ctn{align-items:center;column-gap:calc(var(--spacing)*2);display:flex}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-label:where(.dark,.dark *){color:var(--gray-400)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-value{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--gray-950)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-value:where(.dark,.dark *){color:var(--color-white)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description{align-items:center;column-gap:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500);display:flex}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description:where(.dark,.dark *){color:var(--gray-400)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description.fi-color{color:var(--text)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description.fi-color:where(.dark,.dark *){color:var(--dark-text)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-description.fi-color .fi-icon{color:var(--color-500)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart{inset-inline:calc(var(--spacing)*0);bottom:calc(var(--spacing)*0);border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl);position:absolute;overflow:hidden}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart>canvas{height:calc(var(--spacing)*6)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart .fi-wi-stats-overview-stat-chart-bg-color{color:var(--gray-100)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart .fi-wi-stats-overview-stat-chart-bg-color:where(.dark,.dark *){color:var(--gray-800)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart .fi-wi-stats-overview-stat-chart-border-color{color:var(--gray-400)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-bg-color{color:var(--color-50)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-bg-color:where(.dark,.dark *){color:var(--color-400)}@supports (color:color-mix(in lab, red, red)){.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-bg-color:where(.dark,.dark *){color:color-mix(in oklab,var(--color-400)10%,transparent)}}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-border-color{color:var(--color-500)}.fi-wi-stats-overview-stat .fi-wi-stats-overview-stat-chart.fi-color .fi-wi-stats-overview-stat-chart-border-color:where(.dark,.dark *){color:var(--color-400)}.fi-wi{gap:calc(var(--spacing)*6)}.fi-global-search-ctn{align-items:center;display:flex}.fi-global-search{flex:1}@media (min-width:40rem){.fi-global-search{position:relative}}.fi-global-search-results-ctn{inset-inline:calc(var(--spacing)*4);z-index:10;margin-top:calc(var(--spacing)*2);max-height:calc(var(--spacing)*96);border-radius:var(--radius-lg);background-color:var(--color-white);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));position:absolute;overflow:auto}@media (min-width:40rem){.fi-global-search-results-ctn{inset-inline:auto}}.fi-global-search-results-ctn:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-global-search-results-ctn:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-global-search-results-ctn{transform:translateZ(0)}.fi-global-search-results-ctn.fi-transition-enter-start,.fi-global-search-results-ctn.fi-transition-leave-end{opacity:0}@media (min-width:40rem){.fi-topbar .fi-global-search-results-ctn{width:100vw;max-width:var(--container-sm);inset-inline-end:calc(var(--spacing)*0)}}.fi-sidebar .fi-global-search-ctn{margin-inline:calc(var(--spacing)*3);margin-top:calc(var(--spacing)*3)}@media (min-width:40rem){.fi-sidebar .fi-global-search-results-ctn{inset-inline-start:calc(var(--spacing)*0)}}.fi-global-search-no-results-message{padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-global-search-no-results-message:where(.dark,.dark *){color:var(--gray-400)}:where(.fi-global-search-results>: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)));border-color:var(--gray-200)}:where(.fi-global-search-results:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-global-search-results:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-global-search-result-group-header{top:calc(var(--spacing)*0);z-index:10;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--gray-200);background-color:var(--gray-50);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950);text-transform:capitalize;position:sticky}.fi-global-search-result-group-header:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-global-search-result-group-header:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-global-search-result-group-header:where(.dark,.dark *){background-color:var(--gray-800);color:var(--color-white)}:where(.fi-global-search-result-group-results>: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)));border-color:var(--gray-200)}:where(.fi-global-search-result-group-results:where(.dark,.dark *)>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){:where(.fi-global-search-result-group-results:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-global-search-result{scroll-margin-top:calc(var(--spacing)*9);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-global-search-result:focus-within{background-color:var(--gray-50)}@media (hover:hover){.fi-global-search-result:hover{background-color:var(--gray-50)}}.fi-global-search-result:where(.dark,.dark *):focus-within{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-global-search-result:where(.dark,.dark *):focus-within{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.fi-global-search-result:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-global-search-result:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-global-search-result.fi-global-search-result-has-actions .fi-global-search-result-link{padding-bottom:calc(var(--spacing)*0)}.fi-global-search-result-link{padding:calc(var(--spacing)*4);--tw-outline-style:none;outline-style:none;display:block}@media (forced-colors:active){.fi-global-search-result-link{outline-offset:2px;outline:2px solid #0000}}.fi-global-search-result-heading{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-950)}.fi-global-search-result-heading:where(.dark,.dark *){color:var(--color-white)}.fi-global-search-result-details{margin-top:calc(var(--spacing)*1)}.fi-global-search-result-detail{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-global-search-result-detail:where(.dark,.dark *){color:var(--gray-400)}.fi-global-search-result-detail-label{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);display:inline}.fi-global-search-result-detail-value{display:inline}.fi-global-search-result-actions{margin-top:calc(var(--spacing)*3);column-gap:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);padding-bottom:calc(var(--spacing)*4);display:flex}.fi-header{gap:calc(var(--spacing)*4);flex-direction:column;display:flex}@media (min-width:40rem){.fi-header{flex-direction:row;justify-content:space-between;align-items:center}}.fi-header .fi-breadcrumbs{margin-bottom:calc(var(--spacing)*2);display:none}@media (min-width:40rem){.fi-header .fi-breadcrumbs{display:block}.fi-header.fi-header-has-breadcrumbs .fi-header-actions-ctn{margin-top:calc(var(--spacing)*7)}}.fi-header-heading{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--gray-950)}@media (min-width:40rem){.fi-header-heading{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}}.fi-header-heading:where(.dark,.dark *){color:var(--color-white)}.fi-header-subheading{margin-top:calc(var(--spacing)*2);max-width:var(--container-2xl);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));color:var(--gray-600)}.fi-header-subheading:where(.dark,.dark *){color:var(--gray-400)}.fi-header-actions-ctn{align-items:center;gap:calc(var(--spacing)*3);flex-shrink:0;display:flex}.fi-header-actions-ctn>.fi-ac{flex:1}.fi-header-actions-ctn>.fi-ac:not(.fi-width-full).fi-align-end,.fi-header-actions-ctn>.fi-ac:not(.fi-width-full).fi-align-right{flex-direction:row;justify-content:flex-end}.fi-simple-header{flex-direction:column;align-items:center;display:flex}.fi-simple-header .fi-logo{margin-bottom:calc(var(--spacing)*4)}.fi-simple-header-heading{text-align:center;font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--gray-950)}.fi-simple-header-heading:where(.dark,.dark *){color:var(--color-white)}.fi-simple-header-subheading{margin-top:calc(var(--spacing)*2);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-simple-header-subheading:where(.dark,.dark *){color:var(--gray-400)}html.fi{min-height:100dvh}.fi-body{background-color:var(--gray-50);--tw-font-weight:var(--font-weight-normal);min-height:100dvh;font-weight:var(--font-weight-normal);color:var(--gray-950);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fi-body:where(.dark,.dark *){background-color:var(--gray-950);color:var(--color-white)}:is(.fi-body.fi-body-has-sidebar-collapsible-on-desktop,.fi-body.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-main-ctn{opacity:0;min-height:calc(100dvh - 4rem);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.fi-body>.fi-layout-sidebar-toggle-btn-ctn{padding-inline-start:calc(var(--spacing)*5);padding-top:calc(var(--spacing)*5)}@media (min-width:64rem){.fi-body>.fi-layout-sidebar-toggle-btn-ctn.lg\:fi-hidden{display:none}}.fi-body.fi-body-has-navigation:not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop):not(.fi-body-has-top-navigation) .fi-main-ctn{opacity:0}:is(.fi-body.fi-body-has-top-navigation,.fi-body:not(.fi-body-has-navigation)) .fi-main-ctn{min-height:calc(100dvh - 4rem);display:flex}.fi-body:not(.fi-body-has-topbar) .fi-main-ctn{min-height:100dvh;display:flex}.fi-layout{width:100%;height:100%;display:flex;overflow-x:clip}.fi-main-ctn{flex-direction:column;flex:1;width:100vw}.fi-main{width:100%;height:100%;padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media (min-width:48rem){.fi-main{padding-inline:calc(var(--spacing)*6)}}@media (min-width:64rem){.fi-main{padding-inline:calc(var(--spacing)*8)}}:is(.fi-main,.fi-simple-main).fi-width-xs{max-width:var(--container-xs)}:is(.fi-main,.fi-simple-main).fi-width-sm{max-width:var(--container-sm)}:is(.fi-main,.fi-simple-main).fi-width-md{max-width:var(--container-md)}:is(.fi-main,.fi-simple-main).fi-width-lg{max-width:var(--container-lg)}:is(.fi-main,.fi-simple-main).fi-width-xl{max-width:var(--container-xl)}:is(.fi-main,.fi-simple-main).fi-width-2xl{max-width:var(--container-2xl)}:is(.fi-main,.fi-simple-main).fi-width-3xl{max-width:var(--container-3xl)}:is(.fi-main,.fi-simple-main).fi-width-4xl{max-width:var(--container-4xl)}:is(.fi-main,.fi-simple-main).fi-width-5xl{max-width:var(--container-5xl)}:is(.fi-main,.fi-simple-main).fi-width-6xl{max-width:var(--container-6xl)}:is(.fi-main,.fi-simple-main).fi-width-7xl{max-width:var(--container-7xl)}:is(.fi-main,.fi-simple-main).fi-width-full{max-width:100%}:is(.fi-main,.fi-simple-main).fi-width-min{max-width:min-content}:is(.fi-main,.fi-simple-main).fi-width-max{max-width:max-content}:is(.fi-main,.fi-simple-main).fi-width-fit{max-width:fit-content}:is(.fi-main,.fi-simple-main).fi-width-prose{max-width:65ch}:is(.fi-main,.fi-simple-main).fi-width-screen-sm{max-width:var(--breakpoint-sm)}:is(.fi-main,.fi-simple-main).fi-width-screen-md{max-width:var(--breakpoint-md)}:is(.fi-main,.fi-simple-main).fi-width-screen-lg{max-width:var(--breakpoint-lg)}:is(.fi-main,.fi-simple-main).fi-width-screen-xl{max-width:var(--breakpoint-xl)}:is(.fi-main,.fi-simple-main).fi-width-screen-2xl{max-width:var(--breakpoint-2xl)}:is(.fi-main,.fi-simple-main).fi-width-screen{inset:calc(var(--spacing)*0);position:fixed}.fi-simple-layout{flex-direction:column;align-items:center;min-height:100dvh;display:flex}.fi-simple-layout-header{inset-inline-end:calc(var(--spacing)*0);top:calc(var(--spacing)*0);height:calc(var(--spacing)*16);align-items:center;column-gap:calc(var(--spacing)*4);padding-inline-end:calc(var(--spacing)*4);display:flex;position:absolute}@media (min-width:48rem){.fi-simple-layout-header{padding-inline-end:calc(var(--spacing)*6)}}@media (min-width:64rem){.fi-simple-layout-header{padding-inline-end:calc(var(--spacing)*8)}}.fi-simple-main-ctn{flex-grow:1;justify-content:center;align-items:center;width:100%;display:flex}.fi-simple-main{margin-block:calc(var(--spacing)*16);background-color:var(--color-white);width:100%;padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*12);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}@media (min-width:40rem){.fi-simple-main{border-radius:var(--radius-xl);padding-inline:calc(var(--spacing)*12)}}.fi-simple-main:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-simple-main:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-logo{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5);--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--gray-950);display:flex}.fi-logo:where(.dark,.dark *){color:var(--color-white)}.fi-logo.fi-logo-light:where(.dark,.dark *),.fi-logo.fi-logo-dark{display:none}.fi-logo.fi-logo-dark:where(.dark,.dark *){display:flex}@media (min-width:48rem){.fi-page-sub-navigation-dropdown{display:none}}.fi-page-sub-navigation-dropdown>.fi-dropdown-trigger>.fi-btn{justify-content:space-between;width:100%}.fi-page-sub-navigation-sidebar-ctn{width:calc(var(--spacing)*72);flex-direction:column;display:none}@media (min-width:48rem){.fi-page-sub-navigation-sidebar-ctn{display:flex}}.fi-page-sub-navigation-sidebar{row-gap:calc(var(--spacing)*7);flex-direction:column;display:flex}.fi-page-sub-navigation-tabs{display:none}@media (min-width:48rem){.fi-page-sub-navigation-tabs{display:flex}}.fi-page.fi-height-full,.fi-page.fi-height-full .fi-page-main,.fi-page.fi-height-full .fi-page-header-main-ctn,.fi-page.fi-height-full .fi-page-content{height:100%}.fi-page.fi-page-has-sub-navigation .fi-page-main{gap:calc(var(--spacing)*8);flex-direction:column;display:flex}@media (min-width:48rem){:is(.fi-page.fi-page-has-sub-navigation.fi-page-has-sub-navigation-start,.fi-page.fi-page-has-sub-navigation.fi-page-has-sub-navigation-end) .fi-page-main{flex-direction:row;align-items:flex-start}}.fi-page-header-main-ctn{row-gap:calc(var(--spacing)*8);padding-block:calc(var(--spacing)*8);flex-direction:column;display:flex}.fi-page-main-sub-navigation-mobile-menu-render-hook-ctn{display:contents}@media (min-width:48rem){.fi-page-main-sub-navigation-mobile-menu-render-hook-ctn{display:none}}.fi-page-content{row-gap:calc(var(--spacing)*8);flex:1;grid-auto-columns:minmax(0,1fr);display:grid}.fi-simple-page-content{row-gap:calc(var(--spacing)*6);grid-auto-columns:minmax(0,1fr);display:grid}.fi-sidebar-group{row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.fi-sidebar-group.fi-collapsed .fi-sidebar-group-collapse-btn{rotate:-180deg}.fi-sidebar-group.fi-collapsible>.fi-sidebar-group-btn{cursor:pointer}.fi-sidebar-group.fi-active .fi-sidebar-group-dropdown-trigger-btn .fi-icon{color:var(--primary-600)}.fi-sidebar-group.fi-active .fi-sidebar-group-dropdown-trigger-btn .fi-icon:where(.dark,.dark *){color:var(--primary-400)}.fi-sidebar-group-btn{align-items:center;column-gap:calc(var(--spacing)*3);padding:calc(var(--spacing)*2);display:flex}.fi-sidebar-group-btn .fi-icon{color:var(--gray-400)}.fi-sidebar-group-btn .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-sidebar-group-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-500);flex:1}.fi-sidebar-group-label:where(.dark,.dark *){color:var(--gray-400)}.fi-sidebar-group-dropdown-trigger-btn{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*3);border-radius:var(--radius-lg);padding:calc(var(--spacing)*2);--tw-outline-style:none;outline-style:none;flex:1;display:flex;position:relative}@media (forced-colors:active){.fi-sidebar-group-dropdown-trigger-btn{outline-offset:2px;outline:2px solid #0000}}.fi-sidebar-group-dropdown-trigger-btn{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-sidebar-group-dropdown-trigger-btn:hover{background-color:var(--gray-100)}}.fi-sidebar-group-dropdown-trigger-btn:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-group-dropdown-trigger-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-sidebar-group-dropdown-trigger-btn .fi-icon{color:var(--gray-400)}.fi-sidebar-group-dropdown-trigger-btn .fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-sidebar-group-items{row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}:is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter{transition-delay:.1s}@media (min-width:64rem){:is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}:is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter-start{opacity:0}:is(.fi-sidebar-group-btn,.fi-sidebar-group-items).fi-transition-enter-end{opacity:1}.fi-sidebar{inset-block:calc(var(--spacing)*0);z-index:30;background-color:var(--color-white);height:100dvh;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));flex-direction:column;align-content:flex-start;display:flex;position:fixed;inset-inline-start:calc(var(--spacing)*0)}@media (min-width:64rem){.fi-sidebar{z-index:20;background-color:#0000;transition-property:none}}.fi-sidebar:where(.dark,.dark *){background-color:var(--gray-900)}@media (min-width:64rem){.fi-sidebar:where(.dark,.dark *){background-color:#0000}}.fi-sidebar.fi-sidebar-open{width:var(--sidebar-width);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y);--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}@media (min-width:64rem){.fi-sidebar.fi-sidebar-open{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}}.fi-sidebar.fi-sidebar-open:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-sidebar.fi-sidebar-open:where(.dark,.dark *){--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-sidebar.fi-sidebar-open:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-sidebar:not(.fi-sidebar-open){--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-sidebar:not(.fi-sidebar-open):where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}@media (min-width:64rem){.fi-body-has-topbar .fi-sidebar{height:calc(100dvh - 4rem);top:4rem}}.fi-sidebar-close-overlay{inset:calc(var(--spacing)*0);z-index:30;background-color:var(--gray-950);position:fixed}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-close-overlay{background-color:color-mix(in oklab,var(--gray-950)50%,transparent)}}.fi-sidebar-close-overlay{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.5s;transition-duration:.5s}@media (min-width:64rem){.fi-sidebar-close-overlay{display:none}}.fi-sidebar-close-overlay:where(.dark,.dark *){background-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-close-overlay:where(.dark,.dark *){background-color:color-mix(in oklab,var(--gray-950)75%,transparent)}}@media (min-width:64rem){.fi-body.fi-body-has-top-navigation .fi-sidebar{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-body.fi-body-has-top-navigation .fi-sidebar:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.fi-body:not(.fi-body-has-top-navigation) .fi-sidebar.fi-sidebar-open,.fi-body:not(.fi-body-has-top-navigation).fi-body-has-sidebar-collapsible-on-desktop .fi-sidebar:not(.fi-sidebar-open){position:sticky}.fi-body:not(.fi-body-has-top-navigation).fi-body-has-sidebar-collapsible-on-desktop .fi-sidebar:not(.fi-sidebar-open),.fi-body:not(.fi-body-has-top-navigation).fi-body-has-sidebar-collapsible-on-desktop .fi-sidebar:not(.fi-sidebar-open):where(:dir(rtl),[dir=rtl],[dir=rtl] *),.fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar,.fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}}.fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar:not(.fi-sidebar-open){width:var(--sidebar-width)}@media (min-width:64rem){.fi-body:not(.fi-body-has-top-navigation):not(.fi-body-has-sidebar-collapsible-on-desktop):not(.fi-body-has-sidebar-fully-collapsible-on-desktop) .fi-sidebar:not(.fi-sidebar-open){position:sticky}}.fi-sidebar-header-ctn{overflow-x:clip}.fi-sidebar-header{height:calc(var(--spacing)*16);justify-content:center;align-items:center;display:flex}.fi-sidebar-header-logo-ctn{flex:1}.fi-body-has-topbar .fi-sidebar-header{background-color:var(--color-white);padding-inline:calc(var(--spacing)*6);--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);--tw-ring-color:var(--gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-body-has-topbar .fi-sidebar-header{--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent)}}@media (min-width:64rem){.fi-body-has-topbar .fi-sidebar-header{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);display:none}}.fi-body-has-topbar .fi-sidebar-header:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-body-has-topbar .fi-sidebar-header:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}:not(.fi-body-has-topbar) .fi-sidebar-header{padding-inline:calc(var(--spacing)*4);--tw-shadow:0 0 #0000;--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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);background-color:#0000}:not(.fi-body-has-topbar) .fi-sidebar-header .fi-logo{margin-inline-start:calc(var(--spacing)*3)}.fi-sidebar-nav{row-gap:calc(var(--spacing)*7);padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*8);scrollbar-gutter:stable;flex-direction:column;flex-grow:1;display:flex;overflow:hidden auto}.fi-sidebar-nav-groups{margin-inline:calc(var(--spacing)*-2);row-gap:calc(var(--spacing)*7);flex-direction:column;display:flex}.fi-sidebar-item.fi-active,.fi-sidebar-item.fi-sidebar-item-has-active-child-items{row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn{background-color:var(--gray-100)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-item.fi-active>.fi-sidebar-item-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-icon{color:var(--primary-700)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--primary-400)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-grouped-border>.fi-sidebar-item-grouped-border-part{background-color:var(--primary-700)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-grouped-border>.fi-sidebar-item-grouped-border-part:where(.dark,.dark *){background-color:var(--primary-400)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-label{color:var(--primary-700)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn>.fi-sidebar-item-label:where(.dark,.dark *){color:var(--primary-400)}.fi-sidebar-item.fi-active>.fi-sidebar-item-btn .fi-sidebar-item-grouped-border-part{height:calc(var(--spacing)*1.5);width:calc(var(--spacing)*1.5);border-radius:3.40282e38px;position:relative}@media (hover:hover){.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:hover{background-color:var(--gray-100)}}.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-item.fi-sidebar-item-has-url>.fi-sidebar-item-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-sidebar-item-btn{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*3);border-radius:var(--radius-lg);padding:calc(var(--spacing)*2);--tw-outline-style:none;outline-style:none;display:flex;position:relative}@media (forced-colors:active){.fi-sidebar-item-btn{outline-offset:2px;outline:2px solid #0000}}.fi-sidebar-item-btn{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-sidebar-item-btn>.fi-icon{color:var(--gray-400)}.fi-sidebar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-sidebar-item-grouped-border{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6);justify-content:center;align-items:center;display:flex;position:relative}.fi-sidebar-item-grouped-border-part-not-first{background-color:var(--gray-300);width:1px;position:absolute;top:-50%;bottom:50%}.fi-sidebar-item-grouped-border-part-not-first:where(.dark,.dark *){background-color:var(--gray-600)}.fi-sidebar-item-grouped-border-part-not-last{background-color:var(--gray-300);width:1px;position:absolute;top:50%;bottom:-50%}.fi-sidebar-item-grouped-border-part-not-last:where(.dark,.dark *){background-color:var(--gray-600)}.fi-sidebar-item-grouped-border-part{height:calc(var(--spacing)*1.5);width:calc(var(--spacing)*1.5);background-color:var(--gray-400);border-radius:3.40282e38px;position:relative}.fi-sidebar-item-grouped-border-part:where(.dark,.dark *){background-color:var(--gray-500)}.fi-sidebar-item-label{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);flex:1;overflow:hidden}.fi-sidebar-item-label:where(.dark,.dark *){color:var(--gray-200)}@media (min-width:64rem){:is(.fi-sidebar-item-label,.fi-sidebar-item-badge-ctn).fi-transition-enter{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-delay:.1s}}:is(.fi-sidebar-item-label,.fi-sidebar-item-badge-ctn).fi-transition-enter-start{opacity:0}:is(.fi-sidebar-item-label,.fi-sidebar-item-badge-ctn).fi-transition-enter-end{opacity:1}.fi-sidebar-footer{margin-inline:calc(var(--spacing)*4);margin-block:calc(var(--spacing)*3);row-gap:calc(var(--spacing)*3);display:grid}.fi-sidebar-footer>.fi-no-database{display:block}.fi-sidebar-sub-group-items{row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.fi-sidebar-database-notifications-btn{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*3);border-radius:var(--radius-lg);width:100%;padding:calc(var(--spacing)*2);text-align:start;--tw-outline-style:none;outline-style:none;display:flex;position:relative}@media (forced-colors:active){.fi-sidebar-database-notifications-btn{outline-offset:2px;outline:2px solid #0000}}.fi-sidebar-database-notifications-btn{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-sidebar-database-notifications-btn:hover{background-color:var(--gray-100)}}.fi-sidebar-database-notifications-btn:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.fi-sidebar-database-notifications-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-database-notifications-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-sidebar-database-notifications-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-sidebar-database-notifications-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-sidebar-database-notifications-btn>.fi-icon{color:var(--gray-400)}.fi-sidebar-database-notifications-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700);flex:1;overflow:hidden}.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label:where(.dark,.dark *){color:var(--gray-200)}@media (min-width:64rem){:is(.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label,.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-badge-ctn).fi-transition-enter{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));transition-delay:.1s}}:is(.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label,.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-badge-ctn).fi-transition-enter-start{opacity:0}:is(.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-label,.fi-sidebar-database-notifications-btn>.fi-sidebar-database-notifications-btn-badge-ctn).fi-transition-enter-end{opacity:1}.fi-sidebar-open-sidebar-btn,.fi-sidebar-open-collapse-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}.fi-sidebar-close-collapse-sidebar-btn{display:none;margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.fi-sidebar-close-collapse-sidebar-btn{display:flex}:is(.fi-body.fi-body-has-sidebar-collapsible-on-desktop,.fi-body:not(.fi-body-has-sidebar-fully-collapsible-on-desktop)) .fi-sidebar-open-sidebar-btn{display:none}}.fi-sidebar-close-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.fi-sidebar-close-sidebar-btn{display:none}}.fi-tenant-menu-trigger{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*3);border-radius:var(--radius-lg);width:100%;padding:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;outline-style:none;display:flex}@media (forced-colors:active){.fi-tenant-menu-trigger{outline-offset:2px;outline:2px solid #0000}}.fi-tenant-menu-trigger{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-tenant-menu-trigger:hover{background-color:var(--gray-100)}}.fi-tenant-menu-trigger:focus-visible{background-color:var(--gray-100)}@media (hover:hover){.fi-tenant-menu-trigger:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-tenant-menu-trigger:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-tenant-menu-trigger:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-tenant-menu-trigger:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-tenant-menu-trigger .fi-tenant-avatar{flex-shrink:0}.fi-tenant-menu-trigger .fi-icon{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);color:var(--gray-400);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;flex-shrink:0;margin-inline-start:auto;transition-duration:75ms}@media (hover:hover){.fi-tenant-menu-trigger .fi-icon:is(:where(.group):hover *){color:var(--gray-500)}}.fi-tenant-menu-trigger .fi-icon:is(:where(.group):focus-visible *),.fi-tenant-menu-trigger .fi-icon:where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){.fi-tenant-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):hover *){color:var(--gray-400)}}.fi-tenant-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):focus-visible *){color:var(--gray-400)}.fi-tenant-menu-trigger:hover .fi-icon{color:var(--gray-500)}.fi-tenant-menu-trigger:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-tenant-menu-trigger:focus-visible .fi-icon{color:var(--gray-500)}.fi-tenant-menu-trigger:focus-visible .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-tenant-menu-trigger-text{text-align:start;justify-items:start;display:grid}.fi-tenant-menu-trigger-current-tenant-label{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--gray-500)}.fi-tenant-menu-trigger-current-tenant-label:where(.dark,.dark *){color:var(--gray-400)}.fi-tenant-menu-trigger-tenant-name{color:var(--gray-950)}.fi-tenant-menu-trigger-tenant-name:where(.dark,.dark *){color:var(--color-white)}.fi-sidebar .fi-tenant-menu{margin-inline:calc(var(--spacing)*4);margin-top:calc(var(--spacing)*3)}.fi-theme-switcher{column-gap:calc(var(--spacing)*1);grid-auto-flow:column;display:grid}.fi-theme-switcher-btn{border-radius:var(--radius-md);padding:calc(var(--spacing)*2);--tw-outline-style:none;outline-style:none;justify-content:center;display:flex}@media (forced-colors:active){.fi-theme-switcher-btn{outline-offset:2px;outline:2px solid #0000}}.fi-theme-switcher-btn{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-theme-switcher-btn:hover{background-color:var(--gray-50)}}.fi-theme-switcher-btn:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.fi-theme-switcher-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-theme-switcher-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-theme-switcher-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-theme-switcher-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-theme-switcher-btn.fi-active{background-color:var(--gray-50);color:var(--primary-500)}.fi-theme-switcher-btn.fi-active:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-theme-switcher-btn.fi-active:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-theme-switcher-btn.fi-active:where(.dark,.dark *){color:var(--primary-400)}.fi-theme-switcher-btn:not(.fi-active){color:var(--gray-400)}@media (hover:hover){.fi-theme-switcher-btn:not(.fi-active):hover{color:var(--gray-500)}}.fi-theme-switcher-btn:not(.fi-active):focus-visible,.fi-theme-switcher-btn:not(.fi-active):where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){.fi-theme-switcher-btn:not(.fi-active):where(.dark,.dark *):hover{color:var(--gray-400)}}.fi-theme-switcher-btn:not(.fi-active):where(.dark,.dark *):focus-visible{color:var(--gray-400)}.fi-topbar-ctn{top:calc(var(--spacing)*0);z-index:30;position:sticky;overflow-x:clip}.fi-topbar{min-height:calc(var(--spacing)*16);background-color:var(--color-white);padding-inline:calc(var(--spacing)*4);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);--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);--tw-ring-color:color-mix(in oklab,var(--gray-950)5%,transparent);align-items:center;display:flex}.fi-topbar:where(.dark,.dark *){background-color:var(--gray-900);--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.fi-topbar:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-topbar .fi-tenant-menu{display:none}@media (min-width:64rem){.fi-topbar .fi-tenant-menu{display:block}}.fi-topbar-open-sidebar-btn,.fi-topbar-close-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.fi-topbar-close-sidebar-btn{display:none}}.fi-topbar-open-collapse-sidebar-btn{margin-inline:calc(var(--spacing)*0)!important}.fi-topbar-close-collapse-sidebar-btn{display:none;margin-inline:calc(var(--spacing)*0)!important}@media (min-width:64rem){.fi-topbar-close-collapse-sidebar-btn{display:flex}}.fi-topbar-start{align-items:center;margin-inline-end:calc(var(--spacing)*6);display:none}@media (min-width:64rem){.fi-topbar-start{display:flex}}.fi-topbar-start .fi-logo{margin-inline-start:calc(var(--spacing)*3)}.fi-topbar-collapse-sidebar-btn-ctn{width:calc(var(--spacing)*9);flex-shrink:0}@media (min-width:64rem){:is(.fi-body.fi-body-has-sidebar-collapsible-on-desktop,.fi-body:not(.fi-body-has-sidebar-fully-collapsible-on-desktop)) .fi-topbar-open-sidebar-btn{display:none}}.fi-topbar-nav-groups{align-items:center;column-gap:calc(var(--spacing)*4);margin-inline-start:calc(var(--spacing)*4);margin-inline-end:calc(var(--spacing)*4);display:none}@media (min-width:64rem){.fi-topbar-nav-groups{margin-block:calc(var(--spacing)*2);row-gap:calc(var(--spacing)*1);flex-wrap:wrap;display:flex}}.fi-topbar-end{align-items:center;column-gap:calc(var(--spacing)*4);margin-inline-start:auto;display:flex}.fi-topbar-item-btn{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*2);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);--tw-outline-style:none;outline-style:none;display:flex}@media (forced-colors:active){.fi-topbar-item-btn{outline-offset:2px;outline:2px solid #0000}}.fi-topbar-item-btn{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}@media (hover:hover){.fi-topbar-item-btn:hover{background-color:var(--gray-50)}}.fi-topbar-item-btn:focus-visible{background-color:var(--gray-50)}@media (hover:hover){.fi-topbar-item-btn:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-topbar-item-btn:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.fi-topbar-item-btn:where(.dark,.dark *):focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-topbar-item-btn:where(.dark,.dark *):focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-topbar-item-btn>.fi-icon{color:var(--gray-400)}.fi-topbar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--gray-500)}.fi-topbar-item-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--gray-700)}.fi-topbar-item-label:where(.dark,.dark *){color:var(--gray-200)}.fi-topbar-item.fi-active .fi-topbar-item-btn{background-color:var(--gray-50)}.fi-topbar-item.fi-active .fi-topbar-item-btn:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.fi-topbar-item.fi-active .fi-topbar-item-btn:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.fi-topbar-item.fi-active .fi-topbar-item-btn>.fi-icon{color:var(--primary-600)}.fi-topbar-item.fi-active .fi-topbar-item-btn>.fi-icon:where(.dark,.dark *){color:var(--primary-400)}.fi-topbar-item.fi-active .fi-topbar-item-label{color:var(--primary-600)}.fi-topbar-item.fi-active .fi-topbar-item-label:where(.dark,.dark *){color:var(--primary-400)}.fi-simple-user-menu-ctn{align-items:center;column-gap:calc(var(--spacing)*4);display:flex}.fi-topbar .fi-user-menu-trigger{flex-shrink:0}.fi-sidebar .fi-user-menu-trigger{justify-content:center;align-items:center;column-gap:calc(var(--spacing)*3);border-radius:var(--radius-lg);width:100%;padding:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-outline-style:none;outline-style:none;display:flex}@media (forced-colors:active){.fi-sidebar .fi-user-menu-trigger{outline-offset:2px;outline:2px solid #0000}}.fi-sidebar .fi-user-menu-trigger{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;transition-duration:75ms}.fi-sidebar .fi-user-menu-trigger .fi-user-avatar{flex-shrink:0}.fi-sidebar .fi-user-menu-trigger .fi-icon{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);color:var(--gray-400);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:75ms;flex-shrink:0;margin-inline-start:auto;transition-duration:75ms}@media (hover:hover){.fi-sidebar .fi-user-menu-trigger .fi-icon:is(:where(.group):hover *){color:var(--gray-500)}}.fi-sidebar .fi-user-menu-trigger .fi-icon:is(:where(.group):focus-visible *),.fi-sidebar .fi-user-menu-trigger .fi-icon:where(.dark,.dark *){color:var(--gray-500)}@media (hover:hover){.fi-sidebar .fi-user-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):hover *){color:var(--gray-400)}}.fi-sidebar .fi-user-menu-trigger .fi-icon:where(.dark,.dark *):is(:where(.group):focus-visible *){color:var(--gray-400)}.fi-sidebar .fi-user-menu-trigger:hover .fi-icon{color:var(--gray-500)}.fi-sidebar .fi-user-menu-trigger:hover .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-sidebar .fi-user-menu-trigger:focus-visible .fi-icon{color:var(--gray-500)}.fi-sidebar .fi-user-menu-trigger:focus-visible .fi-icon:where(.dark,.dark *){color:var(--gray-400)}.fi-sidebar .fi-user-menu-trigger .fi-tenant-menu-trigger-text{text-align:start;color:var(--gray-950);justify-items:start;display:grid}.fi-sidebar .fi-user-menu-trigger .fi-tenant-menu-trigger-text:where(.dark,.dark *){color:var(--color-white)}.fi-sidebar .fi-user-menu .fi-dropdown-panel{max-width:max(14rem,100% - 1.5rem)!important}.fi-account-widget .fi-section-content{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-account-widget-logout-form{margin-block:auto}.fi-account-widget-main{flex:1}.fi-account-widget-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--gray-950);flex:1;display:grid}.fi-account-widget-heading:where(.dark,.dark *){color:var(--color-white)}.fi-account-widget-user-name{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--gray-500)}.fi-account-widget-user-name:where(.dark,.dark *){color:var(--gray-400)}.fi-filament-info-widget .fi-section-content{align-items:center;column-gap:calc(var(--spacing)*3);display:flex}.fi-filament-info-widget-main{flex:1}.fi-filament-info-widget-logo{height:calc(var(--spacing)*5);color:var(--gray-950)}.fi-filament-info-widget-logo:where(.dark,.dark *){color:var(--color-white)}.fi-filament-info-widget-version{margin-top:calc(var(--spacing)*2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--gray-500)}.fi-filament-info-widget-version:where(.dark,.dark *){color:var(--gray-400)}.fi-filament-info-widget-links{align-items:flex-end;row-gap:calc(var(--spacing)*1);flex-direction:column;display:flex}}@layer utilities{.fi-color-danger{--color-50:var(--danger-50);--color-100:var(--danger-100);--color-200:var(--danger-200);--color-300:var(--danger-300);--color-400:var(--danger-400);--color-500:var(--danger-500);--color-600:var(--danger-600);--color-700:var(--danger-700);--color-800:var(--danger-800);--color-900:var(--danger-900);--color-950:var(--danger-950)}.fi-color-gray{--color-50:var(--gray-50);--color-100:var(--gray-100);--color-200:var(--gray-200);--color-300:var(--gray-300);--color-400:var(--gray-400);--color-500:var(--gray-500);--color-600:var(--gray-600);--color-700:var(--gray-700);--color-800:var(--gray-800);--color-900:var(--gray-900);--color-950:var(--gray-950)}.fi-color-info{--color-50:var(--info-50);--color-100:var(--info-100);--color-200:var(--info-200);--color-300:var(--info-300);--color-400:var(--info-400);--color-500:var(--info-500);--color-600:var(--info-600);--color-700:var(--info-700);--color-800:var(--info-800);--color-900:var(--info-900);--color-950:var(--info-950)}.fi-color-primary{--color-50:var(--primary-50);--color-100:var(--primary-100);--color-200:var(--primary-200);--color-300:var(--primary-300);--color-400:var(--primary-400);--color-500:var(--primary-500);--color-600:var(--primary-600);--color-700:var(--primary-700);--color-800:var(--primary-800);--color-900:var(--primary-900);--color-950:var(--primary-950)}.fi-color-success{--color-50:var(--success-50);--color-100:var(--success-100);--color-200:var(--success-200);--color-300:var(--success-300);--color-400:var(--success-400);--color-500:var(--success-500);--color-600:var(--success-600);--color-700:var(--success-700);--color-800:var(--success-800);--color-900:var(--success-900);--color-950:var(--success-950)}.fi-color-warning{--color-50:var(--warning-50);--color-100:var(--warning-100);--color-200:var(--warning-200);--color-300:var(--warning-300);--color-400:var(--warning-400);--color-500:var(--warning-500);--color-600:var(--warning-600);--color-700:var(--warning-700);--color-800:var(--warning-800);--color-900:var(--warning-900);--color-950:var(--warning-950)}.fi-bg-color-50{--bg:var(--color-50)}.fi-bg-color-100{--bg:var(--color-100)}.fi-bg-color-200{--bg:var(--color-200)}.fi-bg-color-300{--bg:var(--color-300)}.fi-bg-color-400{--bg:var(--color-400)}.fi-bg-color-500{--bg:var(--color-500)}.fi-bg-color-600{--bg:var(--color-600)}.fi-bg-color-700{--bg:var(--color-700)}.fi-bg-color-800{--bg:var(--color-800)}.fi-bg-color-900{--bg:var(--color-900)}.fi-bg-color-950{--bg:var(--color-950)}.hover\:fi-bg-color-50{--hover-bg:var(--color-50)}.hover\:fi-bg-color-100{--hover-bg:var(--color-100)}.hover\:fi-bg-color-200{--hover-bg:var(--color-200)}.hover\:fi-bg-color-300{--hover-bg:var(--color-300)}.hover\:fi-bg-color-400{--hover-bg:var(--color-400)}.hover\:fi-bg-color-500{--hover-bg:var(--color-500)}.hover\:fi-bg-color-600{--hover-bg:var(--color-600)}.hover\:fi-bg-color-700{--hover-bg:var(--color-700)}.hover\:fi-bg-color-800{--hover-bg:var(--color-800)}.hover\:fi-bg-color-900{--hover-bg:var(--color-900)}.hover\:fi-bg-color-950{--hover-bg:var(--color-950)}.dark\:fi-bg-color-50{--dark-bg:var(--color-50)}.dark\:fi-bg-color-100{--dark-bg:var(--color-100)}.dark\:fi-bg-color-200{--dark-bg:var(--color-200)}.dark\:fi-bg-color-300{--dark-bg:var(--color-300)}.dark\:fi-bg-color-400{--dark-bg:var(--color-400)}.dark\:fi-bg-color-500{--dark-bg:var(--color-500)}.dark\:fi-bg-color-600{--dark-bg:var(--color-600)}.dark\:fi-bg-color-700{--dark-bg:var(--color-700)}.dark\:fi-bg-color-800{--dark-bg:var(--color-800)}.dark\:fi-bg-color-900{--dark-bg:var(--color-900)}.dark\:fi-bg-color-950{--dark-bg:var(--color-950)}.dark\:hover\:fi-bg-color-50{--dark-hover-bg:var(--color-50)}.dark\:hover\:fi-bg-color-100{--dark-hover-bg:var(--color-100)}.dark\:hover\:fi-bg-color-200{--dark-hover-bg:var(--color-200)}.dark\:hover\:fi-bg-color-300{--dark-hover-bg:var(--color-300)}.dark\:hover\:fi-bg-color-400{--dark-hover-bg:var(--color-400)}.dark\:hover\:fi-bg-color-500{--dark-hover-bg:var(--color-500)}.dark\:hover\:fi-bg-color-600{--dark-hover-bg:var(--color-600)}.dark\:hover\:fi-bg-color-700{--dark-hover-bg:var(--color-700)}.dark\:hover\:fi-bg-color-800{--dark-hover-bg:var(--color-800)}.dark\:hover\:fi-bg-color-900{--dark-hover-bg:var(--color-900)}.dark\:hover\:fi-bg-color-950{--dark-hover-bg:var(--color-950)}.fi-text-color-0{--text:oklch(100% 0 0)}.fi-text-color-50{--text:var(--color-50)}.fi-text-color-100{--text:var(--color-100)}.fi-text-color-200{--text:var(--color-200)}.fi-text-color-300{--text:var(--color-300)}.fi-text-color-400{--text:var(--color-400)}.fi-text-color-500{--text:var(--color-500)}.fi-text-color-600{--text:var(--color-600)}.fi-text-color-700{--text:var(--color-700)}.fi-text-color-800{--text:var(--color-800)}.fi-text-color-900{--text:var(--color-900)}.fi-text-color-950{--text:var(--color-950)}.hover\:fi-text-color-0{--hover-text:oklch(100% 0 0)}.hover\:fi-text-color-50{--hover-text:var(--color-50)}.hover\:fi-text-color-100{--hover-text:var(--color-100)}.hover\:fi-text-color-200{--hover-text:var(--color-200)}.hover\:fi-text-color-300{--hover-text:var(--color-300)}.hover\:fi-text-color-400{--hover-text:var(--color-400)}.hover\:fi-text-color-500{--hover-text:var(--color-500)}.hover\:fi-text-color-600{--hover-text:var(--color-600)}.hover\:fi-text-color-700{--hover-text:var(--color-700)}.hover\:fi-text-color-800{--hover-text:var(--color-800)}.hover\:fi-text-color-900{--hover-text:var(--color-900)}.hover\:fi-text-color-950{--hover-text:var(--color-950)}.dark\:fi-text-color-0{--dark-text:oklch(100% 0 0)}.dark\:fi-text-color-50{--dark-text:var(--color-50)}.dark\:fi-text-color-100{--dark-text:var(--color-100)}.dark\:fi-text-color-200{--dark-text:var(--color-200)}.dark\:fi-text-color-300{--dark-text:var(--color-300)}.dark\:fi-text-color-400{--dark-text:var(--color-400)}.dark\:fi-text-color-500{--dark-text:var(--color-500)}.dark\:fi-text-color-600{--dark-text:var(--color-600)}.dark\:fi-text-color-700{--dark-text:var(--color-700)}.dark\:fi-text-color-800{--dark-text:var(--color-800)}.dark\:fi-text-color-900{--dark-text:var(--color-900)}.dark\:fi-text-color-950{--dark-text:var(--color-950)}.dark\:hover\:fi-text-color-0{--dark-hover-text:oklch(100% 0 0)}.dark\:hover\:fi-text-color-50{--dark-hover-text:var(--color-50)}.dark\:hover\:fi-text-color-100{--dark-hover-text:var(--color-100)}.dark\:hover\:fi-text-color-200{--dark-hover-text:var(--color-200)}.dark\:hover\:fi-text-color-300{--dark-hover-text:var(--color-300)}.dark\:hover\:fi-text-color-400{--dark-hover-text:var(--color-400)}.dark\:hover\:fi-text-color-500{--dark-hover-text:var(--color-500)}.dark\:hover\:fi-text-color-600{--dark-hover-text:var(--color-600)}.dark\:hover\:fi-text-color-700{--dark-hover-text:var(--color-700)}.dark\:hover\:fi-text-color-800{--dark-hover-text:var(--color-800)}.dark\:hover\:fi-text-color-900{--dark-hover-text:var(--color-900)}.dark\:hover\:fi-text-color-950{--dark-hover-text:var(--color-950)}.fi-sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.fi-prose{--prose-color:var(--color-gray-700);--prose-heading-color:var(--color-gray-950);--prose-strong-color:var(--color-gray-950);--prose-link-color:var(--color-gray-950);--prose-code-color:var(--color-gray-950);--prose-marker-color:var(--color-gray-700)}@supports (color:color-mix(in lab, red, red)){.fi-prose{--prose-marker-color:color-mix(in oklab,var(--color-gray-700)25%,transparent)}}.fi-prose{--prose-link-underline-color:var(--color-primary-400);--prose-th-borders:var(--color-gray-300);--prose-td-borders:var(--color-gray-200);--prose-hr-color:var(--color-gray-950)}@supports (color:color-mix(in lab, red, red)){.fi-prose{--prose-hr-color:color-mix(in oklab,var(--color-gray-950)5%,transparent)}}.fi-prose{--prose-blockquote-border-color:var(--color-gray-300);--prose-pre-bg:var(--color-gray-100)}.fi-prose:where(.dark,.dark *){--prose-color:var(--color-gray-300);--prose-heading-color:var(--color-white);--prose-strong-color:var(--color-white);--prose-link-color:var(--color-white);--prose-code-color:var(--color-white);--prose-marker-color:var(--color-gray-300)}@supports (color:color-mix(in lab, red, red)){.fi-prose:where(.dark,.dark *){--prose-marker-color:color-mix(in oklab,var(--color-gray-300)35%,transparent)}}.fi-prose:where(.dark,.dark *){--prose-link-underline-color:var(--color-sky-400);--prose-th-borders:var(--color-gray-600);--prose-td-borders:var(--color-gray-700);--prose-hr-color:oklab(100% 0 5.96046e-8/.1)}@supports (color:color-mix(in lab, red, red)){.fi-prose:where(.dark,.dark *){--prose-hr-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.fi-prose:where(.dark,.dark *){--prose-blockquote-border-color:var(--color-gray-600);--prose-pre-bg:var(--color-gray-900)}@supports (color:color-mix(in lab, red, red)){.fi-prose:where(.dark,.dark *){--prose-pre-bg:color-mix(in oklab,var(--color-gray-900)40%,transparent)}}.fi-prose{color:var(--prose-color);font-size:var(--text-sm);line-height:1.5}.fi-prose img+img{margin-top:0}.fi-prose :where(:not(.fi-not-prose,.fi-not-prose *,br))+:where(:not(.fi-not-prose,.fi-not-prose *,br)){margin-top:calc(var(--spacing)*4)}.fi-prose p br{margin:0}.fi-prose h1:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-xl);letter-spacing:-.025em;color:var(--prose-code-color);line-height:1.55556;font-weight:var(--font-weight-bold)}.fi-prose h2:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-lg);letter-spacing:-.025em;color:var(--prose-code-color);line-height:1.55556;font-weight:var(--font-weight-semibold)}.fi-prose h3:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-base);color:var(--prose-heading-color);line-height:1.55556;font-weight:var(--font-weight-semibold)}.fi-prose h4:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose h5:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose h6:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-sm);color:var(--prose-heading-color);line-height:2;font-weight:var(--font-weight-semibold)}.fi-prose :is(h2,h3,h4,h5,h6):where(:not(.fi-not-prose,.fi-not-prose *)){scroll-margin-top:calc(var(--spacing)*32)}@media (min-width:64rem){.fi-prose :is(h2,h3,h4,h5,h6):where(:not(.fi-not-prose,.fi-not-prose *)){scroll-margin-top:calc(var(--spacing)*18)}}.fi-prose ol:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:calc(var(--spacing)*6);list-style-type:decimal}.fi-prose ul:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:calc(var(--spacing)*6);list-style-type:disc}.fi-prose ol li:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose ul li:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:calc(var(--spacing)*3)}.fi-prose ol li+li:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose ul li+li:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:calc(var(--spacing)*4)}.fi-prose ol li:where(:not(.fi-not-prose,.fi-not-prose *))::marker{color:var(--prose-marker-color)}.fi-prose ul li:where(:not(.fi-not-prose,.fi-not-prose *))::marker{color:var(--prose-marker-color)}.fi-prose a:not(:where(:is(h2,h3,h4,h5,h6) *)):where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-link-color);font-weight:var(--font-weight-semibold);text-underline-offset:3px;text-decoration:underline;-webkit-text-decoration-color:var(--prose-link-underline-color);-webkit-text-decoration-color:var(--prose-link-underline-color);text-decoration-color:var(--prose-link-underline-color);text-decoration-thickness:1px}.fi-prose a:not(:where(:is(h2,h3,h4,h5,h6) *)):where(:not(.fi-not-prose,.fi-not-prose *)) code{font-weight:var(--font-weight-semibold)}.fi-prose a:hover:where(:not(.fi-not-prose,.fi-not-prose *)){text-decoration-thickness:2px}.fi-prose strong:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-strong-color);font-weight:var(--font-weight-semibold)}.fi-prose code:where(:not(.fi-not-prose,.fi-not-prose *)){font-variant-ligatures:none;font-family:var(--font-mono);font-weight:var(--font-weight-medium);color:var(--prose-code-color)}.fi-prose :where(h2,h3,h4,h5,h6) code:where(:not(.fi-not-prose,.fi-not-prose *)){font-weight:var(--font-weight-semibold)}.fi-prose code:where(:not(.fi-not-prose,.fi-not-prose *)):before,.fi-prose code:where(:not(.fi-not-prose,.fi-not-prose *)):after{content:"`";display:inline}.fi-prose pre:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:calc(var(--spacing)*4);margin-bottom:calc(var(--spacing)*10);border-radius:var(--radius-lg);padding-top:calc(var(--spacing)*3);padding-inline-end:calc(var(--spacing)*4);padding-bottom:calc(var(--spacing)*3);background-color:var(--prose-pre-bg);padding-inline-start:calc(var(--spacing)*4)}.fi-prose pre code *+:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:0}.fi-prose pre code:where(:not(.fi-not-prose,.fi-not-prose *)):before,.fi-prose pre code:where(:not(.fi-not-prose,.fi-not-prose *)):after{content:none}.fi-prose pre code:where(:not(.fi-not-prose,.fi-not-prose *)){font-variant-ligatures:none;font-family:var(--font-mono);font-size:var(--text-sm);line-height:2}.fi-prose table:where(:not(.fi-not-prose,.fi-not-prose *)){table-layout:auto;width:100%;font-size:var(--text-sm);margin-top:2em;margin-bottom:2em;line-height:1.4}.fi-prose thead:where(:not(.fi-not-prose,.fi-not-prose *)){border-bottom-width:1px;border-bottom-color:var(--prose-th-borders)}.fi-prose thead th:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--prose-heading-color);vertical-align:bottom;padding-inline-end:.6em;padding-bottom:.8em;padding-inline-start:.6em;font-weight:600}.fi-prose thead th:first-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:0}.fi-prose thead th:last-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-end:0}.fi-prose tbody tr:where(:not(.fi-not-prose,.fi-not-prose *)){border-bottom-width:1px;border-bottom-color:var(--prose-td-borders)}.fi-prose tbody tr:last-child:where(:not(.fi-not-prose,.fi-not-prose *)){border-bottom-width:0}.fi-prose tbody td:where(:not(.fi-not-prose,.fi-not-prose *)){vertical-align:baseline}.fi-prose tfoot:where(:not(.fi-not-prose,.fi-not-prose *)){border-top-width:1px;border-top-color:var(--prose-th-borders)}.fi-prose tfoot td:where(:not(.fi-not-prose,.fi-not-prose *)){vertical-align:top}.fi-prose tbody td:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose tfoot td:where(:not(.fi-not-prose,.fi-not-prose *)){padding-top:.8em;padding-inline-end:.6em;padding-bottom:.8em;padding-inline-start:.6em}.fi-prose tbody td:first-child:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose tfoot td:first-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-start:0}.fi-prose tbody td:last-child:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose tfoot td:last-child:where(:not(.fi-not-prose,.fi-not-prose *)){padding-inline-end:0}.fi-prose th:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose td:where(:not(.fi-not-prose,.fi-not-prose *)){text-align:start}.fi-prose td code:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:.8125rem}.fi-prose hr:where(:not(.fi-not-prose,.fi-not-prose *)){border-color:var(--prose-hr-color);margin-block:calc(var(--spacing)*8)}.fi-prose hr:where(:not(.fi-not-prose,.fi-not-prose *))+h2{margin-top:calc(var(--spacing)*8)}.fi-prose blockquote{border-inline-start-width:.25rem;border-inline-start-color:var(--prose-blockquote-border-color);padding-inline-start:calc(var(--spacing)*4);font-style:italic}.fi-prose blockquote p:first-of-type:before{content:open-quote}.fi-prose blockquote p:last-of-type:after{content:close-quote}.fi-prose figure:where(:not(.fi-not-prose,.fi-not-prose *)) figcaption:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:calc(var(--spacing)*3);text-align:center;font-size:var(--text-sm);line-height:var(--text-sm--line-height);color:var(--prose-color);font-style:italic}@supports (color:color-mix(in lab, red, red)){.fi-prose figure:where(:not(.fi-not-prose,.fi-not-prose *)) figcaption:where(:not(.fi-not-prose,.fi-not-prose *)){color:color-mix(in oklab,var(--prose-color)75%,transparent)}}.fi-prose :first-child:where(:not(.fi-not-prose,.fi-not-prose *)){margin-top:0}.fi-prose :last-child:where(:not(.fi-not-prose,.fi-not-prose *)){margin-bottom:0}.fi-prose .color:where(:not(.fi-not-prose,.fi-not-prose *)){color:var(--color)}.fi-prose .color:where(:not(.fi-not-prose,.fi-not-prose *)):where(.dark,.dark *){color:var(--dark-color)}.fi-prose .lead:where(:not(.fi-not-prose,.fi-not-prose *)){font-size:var(--text-base)}.fi-prose span[data-type=mention]:where(:not(.fi-not-prose,.fi-not-prose *)),.fi-prose a[data-type=mention]:where(:not(.fi-not-prose,.fi-not-prose *)){font-weight:var(--font-weight-semibold);white-space:nowrap;margin-block:0;display:inline-block}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *)){gap:calc(var(--spacing)*4);grid-template-columns:repeat(1,minmax(0,1fr));display:grid}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=default]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=default]>.grid-layout-col{grid-column:var(--col-span)}@media (min-width:40rem){.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=sm]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=sm]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:48rem){.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=md]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=md]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:64rem){.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=lg]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=lg]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:80rem){.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=xl]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint=xl]>.grid-layout-col{grid-column:var(--col-span)}}@media (min-width:96rem){.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint="2xl"]{grid-template-columns:var(--cols)}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))[data-from-breakpoint="2xl"]>.grid-layout-col{grid-column:var(--col-span)}}.fi-prose .grid-layout:where(:not(.fi-not-prose,.fi-not-prose *))>.grid-layout-col{min-width:0;margin-top:0}}@property --tw-font-weight{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-tracking{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@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-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@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-ease{syntax:"*";inherits:false}@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-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
\ No newline at end of file
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..e69de29
diff --git a/public/favicon.svg b/public/favicon.svg
new file mode 100644
index 0000000..6103433
--- /dev/null
+++ b/public/favicon.svg
@@ -0,0 +1,6 @@
+
diff --git a/public/fonts/filament/filament/inter/index.css b/public/fonts/filament/filament/inter/index.css
new file mode 100644
index 0000000..425213e
--- /dev/null
+++ b/public/fonts/filament/filament/inter/index.css
@@ -0,0 +1 @@
+@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./inter-cyrillic-ext-wght-normal-IYF56FF6.woff2") format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./inter-cyrillic-wght-normal-JEOLYBOO.woff2") format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./inter-greek-ext-wght-normal-EOVOK2B5.woff2") format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./inter-greek-wght-normal-IRE366VL.woff2") format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./inter-vietnamese-wght-normal-CE5GGD3W.woff2") format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./inter-latin-ext-wght-normal-HA22NDSG.woff2") format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url("./inter-latin-wght-normal-NRMW37G5.woff2") format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
diff --git a/public/fonts/filament/filament/inter/inter-cyrillic-ext-wght-normal-IYF56FF6.woff2 b/public/fonts/filament/filament/inter/inter-cyrillic-ext-wght-normal-IYF56FF6.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..de83a9c7418a1121c8a59bbc7002c69c43cbe76a
GIT binary patch
literal 25960
zcmV(
zfvZ>nHUcCAhX4d11%@sMkTeVj8)T+6Y?~In+Xg_ESPSNQ*H-Dl^V<+i7@4(
zVA=owJ-Hz=@DEh?t*SuItY(vK)*Ts`HIzdus(G+!C1r{_VLHfTGCesMLA0W>@vbM!
zc+hY{i8igEX}{i>x;c{#g{vHGS;0&u&!my0gQbn?st@UqFAQ|?!N|=f-?N+g@RyPe
zMN-%#@|C*&`;;L1~2JcrvGp|JZ0TO~03u=KN777WX+ofl}o~VDiXog^$of#8kGsdK>#NHGXFu(we1gyqN
zR0MnGoUtj>jRk9QHoE-H#c$e+3b)pe&+EUcZr2Gqe?Tn(CVpt)3(38k&NhELvjkW2
z&TNdZ`_V6bu*F?(M{{Q?f?$Y700nOQ8vz(o4JpCH|DP&+g##e}g!0m9OH0K)L5dNm
z)rS_nK=q&IN}D-APKku;$x2c__aL?{0sE^h`|2vuDpobB&K3Tf
zTixdc^SIE89%mRI>0&4rOIXgvIHOX{zS97ygCqx%@@eTz=W(Xi<$uWE^!Z$VLI8OL
z7_=a@I)kJGmzyAI14ypc5V^WC>8RaHIe?^mijW->l5p&RUPL^a!bUP7vIs&j
zOhLdrBUmJlsA<(Qm@tl8u(GuX5V6FHEm+tCgcyV~2)6|8c=07Lh
z;MY(8hWP*ls3_M}_u4$ZU?djL6pGYvm1e}`P%K%_5n3bz0e&6Q0FZ?N0T9BUDAazf
z$%*9$H_Ca;KD^B4F#DJoU&L(ifHUZ0y$Jyy&6bOpvD?TkIoCDW-o!(O1RNeAT^|NG
z|71T7t3mLn;q5RJ2D;zqR^U;D-1h+k|G8U&qCCCfSLek9ZR#diIWD!If7HD*F+bP)
z`22M)PNa-&B5#ZUX}3_Tp1J!=819@nKbu>Tm+xo5blg)?vh&?F;x}hmB!|i6vstvy
zJ8spcc};b95`Q~-&bJ%b+bi90@rM&Ez6X&zM*fRH%<3uE$N&CFlaTZ)Zu`v`z)hu=
z_;v!A&p#f%eCFLU=)8zzX_qnmzq@pv__kLa?O&j-xp0{N9k+x}@WTC`wS%hU4t~6b
z%T7(fIo~=y!=fxxs!El+OnF>>o-+yteePMm5u$o0%z%seYLw2C8gc2OS$GVr;&fy)nz>_JFz2z!{bV
z!?_>8?c$gZ6YihLd2?Pe_!_-j?K}f$+raXgj&+{qbbpwW_7l!mj_q4+S4CgtJN^9L
zYmIK5l)SnR->x(~Q~t!I%RS$swDy%!4bw&OSm`1Q?Ihinor1^yoZa!efPYyijkNN0R
zV=({{<-Y3V3szm-Xdo!%t^jXjMi)TlZXZD!p9HI?hcwu&Ws!9*AlppfQ|~i{bu&w%
z2$jSbn2`(wEwaEMC^yrkN~QR$VNh)sfJIv}%?TL39^jlBA2!NCm&&YD1+m+dSE}z)
z(B=xzwue+HodJKJ!S7rqGusy)Awhx_tno`QjdfMN#8^t5Sa6wcS`GwCHHB{KK}Y2xcO;&XtJS>)d_qwuApexzU@j9vbe8~R0oh!{pU8dA
zW|BZIgyMVxXtqAHd^MZSPI(y5u*$nRqtccbCd4fGq0i0Oc?x4r8#83jzxw5J@A&bE
ztxGI6A>6fR?Mw|3^4hU%D%dVvyYm4LbA@%DX=TN7T&|O2OsK6aA&RJ@Q_E9_!McLl
zsoc$*!y*|{CMG-m;Sq3|Cb@#8Y6!Va)}cySw$r9%(J`4Ok=^F7StE`2_C&K3A%tLM
zQw@5kZUYu-+wl4kMe=bL(mFczzQ*Crt#(8Qb@}VxX{(LEU~1K2FnDmeL{Z_{<{5HK
z1ZZ17e$f(N!T~@4azblj6$%HH!)y4{CSDzqzD!&-p&O`g#r0_%9{vRe!+jpCFB1)ZptiF=29e#o~&6GyWulUPkoayTKGxU}G-?u$0avJgrWSxaJ#qX-h
zVjy530N)r0y$a(C8N3jBFNN$i5PciScVX8JFn%Mk_o3}3$ld{h&w%_4#9xE#JBa@b
zLr*}*lOXy70)NBt7a{Ws*#Ci%H=*=ju>TLLLoggd=#UQ+Tpi%sWcUG40OaDL1Alzj
z}bHOXhPCbD1|BZus4_y;V4$v5Z}DU$tBf
zTur}?yAysFcGvsfmdAQe@UL=TTfbL-|MdsI59J?GpHjbQs0Hhp2w8u|k^l&X(mO07
zwrNS?(Nv>sp62G~(hz`v$5$+uMRupI6#$(2bb^D3ZuX3)QhZFL$7;_@d*Djm@}2Me
zx~b>m*7hvf3p9Y;t-k)c80Q7!C!vLh90s%n+2cR4ZfHA1=tw@6mta6SOy(ay+UzwO
zJ%tnuHaK8l$z5hH1~S%%aQEyWXgrU@fdkn9;ZDIpr&pJtpQ}OGV}XRi8d{qi_0o
z`tYg#7i;R!3+txFHHin=d#$+NN_*YWcv0L^Z%r)XE}Nz+bJ?=(Y`wI>W^Y`}yyCNa
zth&$YS2pEm
zGMUsWDNGJFaG&p8J@|BkUMF8%cgRZoPr5={M-08}8^H$CqU6uy{Q$z$w+j-nE@sN@
zyT%GqO^AWh5X$s>By*13Lxfw(%%N;f6^-ZA>*KY7Qnvea++Y~YwW3gNy(#uW@l8;1
zq2|jYsORuaE<(JV*C$a#{SG3PL#K6s)0Zi62@4I*Ee_;D46<=lS2I#e*2~@+uh&vt
zd!e=4<^+%e!qMGWRkERthYh{9ySCLM0tJIs___du3(8g)EZZ7jF1Mi>dFt_usiQoihruLL~EowU@lOsT{Gxglem6~)pSpaMb=}ID6=pbiNTyPOHnS((^qwV85%L*D
zQtJ6La?Vlaotlbz5hsRv!J8hUXvuDDgYz
zzDnLcO*=SlGH{2fHjlcOwDL|h*xV&+g6oV-^D&4<(a@w2Eva55Z|-P8f|MJ|@T0zZ
zHC`Lf+|;+Ldt?yzWF{lE(kbQy=PdGHv%hD~xlJxE^(&EY9W`Nj31RdlVUCr
zZD)ApgpZb3>^Sr6lI{uN<)WB~p(|zwtpFFwBy*)UtBA%F7!OjDYL3pLi3TJ>VFhK0
zYM7BHN-UFtgBpYvg+t-JrHiF9qZ@*mJB6qEp#jD`5nunevBZsn^FBp%DQsdpw~?w4
z37}RW{a=hfJT-tcHhdb|k3BGKn(8Sg_6*~E&D0tL$VeacA7pl?>Kz<>^?)Kop7SZo?!`Z1
zMnUovgTzZA>V2E6koTU`Y)%XEg*og{xsTaYf###10@QYJ-X-vo`53hBoX1cB=^O!N
z_t~i^Wat#`Kv+fzT-{YvN)m7Aj~OcLb!63~iP;nb9E)I7aN7>0BxUJ$3dbXmXI&!v
zu!`{2yil@5%Kgq`q%Ns6QG*7Wav~!x06sNcQ{X$RPjn7Si7m~H7$pGRquHdCn**i8
zjhxsGsT(0DFY1%UNfmB7Va(YsQ
zrUs@KRxI;L@X*#8xn!XlQlHzqbnO_BTk`@l;v6ci;Xx1?z0~z%IWfe5d&DY%&r&Y(}U9)XAq`Oznhsja+@m
zno!QoXSzVcaDO)yvyR%9LgtFEksf9THVb?sZFL6UWYzs=g7t@t&2KCED++Cjo#*;T
z8%kHEKSX;0s4qj_=3|gH8O%Lq;c0|<>SS!#-0f_mEx}zEP`h|&tpU(M#VE{R23AO%
z{8=*?t>UN{nYHgD;lh3H_tpgHl22-css8`7S4}ixHYpmV!MO^PL^p9bAf<3Rl$aBCj%Z8Z
zecMx#vX?jYbl7pbp(Nd)bCyv?RpTW?Cvx>=&dNT?znG`Oo9NJR^afMU-XZhkG$pw(
z-03Q|ITVK}mpVR7E1!GbW|vQhjpG2(&Uf!|-u=FEZ0uYeO6o4A)bxANXB~8Ua{||R4U>)mjmrqYr
zQHc`AJ2NU@B?Pe!V|2YNHQdaRAJ^{p#I2t0i`kmdsiP}Z8<}mkDOfnTF?YO1>OUjJ
z_4w-m#>~oc1wLA?u5bVj+-GJhXE$arSh_#+S)Fy~XyzeKurc+{3Vw&N3~($Q$Nk|e
zDVX6@$yQct{Hw!e0W4x^{w|U@e;INM)JApYi{pLx$Mp5eI~Sg`m*<;(Y9(
zYj67x^}k;^)C_3zqK%$~@&@{k_k;UCGG|Q3j)c5@cO=Agd?x!cexM>%49SsbP$;>X
z0X!og{z`4R{7kY!enrgl;TdQ8Q}Q&(60Pji;Q`KN4sj4%(_0=JKck1%_D9)xF6>M3tU)X~7m+h-dJn-y=OGf#!iJ7&w68CX
zbW4zrR-wFHO(?-~r+JN0#sYMKen1;VpU0${S6j7i@z&ZbU4_&jB{p;rd_S0>8Ot^@
zCn=dIQaSU8Pgw-weBk5lWZNyJxQso_U_C>cUmGDe9`j`UA#ejKgoqL8XH3SAguHtj
z%uL24CwR;J3VBId_%y)duhdp3Qj){NEO?>SNdO!Mo)jVdLqiga|9QdTGBA)y26EN6
zk3XzPU*hr7R~~SVryOJzv;^Xs!oqM3tpSA&Ku!$gZA}j)9$EkdM~T=2&gfixGcpc-
zciGj7xSeSmxiQB%#f|mjvbpWLf~3Qm&=BuCvc-Fy!)(IdncTJwbBU117lW|PNKf`%
z!-qD3ly>7RigC7IrzHjR@J{0n5DS)TQjZ2C^klNgg%yMzgr8EJYPs6kJLE}rtRy@C
zz-$|mFYKt3X+m4h39AsNow_vvA$z!wPIapq(rG+L_x|{LKd&-E-%%eZLnBPN9aCT%
zdivsAT>X-az)DT(v0yEOIgP#t4QN4hH??&9vE~H+65ST-*B_Zs7A)!sPw-5`_*1-(
zo9hIXR*rh-mCRC0+n`K17ER47?8n82i(DG3X-j?N$pF4FjgAYg4vUYk^COiJm_*x{
z#27Y*-;JzJ-Ij_x2vw)ja^31tAikjcX$wc@Xow@5Zn)jl7Lx-1;2fCuQR@jCFA_FV
z-;v#tN1SG75~o^n*-p`0y&Y`GQzC0^-;lgQTAL}zEf{>=QXzHJUn=)l+Z}$?rKy^}
z)JKl*mZ3Xl5{}fe5)xWs$yxCo?F~!xAbw*Wv(llLa?W@GRD1#N)3l~k{*kt4d*#8R
zp0FfuP-(?zidx=pAZMK9ZnN#3s^VlHiDFFbyfiXe#c#_GCrs8Nu<&Xj*J6
zl0FqFlvz|XrB-cpi8NML<~7}v3h?#SphOTq->_;=
z_ir=tWSDxA+8pT3t2YMIdE)$AL%*<8N|P~;X^bN_*;5bv0y{b_`p_BSs$OK>fNfE_
z;`od2x-dz0SM`}5`b_LKbmE7u3-A#+L>MEd+#$f4s0QfATuR(g9inTIqTj2IRUM}O
z8WMh`4eAd{0gY)VE{}Z2d1|IrWErKXbbiUy1
zGA!Tqd}0nRqwu4mBfYg_R?$lp&F{3^*Rv1X^Z$*hH!7&-e(m$Y*Gp;DDO}JruzzJr
ztx+v|#-IQFPGOJK0UfA#s4z{RK5}LF!2qCDH`gEhQ}@o~iS3uOV6)el6y#{NN2QDU
z<#l&VZW>|>S(LGI&AsP>%Nw>Q0qJX>`-WSF=y@7k;M_bvi7g~wb(=xN+gtJyO?<{q
zOWoWXs
zt@I9+MVw%|KK4~IbIvK(4k5Yime4iP+P+VLEYfkCe%ZXM_hDMerMl+g>kqT~4E{Y=
zonqS#4b%lwiW@y*c7d+4+$){~70F@ZnS<=^gZX>Gg5D}UQ3
z$dNhU_M=AKlY5^uaVq$Y-~BstlE1>Qke`iLDtz8~qze*r`$Wad+H~@s+MviNez?z2
zb}sEs_vvJ;7gsmZmJRjLckIE1ZB5h!+gqVCM&k!V-=1RXoV@fkW!G7a<7L>np-kcX
zhAzgdDPD8^T5W}#Bvr1kB(4tRnkG}p*)XpQkhIj(g34uFw7!&4x?B;f|sq^^?+qFz1ZUDE*n%D7E)X@4R1_~soJemY)y
z=)pN8W`0hOa8C=oDEk@Cv5skp*lRq_gNu6DoRiH*#797;?8Mhbj{3RjV(qS=3;S6G
z;=&fIs;V(1x1cp$0jAQ_O+Gzs4lyy7&j`&V!#_g4Hw8UvG
z=Wg&l@x9=@yI?G5?HDPuN;+iBsm3onzC6*7#!txe;rlSlnE~WvMo3TiXGm68P8+`R4YMyjG`lLGB+Zrnpi^@8Sbm&bG2mQ_<2a?XTf$&O}BJBqcD0Mp!j#b-gi694DC`
z%1MvIXUwS3&TL~JVQ*?Zw0}k-8T;esBYBfG-%M*WEu;nK!F)y5Q#NF8hv=mLD{0
zDvC)P$PaKTjQ1dT#Ctdv2Brn|)g@4LH^(U(yCmpbu&cXQrA&xDB;1W{;fRkllRv)2=(a@OAjGhbt#(TBq8QQQSSkgnxDn3vgTI1%E?dOZjDBMn^)HnnsNPCaU`5%&YF-o{I&oV*rH2$OL#*>O==M;QG5*zG-BHMNZ6-Na6
z)(+8YOLiBXQLXZpHZJLJ8`ON0Q8`y$$-VTP4IqmjJMu7>_hLE^Vy*zO_~T*B<q#I~IL;c_KVpM`|BrNPGyjMF!HyV{#@;gO~G2-nEvXNY=
zd=)4x%%sI`CpzqlSO2;fI@E5bX)7#ji?sBKQiY)Cac@vF&ED6(FLN63$L6nG2Ly4|
zRr`J$PJ*l8m4+r(msY$sDJf+zn$CE0_T)@dVPZeY*2}^BFfplcJSt@pyxi(7{3&Ew
zk4;I}Vw6A6*oU_=C_kGjm+MY-Ll~x}q@mNA<(Kf;Gp1vQL*BkSTpxXjtV_6ovUG98
zCuZ&WId=Q(Vl`o9ZQ190(|dz|2fI!Bwe%sYaVwkS9na?PJd5ExU9$gAM+tdgO|u4r
zz?RvXc6mOz`&G}aqB((q^Q5!V#w(6Cwa
zT6C!>Kd5i0`js)sh
z1t)O2Jt;1}IY~QWL@gmlFck&5wT2;yzI*j*7|Gv=t|X##A2-hq;g9sswZr!jq<0X!
zz9s9$Gx}0|wQ?bV9tNyWL?+GFRDDd2_6wO}S(|hy#(8nRLrL4$*Ur|Ce
zHWjjEyUaUu@#xy%@Y-E!fB7<}wp8O=M$PxI_+0IPA>Kh
zXL-1}#d}0s3KT=fT8=j#A69z97M)gBf<4C1;kzK#J0{CiEc`h9(Oa;$yrwUgd#dR!
zl7trHG;tv9+<3XgR9kW!u#+*qk%Sa^al*MW;(p>`vw?`nF%WLkbLTx~oI0TgPdtAxg4pzm
zTpaQ3qL>+@)k*yFy(8Bh_!po_iG(-2!irP-eTGsT8{yeR6}5S}<1d=TF@f4*17yX?
zkErw$;89|~DV2jtw@5*`W^s};4C^)RPg>T
zWvZuZj!bhJnDY7s{1bNmC_jrBl(%JwrK4t@VQgn^bwDPHYUzap=riD(XvXF>W4`fQ
z$Nbja6;L|9w1D8}kYwyZb1!lpHnG^POSXpuxP^K;e0D4XVMLDZhuHO4U?-<-LnPV+
zLSP6liMZ@qfGt74snx!Il>s$`u#h&d_e4TX0EJUc2EF@I3LKAOFd|3V)@MxXkQkW=
z3N9+LdRwyZDr4(+HWC(UvAoA+{$19h`$pl0)Ba8Bvy|HjyrX^Tx@v
zzB9+Wc8?DC?irchAAX$qcBXJ=@0&{g)2?0oNAJq}K)n3nbs1^BS(6fyj-J=%ZaPQS6iIGYwBJwlfzF)2;
z15@va>a`=IQKkgz&qAsBPu
zgN$hwQN*0Guo~a*|^tSD^I0MJ4g_f42NTEBBpCN6m%poH%Ai(5c7;9@$iSA
z+@8e<0%=l!`O>k@wFW?BBSUMsSR)r1WuT#5eDc$G``o9Wa!}L0V?Qken&lg&)EW!`
zJpg;>;a}}2nM=9H4h;ht*ITzV@+d8;f}mFugVjX2ZIa+^0ejByy2!5-nSDn4bN;q2
zT0kE_`wr<*<3wA!)&0$4^S0lbKaWl^n}MseO1KK2&tK+0E$uYW4I_f$WKdMGMKO8N
z=tj$qLdwobMYdkihM{e%--YgY1|9(Yl_b=eQn(%Ry>Ax1Rf20p@*z~BWGgvQx|kDx
zEFkAWU1?hb$s28%zs)Qo%ll^GE7JGC9gT~3f!Nj+c8J+>UWxqJD`1ao8*xsJT?d-L
zjpb<^6mrUfjkX*W75y!fEori5`JaI0U`DH5>mz})n82NdE^S7iu$&@IgHVbh_EsUaRZb$0a_*@DI58TkeJDQPR`&3(vB=byDg`m61`3ytycCCtBAM}sXAtpRV9mApvdD5$8Q)!u?YE`)=C
zeEali{3w|J?y{cuo^Ln>gCm|2B>6z%L!Kh2U1%yhx2Jc}tTwX?kgPYl<`{Hz{t~vZ-a$=%!1XzM4?9qO>}-{)fmzpb!+q
z7J`SwLJmO0Pz@*?8Vrqx=0HzqD{9AR-+&px*qh;-DVvuzKiZLJR-2=Kay7RgZb>HhT^s@B+3Gn(m^}h>q;7V|9I2vvT_kdI3On4f+1kQ(d
z!4JTP;b-Bu;1A&M;J?k)wiRxBvF(S2yn(hsqrqQGPlO1GK%PeVqC!yds9aPvsvXsj
zI*yW{uA|maFHqlY8Qn7a
zYwu+IpYf{kX9pD%gh{wbr^#KDcP1PBI#ekQUH}y-5Hdg{)@Vu>-wLEg4Uy`gOrb`-
zD=T115ifEj!sGbYKq3()LeEoXeADyQC!$@EM-FXv%kTG`hIG^@A@HfIGJ_@{AsHCE
zjEI{zc&Ea~Sj;C^k=9~`x4cE*PvcoLp{fRlRw8wcd&GlIhimOw}K;RG!9_%^dL
z_R@Q^*ap`Qou%~8k_7}p$i;}Kh&UFV8$uLTX)ViZ6h5sfV)*zz~c^zUVG0;i55AVgStsrTfzz5y-%(y-5h>r*8|_Ke^6sL`%Z@|$JubR_;{%@zaNgkbJsO?S)me;I
znQW_}3rLAth4{}XoH6>|z1$tQ%Rx5h&$a2__WQYE_YAHO$@uE9bzIjq{y#kP8+Os-d8$L(K`k+WA=~ygwuB
zO5*aHQZ@viT-L1L75zT8XNoY#p{c1;QvmyJSD^=JG!hCdN@XF4;(L{OU{5@45n9h2
znfCI!>^b$|GcikD_IOvmK*5wavZ36Uaw7)gMkdcLq;ab1@xcHWAz=i5prF}VQt|O7
zuV7%1i64jAN116mMEX&kC`%8Si@cy9o7^BpNy`w5$iZfio*tQ)ydGzn&3usuo7Rw&
zjFP+08rIRSmLgONh1DMkzPJ0R-dI_ih(*JpfY^ZZM!@%uWbJeYp;U^Bq>qj2bfHgH
z$2{SnLWepsniTYg1TSe3n&8&0ghT@-TBgAnVKz4xDfVMAH|#!Hp}*8ETUk3uy%Zv?
zH0emUowjtYkT0w03R(OFiuqU~f|^;ab+nKYhm@RZp{W61XJK{hMqVRvIEO0I>J&6C
zOOhnru&LtbJ8qb_wGh#6^9bKE`^nETcK73f?_)hkGT>vFN^*I9Ka4Vt`JLXZLL7-Z
z2v#bK8a21hM=0P7S!!0?3
z=9LsWB6encEX$l-wIRNjye`S1mQm>!0JTX~c~p2-Vp)d+mgU6`-cBxp!jN*T$|5>?
z{bHO_BykZjU^?Qp^s+57pA@PtrJQQYnJVo#pGuvZ^sjxOnw-50_8Njp3Nf}pX^+>S
z%|)(kmrDOBm@!8UQ;}of_rsX(I0Ds2)|HBID7z=TXrGP#ew$|;hotp%yX5Q%_+4t|
zCSWVvLP~^@5-29u5z^vIS-Tr{2(wiUV!()`I~;AR%5GA!C9GMkWZQn^kn%Qj4JYW4&5>iYU8Jf>vD->~My
zX7^0ViL5++Tuy6y1Kvs&=fpC+mKO7L3G=Yc4)WkaX194<*hqoV2`Vw^wYA!woNm0=
zbVq3~B?Es#zWv`abn)ty8BzQc;SRHqbQxR0fAfq?=WWkyU2~#cZPbh`DJ(0)tY6J}
zrN?40PsXG14w;z+kvLL%>osO}BwOv#sKX%17wi_hR|r;0)NMKSi*Q7$Hbl0U
zaS5{JYp&ElBysp4-2s@^r+!dJV(`I>3X+Wq{^u&)lAI72g}6dNFFV+g$LJU(ET)3rd-SGhGUE&T6O`&^RirGmkfztj6X?0|Z&W0|t_;6iCc{^#
z>loo4mz}m4$vJ2|JggSxzt>wmvSsspT`J*sHV{A2?Q;wP8GUbD^bYU$QaPoBr)C$P
zCYpnlwReup->Wq$vMuq}G7wxQa#fz)Y%5+3hExm})$
zpVapV+CQFDhd+E0%8>nqcPFXgGI^ia`t+j^FPH*&TP<0H3s_$_93C`ccO=muQK1tp
z(Hln(?H85iPSmDhG1nB~H=zyd=PFT(={}CMnhnKnW?T;H=v>hSIj3URM;7kK@*29Z
ziJA&qkIyF(zmEC+VK`=%l1Tn&X-mLvh1Zk%Tuj%GPx-oVMwjL+`}4_ByydU&V|IMq
zo~d$fuP;D#%3zE&CsG~vq8;7cdVezCK2|z5Rv=kYfx={Nv>d}MEY>prBg|T}WaIkDxc
z-YU|geyeVL`7Eg*-|TM~mnnr?W{MTvX5o#GwkJ9)_n}~uKzp{+adT+b>NVFF*P7`I
zAWsLcZ8xs?N~ho2FBeM$d|L>x!wg=g^Y)^k8mk1cWVWiIJrvz
zfR0CTqmwXwdTi8xJm2*2yRRe9@24~n^WiwclYvQ%ZM5p0B^WCKoz#d(}5f_moYo7jqO$U0)LO
zneG?bC^J*L?YQo{N9A&uT<)1Ha-{c~7~=#kFF2mxQ$gBmiA;N~XdNrSZDd$eCT7d9
zNVNu>t?=8R^}`n~{9~XnR2}VeM5{WwL5c{i`cCIc`=F0`lF78zq~xoXBO`%nCtNbT
zum;SV@UZxKUG|3Vy+c*U+WR>?Zc9;a{5;m$RV+%l_ymO_rB_20Id4BeM5Y6NOLi8~
zAq1J9U2nN}3nlvr
zQYW;5Z@#1uP8H~flEw*6=7v$^IuUfd&a;Ul!g%12hk|8Ly^E#HL*YnD*#-#0xp6bJ
z#ZMsv*Ld$J-+8fcUsXj4dQ7SB(7+w##g36(=wQk2dZ>Ld#LrYi43ySm*33l0W-ZP-
zG}dg$ygF#3c_3r*>fX_q%||Jt6`>e|3HOB6Ix-A5jg@!wrq3!lhxFSKSSC@bKv$@c
z4>=v3gW|2~y`1HAa~{~n^zmVZkXCl#xZdUZ3?!0IK(hu8!j{~Gl@1aXaY;cw5vLuu
zS~+?ZhK4ULwo_0J-eweK2ABq2@cut!$hMRLvYk=LVb{Z|dOPygQXLfJYP`6uTmT(6
z@hqexQ@;!DI$4Esq9X|5e^abYbgd>c{Q4?b=IxO^VVCKikkJGqG?c
zj(oiBnsK7>Sal>hZy^xB?=VKPeU45~4+=L{z22}P!*eXjWjC+dI@@-Ag0P4P|FM?S
zoAwStw(esWkV#e6Fk}8uvwIxcis&u48f^PG;jo|Vr@*=FjlE?NGrvmPVHk5*+YgVC)Utf@At{1
zVE`!}B53sVTx5@*=p2j0|9$WdiVVSd?AB@YsG`xi;{>aC=Rr#5Ow8
zj2W3h-{j&E@zIMCf4jT!c@85FHV@(r@&&m9hOi|&&^#7aLIimR@tKkj1qL~8R=~lY
zS}HyPHci)S^++QuAPzfL36m4|KOM8!%11l$n}Q()j8hD;!_|*~_Z2ibLozk;G*|U?!IwAYcd)``w;`Bqr(M%
ztI*?$7dCzHVbnUzlx2UVErcFz>In=iGlZ&M>GTsaKw?O$aiddf(QJbRQ4iZ^l4ey~
z)}e;BQ_;6P{L8glJh7nHNbBni<8FglzuO-Q$MaO7ZSILPXvG^^s=>VY7XYv`8C9|GZf??PA)Q{mguZhTm*2kL}#oJ
zil_;zgiDHLWz;#clvu&WM?))*KJ7xk>c!#5M3U%MDR4rimy9Uu+neg|%c3pkeR>`$
zzY`Bk|IT7hE@I+@et?@+xw5fqmE>p>6}xMu6K0(8hZMJhaM)1&XZYGu^I4STt77Iz
z{d(8=7Mh+386~B_hE}KL#9H@&zwYE4rtdCb&SBrDHG7O!g@cTKM8soy^V(wzxQ9lC
zdnY^_8h?Z=RQl0KW-$T-3g#Fb78eC%J=KhLj$~tz>ed;X!LXjQ7z?qlRBP~6RrPkI
zYA*ca(Kcj+EdjHUBE=4t&Zw{K!*T51XiU{&zmPu9iLN44?H;n(g5+t`dm_LMzPjqS
zI)~S%(Az^}e(7@Se&e|3p^y96Vocdbofl{BOCg-O+aic#7LRnKih%XDQ9gAYwUY?i0m{4;M|yPpKr`L2CR(rYOWN9
zG|&iY$n^Tl^L8koF4<{IM^cnv(jy>%$Dmc=ZSr+&IlQ5@6`P}UT_$KWcg_oFN-7d$
zYy;MbL)zR?(0yO)8b0@vhnhl9Oa0wrqxKKva+SbFiTvh&46Di_I+-1s8x)|H)Ty7-
z*1>HzS86_&Jd6h00Izin!F+Z{L
z!CITxP)BA?dR5)a@ur!wXK{+l!{jxd706skjhZtxbzSr*EG9uiTnxB+!9iUA;KhGB
zJ-k9wp?%jM0Y4tH8s~7+V5sk9D%nJ5sg~pcQ_;Apmo^$0OQwu>2@yTN22J*G4LLzH
zYtl%Eh<2$$(tZ)k0?_W`7rkTC)l}muKN#mrNHdgQM>)_s#kMFpXEARBn7TH!K~32`nrTrC+p#iT?bhUWP#XopDL@0YfFc
z+C7q}h9OCnL`m*doTVo;Z9?tUmOfDW{f8?X;P)--?FNeLqV$Tq-3^Ufy77IVH#AmC{W{t7-&PNPA_H)^RHBRC0U#
zay%-|PhTFsBJ|ipBOG_~e^Y5;We*rEVjDiu*V<6gZu*Y~nj4!~=DM5$`iwMQ0;|
z&?cb+?PRQ+T504&-XGJ4Jj>w51q%yLEhe*V+=Nj$^ZaJW6-w*e*JD-R{+Va7a4u%vb9$6#n)
z*9oMWX|RDTde3f;JKGMyh|5
zn>8@3$2gB3a$@GKAlWblk*d6@o^-i~tu}|5v{A3^h_wmh_@^Jl*G$CbZgVMxc
zh*8ASM45l2#7Dy&
zntBWFeH_4qhG&UgqF=sxyX*5xvUZyncxSmmj^Qu(fw}C;IzL^%7$5gjp`qwG9RIW>
ztF~ai*04BIA)S9%Ns0!BFENXsD)$)d;nPHUiB9pG8t6v#*L@GToh(xZ`W-NAaQarB
z9*x5v6jIabzs^*P3|*7)IBn}@Id1Nl{A9mP1f0`!nLXcTQXNc2ocZVZRGsq_fc$e9i&Fn7!
z;!87JFl=&AbM!r{*{vPG=#|N~mk)csEaiAM4Y^$LCUu06l!6#8)iRcBWBhD&SpK&~
zZ6IJvhK9>^B&%7om1dZ0XTkFDr+=(``VCnbV%`q20Tg?{&^$N
z)P}OF?|U&5euLL$jhpw>XSBPm9_rwVRuxw@0yfzlXTo(*Z*DRasylKM~;
zSGaS}l5I+riSbjG_?AvY&Hf1N#gyW3zSr;=WF^xv+MKDIAkX=en}ft!@ZOXAQP^WB
zt`pEfEHr4DVV$PdJGY%&w@?>LmgKM}H93*Q$_)SBcw$d+ROOYLsK%`1R4iH;lospK%OKBr9G;%Me_Kd|F;M5A>o+Yt0EH^pI`I#Nxjs3o^%T)O!v?ZK7ah
zLN3qSTHQa!CnR94W&8V!twDr&xm2hObXuD>W<6mw4k`uGvgvS}dZBZo!Xml~a;99Y
zIcuNE!@Pq;O0{dJZfaQ@(}SwsBXK)W@b_FOlBPQcb7-@}EeSmqm@=hQtD-r$t!ArV
zj+Ef+TF;r2UUyw=wR28qb8}r4gr^(KdY{B$OSULkR`>LrrZK6q2UceQuPeIat3tJ{
zhJYkqszr_=gCq8nF$7YDQts+6DOnDkIm=4h9*_#5NYJ-Tp9FJeN6|{bf%|j={;I0h
zNGu%>$UusL8$HTR2S!aJ`3R`mT^ZhN8@)vsqDnEsMj(-)KwFTs7oH49y0-+nv^2`u
zDU(R31qEYWNsnS$5=0eorv<_~bt_Cyb7L(x!e1Hvs4!{+>30vA=*S@~hf$F%q3KI8
zcAKA@19M2g%L+IUH22QPXS5E3Uc+rvV|_F>S3e{^C=~X#_f1WCcKYZgN<%kZ`DbHo^sy%@PN8&C
zDeA@9UgAdBGqiO#*S4#BeCo!PJCma`v#&IepWlJHaN(?ES~9Tq8v-Vnfe6&4mw#$L
z!(8@#+^MX)UuB30&NKgDgw&tf%iTTQzAgc{dEKwI^42#goF%4~g{HP@4Vz*3c3DPz
z(4&KU;=4(QYUiF=1tkN|X8mL%Y9OJ44Nj-T7@MYxpc;178hE+5UEmM~lH=ibBlVL}
zCoCaoAz|Z#ViP=;0(0D1*cypGCqL&HJizVf<-fQslW8q|JpIW8MYQCPg}YjaDHTV0
zCGBOLo~7UR!=RC&Izuf}M}VN6gD=p(U>SAhPsLb(8h_AMFM0A&5$m?)w1#vm#sZkC
z6gPJ$t!KAv|O`Fy&Uhfr6DlphHa+q6m
ze7A2xxZ&f%I0rre>YT>v2a+(vQ%Syu9!Zm5S<~C~o2FV{*SK8X0_Mn^t^Axd#elOM
zGbmVdYPzFArB*s=Nsil*sZyd?e^?KK-+3{KesJLro|Yax;u!^@jTXX`1H+iPEq)$5
z?qFxjV_Cd3Zky^Y7evGOA>k4pG&M+#rez2WFcdvBu54Q}{qA;a*n_W}u-m
z{f_&^S0ckSe28f_lH|tFb*5b=QcJ7sYn^b>F_hemtosN3yKvG+>bIY+pM#H>>5XpH
zJSDW_C|BaS6kD+qS{@56!8IipZOc=qNpjz~lC7qtT2^Wk=m}iGOwFO_Ej$0)cR!lX
zVkWJe%)2D~$*~)KN{jhCQ$T7@ti~>jNxxNTqLzJfM>f_JY|tNVx7@PxCADkMim&o7
zJ1w?lR!9%AI^Y$`Ad@NdL$Rwr^NyBVxP$E?9Y~9A_Ja>LALlo(a>%ijS+YEE
zkMGD9UoqFuk&5?`%JYCAK}-SiJ9>8!{tS7ojxr9t2$){+f5=?6>I(mN#U-AQg57qd
zqeCV}{&bs(NHkVa*D7iMzdk-vNPF&5H&;u{(Kq}Z>3x;8@y05z+f^y{VTTd$^A9i7
zLNzSGU^(9=G}Cpns$Q-Upt@~5H#eV7LavMJrkCrOQMBn&?7oDA!)~rIANFOjG`uPn
z42QjXwbrOTRft{fVpkZ|GaXBoo0@PD{dO~|=Wkx(W+kVkqEtrL^pAn87+0+tr-$0%kno(%z#PYV?^>KUE8L~3lrLNZnGBL(G~M$z
ztEBXJCs=g-C;XJs13Xn)!rD6uYlWLhq`v7dRKY*Vqh3K2=OI>Zl6!EdI?g~|d9lN9
zCl?Tl)JSOOf5w^U_cQ%Tji`&!355u$HTe~q;>``xxRjJ=D+0~Cx9X768WQ5A;o^?TT
z7RtVfmA4H57KH`_&$Zy>WDxjsr!s;aYs4=oQASNdiCFJTSfB*WVtvpRsxl026)h_d
zzWIzjR*Ebf6!@&El`R&-OxIYg5*ik-wStb7OwwgrB@XScjBUwHQ@WE{Ok$-g!gJtK
ziY?_b%u;zgg&tsQGV8y*`|CiFOiyj?+J5iq@9T4Ma#q&~M*w$GT0r@FWcsTrh5`{`%i%2gGDyLMPw%eDwlAjLY6*4E
z3?-v7lXW6JS_`t23$rgHcp|h432_ZMezosV&E$ecy-ilw!exjqw&-aY|K3CR?`vGx-3};5{%D-vQ(fKBk!uy
z3vE(_S83V
zn(}z0RLO_0H5&LE-x*dftgc?UcY{4;I`m;vAb((&u
zmW5-UDa8f7>z0)P8{A&8F>95GuWB#NR=Msz
z)uEJ^2Yqoy$Q^z*hrGP!*xK65v@FfEhb%ZIs-aHx(i{V1x$y?HFyjW+aFD)F>J9PC{QU|a}>
zB*m65fW%0=-Tj(gfl!c7y_Sga;^xtSw(~B$0zw246A=}o!&L&06E6{kOeN`<5!_p8
zy8#u9n`~$eYejaKM46@TFF-$nUO1JDJ$%US=fJMyC5JmL?hbXFEDy$D;xTQjl_wq|
zgZt72OFTmm>+FO%pfaeStqL^_>yF7OG5=lHBTX@4u<8Tm{#SV45t{UIrCWbsI*IV4
zuz07vaW1kMrt}F#|9)ulJA^7B4k-&pjUW*d$FYr^F6*-W__T9*Qihe3f@tE5D-xDD
zh@EW{JzucFn5oe)E#TH~mKpdZiMSB&WE)ywPGfy}4cAhWtJ?DvD+!O&
z3niZ=SPXdmwq-OeO5Hk;EiT7O&qii+I?rnfQ&!ehsolqqt!uHtfVpO}j-{yzDEL*=?-(6rzVG^~H7;O=x*SHBOrP1(?>^@>qyDevdq*kweOgm^(A$+%%z2lbh!z_F3@^b{BoY@5L^Ylg_!b^
zg0xQZ5?ln23PcSgO=RQ&-2yzy&_P3#}{PDLIWD{08c-Q25$
zLfRvHp!Qx*EXJ*7?sxh8RNVR>6UYR`Ip|+26XmPD!jU#pyt0rxx~L0^B^IzGrR=`b
zvPb6O5WTsDDy>6_gnObu(PR3|gra6|LtAU~Su&N}O)i!Gc)9Wa=L}~!9U%z{gpdQA
zW}g@Hs1tt3Q-`y
zq3ru%>0z4injvE15;c7VIRfz>U>ftr|sbN^Ta--22amZhQq?FgO-@
zMPva-z(BXyWf+$6n_xco8)7xn-_gxQpUrZWIrVbtD2+}S<{-h$ZLlDD!mNI5k(Ufx
z2RxfFHLtnV{>6szal}~M(79JeohmT2HKMWHsM>F$%f!y_!9{=8u`d{lwbSt3+M2_$
zrqgZ8vK)0#{?&j@e$gUS?tBbg*k$7LFvN4Ltp{uO;noz^0z300r{7Wp%$$W7>vAVV
zk}>txQ{$DNkdCX!0)+y88L|3HMm{~5U!GRNZ@ej4cDe_vuu-@Gn!At)`VMrAanL&7
zP(r~sb7WL!SF3V4pR(LKrM*vVL7q?y1&vxnwffNa@crdT
zbVXrBw6M(BndKvPr(W~RYMW@0PkdGl1rn8I7`67(*$@R>y-}b94du`?CGqf88rA8^
zv}>4)ZtNjbX_dO?4dGL)S&&zW;Nd;DF|Px4P(|o5cP4nJSH{MnhJEPZKkMPrOvFX
zQmMdpa-Z|;QJ;FD#bnZ{shWQ@eauO3Y3_vdiVom-fira=>=#E4D|ZMLEkH83t$iyj
z;dfMUu|NPpr4%-Ke|P@CQ|{w-3KKU%B{VKm(;_^?7-m_O-?ucu6_aPHy;BuNy?zSa
zyBwyZuSuoo?1^#_zqtG3%}
z%;Tw9?OC5)Vw#6fo7lM+k;Fp%tf}+D3AEX^Y|qqvBY~u3-E`>TAw!?F^8bB1JPI?~
zX3l2N@b0At>OaQh4c(CAqGPO~i09f;(u
zp!eZ@?Xts|x1@J?B^@Fj5*FM_Iv<*uF6mfJRhcO49;hlj1s9n#KEPP14CRat6!aab
z&Fpdwl{t<3E46^ZZ+v@#n^{#x!8TzD5KS`S!Q9
zZIOg-eN5@D-{Q9*eCrEN`igSw>|tCVCpt-~0HIt^Aj;TuyJMNHO3JIH6^o#bnpd@7
z*tTN$%TL2
zyI%LAmfLGg<7&*)*6DL#291+Ji^kx^gF~$;7m@>QhY~^E5za8X;Z!`YB2TWqH(RK;
zruY6^69wt3{=?u)7LoP;yeRRlQh=H-PQh$fB~{Yv^%5@BA0J3@ceHdix7^|5;7X=N
z1Tvxk4jQU<^XU;k@c53%EIgTId
z6&1Jhb#<}DSmkDixLasy1_pY%yIO6>flAd6@3HptnHh$0*i9EU0?((dXtDI(o={D*
zQJa^*i^z;#&UJFqY8P`UkL|ty8`5BH2M0ne#m4BqGBIZIr!UM|FML~f{`%Ox%__Sc
zM{)Q~Ube{+fe3ce4iVAGp>KDjeP8*{(f4mz3zrraEY~*qqTRM7sJ3BgBni@M>c6Rml4-N_j`g(VDG}iJOn!|%_
z%}q^(eIzq-=ORt;G1;__BN9i=;*4
znGTCqXT%*cAbFblCw1Vq0HBfFD!fequ))1Y=1rsFF$jBMC&>8#;gy)wCR*i$Bx5AH)H%6bd7YMBdkx0^-N;N#UXMGjrU=r~bj*
zGz)tmWjQP=-ce;4RjjP6UG1&62W6MFRIc_ST(@rCpx?nvP0jmQ!fafay`yCT$oEW>
zrFC0Y;jRt~sm^-bmD<~kA61^TODrJe#{
z8bd+r2_h_V=aKobu8{lxiX=2UE|V0Mc6L?~)i1j->*dLku6
z@9?B~Zdf2epqOltolPaldcALbKfUx_wOG$V19q4bs);b-b<-)aF+7%7TIIG}uEb$~
zE}!Wm2eh9nHAo@dER+M4*<;UqI#VQi%1p*hZ6wuC?W$y1jJCw&fEF
zyqrV}79hm35E$PqCRNI0vwnVrAg-JYeCZDD*hrOHPJS!FEinLpgky8L1?174)YID&}qeqIHCB5UXF$dbE1
zkYY{LiYeP=??9>uoW0NK>a9<0at2}?M9AK$d
zWe3-I(iYv4+e@={8i&FpS_79<{HV^Wc9fCb>07^ZCl`uPybc>0S!>#VRU*Dq^BL-L
zK9|j=x1RBCYZ?rHD;}HPS!>-fNy
zlFvh~=oSXNxR>-=fFfBmB*z{k5_!{O3|4}O*pw@t
z@l|=eT55NHtR%h>!NhrFryQ-i5pZDKBsk=KKoq8gdFHWhNfHFtNyi>S#t4wDQW52d
zgCH=9%QQS~9!WFm#W&U)14*azDaS2frkWtEihM5P#PjGGUlrS}6(hpnaLUr+P0o|7
z_evvx1X$h2*xz@|Jb(l@xS2&i^H)LRFPq*I;J{)t&)|HqJEZ5D^b;4UJ!hDp
zZkL(6xq|5A348!=lEBWen3+rpI%yV-l*61(y@shVf4*`BCF{kzMtP$vnm3<-ce7QO
zw=E5r^adi|5-trg=|ZUxFwYp^h?#B)>u}}VE}uWlB95F`Vze#bL->loHFI&Pc?H+&
zHk$ow#vpBZ8RdH5W<_sP@HcSn<~}1+;y^pMHWJOr=}R#IFyy8swWV>8F&omdtvb&?FByxAHcxkJmKtdGob=+#11F8H3Q!
zKEvnX<4Y19te=$tZu=KSs=+4W!ONG>A=(SbcW=R?Zaqe_lR);lEXC2m&&vcY?9Rqw
zGuZkQOFdppcIl!<_`a{w=&?2~-u&khhkSbsdfO=cw>zOQ-&&3@r)#zzk>#8X?o!!b
zufmVZ=U|cS9?Ow#kJa%o^>OJ**l}pF8e=8$+rwrt@+KyGrk8+aX>Kp%W5WILaeEcE
zP0|pHAIth$sR7$@hyE6ee>g?${h?FvXAZOwq=vlU2Q34>!7um(UvM>=
z`8~f`8zbHt&TaTJkIvtsQ(#-xn?+B;@gsI4DnmNuJyZN{X*5XILJZ
z&!uN&dB88fTXtC=QptAbQ1;Pj3Zy?Kf8(AzEI%I%a)nsYz{m2LxO~6FTX*3h7@u|I
z#Z8u6DArh<)6~0E);P&&Fk#6t(o@K|%*+xb7@6#@RGLps^yAKSURm_8!1m^Rsd6gw
z#2K;uc#?}YUot$ZC~Y^Wd`cL?#OC;xJ-I2NXvKs(;8rrJ@!9=x+VP9!XDK6oSR5*)
zS$q^H1_^z&GwV%NEbcIegFVabbrLB;T~$w`T(vv9+oyXt%L=i{Qv%U3&SeV`C%S~d
zmEdYS|LiJnDkwd&l-Z7pFJwe21Vg6ZUVA=X8!*#)E;;=l4&ixb6Jx+=FEy-HEHN@I
zI|<#%758|3{&v|ME|1?)X98j8QAWkRVs_fXOvo~t>Kj>2XE&pytWuyj3u@{bnp)aA
zx_bHshDOFFre@|AmR8m_ws!Uoj!p<9HHwCoj-J6KBNH0zPTDg$+a2I$NnUCFG>Cj|9E=*Jj~H_Fa@Lz)FkjD*-r)@i1oBb6E>A(~pK
zXd5L9f0%qyu|gp>SSnqZ{R*W9GZYK&PC-hGM*-uBU`^=M0iE`OHJ>?=cC%
zY4PbwEiCcT7Bc
z@cBPqW^K#h
zVjzv-S>WJU+Jx2#76+%xd<+&w?=f)dNTM^y6h7+6_K3ri)0R1)>5O7*mpbjkk?)Ef
zKQU)x?i-ORTiCsR`~UMPmdW3vK4jt#&&@|Z=jPo9^?91(at|yVB>(u>eKEr1x%<9g
bX8aVHA=YmlRlob!7u&+mJ0~xUw*UYD-|trf
literal 0
HcmV?d00001
diff --git a/public/fonts/filament/filament/inter/inter-cyrillic-wght-normal-JEOLYBOO.woff2 b/public/fonts/filament/filament/inter/inter-cyrillic-wght-normal-JEOLYBOO.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..d750914763177b95070fba3dc83c3d4466919c01
GIT binary patch
literal 18748
zcmV(}K+wN;Pew8T0RR9107*Om6#xJL0EfT;07%6E0RR9100000000000000000000
z0000QgaI3}XdHqNKS)+VQiDN1O;$ltUIt)4Q&d4zflenT0D?p>Y!L_w#2C2^3xYHN
zFzgHgHUcCAgk%ID1%@sMibD(s8g+OyZG6Z>H(R3_UGmf9##HndH
z>9T$kG6CHf$Vm$*^%2qUZT0-OyN;9`2$hlr;jkgZ@{4d3o=fh84@o2B8F&5-f!jI|
z5l{g|1sogK#IeCKaV*?8)&x>P&0I8X+gNH_d(%SOHkOszu*g}xYh`9XyxaZ{6Qgfs
zfVcANRiuL(@B2olfj&ivtU-?)H8*-*cJDU6RD?*VHcB-eJpUYf?<4;L|6AoMDGEnv
z8C+Dl9WULPL4oYNyPwWivM=+2k7;I!U}&~Xb)?^Hc+K#Q#32^2<=y%v
zU-)%mWy|%e)`^vVwO@Y?^?49uyY)CiaMVB7k?GrH4NfmgE!RRWA;cl%!ew8&CR7V?
zGkdiGDY#FN^oi8{;rs}F`F6_pPMk7hC9GMX9B0eew7_=&=EyPg-+2T_1_1C5@D)lf
z3Kzl0M~FxeQc^^kbVR01gq#YYp+V%xK@=)PXlW5TdPEr$!pe%MQiZ5dgQ!!7XwZmg
z){JoQAbk1|LxvHf!iZT5h$T_PZYzkG7-HQzj)Q239ZCp-011LvM?fav08@YoKm`Xu
zA;7t>==zHMYaB3uWT`Q!$L_XaFO5&@54xAyV)-(q+vY8$FQwltrabC8BKI+VoU%`D
zOnppm%xcW(fSf=e*b#sawFPDZbAk1DtMN*G2Tn-gY}@>7OWw$p@}xf%S7*-zVF
z^1r-JS^V#JdUlpL>w89SPG=sqAiRKEhOgjO9CK^y$JVc|qt>N15u2#rxIfl^9JZl<
zxBlY(sp4$)_jiW46IoaPm5ZPI3Y`jvNz?
z7Kgw=m|4h|$S5+1^ytEirq$GOwh}6fVo*MmJ!L?JC{kz@^1q4lRbB}{&TvuE!hQCC
zED332w<ravnER_>NQK7b5W^1-RbBjPR;22rR6mg
zmQM#POg(~?V%s(-@kuP4noANHJ*n$4HMObdEG=&!N$q71Ol3xaEUJiXFh}~)%0`4P
z6k#buDAUg}hllm_-TW09usI9YSkx1-PU`*?!+XM5=z^JnQaR;GUhP
zjXk1d$Su{f9>9@YPhlALL>n4lOUx~wq^=iFmNdZX)6)E7Y$QtQttoCW+VUybUOpR;
zP3_lvcS&ZPNMv$|!ZsS_RJ2ew4r5K>;KFL_-aMgm<@9Xb_U2J(>=YZejsyF$#^
zMQI+1>NOB_Mb7|Vh>K4|OhUS>yZdo+3d)K7d(TlwOQ(chnQ|2>85o&ZRjE<8bkE()
z!O4Z?=AoaaUqDccHeGu3>N8~6sE{$^CQOE;rB4P9nx*_1vJsHCj^+=CXKXR?0A21!IAI%~6NG~KW%wzDA=}Y;}zBKI(quEsth4}Y>Af)ES5Rj*t
znqCj2SC;e|3$g{PojdcQtH)n+=BV
z!II>>gNBz?(xmhtEXT;>q%^#ruYNp(I{9?+ydLb458jjdB-c}4%R7C*c4+!c{b$va
zyZDUm%zjFUf0X%m4QlCVFM4z*J8kRDmqGB+97tQj<1`;rGtnc*#w3lZYO+B)57Mab
ztHIFAG=|jDu8{I2>v+^f;Z$K)s*c`laJ{$nSCe81&pGVv3l~G6LFA)>G98zHrIKu?tAHKQMf}>u5dd)iFp^o*$S)U9m9R{u%wnKY$Y~6V5daLz3vp
zMGzXs#xsY@PZt0Q}8DHmIs_+ANX>6<+>
z{IN%IU`#%Hy7ZiWsQuf7wbGY!J1qT0DgAQa@jQdgV>lY^dAKP1t7qta`
zQ?{0}9)~@>f1zIbD&Z}CQHR08kL+yUqR0E2z9~P8mpy*8n62BuZ00Bj^{2c3EB1%*
zlls;_GvHPWy(K>XHZ5EF0xCA(6TJu!hQf$IB#NRKVo?IcDFZV>W}7K75A(4A3#S*c
z>sBlce-;e}#WXoc>>Wo@N=7tw0Wi7?5S?!@h
zp4$OO;5ZcMu|+91a{+*}g&NEjM2c2aK}m@VJPeSt!DAzKatC071K7&>)36OkxkzJy
z`!!bB0@`sTN&`w6Sq~=l?5&$s~V=M;Df;duXRqz-=$u4Y=F66DPRwItCT?`n@aO^Zg
zYwa_m782*Jurkoo9Rsc0bl0EO#9`J^{e^(xf5^`-oAW4~=`Ri5YLWWP6tMK|mGeuB
zvOoXf8(BvF-BLUP%~QZKmT4$+=He&fikVTXkfc{Y5cBH4(#tmOVKV4b64uZ%7qN^;
zUsifv-xIW?WVB*$L!kZ@5xY|w)vBN^Np{wtL?40()`3_?oHB-oq(U@X@NnW;N1u20
zoW)%ZFD4lZ$IHrcj??SQ%d6%tC=jQnrd3<`d@i??G-Eq6Q=WI!Xi`#yLjT>4-(Z=X
zspD`#;-Tjdd3PB&$E##kVle4TR=4TYva^HR(uHTMTPrn>-to;;4!Af+JezZQ8AYDJ
zLSIH_XP$oR(IyjHCTeJRFfG~m485r&-*W#i
z^>#U5p0C~?HsD+r-DvVKsM+LkWP4Vx$(yV`&9}u-@=)dwc|>T$VbowWZH)9eY+PoH
z@LhjgZd`ucb~0wd^q0{*dOqVEZh?7TZK*heS*fcJ6#EzA756nW{qEJnZ6U#B`wKl}
zvP{_Xt^#n(&2$vRqk6}m&Bi2Nni{vojd|y|
zM%%!>JxDt7dMSbbg>1Rm+Kq>xZk*QFW{GN5GmybwpvY>*_vOd
zgSW%I(4u2%cS#F@_ty4uxJYAx&|}NVE%%fnDdA28{nBzRsD|o2KkM*!jlaQTxD
zX(wSh=%i-#LCNxKfXb=30wkZOmEM54QzL|Y-Be%a?NNl#)sF^2H-Dcd0&;_?4|g)M
zlOf7A)HJ9`MJQ7kHJPHN6e|uBktvbc&lu=2MMR;Hd=LxhIvhAqPl-dP-}nVjkPs>$
z5hx>ii1sTblH*&WXyX~VGdh^;Ke!>(8u7PS|qE$y_pvw0a1ww9;
zLS)9-6f{x|6>!tjewpyOMZl>CgjI(n&&-Z9YX7z>|CDmtLL2tk
zt}4{tfL|}0)3EM>^2s(Syc2UVN7i{8^ZeYEc7=YI9jPM@70M46R*ip7Wfz0-?47!s
zMZ^Wps1ONfc6D4Y5k(lp(Hk~#!VHUC4T&D}|m*Vf0YE>(kdp9CO
zJ+6r>-7A$(4qD}~1Rw82jvchQkz1$eb-KUS;uJfT@%Qi6X?`)e>inoJjA&!k3hmlN
zEQUIbPXzAu?k|XW^VOr(yXV%;APDIRid8Tzyd$Nt_h&UYL&H>Q&iym7
z1Naqc(X_x1NR}x6S|AD$@+i^EV|hXbgEso3^`F!e0$k~*Z2PB?;;AGjf#DFUHSTS*p$Ih728!=`{3u8a4V$aebl>UPV44c<9K
z9C}kNPPl7g#N9N>KG}p|V8Ht5$-Z@*Wc@TNPxs+gB4*r~E506a2#-Or1d2a`1lXxV
zD)|eLEIPHyBn+P`ypZHO8h-ZJPUY{3hL(qmhM`ajT6(ucAshq)Gcgw^`3Q42gaFvN
z9MDJ$feK^Yj6>ab{X=1eMY3fYEgqK(DgTjz-bXRG2|c~2Foq=FO<}QeZT&9Zt=Rh*
z%GDGV^=>Id^tQoAp{^TUv@VK#!|rAXdjo-p@*ycEImzhJ5Dch50?kz0HGnvHO{or0
zias*T!i;cqgbftnP&2S=;9m_2u->-n69W!x)&&&ZzpZ+p?K2yrOo^ee9nwN{S6e@O
zuW5;CF~5H~F@U_{!_XI1m!U!2gM!8Wv{m!F>Sp~un?x_1X@Seh^M5U%3kXNC$DXBq
zaw9XwsUpjRB7t@b)rUl$D$Gf``8mZEcY$$bFE`f9i&^g#lhWqyS84B+=N((a<@o@k
z^HTjfJ?-?_xpunF?f%?Bs+N`3h0Eh(Xtew+U#_M{%}6a1-p^;jM{2kpT&*l0S^>t3
zFPWQm^CWxFu?Hp%7hg>uzj%Cg_~NG|pM&P`pPQaXp9lCgLswrW0{L?vZOjb&Rr}TL
zY0A&j=5<N{VYR_`C%rBh-%5m!XDtQAsV=6i71uBX6WX^PA05{qfXaM5SN+=hN
zl{p(U>2WkO-$}g-G)t=m4w2IIstj8Q?vi-u7K8&SGY$m7M&Q8!E!eS$KA|i%S7vm(
zM@6{G1HZ$78|CjcfNYB#Lj=od1bFkD^AkuDw*|lqZa|0B!S-w4Zl}-9GEcjQf0a92
z!-De%NVQ3B%}6cF86jc#VL$jgR|Kr@K5)4iBj4E0)C)01&3=@I&`?T!i*KMwAlM*xcbB}IAq3tt^O8^>d2s`lrq+XrCfloDZ7|-@g3l9d>~sx-RgX5qiVe3
zmth-27u#r)h<_@XH2av7hvt*bh-#orgF4RrGpzKuRj6_3oc1S^Q0s6$ycC4SsXFC+
z(GVE>(e`R()3kEE_Z!eig3q1*rHKQ>#I#P|#KT!JUd1fu!z$j$crm8T;OsyC(Gqd
zbAFCxl!CjtvDcjrBWX{1L2&?22dv^x|7vDIIy=jS$M>~{by_!61%5c{mCz~_Xp!aI
zUK^8`*c|6|A|kOOxbsM8l4Cl_o92GmkQi9bzU2n|kDurQ!qKj3C6gm}D%rX1k&ND^
z$KC%`*6<4b*e)Ji@Y}A!nK<};Ni5Lah}_ZDQL(RDEy1JWhs^zbeN8<$!RTTDxZ$Rh
zzEe2cEwkbMo)YNw8^uEJ8ynIp-CZIL(CrpFsSP=<{K5j4-iFMy~2dKsvk8A^x@^(0uG*P
z=9Zu09t;4MO(w58U%^jacnP?hs;zXwVWteFq?om7{S-T8l7Fsu1Fx9*j}k>WF)hKd
zBE1khrZ3_A3b+zSq+4LRHl&C{-ZMDE)@U#fO!q!h6ypDH+?Ua^ue_D~-EXJrrgh#r
z-kT!Md^`){E@-(1Sr{G@JqTOrZ*At`v8fVPq(|)-+z#rl{GfvO
zqSTppd?f9sR|gJ=ig_h@$3}A%O@7Y>aGEc-3$*AS{T81xbnY4d>6yM3UioMLWS8D(
zn{m&{x)bhQ;M>=D^mF`gZ_i)nU&{=r;W@;XeDwL$y*I*2K;!oV;TQNwd#7@t^8ye}
zGAT?0_gB!4y%hL?divwK#?qI9>>}lE-kw_~c^6OC1=C9RIL00T
zxJxyHpRjRlT5drW2Cbrdg@rzkwOPTeHOPZ{cLSKUc1bQbYw?ru%nitE%M(}!s@Qyr
z%YW*mWu?~P
zZu|FK=(+%Oj!<-EYCO-mhp$W1^qdjNbMZIA>Y^5RYE@VWmDTKA*l_8FPYr%tnBjSj?}C&(9aZBPkcILWVy0>F5J8TW^i)qc?2AkM1G;3{Q*9b
zBj;UfZ0~9Z3HX+&x|+Y`8kaRd?~VH0$JQJXCm~mP9;q$RF0awP1aT1A=MjAyeM4BG
zwSwCo5Lf!3A%C&;#I8Swc#X&78>74~mzKD7?2e2}I2<2*y&%)KV_zIN!FYOW_;hVt
zVQxH*f+%vOm4whkYtMS;C!9&7$NIa{W25Pbhm;a?1KnNod=eEwRU+d&w5N*!bW99v
zI~MR?AWd{8a*lC;T0ZeCGEcqxZBP5mO{y_9e;OxQj>n|FG>5`5VA-qwA$v4ztm|{g
z_n$^?tMe^C=8XsM>lzFG?F;y0T6T|XRwb0)W6ALjOJF8>2h=1Mc+_}AGoyXIQW*50
z%0P(o6-ZcG%{9-ooHK!;dx8_n%fqmU1GvgPDN$)HeE~qhuOVJgq|w3X(zb?6yB(a!
zKT?x9iiyd)@((CSQ~Hm-2QrJ6F_okpD|20V4{m9h@w{g*cDG0mWwWuo0#FkejIJI`
zPd8&32zN_h@5Rcx4tD48O5E>d{p9|b$IPJ+^PuJYaH=+%WGe&yZ{2!JfNRwK=@&1P
zd`YZ5g{kRRHA587@6S`Jkhl}I@Pv+zY&RQ6Ux)XC&T#+mLI&c_ie
zqR*dpa)uwxHzO#SdY*dg-Q@#^-rcx$EVX0k
zOkPO5pgrk|26_tvcsj)a!38p&9Y%MIz1+>C6fAR^m$mmk$K`HwL5@X)yerw*t+&%i
z#yvQ%$fsG`U;nrN(+%O%!r%f%J417~&b-fUs*&QoVUFqlFS!=Lor9+Uv`uB&+EKk_!y=7;D8eh
z^iJyUYKgKDGNGMGbI+0abWK!I(&j&@os8SpFM(XiCxv1uMQCaBuBO$Yzqs8v?6y$I
zL)+ML{$8n|&?87OQde~c`}|M$m+F7`fS56~^s>9WwAsaN7Q#x-2jqVJ8-tn0$W1-O
zF!5lmWY#Rk{?4bxqOJe&Z)`YlaI=H8r~BM)eDmziX8i+)ZNy(|Qi4|izw_^!yZrDk
z9EE;i|89TNL3d9$bMu1U!eW1w>7AF|zH3shu07Q%K6*kUJ{14^j#rij(Tg*G0`7Qd|8G0-s3
zq!(dAfMhgBOR$E1ugp3X$b~c>9N%Y<5rnpHC#{Gke@c|R6$E*OE%sw&p
z*KKhoV}C|=8EF|Gf*H1+T}{W1h%?Mws@l~^;JQ#wgx?OdW4Qnkpt!srt|uApvJ#ET
zYg#$iIvQa3@g>{^F#3u-Vs3$s4fh|Yw%-zwFILi)@c
z?W~`M-@v`C`f=C#~lI=kkFgG0+8c)Lg5-<>bzT+
zo(w7C38mbhKxcr9s*Ys~-@){EMNDHKnt|P|SDXiaTAmD;VK$1n)8K0jRO0@#2gdnk
zbzLp6^ZHN1g($Fuo!X}NOUP7)W0pET%5tRz{IuHw6f@kY%Qifl4ou$dR}!NtTS1te3ne`BL(u)=n||07Tc;e<>=Iia3#kZ_uCh0sfQO87vSBrFqwdWJfe
zs894KW)cq*Zx9EG-()pq?PPsq^OPUMpcc{qF-(9!0Vt+DTYFYsDXSR~xwDI`P}n|N
zdU~KhSv=5EYk%Z0JocM>qT|siuVJB!kw2LnV@2|sU>Fe1q2UJcfBXFh*&vMF(^^n4Oj_$q=
zN3sA`JNqfjUY6;E7w$>VGGlhsS25WXEdimWa1BsXO0bcGX@!R0z$DN8`AOyxj-N6q
zvFYO88JQrV3g*m#q3O#r9;Y
z8}bUo29Cj2Xu(1+$N0vQPFJkjVv4-N&w~l2rfhnRMsK$SUiD!V882|0_Lq&6`<~%L
zOaHvI7Ds}4O)_>V6(^-PGgGEJk*&^?&AXc2lF>Mg
z@^m~!A!B@R?Dx9L%dh}vl_o@qRFfdDyimz*YQoSB
zZx(8Q?NA_itk6WJlx?!m&?hkIBMMtnH>yeyj8H(!h;T}z?Cl_(Lukm0O=}!|0k2L~
zP20rWG3h6@)D|b^rUfIhXnKvv;PFi;!nm-|wmh-6&jTr9t(Bv?dr&g?P8*5wiP0~S
zID<+`)>&k6QO3yt;}e(2Ick|Ek?A+zkv<~KgFNYd80{%&(3X^V7rEz-Lt)~3dcZgE
zogWa1$f-=}lQ}GVJvPRIB+sZn^%t`3YtP7p_10N
zqVsQ9uoazAbT#-jgfe?4YR4@P<)%;yn`Z}`4C>c8+<0se$Ns6)+Y`u+VaqFk3~@CV
zEwVZcc#v8_YOL^hZA(I!qST(iLp4Y`CueEgxd0|`NEtOqo~|880(f*WiE#Pa&MxCJl`>O=K&Viib$i5<>IFymfCR4D0Kzz93Y{G^n`PIf2(&GpaE)GrEv1$u4TnOx$hoEV
z-U-vS@=C(r6#QofW1T-zfNnc|$!K>o3uY{P$fPOMdk$22zdGUI=hv6z?eWpYOYXg=
z`tO2>a^$<>;4pK*0WI<aZA9AwV=wj@0Pf2{9sB?H#cf=X$Ov*zl0#mmwYGi+{?<
z5&qWE#s3mm3IQbMp~mL^jTR^&s6THHRE3-P;=V_#IBGR&$w}`14uweiJm?KJvrH{0
zC6R}Vw@}m8+AFnQuP#sG@7W=m_fwOL#{1gpt-ZR(5<7NnkqPTUkX*uyo)QW?#cpG6
z@`j-P{CtQG#-nSSJclQv2^S=2$m3F0Wl%}P=L(%%wlUynZ+8xEY;MV|jdo4V*z(%mDz0o*^VYlU(k$>O3CS8Sz}&T5>DxF8$)_8L
z%xU2UHgclE>G-5w_Z3bjgA8UU%}Rnvg-TYJsVSFHsS-?ELK$`&tNwpWOjgg?HhuLH
zIZU{v=l4A>$esuLCKUN?&y=*EErCbOdX;)&q76#UYN7HXQ=w&TH3W1y6xt$^lIL|+
zm(8DAS;&m7K*#4gN|Aq%JL6wZC3UOIGoV94FS#Tj^z85L>Szl(3n0H;4>Os0Pnwlx
zJf)q1ny|xAba0}{a?t@98b8`)jgB5*Awvm?yw2OPM$6*p%54S<+jW(M@y6RdD#GmKcNba-&z2NPs}1_XPc3m?Jr4G
zT8-A6#an`BeNYNGpGE*lWSHu1tli
zhghiKh0K78%J(Ejtzl1Dv^a94T6iV!GK-2cc4dfl
zROYUyqX{^v)M_L;YEfT!W~|<}aVSbiwZ){{sHd~ipDMGt8}HS}n4E6ZZ_k|#!2DGs
z#)rI$H)HgfSNYD4X5A2D$2?5IK7CX5xb*#5pAHyx(#rgSD!yxsn;o^M1ny~C1K6!I
zLx*lkygn&t|7ni4S`C%N9FtD&$#(uFtK(O=qd!Jb$<`<%FoBmb@>auot&{azs;g`J
zB_;cX%2oSI16)vEZYD~3Fer*vqkb#iqAkIMyS8gszC2`5yp!TfDy4`FOxST!r{;%p
zyDAM@9bmC!kfIDVc}pn+hqshKD&_7)zO4V8SX8K`<$8z?GR`1
zP#@qAjgu+Ec{Xqxet;r0i%yris?=(4O+u+@g@s1&Mk(Hvw-X#eq)a*)XsdT>C7AOC
zdgyz-$1ah;4`cIm$SQ}Q9IOOePD)I9i(S5EPA~a2*59%g-i#uE3nC}?kxRnF=ap(O
z$1@7-ll`p~sDroTzwyi3NK+P_Y*e1~@Dl
zIhoJQ64OmbM|fD!aA1it&Pdb-e*v$S6W(3N7HDKk>_VyKa$g-b62->ypoocB2J
zC2Ts1K?zfoYMqIQL_T+kAI{dwXP?y793(ZyjasILYja|k+_|Co7
za}nIR_KMO{>l5#er#2rx5$R%?P#Ba%o-NrD9)0#$b~VshL?PC1P{P8l0yMg>E52ig
zg(4jbOA^!D)v6~MkiHYR@ZiCbe4bvRrS0A6?`B}gP-rEQ(5qDF<;{Y_M|*=?a($oO
zxcj*aNZ}OT<7`IBVdz4`5`q6Ejh*8(_{yTvbmOaexD~qq6>u
z+kld%FncXzBSS)l$#!xpYZRcgxo-Dv2UHX&kJ_wM1@TRr9b=BX3@KJBfzQ>*>iWw8
zsNJABu<0`!J`K*3klv8E+uw4t`#BSeU
zgJ4_jJ&ITvIXNOhp*Pa2etqVwt5LI?XW;DfGT4i-v^c9|eC=5!RlOQ9iaaz{covkl
zeQ0l~nVB?fBsR-rsgU19#ZHdQ5LEuwFxv_F8Qx3{opdA1aE20A5=ToNa&3W6v5nR~
ziJwlq(Lzj)WZQ#7lmIf!6SWZM&%4#!JQp@`MDYK(lHbQx;~bSk_j;LPd^T%TkdP
zbbbwG=tiPc17~9GiKtmi)5_njc_2?|WKfL4O%;dcqYxsSj0uX@PjnlF*{ELnMgRHg4=`7OM%7Ze1Z|Ce95!#9X)`
zpxF2)H{Tt}?=&&Voa2PNGw2yN@~_OlzVQnwjjCIlK&oUMcOGLo{x+1zPqbK1D)h*;
zxNNki73JM|*>_MVC9|;8l^5CCB1nc9ri*ekF1Sh0_|GN*;8!}yH3geMxv5za!R8h@
z(IHk08LW%$SzYaQfJCM|zY<}trJzURS#;@-S1>GQ&E=9jG>xLX&1DK^r7LOa)u2gw
zJF@^=`^=I^(InhbI@HE&b1C6zDI|ZkhSj!bzRH8acCmfEzf2Rw6T*LoAazB@;y+lHx
zYch)*iXExU7Fff@81r+i+a?~etGH?AcU3hz&lGOdQB=I0%g_Mp#j3Kl*n#N+)d)#;AIPHZ%{)j$1`3nk_I@|fexdh4{LOgl2y^_
zJ!%|Oc@Q%2!)b#RoH=8A6y@a~%~(~omD80$S6836%+T?`uUA1of~dkTn&dr#qN~{&
zBRRR#ftXbVJALnZw49ma@ht=bi-3i17zb3>G#&-X%4MzRf!pWJL{s(bf_>&bQWS
zp*eL5kcr|N)c^f-GM8-=)OCT1m|8L$w*e{PK#{7C!x&b~$XBN=%U`6rBbDAvOw(dL
z-?d6&51?0tRx(qG9}4Y9oY@2y1R^~z=oEX#YFpf+VWPX1SuC;I+oOn4takRW)6-8k
z@cWfPI_dt2Sk8*omA>WW4-al%I=^|oVAz)g4VuL@`BJI6M;vi^E4c(Q*e+_5hqdf5
zt95N8i9=Ctlv|QBg%xlyM8i+IFo-DKp0{6T;=`MaSGqo1e!E0lwpB(Ax1TDxo!@o#1&Dg
z2wnr2?E7pWktpxz{3c7JlvU6jFl14NK=t7Ug>tib{K~WAFil=co(}=ZaY9k)zghod&-X-N(U?P4L7EUYw_7P2qCG{<@S
zkOw3^B7*PWyoSu+8@03tUU>d6>kSJ0+H_yKQuWO+uOvfN#-m&uNNEPkW2L!Y*P8An|)%PwFrX$WX6-_i*TxOY+=x4HsKi|@s
z{tULA!op!1OQ7?NanhjIWwIUl6+AJJ1PU}@c^8zIF*rP=P-|;YC11b(z8%ILdtprB
zmd3kpAC5*%*D_9Ko+Y1dP4afMvXbEL6qKcZNNI#X$CQ&G7fa$F5
zAqU**75*>Y*pXEv8CcjFn^;*rX|Xm@(uO>4w^@~Ci?oPK=>k#2sEw-F^2%@L(B&~W
ztTPZc=0(R?ZPtEJ()E8^V_3iOuzR{0J|uFnv|{1z%3mToX+e2VAhD4Uuue
zqe@MKRw~p#XdPp9m<|zC%a4ll{>)}OM=Z*|?zD{&J0%h@WEtAU7yi~9!OdXf@DGSm
zh`9+|_25ZDS+LN6)&_1Kw;PL^d+C0i|L)Od8eN3#*gH*s%wqY*T@EQTg{aj)LFZ;m
zHMD3)J+2N?!cIQ88ccf=TfaS;2%)SPBi7yaR&a>jt+umva_m0!D`rtL?d-YY(=B9%
z<-pdN`G-wG&Z_>4C?!)hf926!QKB08sTuQXIRgkH7I7=RamIdiW&H@GHh8)UiwtgL
zl4YCd8dV~`^_z27@fPz;)3E-1Es@1z6ofemxknjQky2DQvZ2`BuDQ3caG6q*Qohab
zRb{0XoGKJK`|SKkkN6SAuRB{P(sqTZTQ@!AV5s=@QZ8)Oi#CO!kZ*a&T)c&7fp)Wi
ze^-SR6(t#pPvOcsNGaEEWD~(ly4G}!tmWELEorM7>6@o0m>GkcshRuRd`d_&!e_^J
zQgChqzT%xP=@!N@w}$N27{(;y>m1f?WN=00L7(q^+@=9;J_m;C=JQ7CjNR|VP6il2
z#dNl10N26}s@9OXHP$ld&XVj>66W7L`N8)--uEo*hNUa8xl8?d975I3SJO*h0A4ja;jobr(1TYN(tRQJ?d)k)tHcvE;|1!l`_L%
z#yFd$ZneA^#I@2mu}yKE{_h5}jg19;hp%q=7W5TUCEgVI=-Lcuv^t=}5Pi_u5nWf*
z1qBYpn1a|oC&c+}UJxH?v`x+&i^ummk)w=4gjwvhWJ=2aZC7yffPFq13bnjmqg&c)5ia4`7GAK@~n-;u_
z(ob(%@or=rnV5a$0k&ucON*6Z0;AI((b(*E`wrt{YGqls2BK*3buBVW
z=WsHDlJ&3u%W^e-Gi27Pzt{{W!l~Fy=DYbqhw4{fq=m*J9=BU_$!$l
zgAQ$mV3*E0{|0I|m@JO_x%&OUWNK=oPJZa!h3W6@^yW(V`s=E)u(EVbNFl80BpKuM
zU8WEO6&n+#dUY3`Q$0J5yx35|TaslQ=YqUk^@`*1_>QD3TUCRHPERQN5T%5692yV%
zC{wp*D%|t-ypt!HWShHSice?^AVgwGk_g*`lY9*kw%YiM2v!}6#5)(aT}U)XosBA!
z-e^lDL>C-HBRJ#St2%0Mbx<(8^H;!E96oQNScVn
zaPl!>>1kBrq~fWbn?1u2)KpHSwu2sAq)7b^n_RpJ|d{+oezfc+}q%
z&O+%esY)B(G(5zPB=N-Vf92#F+oS;~u!@@XveR}nqt65+?DO0>N`1s_b2VJr
zfWM)KXJHL5X8ikI`UcnPlJ^?T5$aa`TjY&xVbIc#+w
z3lIHRs
z@9I6_M_`a_G5v2bjCrKG)S*xjng(SGV=zx_a3Yjg)Py+IS+a>~C_MX%Pt`h~0Su)zUOssrF$bH%^=XMXI#1kwUj+
z_c!S82<~F3iPCQfUf9ooDUC>l)@p5Uc!`Fv_rzMqiZab4Y65d3tWk-0Vy_D{5;L@;
ztKo}}>M}2BtvXwwl$*K}oXMB@;)#htY1I{;GD0SIKWy*e?`1QZP{|H^m`(;-I{(
z4qqdg5*v3I?@+pJ5Sl%4eCtE4YYJcfXu);iN@FMf`n`E!k)4@eUCd5IL$<)2VEF@A
zOs}nW-p`_eL->l-U|4uxn^W#?(7AssED8uSxU%J|7R$fxJ2!NnCJ?ZXEEM9uH
zpsa!#rDkN~V)FjIA*-*Io{|&?ftqHOO!G>)js-)gX(P@#XUQo@3ye3SLrrSEOvP9<
z2b>1Q&25bH`493sL;hQ~L609mL<f&;=KnF2CWEQpPAbIHHnZcL(mR@AH*Y>;&hU!E=J;Z%HU%7j2
zmp5``+5Cy>Tp}8@wF8VPjpg&@;$mU@kRDuR_kLhKASNC6^)(^dSu;B_K2=C=ydm1S
zwLB78tlDaP?L4!w)3N<-IQ)oB|9U;Wpq{Czk%6vOrn(11lXDSjX<=%_RXyLrDYP~y
z<48;i)+mip6;~6JCaMKz;^BXmwyKrNujA2DI8ldlq#Cug%&PWQ8|*V=cpXV=S`AVu
zqe@s?<$ifjUid@I?q?CwkQ1{oD1I6FI|jBMC={W|sto8U$>`VZq~GoFX4dkVpzV+6
z`x9!-)Wq0GMMKBR^Ugk=(H*QPwVF*vtizzvL~hdx_)z3WA8?ismf?ru-Y&P!RmQQo
z{6-}uUnk_Wab4?NryYg!C2pEDB&{9gDi^lS3UzVD#7HPK;B$F`o_fb5ONJRPpr*jI
zLxz(iz;_0>!WRCJjhSNPwxbFqYI4Z`;>$}blqSN1_z-@BRp!C_Tu=#AHrrd;UMn}L
zAT8F{c{l4MxXRQ1tU~Kg!$+5UV-iwA`$02M?w`9y*W@)A8UC-vM8L9q{HihuIHlB|
zt5hwlJsm>UR}c)rvw~8fI*85Wbg~jw%AUf^Or9ifLmtK*-W{*u?sS?|J(ktd`LV2$
z8Xd1^S|I-bDM+K;bihGHP+?HcPx?bZyg{}Jb&tz7JT@FHIx734!^bAi#qfXROhn2Ku+n6JYVAEukm6c_&Sm-YY_fG?E2GUnh$v<)(
z6e^9>oy{WB@=A=G9LY{+iw1@maqT~_1XH+>0cshjX*G+jG72CGRF1KKsq&ai0ctl`
zf#({ygn0K4`>|GIANeE?_XBH(God7a*{O{zj7*?_vk~&wJ?JzdGcYvNuQD_-jJGs$
ze5e^duGI+!OmUSpf)gP|WRomL?L$J3uHxH;TH0&Lk$k=5?;n{uR;Om_;x_zDy3~xH
zmoYuo3so|os`6WS*sQHE0C}u?cJS