From 0a08b90717555c482413a3202b7513c5e74e51e0 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 11:28:11 +0100 Subject: [PATCH 01/37] changed installer User package --- composer.lock | 34 +++++++++---------- config/user.php | 3 ++ packages/user/config/user.php | 4 +-- packages/user/src/Commands/InstallCommand.php | 28 ++++++++------- 4 files changed, 37 insertions(+), 32 deletions(-) create mode 100644 config/user.php diff --git a/composer.lock b/composer.lock index b36256a90..408f0163d 100644 --- a/composer.lock +++ b/composer.lock @@ -3650,11 +3650,11 @@ }, { "name": "moox/audit", - "version": "dev-feature/sync", + "version": "dev-feature/installer", "dist": { "type": "path", "url": "packages/audit", - "reference": "e133b42a547d1eb9988a451b92954afb1d99dbe3" + "reference": "4fb265fbd9014d97391fce53bf2d8ccd4251cde9" }, "require": { "moox/core": "*" @@ -3696,11 +3696,11 @@ }, { "name": "moox/builder", - "version": "dev-feature/sync", + "version": "dev-feature/installer", "dist": { "type": "path", "url": "packages/builder", - "reference": "9caacf039b39da25f82c15d94127b90a587c237d" + "reference": "01b30ed16881edff98cc438c4152ba8711bc6771" }, "require": { "moox/core": "*" @@ -3742,11 +3742,11 @@ }, { "name": "moox/core", - "version": "dev-feature/sync", + "version": "dev-feature/installer", "dist": { "type": "path", "url": "packages/core", - "reference": "83b08ac7b241fe0c755dc28a87f0f830d3383d6f" + "reference": "70a8650e517729f761f66995bb2c8621fa7cea9e" }, "require": { "filament/filament": "^3.2", @@ -3795,11 +3795,11 @@ }, { "name": "moox/jobs", - "version": "dev-feature/sync", + "version": "dev-feature/installer", "dist": { "type": "path", "url": "packages/jobs", - "reference": "10ee64375bc69c0245ee63998d210f616e082d36" + "reference": "b81a8859b79567676e69e3cb1618987757b020b5" }, "require": { "moox/core": "*" @@ -3849,11 +3849,11 @@ }, { "name": "moox/page", - "version": "dev-feature/sync", + "version": "dev-feature/installer", "dist": { "type": "path", "url": "packages/page", - "reference": "017d564053cf4b9171a6b8c4ca2803649f3f6494" + "reference": "9317e8b6b51c148df0513062399e439768efbed8" }, "require": { "moox/core": "*" @@ -3895,11 +3895,11 @@ }, { "name": "moox/press", - "version": "dev-feature/sync", + "version": "dev-feature/installer", "dist": { "type": "path", "url": "packages/press", - "reference": "1ec8020e2617d66bf74001d539ea30e57d858443" + "reference": "ab0f6a94d4865b0d4e95e4680d813acba8801e7b" }, "require": { "moox/core": "*" @@ -3941,11 +3941,11 @@ }, { "name": "moox/sync", - "version": "dev-feature/sync", + "version": "dev-feature/installer", "dist": { "type": "path", "url": "packages/sync", - "reference": "f68d4a91382621507d438704c5d1f4373a6edfa9" + "reference": "dc50c8759948ba794e1978b8f199e4e0bc08efaf" }, "require": { "moox/core": "*" @@ -3987,11 +3987,11 @@ }, { "name": "moox/user", - "version": "dev-feature/sync", + "version": "dev-feature/installer", "dist": { "type": "path", "url": "packages/user", - "reference": "a6982686c9bec5bab73bdfe96bcf8087dee87d7f" + "reference": "c5aa0b285e083f0e69040a04554e7aa0b98cb9af" }, "require": { "bezhansalleh/filament-shield": "^3.0", @@ -13545,5 +13545,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } diff --git a/config/user.php b/config/user.php new file mode 100644 index 000000000..0b67a5fe4 --- /dev/null +++ b/config/user.php @@ -0,0 +1,3 @@ +callSilent('vendor:publish', ['--tag' => 'user-config']); + if (! File::exists('config/user.php')) { + info('Publishing User Configuration...'); + $this->callSilent('vendor:publish', ['--tag' => 'user-config']); + }else { + warning('The User config already exist. The config will not be published.'); + } + } } public function publish_migrations(): void { - if (Schema::hasTable('user')) { - warning('The user table already exists. The migrations add fields required by Moox User.'); - - if (confirm('Do you wish to publish the migrations?', true)) { - info('Publishing User Migrations...'); - $this->callSilent('vendor:publish', ['--tag' => 'user-migrations']); + if (confirm('Do you wish to publish the migrations?', true)) { + if (Schema::hasTable('user')) { + warning('The user table already exists. The migrations add fields required by Moox User.'); + }else { + info('Publishing User Migrations...'); + $this->callSilent('vendor:publish', ['--tag' => 'user-migrations']); + } } - } + } public function run_migrations(): void @@ -99,8 +105,6 @@ public function run_migrations(): void public function register_plugins(): void { - note('Registering the Filament Resources...'); - $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); if (File::exists($providerPath)) { @@ -125,7 +129,7 @@ public function register_plugins(): void foreach ($pluginsToAdd as $plugin) { $searchPlugin = '/'.$plugin.'/'; if (preg_match($searchPlugin, $content)) { - info("$plugin already registered."); + warning("$plugin already registered."); } else { $newPlugins .= $intend.$namespace.'\\'.$plugin.$function."\n"; } From d1790ecf9209602636e59ce7240ac3c0777fb79a Mon Sep 17 00:00:00 2001 From: Kim-the-Diamond Date: Thu, 7 Mar 2024 10:28:34 +0000 Subject: [PATCH 02/37] Fix styling --- packages/user/src/Commands/InstallCommand.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/user/src/Commands/InstallCommand.php b/packages/user/src/Commands/InstallCommand.php index 6311070a9..0ffbb7c3d 100644 --- a/packages/user/src/Commands/InstallCommand.php +++ b/packages/user/src/Commands/InstallCommand.php @@ -75,7 +75,7 @@ public function publish_configuration(): void if (! File::exists('config/user.php')) { info('Publishing User Configuration...'); $this->callSilent('vendor:publish', ['--tag' => 'user-config']); - }else { + } else { warning('The User config already exist. The config will not be published.'); } @@ -87,11 +87,11 @@ public function publish_migrations(): void if (confirm('Do you wish to publish the migrations?', true)) { if (Schema::hasTable('user')) { warning('The user table already exists. The migrations add fields required by Moox User.'); - }else { - info('Publishing User Migrations...'); - $this->callSilent('vendor:publish', ['--tag' => 'user-migrations']); - } + } else { + info('Publishing User Migrations...'); + $this->callSilent('vendor:publish', ['--tag' => 'user-migrations']); } + } } From 816db98058ddc207ca71834255ece6db8d7c9424 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 11:59:57 +0100 Subject: [PATCH 03/37] shield --- app/Policies/ActivityLogPolicy.php | 151 +++++++++++++++++++++++++++++ app/Policies/FailedJobPolicy.php | 45 ++++++++- app/Policies/ItemPolicy.php | 151 +++++++++++++++++++++++++++++ app/Policies/JobBatchPolicy.php | 45 ++++++++- app/Policies/JobManagerPolicy.php | 45 ++++++++- app/Policies/JobPolicy.php | 45 ++++++++- app/Policies/PagePolicy.php | 45 ++++++++- app/Policies/PlatformPolicy.php | 151 +++++++++++++++++++++++++++++ app/Policies/RolePolicy.php | 45 ++++++++- app/Policies/SyncPolicy.php | 151 +++++++++++++++++++++++++++++ app/Policies/UserPolicy.php | 37 +++++++ 11 files changed, 905 insertions(+), 6 deletions(-) create mode 100644 app/Policies/ActivityLogPolicy.php create mode 100644 app/Policies/ItemPolicy.php create mode 100644 app/Policies/PlatformPolicy.php create mode 100644 app/Policies/SyncPolicy.php diff --git a/app/Policies/ActivityLogPolicy.php b/app/Policies/ActivityLogPolicy.php new file mode 100644 index 000000000..1d6c6d547 --- /dev/null +++ b/app/Policies/ActivityLogPolicy.php @@ -0,0 +1,151 @@ +can('view_any_audit'); + } + + /** + * Determine whether the user can view the model. + * + * @param \App\Models\User $user + * @param \Moox\Audit\Models\ActivityLog $activityLog + * @return bool + */ + public function view(User $user, ActivityLog $activityLog): bool + { + return $user->can('view_audit'); + } + + /** + * Determine whether the user can create models. + * + * @param \App\Models\User $user + * @return bool + */ + public function create(User $user): bool + { + return $user->can('create_audit'); + } + + /** + * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @param \Moox\Audit\Models\ActivityLog $activityLog + * @return bool + */ + public function update(User $user, ActivityLog $activityLog): bool + { + return $user->can('update_audit'); + } + + /** + * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @param \Moox\Audit\Models\ActivityLog $activityLog + * @return bool + */ + public function delete(User $user, ActivityLog $activityLog): bool + { + return $user->can('delete_audit'); + } + + /** + * Determine whether the user can bulk delete. + * + * @param \App\Models\User $user + * @return bool + */ + public function deleteAny(User $user): bool + { + return $user->can('delete_any_audit'); + } + + /** + * Determine whether the user can permanently delete. + * + * @param \App\Models\User $user + * @param \Moox\Audit\Models\ActivityLog $activityLog + * @return bool + */ + public function forceDelete(User $user, ActivityLog $activityLog): bool + { + return $user->can('force_delete_audit'); + } + + /** + * Determine whether the user can permanently bulk delete. + * + * @param \App\Models\User $user + * @return bool + */ + public function forceDeleteAny(User $user): bool + { + return $user->can('force_delete_any_audit'); + } + + /** + * Determine whether the user can restore. + * + * @param \App\Models\User $user + * @param \Moox\Audit\Models\ActivityLog $activityLog + * @return bool + */ + public function restore(User $user, ActivityLog $activityLog): bool + { + return $user->can('restore_audit'); + } + + /** + * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool + */ + public function restoreAny(User $user): bool + { + return $user->can('restore_any_audit'); + } + + /** + * Determine whether the user can replicate. + * + * @param \App\Models\User $user + * @param \Moox\Audit\Models\ActivityLog $activityLog + * @return bool + */ + public function replicate(User $user, ActivityLog $activityLog): bool + { + return $user->can('replicate_audit'); + } + + /** + * Determine whether the user can reorder. + * + * @param \App\Models\User $user + * @return bool + */ + public function reorder(User $user): bool + { + return $user->can('reorder_audit'); + } + +} diff --git a/app/Policies/FailedJobPolicy.php b/app/Policies/FailedJobPolicy.php index a39eddb74..1208fbf27 100644 --- a/app/Policies/FailedJobPolicy.php +++ b/app/Policies/FailedJobPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Illuminate\Auth\Access\HandlesAuthorization; use Moox\Jobs\Models\FailedJob; +use Illuminate\Auth\Access\HandlesAuthorization; class FailedJobPolicy { @@ -12,6 +12,9 @@ class FailedJobPolicy /** * Determine whether the user can view any models. + * + * @param \App\Models\User $user + * @return bool */ public function viewAny(User $user): bool { @@ -20,6 +23,10 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\FailedJob $failedJob + * @return bool */ public function view(User $user, FailedJob $failedJob): bool { @@ -28,6 +35,9 @@ public function view(User $user, FailedJob $failedJob): bool /** * Determine whether the user can create models. + * + * @param \App\Models\User $user + * @return bool */ public function create(User $user): bool { @@ -36,6 +46,10 @@ public function create(User $user): bool /** * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\FailedJob $failedJob + * @return bool */ public function update(User $user, FailedJob $failedJob): bool { @@ -44,6 +58,10 @@ public function update(User $user, FailedJob $failedJob): bool /** * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\FailedJob $failedJob + * @return bool */ public function delete(User $user, FailedJob $failedJob): bool { @@ -52,6 +70,9 @@ public function delete(User $user, FailedJob $failedJob): bool /** * Determine whether the user can bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function deleteAny(User $user): bool { @@ -60,6 +81,10 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\FailedJob $failedJob + * @return bool */ public function forceDelete(User $user, FailedJob $failedJob): bool { @@ -68,6 +93,9 @@ public function forceDelete(User $user, FailedJob $failedJob): bool /** * Determine whether the user can permanently bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function forceDeleteAny(User $user): bool { @@ -76,6 +104,10 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\FailedJob $failedJob + * @return bool */ public function restore(User $user, FailedJob $failedJob): bool { @@ -84,6 +116,9 @@ public function restore(User $user, FailedJob $failedJob): bool /** * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool */ public function restoreAny(User $user): bool { @@ -92,6 +127,10 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\FailedJob $failedJob + * @return bool */ public function replicate(User $user, FailedJob $failedJob): bool { @@ -100,9 +139,13 @@ public function replicate(User $user, FailedJob $failedJob): bool /** * Determine whether the user can reorder. + * + * @param \App\Models\User $user + * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_jobs::failed'); } + } diff --git a/app/Policies/ItemPolicy.php b/app/Policies/ItemPolicy.php new file mode 100644 index 000000000..e47c5a1f2 --- /dev/null +++ b/app/Policies/ItemPolicy.php @@ -0,0 +1,151 @@ +can('view_any_builder'); + } + + /** + * Determine whether the user can view the model. + * + * @param \App\Models\User $user + * @param \Moox\Builder\Models\Item $item + * @return bool + */ + public function view(User $user, Item $item): bool + { + return $user->can('view_builder'); + } + + /** + * Determine whether the user can create models. + * + * @param \App\Models\User $user + * @return bool + */ + public function create(User $user): bool + { + return $user->can('create_builder'); + } + + /** + * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @param \Moox\Builder\Models\Item $item + * @return bool + */ + public function update(User $user, Item $item): bool + { + return $user->can('update_builder'); + } + + /** + * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @param \Moox\Builder\Models\Item $item + * @return bool + */ + public function delete(User $user, Item $item): bool + { + return $user->can('delete_builder'); + } + + /** + * Determine whether the user can bulk delete. + * + * @param \App\Models\User $user + * @return bool + */ + public function deleteAny(User $user): bool + { + return $user->can('delete_any_builder'); + } + + /** + * Determine whether the user can permanently delete. + * + * @param \App\Models\User $user + * @param \Moox\Builder\Models\Item $item + * @return bool + */ + public function forceDelete(User $user, Item $item): bool + { + return $user->can('force_delete_builder'); + } + + /** + * Determine whether the user can permanently bulk delete. + * + * @param \App\Models\User $user + * @return bool + */ + public function forceDeleteAny(User $user): bool + { + return $user->can('force_delete_any_builder'); + } + + /** + * Determine whether the user can restore. + * + * @param \App\Models\User $user + * @param \Moox\Builder\Models\Item $item + * @return bool + */ + public function restore(User $user, Item $item): bool + { + return $user->can('restore_builder'); + } + + /** + * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool + */ + public function restoreAny(User $user): bool + { + return $user->can('restore_any_builder'); + } + + /** + * Determine whether the user can replicate. + * + * @param \App\Models\User $user + * @param \Moox\Builder\Models\Item $item + * @return bool + */ + public function replicate(User $user, Item $item): bool + { + return $user->can('replicate_builder'); + } + + /** + * Determine whether the user can reorder. + * + * @param \App\Models\User $user + * @return bool + */ + public function reorder(User $user): bool + { + return $user->can('reorder_builder'); + } + +} diff --git a/app/Policies/JobBatchPolicy.php b/app/Policies/JobBatchPolicy.php index 8d7b65cfe..7336d05c4 100644 --- a/app/Policies/JobBatchPolicy.php +++ b/app/Policies/JobBatchPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Illuminate\Auth\Access\HandlesAuthorization; use Moox\Jobs\Models\JobBatch; +use Illuminate\Auth\Access\HandlesAuthorization; class JobBatchPolicy { @@ -12,6 +12,9 @@ class JobBatchPolicy /** * Determine whether the user can view any models. + * + * @param \App\Models\User $user + * @return bool */ public function viewAny(User $user): bool { @@ -20,6 +23,10 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobBatch $jobBatch + * @return bool */ public function view(User $user, JobBatch $jobBatch): bool { @@ -28,6 +35,9 @@ public function view(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can create models. + * + * @param \App\Models\User $user + * @return bool */ public function create(User $user): bool { @@ -36,6 +46,10 @@ public function create(User $user): bool /** * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobBatch $jobBatch + * @return bool */ public function update(User $user, JobBatch $jobBatch): bool { @@ -44,6 +58,10 @@ public function update(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobBatch $jobBatch + * @return bool */ public function delete(User $user, JobBatch $jobBatch): bool { @@ -52,6 +70,9 @@ public function delete(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function deleteAny(User $user): bool { @@ -60,6 +81,10 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobBatch $jobBatch + * @return bool */ public function forceDelete(User $user, JobBatch $jobBatch): bool { @@ -68,6 +93,9 @@ public function forceDelete(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can permanently bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function forceDeleteAny(User $user): bool { @@ -76,6 +104,10 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobBatch $jobBatch + * @return bool */ public function restore(User $user, JobBatch $jobBatch): bool { @@ -84,6 +116,9 @@ public function restore(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool */ public function restoreAny(User $user): bool { @@ -92,6 +127,10 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobBatch $jobBatch + * @return bool */ public function replicate(User $user, JobBatch $jobBatch): bool { @@ -100,9 +139,13 @@ public function replicate(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can reorder. + * + * @param \App\Models\User $user + * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_job::batches'); } + } diff --git a/app/Policies/JobManagerPolicy.php b/app/Policies/JobManagerPolicy.php index 5c3f8e49d..af8f847a3 100644 --- a/app/Policies/JobManagerPolicy.php +++ b/app/Policies/JobManagerPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Illuminate\Auth\Access\HandlesAuthorization; use Moox\Jobs\Models\JobManager; +use Illuminate\Auth\Access\HandlesAuthorization; class JobManagerPolicy { @@ -12,6 +12,9 @@ class JobManagerPolicy /** * Determine whether the user can view any models. + * + * @param \App\Models\User $user + * @return bool */ public function viewAny(User $user): bool { @@ -20,6 +23,10 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobManager $jobManager + * @return bool */ public function view(User $user, JobManager $jobManager): bool { @@ -28,6 +35,9 @@ public function view(User $user, JobManager $jobManager): bool /** * Determine whether the user can create models. + * + * @param \App\Models\User $user + * @return bool */ public function create(User $user): bool { @@ -36,6 +46,10 @@ public function create(User $user): bool /** * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobManager $jobManager + * @return bool */ public function update(User $user, JobManager $jobManager): bool { @@ -44,6 +58,10 @@ public function update(User $user, JobManager $jobManager): bool /** * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobManager $jobManager + * @return bool */ public function delete(User $user, JobManager $jobManager): bool { @@ -52,6 +70,9 @@ public function delete(User $user, JobManager $jobManager): bool /** * Determine whether the user can bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function deleteAny(User $user): bool { @@ -60,6 +81,10 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobManager $jobManager + * @return bool */ public function forceDelete(User $user, JobManager $jobManager): bool { @@ -68,6 +93,9 @@ public function forceDelete(User $user, JobManager $jobManager): bool /** * Determine whether the user can permanently bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function forceDeleteAny(User $user): bool { @@ -76,6 +104,10 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobManager $jobManager + * @return bool */ public function restore(User $user, JobManager $jobManager): bool { @@ -84,6 +116,9 @@ public function restore(User $user, JobManager $jobManager): bool /** * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool */ public function restoreAny(User $user): bool { @@ -92,6 +127,10 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\JobManager $jobManager + * @return bool */ public function replicate(User $user, JobManager $jobManager): bool { @@ -100,9 +139,13 @@ public function replicate(User $user, JobManager $jobManager): bool /** * Determine whether the user can reorder. + * + * @param \App\Models\User $user + * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_jobs'); } + } diff --git a/app/Policies/JobPolicy.php b/app/Policies/JobPolicy.php index c0dd8d22f..e49acc781 100644 --- a/app/Policies/JobPolicy.php +++ b/app/Policies/JobPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Illuminate\Auth\Access\HandlesAuthorization; use Moox\Jobs\Models\Job; +use Illuminate\Auth\Access\HandlesAuthorization; class JobPolicy { @@ -12,6 +12,9 @@ class JobPolicy /** * Determine whether the user can view any models. + * + * @param \App\Models\User $user + * @return bool */ public function viewAny(User $user): bool { @@ -20,6 +23,10 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\Job $job + * @return bool */ public function view(User $user, Job $job): bool { @@ -28,6 +35,9 @@ public function view(User $user, Job $job): bool /** * Determine whether the user can create models. + * + * @param \App\Models\User $user + * @return bool */ public function create(User $user): bool { @@ -36,6 +46,10 @@ public function create(User $user): bool /** * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\Job $job + * @return bool */ public function update(User $user, Job $job): bool { @@ -44,6 +58,10 @@ public function update(User $user, Job $job): bool /** * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\Job $job + * @return bool */ public function delete(User $user, Job $job): bool { @@ -52,6 +70,9 @@ public function delete(User $user, Job $job): bool /** * Determine whether the user can bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function deleteAny(User $user): bool { @@ -60,6 +81,10 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\Job $job + * @return bool */ public function forceDelete(User $user, Job $job): bool { @@ -68,6 +93,9 @@ public function forceDelete(User $user, Job $job): bool /** * Determine whether the user can permanently bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function forceDeleteAny(User $user): bool { @@ -76,6 +104,10 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\Job $job + * @return bool */ public function restore(User $user, Job $job): bool { @@ -84,6 +116,9 @@ public function restore(User $user, Job $job): bool /** * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool */ public function restoreAny(User $user): bool { @@ -92,6 +127,10 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. + * + * @param \App\Models\User $user + * @param \Moox\Jobs\Models\Job $job + * @return bool */ public function replicate(User $user, Job $job): bool { @@ -100,9 +139,13 @@ public function replicate(User $user, Job $job): bool /** * Determine whether the user can reorder. + * + * @param \App\Models\User $user + * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_jobs::waiting'); } + } diff --git a/app/Policies/PagePolicy.php b/app/Policies/PagePolicy.php index 5262e2b5b..8791056f8 100644 --- a/app/Policies/PagePolicy.php +++ b/app/Policies/PagePolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Illuminate\Auth\Access\HandlesAuthorization; use Moox\Page\Models\Page; +use Illuminate\Auth\Access\HandlesAuthorization; class PagePolicy { @@ -12,6 +12,9 @@ class PagePolicy /** * Determine whether the user can view any models. + * + * @param \App\Models\User $user + * @return bool */ public function viewAny(User $user): bool { @@ -20,6 +23,10 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. + * + * @param \App\Models\User $user + * @param \Moox\Page\Models\Page $page + * @return bool */ public function view(User $user, Page $page): bool { @@ -28,6 +35,9 @@ public function view(User $user, Page $page): bool /** * Determine whether the user can create models. + * + * @param \App\Models\User $user + * @return bool */ public function create(User $user): bool { @@ -36,6 +46,10 @@ public function create(User $user): bool /** * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @param \Moox\Page\Models\Page $page + * @return bool */ public function update(User $user, Page $page): bool { @@ -44,6 +58,10 @@ public function update(User $user, Page $page): bool /** * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @param \Moox\Page\Models\Page $page + * @return bool */ public function delete(User $user, Page $page): bool { @@ -52,6 +70,9 @@ public function delete(User $user, Page $page): bool /** * Determine whether the user can bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function deleteAny(User $user): bool { @@ -60,6 +81,10 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. + * + * @param \App\Models\User $user + * @param \Moox\Page\Models\Page $page + * @return bool */ public function forceDelete(User $user, Page $page): bool { @@ -68,6 +93,9 @@ public function forceDelete(User $user, Page $page): bool /** * Determine whether the user can permanently bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function forceDeleteAny(User $user): bool { @@ -76,6 +104,10 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. + * + * @param \App\Models\User $user + * @param \Moox\Page\Models\Page $page + * @return bool */ public function restore(User $user, Page $page): bool { @@ -84,6 +116,9 @@ public function restore(User $user, Page $page): bool /** * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool */ public function restoreAny(User $user): bool { @@ -92,6 +127,10 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. + * + * @param \App\Models\User $user + * @param \Moox\Page\Models\Page $page + * @return bool */ public function replicate(User $user, Page $page): bool { @@ -100,9 +139,13 @@ public function replicate(User $user, Page $page): bool /** * Determine whether the user can reorder. + * + * @param \App\Models\User $user + * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_page'); } + } diff --git a/app/Policies/PlatformPolicy.php b/app/Policies/PlatformPolicy.php new file mode 100644 index 000000000..39a8f6439 --- /dev/null +++ b/app/Policies/PlatformPolicy.php @@ -0,0 +1,151 @@ +can('view_any_platform'); + } + + /** + * Determine whether the user can view the model. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Platform $platform + * @return bool + */ + public function view(User $user, Platform $platform): bool + { + return $user->can('view_platform'); + } + + /** + * Determine whether the user can create models. + * + * @param \App\Models\User $user + * @return bool + */ + public function create(User $user): bool + { + return $user->can('create_platform'); + } + + /** + * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Platform $platform + * @return bool + */ + public function update(User $user, Platform $platform): bool + { + return $user->can('update_platform'); + } + + /** + * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Platform $platform + * @return bool + */ + public function delete(User $user, Platform $platform): bool + { + return $user->can('delete_platform'); + } + + /** + * Determine whether the user can bulk delete. + * + * @param \App\Models\User $user + * @return bool + */ + public function deleteAny(User $user): bool + { + return $user->can('delete_any_platform'); + } + + /** + * Determine whether the user can permanently delete. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Platform $platform + * @return bool + */ + public function forceDelete(User $user, Platform $platform): bool + { + return $user->can('force_delete_platform'); + } + + /** + * Determine whether the user can permanently bulk delete. + * + * @param \App\Models\User $user + * @return bool + */ + public function forceDeleteAny(User $user): bool + { + return $user->can('force_delete_any_platform'); + } + + /** + * Determine whether the user can restore. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Platform $platform + * @return bool + */ + public function restore(User $user, Platform $platform): bool + { + return $user->can('restore_platform'); + } + + /** + * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool + */ + public function restoreAny(User $user): bool + { + return $user->can('restore_any_platform'); + } + + /** + * Determine whether the user can replicate. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Platform $platform + * @return bool + */ + public function replicate(User $user, Platform $platform): bool + { + return $user->can('replicate_platform'); + } + + /** + * Determine whether the user can reorder. + * + * @param \App\Models\User $user + * @return bool + */ + public function reorder(User $user): bool + { + return $user->can('reorder_platform'); + } + +} diff --git a/app/Policies/RolePolicy.php b/app/Policies/RolePolicy.php index 4fcda60f6..0e7322886 100644 --- a/app/Policies/RolePolicy.php +++ b/app/Policies/RolePolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Illuminate\Auth\Access\HandlesAuthorization; use Spatie\Permission\Models\Role; +use Illuminate\Auth\Access\HandlesAuthorization; class RolePolicy { @@ -12,6 +12,9 @@ class RolePolicy /** * Determine whether the user can view any models. + * + * @param \App\Models\User $user + * @return bool */ public function viewAny(User $user): bool { @@ -20,6 +23,10 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. + * + * @param \App\Models\User $user + * @param \Spatie\Permission\Models\Role $role + * @return bool */ public function view(User $user, Role $role): bool { @@ -28,6 +35,9 @@ public function view(User $user, Role $role): bool /** * Determine whether the user can create models. + * + * @param \App\Models\User $user + * @return bool */ public function create(User $user): bool { @@ -36,6 +46,10 @@ public function create(User $user): bool /** * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @param \Spatie\Permission\Models\Role $role + * @return bool */ public function update(User $user, Role $role): bool { @@ -44,6 +58,10 @@ public function update(User $user, Role $role): bool /** * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @param \Spatie\Permission\Models\Role $role + * @return bool */ public function delete(User $user, Role $role): bool { @@ -52,6 +70,9 @@ public function delete(User $user, Role $role): bool /** * Determine whether the user can bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function deleteAny(User $user): bool { @@ -60,6 +81,10 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. + * + * @param \App\Models\User $user + * @param \Spatie\Permission\Models\Role $role + * @return bool */ public function forceDelete(User $user, Role $role): bool { @@ -68,6 +93,9 @@ public function forceDelete(User $user, Role $role): bool /** * Determine whether the user can permanently bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function forceDeleteAny(User $user): bool { @@ -76,6 +104,10 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. + * + * @param \App\Models\User $user + * @param \Spatie\Permission\Models\Role $role + * @return bool */ public function restore(User $user, Role $role): bool { @@ -84,6 +116,9 @@ public function restore(User $user, Role $role): bool /** * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool */ public function restoreAny(User $user): bool { @@ -92,6 +127,10 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. + * + * @param \App\Models\User $user + * @param \Spatie\Permission\Models\Role $role + * @return bool */ public function replicate(User $user, Role $role): bool { @@ -100,9 +139,13 @@ public function replicate(User $user, Role $role): bool /** * Determine whether the user can reorder. + * + * @param \App\Models\User $user + * @return bool */ public function reorder(User $user): bool { return $user->can('{{ Reorder }}'); } + } diff --git a/app/Policies/SyncPolicy.php b/app/Policies/SyncPolicy.php new file mode 100644 index 000000000..740453516 --- /dev/null +++ b/app/Policies/SyncPolicy.php @@ -0,0 +1,151 @@ +can('view_any_sync'); + } + + /** + * Determine whether the user can view the model. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Sync $sync + * @return bool + */ + public function view(User $user, Sync $sync): bool + { + return $user->can('view_sync'); + } + + /** + * Determine whether the user can create models. + * + * @param \App\Models\User $user + * @return bool + */ + public function create(User $user): bool + { + return $user->can('create_sync'); + } + + /** + * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Sync $sync + * @return bool + */ + public function update(User $user, Sync $sync): bool + { + return $user->can('update_sync'); + } + + /** + * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Sync $sync + * @return bool + */ + public function delete(User $user, Sync $sync): bool + { + return $user->can('delete_sync'); + } + + /** + * Determine whether the user can bulk delete. + * + * @param \App\Models\User $user + * @return bool + */ + public function deleteAny(User $user): bool + { + return $user->can('delete_any_sync'); + } + + /** + * Determine whether the user can permanently delete. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Sync $sync + * @return bool + */ + public function forceDelete(User $user, Sync $sync): bool + { + return $user->can('force_delete_sync'); + } + + /** + * Determine whether the user can permanently bulk delete. + * + * @param \App\Models\User $user + * @return bool + */ + public function forceDeleteAny(User $user): bool + { + return $user->can('force_delete_any_sync'); + } + + /** + * Determine whether the user can restore. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Sync $sync + * @return bool + */ + public function restore(User $user, Sync $sync): bool + { + return $user->can('restore_sync'); + } + + /** + * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool + */ + public function restoreAny(User $user): bool + { + return $user->can('restore_any_sync'); + } + + /** + * Determine whether the user can replicate. + * + * @param \App\Models\User $user + * @param \Moox\Sync\Models\Sync $sync + * @return bool + */ + public function replicate(User $user, Sync $sync): bool + { + return $user->can('replicate_sync'); + } + + /** + * Determine whether the user can reorder. + * + * @param \App\Models\User $user + * @return bool + */ + public function reorder(User $user): bool + { + return $user->can('reorder_sync'); + } + +} diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php index 019dc5c10..68e101ecf 100644 --- a/app/Policies/UserPolicy.php +++ b/app/Policies/UserPolicy.php @@ -3,6 +3,7 @@ namespace App\Policies; use App\Models\User; + use Illuminate\Auth\Access\HandlesAuthorization; class UserPolicy @@ -11,6 +12,9 @@ class UserPolicy /** * Determine whether the user can view any models. + * + * @param \App\Models\User $user + * @return bool */ public function viewAny(User $user): bool { @@ -19,6 +23,9 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. + * + * @param \App\Models\User $user + * @return bool */ public function view(User $user): bool { @@ -27,6 +34,9 @@ public function view(User $user): bool /** * Determine whether the user can create models. + * + * @param \App\Models\User $user + * @return bool */ public function create(User $user): bool { @@ -35,6 +45,9 @@ public function create(User $user): bool /** * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @return bool */ public function update(User $user): bool { @@ -43,6 +56,9 @@ public function update(User $user): bool /** * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @return bool */ public function delete(User $user): bool { @@ -51,6 +67,9 @@ public function delete(User $user): bool /** * Determine whether the user can bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function deleteAny(User $user): bool { @@ -59,6 +78,9 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. + * + * @param \App\Models\User $user + * @return bool */ public function forceDelete(User $user): bool { @@ -67,6 +89,9 @@ public function forceDelete(User $user): bool /** * Determine whether the user can permanently bulk delete. + * + * @param \App\Models\User $user + * @return bool */ public function forceDeleteAny(User $user): bool { @@ -75,6 +100,9 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. + * + * @param \App\Models\User $user + * @return bool */ public function restore(User $user): bool { @@ -83,6 +111,9 @@ public function restore(User $user): bool /** * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool */ public function restoreAny(User $user): bool { @@ -91,6 +122,9 @@ public function restoreAny(User $user): bool /** * Determine whether the user can bulk restore. + * + * @param \App\Models\User $user + * @return bool */ public function replicate(User $user): bool { @@ -99,6 +133,9 @@ public function replicate(User $user): bool /** * Determine whether the user can reorder. + * + * @param \App\Models\User $user + * @return bool */ public function reorder(User $user): bool { From eaccc1e72ed7d30d3414ed913238bd3bc28e54be Mon Sep 17 00:00:00 2001 From: Kim-the-Diamond Date: Thu, 7 Mar 2024 11:00:28 +0000 Subject: [PATCH 04/37] Fix styling --- app/Policies/ActivityLogPolicy.php | 45 +----------------------------- app/Policies/FailedJobPolicy.php | 45 +----------------------------- app/Policies/ItemPolicy.php | 45 +----------------------------- app/Policies/JobBatchPolicy.php | 45 +----------------------------- app/Policies/JobManagerPolicy.php | 45 +----------------------------- app/Policies/JobPolicy.php | 45 +----------------------------- app/Policies/PagePolicy.php | 45 +----------------------------- app/Policies/PlatformPolicy.php | 45 +----------------------------- app/Policies/RolePolicy.php | 45 +----------------------------- app/Policies/SyncPolicy.php | 45 +----------------------------- app/Policies/UserPolicy.php | 37 ------------------------ 11 files changed, 10 insertions(+), 477 deletions(-) diff --git a/app/Policies/ActivityLogPolicy.php b/app/Policies/ActivityLogPolicy.php index 1d6c6d547..3120c800e 100644 --- a/app/Policies/ActivityLogPolicy.php +++ b/app/Policies/ActivityLogPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Moox\Audit\Models\ActivityLog; use Illuminate\Auth\Access\HandlesAuthorization; +use Moox\Audit\Models\ActivityLog; class ActivityLogPolicy { @@ -12,9 +12,6 @@ class ActivityLogPolicy /** * Determine whether the user can view any models. - * - * @param \App\Models\User $user - * @return bool */ public function viewAny(User $user): bool { @@ -23,10 +20,6 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. - * - * @param \App\Models\User $user - * @param \Moox\Audit\Models\ActivityLog $activityLog - * @return bool */ public function view(User $user, ActivityLog $activityLog): bool { @@ -35,9 +28,6 @@ public function view(User $user, ActivityLog $activityLog): bool /** * Determine whether the user can create models. - * - * @param \App\Models\User $user - * @return bool */ public function create(User $user): bool { @@ -46,10 +36,6 @@ public function create(User $user): bool /** * Determine whether the user can update the model. - * - * @param \App\Models\User $user - * @param \Moox\Audit\Models\ActivityLog $activityLog - * @return bool */ public function update(User $user, ActivityLog $activityLog): bool { @@ -58,10 +44,6 @@ public function update(User $user, ActivityLog $activityLog): bool /** * Determine whether the user can delete the model. - * - * @param \App\Models\User $user - * @param \Moox\Audit\Models\ActivityLog $activityLog - * @return bool */ public function delete(User $user, ActivityLog $activityLog): bool { @@ -70,9 +52,6 @@ public function delete(User $user, ActivityLog $activityLog): bool /** * Determine whether the user can bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function deleteAny(User $user): bool { @@ -81,10 +60,6 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. - * - * @param \App\Models\User $user - * @param \Moox\Audit\Models\ActivityLog $activityLog - * @return bool */ public function forceDelete(User $user, ActivityLog $activityLog): bool { @@ -93,9 +68,6 @@ public function forceDelete(User $user, ActivityLog $activityLog): bool /** * Determine whether the user can permanently bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDeleteAny(User $user): bool { @@ -104,10 +76,6 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. - * - * @param \App\Models\User $user - * @param \Moox\Audit\Models\ActivityLog $activityLog - * @return bool */ public function restore(User $user, ActivityLog $activityLog): bool { @@ -116,9 +84,6 @@ public function restore(User $user, ActivityLog $activityLog): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function restoreAny(User $user): bool { @@ -127,10 +92,6 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. - * - * @param \App\Models\User $user - * @param \Moox\Audit\Models\ActivityLog $activityLog - * @return bool */ public function replicate(User $user, ActivityLog $activityLog): bool { @@ -139,13 +100,9 @@ public function replicate(User $user, ActivityLog $activityLog): bool /** * Determine whether the user can reorder. - * - * @param \App\Models\User $user - * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_audit'); } - } diff --git a/app/Policies/FailedJobPolicy.php b/app/Policies/FailedJobPolicy.php index 1208fbf27..a39eddb74 100644 --- a/app/Policies/FailedJobPolicy.php +++ b/app/Policies/FailedJobPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Moox\Jobs\Models\FailedJob; use Illuminate\Auth\Access\HandlesAuthorization; +use Moox\Jobs\Models\FailedJob; class FailedJobPolicy { @@ -12,9 +12,6 @@ class FailedJobPolicy /** * Determine whether the user can view any models. - * - * @param \App\Models\User $user - * @return bool */ public function viewAny(User $user): bool { @@ -23,10 +20,6 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\FailedJob $failedJob - * @return bool */ public function view(User $user, FailedJob $failedJob): bool { @@ -35,9 +28,6 @@ public function view(User $user, FailedJob $failedJob): bool /** * Determine whether the user can create models. - * - * @param \App\Models\User $user - * @return bool */ public function create(User $user): bool { @@ -46,10 +36,6 @@ public function create(User $user): bool /** * Determine whether the user can update the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\FailedJob $failedJob - * @return bool */ public function update(User $user, FailedJob $failedJob): bool { @@ -58,10 +44,6 @@ public function update(User $user, FailedJob $failedJob): bool /** * Determine whether the user can delete the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\FailedJob $failedJob - * @return bool */ public function delete(User $user, FailedJob $failedJob): bool { @@ -70,9 +52,6 @@ public function delete(User $user, FailedJob $failedJob): bool /** * Determine whether the user can bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function deleteAny(User $user): bool { @@ -81,10 +60,6 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\FailedJob $failedJob - * @return bool */ public function forceDelete(User $user, FailedJob $failedJob): bool { @@ -93,9 +68,6 @@ public function forceDelete(User $user, FailedJob $failedJob): bool /** * Determine whether the user can permanently bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDeleteAny(User $user): bool { @@ -104,10 +76,6 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\FailedJob $failedJob - * @return bool */ public function restore(User $user, FailedJob $failedJob): bool { @@ -116,9 +84,6 @@ public function restore(User $user, FailedJob $failedJob): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function restoreAny(User $user): bool { @@ -127,10 +92,6 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\FailedJob $failedJob - * @return bool */ public function replicate(User $user, FailedJob $failedJob): bool { @@ -139,13 +100,9 @@ public function replicate(User $user, FailedJob $failedJob): bool /** * Determine whether the user can reorder. - * - * @param \App\Models\User $user - * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_jobs::failed'); } - } diff --git a/app/Policies/ItemPolicy.php b/app/Policies/ItemPolicy.php index e47c5a1f2..b9832d2c7 100644 --- a/app/Policies/ItemPolicy.php +++ b/app/Policies/ItemPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Moox\Builder\Models\Item; use Illuminate\Auth\Access\HandlesAuthorization; +use Moox\Builder\Models\Item; class ItemPolicy { @@ -12,9 +12,6 @@ class ItemPolicy /** * Determine whether the user can view any models. - * - * @param \App\Models\User $user - * @return bool */ public function viewAny(User $user): bool { @@ -23,10 +20,6 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. - * - * @param \App\Models\User $user - * @param \Moox\Builder\Models\Item $item - * @return bool */ public function view(User $user, Item $item): bool { @@ -35,9 +28,6 @@ public function view(User $user, Item $item): bool /** * Determine whether the user can create models. - * - * @param \App\Models\User $user - * @return bool */ public function create(User $user): bool { @@ -46,10 +36,6 @@ public function create(User $user): bool /** * Determine whether the user can update the model. - * - * @param \App\Models\User $user - * @param \Moox\Builder\Models\Item $item - * @return bool */ public function update(User $user, Item $item): bool { @@ -58,10 +44,6 @@ public function update(User $user, Item $item): bool /** * Determine whether the user can delete the model. - * - * @param \App\Models\User $user - * @param \Moox\Builder\Models\Item $item - * @return bool */ public function delete(User $user, Item $item): bool { @@ -70,9 +52,6 @@ public function delete(User $user, Item $item): bool /** * Determine whether the user can bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function deleteAny(User $user): bool { @@ -81,10 +60,6 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. - * - * @param \App\Models\User $user - * @param \Moox\Builder\Models\Item $item - * @return bool */ public function forceDelete(User $user, Item $item): bool { @@ -93,9 +68,6 @@ public function forceDelete(User $user, Item $item): bool /** * Determine whether the user can permanently bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDeleteAny(User $user): bool { @@ -104,10 +76,6 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. - * - * @param \App\Models\User $user - * @param \Moox\Builder\Models\Item $item - * @return bool */ public function restore(User $user, Item $item): bool { @@ -116,9 +84,6 @@ public function restore(User $user, Item $item): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function restoreAny(User $user): bool { @@ -127,10 +92,6 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. - * - * @param \App\Models\User $user - * @param \Moox\Builder\Models\Item $item - * @return bool */ public function replicate(User $user, Item $item): bool { @@ -139,13 +100,9 @@ public function replicate(User $user, Item $item): bool /** * Determine whether the user can reorder. - * - * @param \App\Models\User $user - * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_builder'); } - } diff --git a/app/Policies/JobBatchPolicy.php b/app/Policies/JobBatchPolicy.php index 7336d05c4..8d7b65cfe 100644 --- a/app/Policies/JobBatchPolicy.php +++ b/app/Policies/JobBatchPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Moox\Jobs\Models\JobBatch; use Illuminate\Auth\Access\HandlesAuthorization; +use Moox\Jobs\Models\JobBatch; class JobBatchPolicy { @@ -12,9 +12,6 @@ class JobBatchPolicy /** * Determine whether the user can view any models. - * - * @param \App\Models\User $user - * @return bool */ public function viewAny(User $user): bool { @@ -23,10 +20,6 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobBatch $jobBatch - * @return bool */ public function view(User $user, JobBatch $jobBatch): bool { @@ -35,9 +28,6 @@ public function view(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can create models. - * - * @param \App\Models\User $user - * @return bool */ public function create(User $user): bool { @@ -46,10 +36,6 @@ public function create(User $user): bool /** * Determine whether the user can update the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobBatch $jobBatch - * @return bool */ public function update(User $user, JobBatch $jobBatch): bool { @@ -58,10 +44,6 @@ public function update(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can delete the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobBatch $jobBatch - * @return bool */ public function delete(User $user, JobBatch $jobBatch): bool { @@ -70,9 +52,6 @@ public function delete(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function deleteAny(User $user): bool { @@ -81,10 +60,6 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobBatch $jobBatch - * @return bool */ public function forceDelete(User $user, JobBatch $jobBatch): bool { @@ -93,9 +68,6 @@ public function forceDelete(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can permanently bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDeleteAny(User $user): bool { @@ -104,10 +76,6 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobBatch $jobBatch - * @return bool */ public function restore(User $user, JobBatch $jobBatch): bool { @@ -116,9 +84,6 @@ public function restore(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function restoreAny(User $user): bool { @@ -127,10 +92,6 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobBatch $jobBatch - * @return bool */ public function replicate(User $user, JobBatch $jobBatch): bool { @@ -139,13 +100,9 @@ public function replicate(User $user, JobBatch $jobBatch): bool /** * Determine whether the user can reorder. - * - * @param \App\Models\User $user - * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_job::batches'); } - } diff --git a/app/Policies/JobManagerPolicy.php b/app/Policies/JobManagerPolicy.php index af8f847a3..5c3f8e49d 100644 --- a/app/Policies/JobManagerPolicy.php +++ b/app/Policies/JobManagerPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Moox\Jobs\Models\JobManager; use Illuminate\Auth\Access\HandlesAuthorization; +use Moox\Jobs\Models\JobManager; class JobManagerPolicy { @@ -12,9 +12,6 @@ class JobManagerPolicy /** * Determine whether the user can view any models. - * - * @param \App\Models\User $user - * @return bool */ public function viewAny(User $user): bool { @@ -23,10 +20,6 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobManager $jobManager - * @return bool */ public function view(User $user, JobManager $jobManager): bool { @@ -35,9 +28,6 @@ public function view(User $user, JobManager $jobManager): bool /** * Determine whether the user can create models. - * - * @param \App\Models\User $user - * @return bool */ public function create(User $user): bool { @@ -46,10 +36,6 @@ public function create(User $user): bool /** * Determine whether the user can update the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobManager $jobManager - * @return bool */ public function update(User $user, JobManager $jobManager): bool { @@ -58,10 +44,6 @@ public function update(User $user, JobManager $jobManager): bool /** * Determine whether the user can delete the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobManager $jobManager - * @return bool */ public function delete(User $user, JobManager $jobManager): bool { @@ -70,9 +52,6 @@ public function delete(User $user, JobManager $jobManager): bool /** * Determine whether the user can bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function deleteAny(User $user): bool { @@ -81,10 +60,6 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobManager $jobManager - * @return bool */ public function forceDelete(User $user, JobManager $jobManager): bool { @@ -93,9 +68,6 @@ public function forceDelete(User $user, JobManager $jobManager): bool /** * Determine whether the user can permanently bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDeleteAny(User $user): bool { @@ -104,10 +76,6 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobManager $jobManager - * @return bool */ public function restore(User $user, JobManager $jobManager): bool { @@ -116,9 +84,6 @@ public function restore(User $user, JobManager $jobManager): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function restoreAny(User $user): bool { @@ -127,10 +92,6 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\JobManager $jobManager - * @return bool */ public function replicate(User $user, JobManager $jobManager): bool { @@ -139,13 +100,9 @@ public function replicate(User $user, JobManager $jobManager): bool /** * Determine whether the user can reorder. - * - * @param \App\Models\User $user - * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_jobs'); } - } diff --git a/app/Policies/JobPolicy.php b/app/Policies/JobPolicy.php index e49acc781..c0dd8d22f 100644 --- a/app/Policies/JobPolicy.php +++ b/app/Policies/JobPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Moox\Jobs\Models\Job; use Illuminate\Auth\Access\HandlesAuthorization; +use Moox\Jobs\Models\Job; class JobPolicy { @@ -12,9 +12,6 @@ class JobPolicy /** * Determine whether the user can view any models. - * - * @param \App\Models\User $user - * @return bool */ public function viewAny(User $user): bool { @@ -23,10 +20,6 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\Job $job - * @return bool */ public function view(User $user, Job $job): bool { @@ -35,9 +28,6 @@ public function view(User $user, Job $job): bool /** * Determine whether the user can create models. - * - * @param \App\Models\User $user - * @return bool */ public function create(User $user): bool { @@ -46,10 +36,6 @@ public function create(User $user): bool /** * Determine whether the user can update the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\Job $job - * @return bool */ public function update(User $user, Job $job): bool { @@ -58,10 +44,6 @@ public function update(User $user, Job $job): bool /** * Determine whether the user can delete the model. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\Job $job - * @return bool */ public function delete(User $user, Job $job): bool { @@ -70,9 +52,6 @@ public function delete(User $user, Job $job): bool /** * Determine whether the user can bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function deleteAny(User $user): bool { @@ -81,10 +60,6 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\Job $job - * @return bool */ public function forceDelete(User $user, Job $job): bool { @@ -93,9 +68,6 @@ public function forceDelete(User $user, Job $job): bool /** * Determine whether the user can permanently bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDeleteAny(User $user): bool { @@ -104,10 +76,6 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\Job $job - * @return bool */ public function restore(User $user, Job $job): bool { @@ -116,9 +84,6 @@ public function restore(User $user, Job $job): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function restoreAny(User $user): bool { @@ -127,10 +92,6 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. - * - * @param \App\Models\User $user - * @param \Moox\Jobs\Models\Job $job - * @return bool */ public function replicate(User $user, Job $job): bool { @@ -139,13 +100,9 @@ public function replicate(User $user, Job $job): bool /** * Determine whether the user can reorder. - * - * @param \App\Models\User $user - * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_jobs::waiting'); } - } diff --git a/app/Policies/PagePolicy.php b/app/Policies/PagePolicy.php index 8791056f8..5262e2b5b 100644 --- a/app/Policies/PagePolicy.php +++ b/app/Policies/PagePolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Moox\Page\Models\Page; use Illuminate\Auth\Access\HandlesAuthorization; +use Moox\Page\Models\Page; class PagePolicy { @@ -12,9 +12,6 @@ class PagePolicy /** * Determine whether the user can view any models. - * - * @param \App\Models\User $user - * @return bool */ public function viewAny(User $user): bool { @@ -23,10 +20,6 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. - * - * @param \App\Models\User $user - * @param \Moox\Page\Models\Page $page - * @return bool */ public function view(User $user, Page $page): bool { @@ -35,9 +28,6 @@ public function view(User $user, Page $page): bool /** * Determine whether the user can create models. - * - * @param \App\Models\User $user - * @return bool */ public function create(User $user): bool { @@ -46,10 +36,6 @@ public function create(User $user): bool /** * Determine whether the user can update the model. - * - * @param \App\Models\User $user - * @param \Moox\Page\Models\Page $page - * @return bool */ public function update(User $user, Page $page): bool { @@ -58,10 +44,6 @@ public function update(User $user, Page $page): bool /** * Determine whether the user can delete the model. - * - * @param \App\Models\User $user - * @param \Moox\Page\Models\Page $page - * @return bool */ public function delete(User $user, Page $page): bool { @@ -70,9 +52,6 @@ public function delete(User $user, Page $page): bool /** * Determine whether the user can bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function deleteAny(User $user): bool { @@ -81,10 +60,6 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. - * - * @param \App\Models\User $user - * @param \Moox\Page\Models\Page $page - * @return bool */ public function forceDelete(User $user, Page $page): bool { @@ -93,9 +68,6 @@ public function forceDelete(User $user, Page $page): bool /** * Determine whether the user can permanently bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDeleteAny(User $user): bool { @@ -104,10 +76,6 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. - * - * @param \App\Models\User $user - * @param \Moox\Page\Models\Page $page - * @return bool */ public function restore(User $user, Page $page): bool { @@ -116,9 +84,6 @@ public function restore(User $user, Page $page): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function restoreAny(User $user): bool { @@ -127,10 +92,6 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. - * - * @param \App\Models\User $user - * @param \Moox\Page\Models\Page $page - * @return bool */ public function replicate(User $user, Page $page): bool { @@ -139,13 +100,9 @@ public function replicate(User $user, Page $page): bool /** * Determine whether the user can reorder. - * - * @param \App\Models\User $user - * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_page'); } - } diff --git a/app/Policies/PlatformPolicy.php b/app/Policies/PlatformPolicy.php index 39a8f6439..56ae885f5 100644 --- a/app/Policies/PlatformPolicy.php +++ b/app/Policies/PlatformPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Moox\Sync\Models\Platform; use Illuminate\Auth\Access\HandlesAuthorization; +use Moox\Sync\Models\Platform; class PlatformPolicy { @@ -12,9 +12,6 @@ class PlatformPolicy /** * Determine whether the user can view any models. - * - * @param \App\Models\User $user - * @return bool */ public function viewAny(User $user): bool { @@ -23,10 +20,6 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Platform $platform - * @return bool */ public function view(User $user, Platform $platform): bool { @@ -35,9 +28,6 @@ public function view(User $user, Platform $platform): bool /** * Determine whether the user can create models. - * - * @param \App\Models\User $user - * @return bool */ public function create(User $user): bool { @@ -46,10 +36,6 @@ public function create(User $user): bool /** * Determine whether the user can update the model. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Platform $platform - * @return bool */ public function update(User $user, Platform $platform): bool { @@ -58,10 +44,6 @@ public function update(User $user, Platform $platform): bool /** * Determine whether the user can delete the model. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Platform $platform - * @return bool */ public function delete(User $user, Platform $platform): bool { @@ -70,9 +52,6 @@ public function delete(User $user, Platform $platform): bool /** * Determine whether the user can bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function deleteAny(User $user): bool { @@ -81,10 +60,6 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Platform $platform - * @return bool */ public function forceDelete(User $user, Platform $platform): bool { @@ -93,9 +68,6 @@ public function forceDelete(User $user, Platform $platform): bool /** * Determine whether the user can permanently bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDeleteAny(User $user): bool { @@ -104,10 +76,6 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Platform $platform - * @return bool */ public function restore(User $user, Platform $platform): bool { @@ -116,9 +84,6 @@ public function restore(User $user, Platform $platform): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function restoreAny(User $user): bool { @@ -127,10 +92,6 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Platform $platform - * @return bool */ public function replicate(User $user, Platform $platform): bool { @@ -139,13 +100,9 @@ public function replicate(User $user, Platform $platform): bool /** * Determine whether the user can reorder. - * - * @param \App\Models\User $user - * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_platform'); } - } diff --git a/app/Policies/RolePolicy.php b/app/Policies/RolePolicy.php index 0e7322886..4fcda60f6 100644 --- a/app/Policies/RolePolicy.php +++ b/app/Policies/RolePolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Spatie\Permission\Models\Role; use Illuminate\Auth\Access\HandlesAuthorization; +use Spatie\Permission\Models\Role; class RolePolicy { @@ -12,9 +12,6 @@ class RolePolicy /** * Determine whether the user can view any models. - * - * @param \App\Models\User $user - * @return bool */ public function viewAny(User $user): bool { @@ -23,10 +20,6 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. - * - * @param \App\Models\User $user - * @param \Spatie\Permission\Models\Role $role - * @return bool */ public function view(User $user, Role $role): bool { @@ -35,9 +28,6 @@ public function view(User $user, Role $role): bool /** * Determine whether the user can create models. - * - * @param \App\Models\User $user - * @return bool */ public function create(User $user): bool { @@ -46,10 +36,6 @@ public function create(User $user): bool /** * Determine whether the user can update the model. - * - * @param \App\Models\User $user - * @param \Spatie\Permission\Models\Role $role - * @return bool */ public function update(User $user, Role $role): bool { @@ -58,10 +44,6 @@ public function update(User $user, Role $role): bool /** * Determine whether the user can delete the model. - * - * @param \App\Models\User $user - * @param \Spatie\Permission\Models\Role $role - * @return bool */ public function delete(User $user, Role $role): bool { @@ -70,9 +52,6 @@ public function delete(User $user, Role $role): bool /** * Determine whether the user can bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function deleteAny(User $user): bool { @@ -81,10 +60,6 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. - * - * @param \App\Models\User $user - * @param \Spatie\Permission\Models\Role $role - * @return bool */ public function forceDelete(User $user, Role $role): bool { @@ -93,9 +68,6 @@ public function forceDelete(User $user, Role $role): bool /** * Determine whether the user can permanently bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDeleteAny(User $user): bool { @@ -104,10 +76,6 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. - * - * @param \App\Models\User $user - * @param \Spatie\Permission\Models\Role $role - * @return bool */ public function restore(User $user, Role $role): bool { @@ -116,9 +84,6 @@ public function restore(User $user, Role $role): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function restoreAny(User $user): bool { @@ -127,10 +92,6 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. - * - * @param \App\Models\User $user - * @param \Spatie\Permission\Models\Role $role - * @return bool */ public function replicate(User $user, Role $role): bool { @@ -139,13 +100,9 @@ public function replicate(User $user, Role $role): bool /** * Determine whether the user can reorder. - * - * @param \App\Models\User $user - * @return bool */ public function reorder(User $user): bool { return $user->can('{{ Reorder }}'); } - } diff --git a/app/Policies/SyncPolicy.php b/app/Policies/SyncPolicy.php index 740453516..52a3e455e 100644 --- a/app/Policies/SyncPolicy.php +++ b/app/Policies/SyncPolicy.php @@ -3,8 +3,8 @@ namespace App\Policies; use App\Models\User; -use Moox\Sync\Models\Sync; use Illuminate\Auth\Access\HandlesAuthorization; +use Moox\Sync\Models\Sync; class SyncPolicy { @@ -12,9 +12,6 @@ class SyncPolicy /** * Determine whether the user can view any models. - * - * @param \App\Models\User $user - * @return bool */ public function viewAny(User $user): bool { @@ -23,10 +20,6 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Sync $sync - * @return bool */ public function view(User $user, Sync $sync): bool { @@ -35,9 +28,6 @@ public function view(User $user, Sync $sync): bool /** * Determine whether the user can create models. - * - * @param \App\Models\User $user - * @return bool */ public function create(User $user): bool { @@ -46,10 +36,6 @@ public function create(User $user): bool /** * Determine whether the user can update the model. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Sync $sync - * @return bool */ public function update(User $user, Sync $sync): bool { @@ -58,10 +44,6 @@ public function update(User $user, Sync $sync): bool /** * Determine whether the user can delete the model. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Sync $sync - * @return bool */ public function delete(User $user, Sync $sync): bool { @@ -70,9 +52,6 @@ public function delete(User $user, Sync $sync): bool /** * Determine whether the user can bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function deleteAny(User $user): bool { @@ -81,10 +60,6 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Sync $sync - * @return bool */ public function forceDelete(User $user, Sync $sync): bool { @@ -93,9 +68,6 @@ public function forceDelete(User $user, Sync $sync): bool /** * Determine whether the user can permanently bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDeleteAny(User $user): bool { @@ -104,10 +76,6 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Sync $sync - * @return bool */ public function restore(User $user, Sync $sync): bool { @@ -116,9 +84,6 @@ public function restore(User $user, Sync $sync): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function restoreAny(User $user): bool { @@ -127,10 +92,6 @@ public function restoreAny(User $user): bool /** * Determine whether the user can replicate. - * - * @param \App\Models\User $user - * @param \Moox\Sync\Models\Sync $sync - * @return bool */ public function replicate(User $user, Sync $sync): bool { @@ -139,13 +100,9 @@ public function replicate(User $user, Sync $sync): bool /** * Determine whether the user can reorder. - * - * @param \App\Models\User $user - * @return bool */ public function reorder(User $user): bool { return $user->can('reorder_sync'); } - } diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php index 68e101ecf..019dc5c10 100644 --- a/app/Policies/UserPolicy.php +++ b/app/Policies/UserPolicy.php @@ -3,7 +3,6 @@ namespace App\Policies; use App\Models\User; - use Illuminate\Auth\Access\HandlesAuthorization; class UserPolicy @@ -12,9 +11,6 @@ class UserPolicy /** * Determine whether the user can view any models. - * - * @param \App\Models\User $user - * @return bool */ public function viewAny(User $user): bool { @@ -23,9 +19,6 @@ public function viewAny(User $user): bool /** * Determine whether the user can view the model. - * - * @param \App\Models\User $user - * @return bool */ public function view(User $user): bool { @@ -34,9 +27,6 @@ public function view(User $user): bool /** * Determine whether the user can create models. - * - * @param \App\Models\User $user - * @return bool */ public function create(User $user): bool { @@ -45,9 +35,6 @@ public function create(User $user): bool /** * Determine whether the user can update the model. - * - * @param \App\Models\User $user - * @return bool */ public function update(User $user): bool { @@ -56,9 +43,6 @@ public function update(User $user): bool /** * Determine whether the user can delete the model. - * - * @param \App\Models\User $user - * @return bool */ public function delete(User $user): bool { @@ -67,9 +51,6 @@ public function delete(User $user): bool /** * Determine whether the user can bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function deleteAny(User $user): bool { @@ -78,9 +59,6 @@ public function deleteAny(User $user): bool /** * Determine whether the user can permanently delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDelete(User $user): bool { @@ -89,9 +67,6 @@ public function forceDelete(User $user): bool /** * Determine whether the user can permanently bulk delete. - * - * @param \App\Models\User $user - * @return bool */ public function forceDeleteAny(User $user): bool { @@ -100,9 +75,6 @@ public function forceDeleteAny(User $user): bool /** * Determine whether the user can restore. - * - * @param \App\Models\User $user - * @return bool */ public function restore(User $user): bool { @@ -111,9 +83,6 @@ public function restore(User $user): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function restoreAny(User $user): bool { @@ -122,9 +91,6 @@ public function restoreAny(User $user): bool /** * Determine whether the user can bulk restore. - * - * @param \App\Models\User $user - * @return bool */ public function replicate(User $user): bool { @@ -133,9 +99,6 @@ public function replicate(User $user): bool /** * Determine whether the user can reorder. - * - * @param \App\Models\User $user - * @return bool */ public function reorder(User $user): bool { From 5fca06c36d1487899396d3c33ed08960b322c456 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:10:33 +0100 Subject: [PATCH 05/37] deleted migrations --- ..._12_07_135326_create_failed_jobs_table.php | 32 ---------- ..._12_07_135327_create_job_batches_table.php | 35 ---------- .../2023_12_07_135518_create_jobs_table.php | 32 ---------- ..._12_07_140219_create_job_manager_table.php | 36 ----------- .../2023_12_08_153454_create_user_table.php | 31 --------- ...1410_02_create_job_batch_manager_table.php | 38 ----------- ...1410_03_create_job_queue_workers_table.php | 39 ----------- ...0_04_add_foreigns_to_job_manager_table.php | 33 ---------- .../2024_03_04_235738_update_user_table.php | 64 ------------------- .../2024_03_06_125703_create_items_table.php | 31 --------- ...03_06_142650_01_create_platforms_table.php | 41 ------------ ...024_03_06_160517_02_create_syncs_table.php | 36 ----------- 12 files changed, 448 deletions(-) delete mode 100644 database/migrations/2023_12_07_135326_create_failed_jobs_table.php delete mode 100644 database/migrations/2023_12_07_135327_create_job_batches_table.php delete mode 100644 database/migrations/2023_12_07_135518_create_jobs_table.php delete mode 100644 database/migrations/2023_12_07_140219_create_job_manager_table.php delete mode 100644 database/migrations/2023_12_08_153454_create_user_table.php delete mode 100644 database/migrations/2024_02_12_111410_02_create_job_batch_manager_table.php delete mode 100644 database/migrations/2024_02_12_111410_03_create_job_queue_workers_table.php delete mode 100644 database/migrations/2024_02_12_111410_04_add_foreigns_to_job_manager_table.php delete mode 100644 database/migrations/2024_03_04_235738_update_user_table.php delete mode 100644 database/migrations/2024_03_06_125703_create_items_table.php delete mode 100644 database/migrations/2024_03_06_142650_01_create_platforms_table.php delete mode 100644 database/migrations/2024_03_06_160517_02_create_syncs_table.php diff --git a/database/migrations/2023_12_07_135326_create_failed_jobs_table.php b/database/migrations/2023_12_07_135326_create_failed_jobs_table.php deleted file mode 100644 index 249da8171..000000000 --- a/database/migrations/2023_12_07_135326_create_failed_jobs_table.php +++ /dev/null @@ -1,32 +0,0 @@ -id(); - $table->string('uuid')->unique(); - $table->text('connection'); - $table->text('queue'); - $table->longText('payload'); - $table->longText('exception'); - $table->timestamp('failed_at')->useCurrent(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('failed_jobs'); - } -}; diff --git a/database/migrations/2023_12_07_135327_create_job_batches_table.php b/database/migrations/2023_12_07_135327_create_job_batches_table.php deleted file mode 100644 index 50e38c20f..000000000 --- a/database/migrations/2023_12_07_135327_create_job_batches_table.php +++ /dev/null @@ -1,35 +0,0 @@ -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(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('job_batches'); - } -}; diff --git a/database/migrations/2023_12_07_135518_create_jobs_table.php b/database/migrations/2023_12_07_135518_create_jobs_table.php deleted file mode 100644 index 6098d9b12..000000000 --- a/database/migrations/2023_12_07_135518_create_jobs_table.php +++ /dev/null @@ -1,32 +0,0 @@ -bigIncrements('id'); - $table->string('queue')->index(); - $table->longText('payload'); - $table->unsignedTinyInteger('attempts'); - $table->unsignedInteger('reserved_at')->nullable(); - $table->unsignedInteger('available_at'); - $table->unsignedInteger('created_at'); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('jobs'); - } -}; diff --git a/database/migrations/2023_12_07_140219_create_job_manager_table.php b/database/migrations/2023_12_07_140219_create_job_manager_table.php deleted file mode 100644 index 1b7916e50..000000000 --- a/database/migrations/2023_12_07_140219_create_job_manager_table.php +++ /dev/null @@ -1,36 +0,0 @@ -id(); - $table->string('job_id')->index(); - $table->string('name')->nullable(); - $table->string('queue')->nullable(); - $table->timestamp('started_at')->nullable()->index(); - $table->timestamp('finished_at')->nullable(); - $table->boolean('failed')->default(false)->index(); - $table->integer('attempt')->default(0); - $table->integer('progress')->nullable(); - $table->text('exception_message')->nullable(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('job_manager'); - } -}; diff --git a/database/migrations/2023_12_08_153454_create_user_table.php b/database/migrations/2023_12_08_153454_create_user_table.php deleted file mode 100644 index 049be1496..000000000 --- a/database/migrations/2023_12_08_153454_create_user_table.php +++ /dev/null @@ -1,31 +0,0 @@ -id(); - $table->string('name')->nullable(); - $table->timestamp('started_at')->nullable()->index(); - $table->timestamp('finished_at')->nullable(); - $table->boolean('failed')->default(false)->index(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('user'); - } -}; diff --git a/database/migrations/2024_02_12_111410_02_create_job_batch_manager_table.php b/database/migrations/2024_02_12_111410_02_create_job_batch_manager_table.php deleted file mode 100644 index 1abb548e9..000000000 --- a/database/migrations/2024_02_12_111410_02_create_job_batch_manager_table.php +++ /dev/null @@ -1,38 +0,0 @@ -bigIncrements('id'); - $table->string('batch_id'); - $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->timestamp('cancelled_at')->nullable(); - $table->timestamp('finished_at')->nullable(); - $table->string('status'); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('job_batch_manager'); - } -}; diff --git a/database/migrations/2024_02_12_111410_03_create_job_queue_workers_table.php b/database/migrations/2024_02_12_111410_03_create_job_queue_workers_table.php deleted file mode 100644 index 8b45ce1d5..000000000 --- a/database/migrations/2024_02_12_111410_03_create_job_queue_workers_table.php +++ /dev/null @@ -1,39 +0,0 @@ -bigIncrements('id'); - $table->string('worker_pid'); - $table->string('queue'); - $table->string('connection'); - $table->string('worker_server')->nullable(); - $table->string('supervisor')->nullable(); - $table->string('status'); - $table->timestamp('started_at')->nullable(); - $table->timestamp('stopped_at')->nullable(); - - $table->index('worker_pid'); - $table->index('queue'); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('job_queue_workers'); - } -}; diff --git a/database/migrations/2024_02_12_111410_04_add_foreigns_to_job_manager_table.php b/database/migrations/2024_02_12_111410_04_add_foreigns_to_job_manager_table.php deleted file mode 100644 index 57f20ea22..000000000 --- a/database/migrations/2024_02_12_111410_04_add_foreigns_to_job_manager_table.php +++ /dev/null @@ -1,33 +0,0 @@ -foreignId('job_queue_worker_id') - ->references('id') - ->on('job_queue_workers') - ->onUpdate('CASCADE') - ->onDelete('CASCADE'); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::table('job_manager', function (Blueprint $table) { - $table->dropForeign(['job_queue_worker_id']); - }); - } -}; diff --git a/database/migrations/2024_03_04_235738_update_user_table.php b/database/migrations/2024_03_04_235738_update_user_table.php deleted file mode 100644 index 647c310c1..000000000 --- a/database/migrations/2024_03_04_235738_update_user_table.php +++ /dev/null @@ -1,64 +0,0 @@ -string('slug')->after('name'); - } - if (! Schema::hasColumn('users', 'gender')) { - $table->enum('gender', ['male', 'female', 'other'])->after('slug'); - } - if (! Schema::hasColumn('users', 'title')) { - $table->string('title')->nullable()->after('gender'); - } - if (! Schema::hasColumn('users', 'first_name')) { - $table->string('first_name')->after('title'); - } - if (! Schema::hasColumn('users', 'last_name')) { - $table->string('last_name')->after('first_name'); - } - if (! Schema::hasColumn('users', 'website')) { - $table->string('website')->nullable()->after('email'); - } - if (! Schema::hasColumn('users', 'description')) { - $table->text('description')->nullable()->after('website'); - } - // `email_verified_at`, `password`, and `remember_token` are part of Laravel's default - if (! Schema::hasColumn('users', 'two_factor_secret')) { - $table->text('two_factor_secret')->nullable()->after('remember_token'); - } - if (! Schema::hasColumn('users', 'two_factor_recovery_codes')) { - $table->text('two_factor_recovery_codes')->nullable()->after('two_factor_secret'); - } - if (! Schema::hasColumn('users', 'two_factor_confirmed_at')) { - $table->timestamp('two_factor_confirmed_at')->nullable()->after('two_factor_recovery_codes'); - } - // Skipping `current_team_id` as it's from Jetstream - if (! Schema::hasColumn('users', 'avatar_url')) { - $table->string('avatar_url', 2048)->nullable()->after('two_factor_confirmed_at'); - } - if (! Schema::hasColumn('users', 'profile_photo_path')) { - $table->string('profile_photo_path')->nullable()->after('avatar_url'); - } - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - // Sorry, it's the user table - } -}; diff --git a/database/migrations/2024_03_06_125703_create_items_table.php b/database/migrations/2024_03_06_125703_create_items_table.php deleted file mode 100644 index be8f79c7d..000000000 --- a/database/migrations/2024_03_06_125703_create_items_table.php +++ /dev/null @@ -1,31 +0,0 @@ -id(); - $table->string('name')->nullable(); - $table->timestamp('started_at')->nullable()->index(); - $table->timestamp('finished_at')->nullable(); - $table->boolean('failed')->default(false)->index(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('builder'); - } -}; diff --git a/database/migrations/2024_03_06_142650_01_create_platforms_table.php b/database/migrations/2024_03_06_142650_01_create_platforms_table.php deleted file mode 100644 index 84489d407..000000000 --- a/database/migrations/2024_03_06_142650_01_create_platforms_table.php +++ /dev/null @@ -1,41 +0,0 @@ -bigIncrements('id'); - $table->string('title'); - $table->string('slug'); - $table->string('domain'); - $table->boolean('selection')->nullable(); - $table->tinyInteger('order')->nullable(); - $table->boolean('locked')->nullable(); - $table->boolean('master')->nullable(); - $table->string('thumbnail')->nullable(); - $table->unsignedBigInteger('platformable_id'); - $table->string('platformable_type'); - - $table->index('platformable_id'); - $table->index('platformable_type'); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('platforms'); - } -}; diff --git a/database/migrations/2024_03_06_160517_02_create_syncs_table.php b/database/migrations/2024_03_06_160517_02_create_syncs_table.php deleted file mode 100644 index 03c32b8dc..000000000 --- a/database/migrations/2024_03_06_160517_02_create_syncs_table.php +++ /dev/null @@ -1,36 +0,0 @@ -bigIncrements('id'); - $table->unsignedBigInteger('syncable_id'); - $table->string('syncable_type'); - $table->unsignedBigInteger('source_platform_id'); - $table->unsignedBigInteger('target_platform_id'); - $table->timestamp('last_sync'); - - $table->index('syncable_id'); - $table->index('syncable_type'); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('sync'); - } -}; From 1fe70dab0d37d3ffead8638ff77db81616fae20d Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:11:12 +0100 Subject: [PATCH 06/37] cleanup AdminPanelProvider --- app/Providers/Filament/AdminPanelProvider.php | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 882b91083..01b036185 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -66,15 +66,6 @@ public function panel(Panel $panel): Panel ]) ->spa() ->plugins([ - BuilderPlugin::make(), - JobsPlugin::make(), - JobsWaitingPlugin::make(), - JobsFailedPlugin::make(), - JobsBatchesPlugin::make(), - JobsPlugin::make(), - PagePlugin::make(), - UserPlugin::make(), - SyncPlugin::make(), FilamentShieldPlugin::make(), BreezyCore::make() ->myProfile( @@ -89,8 +80,6 @@ public function panel(Panel $panel): Panel \Leandrocfe\FilamentApexCharts\FilamentApexChartsPlugin::make(), - \Moox\Audit\AuditPlugin::make(), - \Moox\Sync\PlatformPlugin::make(), ]); } From b0e367158f5956eaf6cbda17e6942819a7b5bf80 Mon Sep 17 00:00:00 2001 From: Kim-the-Diamond Date: Thu, 7 Mar 2024 11:11:34 +0000 Subject: [PATCH 07/37] Fix styling --- app/Providers/Filament/AdminPanelProvider.php | 9 --------- 1 file changed, 9 deletions(-) diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 01b036185..11a6e8fc8 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -19,14 +19,6 @@ use Illuminate\Session\Middleware\StartSession; use Illuminate\View\Middleware\ShareErrorsFromSession; use Jeffgreco13\FilamentBreezy\BreezyCore; -use Moox\Builder\BuilderPlugin; -use Moox\Jobs\JobsBatchesPlugin; -use Moox\Jobs\JobsFailedPlugin; -use Moox\Jobs\JobsPlugin; -use Moox\Jobs\JobsWaitingPlugin; -use Moox\Page\PagePlugin; -use Moox\Sync\SyncPlugin; -use Moox\User\UserPlugin; class AdminPanelProvider extends PanelProvider { @@ -80,7 +72,6 @@ public function panel(Panel $panel): Panel \Leandrocfe\FilamentApexCharts\FilamentApexChartsPlugin::make(), - ]); } } From 1012b76e5c25119f53df1a30089a98f997190fb5 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:11:34 +0100 Subject: [PATCH 08/37] Updated sync package --- packages/sync/config/sync.php | 4 +--- packages/sync/src/Commands/InstallCommand.php | 23 +++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/packages/sync/config/sync.php b/packages/sync/config/sync.php index a0d987680..0b67a5fe4 100644 --- a/packages/sync/config/sync.php +++ b/packages/sync/config/sync.php @@ -1,5 +1,3 @@ callSilent('vendor:publish', ['--tag' => 'sync-config']); + if (! File::exists('config/sync.php')) { + info('Publishing Sync Configuration...'); + $this->call('vendor:publish', ['--tag' => 'sync-config']); + } else { + warning('The Sync config already exist. The config will not be published.'); + } } } public function publish_migrations(): void { - if (Schema::hasTable('sync')) { - warning('The sync table already exists. The migrations will not be published.'); - } elseif (confirm('Do you wish to publish the migrations?', true)) { - info('Publishing Sync Migrations...'); - $this->callSilent('vendor:publish', ['--tag' => 'sync-migrations']); + if (confirm('Do you wish to publish the migrations?', true)) { + if (Schema::hasTable('sync')) { + warning('The sync table already exists. The migrations will not be published.'); + } else { + info('Publishing Sync Migrations...'); + $this->callSilent('vendor:publish', ['--tag' => 'sync-migrations']); + } } } @@ -97,7 +103,6 @@ public function run_migrations(): void public function register_plugins(): void { - note('Registering the Filament Resources...'); $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); @@ -123,7 +128,7 @@ public function register_plugins(): void foreach ($pluginsToAdd as $plugin) { $searchPlugin = '/'.$plugin.'/'; if (preg_match($searchPlugin, $content)) { - info("$plugin already registered."); + warning("$plugin already registered."); } else { $newPlugins .= $intend.$namespace.'\\'.$plugin.$function."\n"; } From 4ac019b1a729f839ce52ae1011c056ec4042ad13 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:11:56 +0100 Subject: [PATCH 09/37] Update update_user_table.php.stub --- .../user/database/migrations/update_user_table.php.stub | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/user/database/migrations/update_user_table.php.stub b/packages/user/database/migrations/update_user_table.php.stub index 1868c29d4..3a8589ecb 100644 --- a/packages/user/database/migrations/update_user_table.php.stub +++ b/packages/user/database/migrations/update_user_table.php.stub @@ -13,7 +13,7 @@ return new class extends Migration { Schema::table('users', function (Blueprint $table) { // name and email are part of Laravel's default if (!Schema::hasColumn('users', 'slug')) { - $table->string('slug')->after('name'); + $table->string('slug')->nullable()->after('name'); } if (!Schema::hasColumn('users', 'gender')) { $table->enum('gender', ['unknown', 'male', 'female', 'other'])->after('slug')->default('unknown'); @@ -22,10 +22,10 @@ return new class extends Migration { $table->string('title')->nullable()->after('gender'); } if (!Schema::hasColumn('users', 'first_name')) { - $table->string('first_name')->after('title'); + $table->string('first_name')->nullable()->after('title'); } if (!Schema::hasColumn('users', 'last_name')) { - $table->string('last_name')->after('first_name'); + $table->string('last_name')->nullable()->after('first_name'); } if (!Schema::hasColumn('users', 'website')) { $table->string('website')->nullable()->after('email'); From b4e1195f6ebfa919cc82f2bc5ced8ff2b1f7c6e9 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:13:26 +0100 Subject: [PATCH 10/37] cleanup config --- config/audit.php | 3 --- config/blog.php | 20 -------------------- config/builder.php | 3 --- config/core.php | 20 -------------------- config/file.php | 20 -------------------- config/logs.php | 20 -------------------- config/sync.php | 5 ----- config/user.php | 3 --- 8 files changed, 94 deletions(-) delete mode 100644 config/audit.php delete mode 100644 config/blog.php delete mode 100644 config/builder.php delete mode 100644 config/core.php delete mode 100644 config/file.php delete mode 100644 config/logs.php delete mode 100644 config/sync.php delete mode 100644 config/user.php diff --git a/config/audit.php b/config/audit.php deleted file mode 100644 index 0b67a5fe4..000000000 --- a/config/audit.php +++ /dev/null @@ -1,3 +0,0 @@ - [ - 'blog' => [ - 'enabled' => true, - 'label' => 'Blog', - 'plural_label' => 'Blogs', - 'navigation_group' => 'Blog Group', - 'navigation_icon' => 'heroicon-o-play', - 'navigation_sort' => 1, - 'navigation_count_badge' => true, - 'resource' => Moox\Blog\Resources\BlogResource::class, - ], - ], - 'pruning' => [ - 'enabled' => true, - 'retention_days' => 7, - ], -]; diff --git a/config/builder.php b/config/builder.php deleted file mode 100644 index 0b67a5fe4..000000000 --- a/config/builder.php +++ /dev/null @@ -1,3 +0,0 @@ - [ - 'core' => [ - 'enabled' => true, - 'label' => 'Core', - 'plural_label' => 'Cores', - 'navigation_group' => 'Core Group', - 'navigation_icon' => 'heroicon-o-play', - 'navigation_sort' => 1, - 'navigation_count_badge' => true, - 'resource' => Moox\Core\Resources\CoreResource::class, - ], - ], - 'pruning' => [ - 'enabled' => true, - 'retention_days' => 7, - ], -]; diff --git a/config/file.php b/config/file.php deleted file mode 100644 index f8885cc12..000000000 --- a/config/file.php +++ /dev/null @@ -1,20 +0,0 @@ - [ - 'file' => [ - 'enabled' => true, - 'label' => 'File', - 'plural_label' => 'Files', - 'navigation_group' => 'File Group', - 'navigation_icon' => 'heroicon-o-play', - 'navigation_sort' => 1, - 'navigation_count_badge' => true, - 'resource' => Moox\File\Resources\FileResource::class, - ], - ], - 'pruning' => [ - 'enabled' => true, - 'retention_days' => 7, - ], -]; diff --git a/config/logs.php b/config/logs.php deleted file mode 100644 index ba2aa0e51..000000000 --- a/config/logs.php +++ /dev/null @@ -1,20 +0,0 @@ - [ - 'logs' => [ - 'enabled' => true, - 'label' => 'Logs', - 'plural_label' => 'Logss', - 'navigation_group' => 'Logs Group', - 'navigation_icon' => 'heroicon-o-play', - 'navigation_sort' => 1, - 'navigation_count_badge' => true, - 'resource' => Moox\Logs\Resources\LogsResource::class, - ], - ], - 'pruning' => [ - 'enabled' => true, - 'retention_days' => 7, - ], -]; diff --git a/config/sync.php b/config/sync.php deleted file mode 100644 index a0d987680..000000000 --- a/config/sync.php +++ /dev/null @@ -1,5 +0,0 @@ - Date: Thu, 7 Mar 2024 12:17:34 +0100 Subject: [PATCH 11/37] install user --- app/Providers/Filament/AdminPanelProvider.php | 3 + config/user.php | 3 + .../2024_03_07_111406_update_user_table.php | 63 +++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 config/user.php create mode 100644 database/migrations/2024_03_07_111406_update_user_table.php diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 11a6e8fc8..3fb7eaad4 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -72,6 +72,9 @@ public function panel(Panel $panel): Panel \Leandrocfe\FilamentApexCharts\FilamentApexChartsPlugin::make(), + + \Moox\User\UserPlugin::make(), + ]); } } diff --git a/config/user.php b/config/user.php new file mode 100644 index 000000000..0b67a5fe4 --- /dev/null +++ b/config/user.php @@ -0,0 +1,3 @@ +string('slug')->nullable()->after('name'); + } + if (!Schema::hasColumn('users', 'gender')) { + $table->enum('gender', ['unknown', 'male', 'female', 'other'])->after('slug')->default('unknown'); + } + if (!Schema::hasColumn('users', 'title')) { + $table->string('title')->nullable()->after('gender'); + } + if (!Schema::hasColumn('users', 'first_name')) { + $table->string('first_name')->nullable()->after('title'); + } + if (!Schema::hasColumn('users', 'last_name')) { + $table->string('last_name')->nullable()->after('first_name'); + } + if (!Schema::hasColumn('users', 'website')) { + $table->string('website')->nullable()->after('email'); + } + if (!Schema::hasColumn('users', 'description')) { + $table->text('description')->nullable()->after('website'); + } + // `email_verified_at`, `password`, and `remember_token` are part of Laravel's default + if (!Schema::hasColumn('users', 'two_factor_secret')) { + $table->text('two_factor_secret')->nullable()->after('remember_token'); + } + if (!Schema::hasColumn('users', 'two_factor_recovery_codes')) { + $table->text('two_factor_recovery_codes')->nullable()->after('two_factor_secret'); + } + if (!Schema::hasColumn('users', 'two_factor_confirmed_at')) { + $table->timestamp('two_factor_confirmed_at')->nullable()->after('two_factor_recovery_codes'); + } + // Skipping `current_team_id` as it's from Jetstream + if (!Schema::hasColumn('users', 'avatar_url')) { + $table->string('avatar_url', 2048)->nullable()->after('two_factor_confirmed_at'); + } + if (!Schema::hasColumn('users', 'profile_photo_path')) { + $table->string('profile_photo_path')->nullable()->after('avatar_url'); + } + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // Sorry, it's the user table + } +}; From 4fec4c84f93c0804c93ef24b405f9584de096317 Mon Sep 17 00:00:00 2001 From: Kim-the-Diamond Date: Thu, 7 Mar 2024 11:17:56 +0000 Subject: [PATCH 12/37] Fix styling --- app/Providers/Filament/AdminPanelProvider.php | 1 - .../2024_03_07_111406_update_user_table.php | 27 ++++++++++--------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 3fb7eaad4..bfadae6b5 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -72,7 +72,6 @@ public function panel(Panel $panel): Panel \Leandrocfe\FilamentApexCharts\FilamentApexChartsPlugin::make(), - \Moox\User\UserPlugin::make(), ]); diff --git a/database/migrations/2024_03_07_111406_update_user_table.php b/database/migrations/2024_03_07_111406_update_user_table.php index 3a8589ecb..cd54a2807 100644 --- a/database/migrations/2024_03_07_111406_update_user_table.php +++ b/database/migrations/2024_03_07_111406_update_user_table.php @@ -4,7 +4,8 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -return new class extends Migration { +return new class extends Migration +{ /** * Run the migrations. */ @@ -12,42 +13,42 @@ public function up(): void { Schema::table('users', function (Blueprint $table) { // name and email are part of Laravel's default - if (!Schema::hasColumn('users', 'slug')) { + if (! Schema::hasColumn('users', 'slug')) { $table->string('slug')->nullable()->after('name'); } - if (!Schema::hasColumn('users', 'gender')) { + if (! Schema::hasColumn('users', 'gender')) { $table->enum('gender', ['unknown', 'male', 'female', 'other'])->after('slug')->default('unknown'); } - if (!Schema::hasColumn('users', 'title')) { + if (! Schema::hasColumn('users', 'title')) { $table->string('title')->nullable()->after('gender'); } - if (!Schema::hasColumn('users', 'first_name')) { + if (! Schema::hasColumn('users', 'first_name')) { $table->string('first_name')->nullable()->after('title'); } - if (!Schema::hasColumn('users', 'last_name')) { + if (! Schema::hasColumn('users', 'last_name')) { $table->string('last_name')->nullable()->after('first_name'); } - if (!Schema::hasColumn('users', 'website')) { + if (! Schema::hasColumn('users', 'website')) { $table->string('website')->nullable()->after('email'); } - if (!Schema::hasColumn('users', 'description')) { + if (! Schema::hasColumn('users', 'description')) { $table->text('description')->nullable()->after('website'); } // `email_verified_at`, `password`, and `remember_token` are part of Laravel's default - if (!Schema::hasColumn('users', 'two_factor_secret')) { + if (! Schema::hasColumn('users', 'two_factor_secret')) { $table->text('two_factor_secret')->nullable()->after('remember_token'); } - if (!Schema::hasColumn('users', 'two_factor_recovery_codes')) { + if (! Schema::hasColumn('users', 'two_factor_recovery_codes')) { $table->text('two_factor_recovery_codes')->nullable()->after('two_factor_secret'); } - if (!Schema::hasColumn('users', 'two_factor_confirmed_at')) { + if (! Schema::hasColumn('users', 'two_factor_confirmed_at')) { $table->timestamp('two_factor_confirmed_at')->nullable()->after('two_factor_recovery_codes'); } // Skipping `current_team_id` as it's from Jetstream - if (!Schema::hasColumn('users', 'avatar_url')) { + if (! Schema::hasColumn('users', 'avatar_url')) { $table->string('avatar_url', 2048)->nullable()->after('two_factor_confirmed_at'); } - if (!Schema::hasColumn('users', 'profile_photo_path')) { + if (! Schema::hasColumn('users', 'profile_photo_path')) { $table->string('profile_photo_path')->nullable()->after('avatar_url'); } }); From 67330ebed972af6dc24d9e638e34f7e06f603873 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:23:31 +0100 Subject: [PATCH 13/37] Updated InstallComman in Press --- .../press/src/Commands/InstallCommand.php | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/press/src/Commands/InstallCommand.php b/packages/press/src/Commands/InstallCommand.php index 095632313..2e3ac5412 100644 --- a/packages/press/src/Commands/InstallCommand.php +++ b/packages/press/src/Commands/InstallCommand.php @@ -72,18 +72,24 @@ public function welcome(): void public function publish_configuration(): void { if (confirm('Do you wish to publish the configuration?', true)) { - info('Publishing Press Configuration...'); - $this->callSilent('vendor:publish', ['--tag' => 'press-config']); + if (! File::exists('config/press.php')) { + info('Publishing Press Configuration...'); + $this->call('vendor:publish', ['--tag' => 'press-config']); + } else { + warning('The Press config already exist. The config will not be published.'); + } } } public function publish_migrations(): void { - if (Schema::hasTable('press')) { - warning('The press table already exists. The migrations will not be published.'); - } elseif (confirm('Do you wish to publish the migrations?', true)) { - info('Publishing Press Migrations...'); - $this->callSilent('vendor:publish', ['--tag' => 'press-migrations']); + if (confirm('Do you wish to publish the migrations?', true)) { + if (Schema::hasTable('press')) { + warning('The press table already exists. The migrations will not be published.'); + } else { + info('Publishing Press Migrations...'); + $this->callSilent('vendor:publish', ['--tag' => 'press-migrations']); + } } } @@ -97,7 +103,6 @@ public function run_migrations(): void public function register_plugins(): void { - note('Registering the Filament Resources...'); $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); @@ -123,7 +128,7 @@ public function register_plugins(): void foreach ($pluginsToAdd as $plugin) { $searchPlugin = '/'.$plugin.'/'; if (preg_match($searchPlugin, $content)) { - info("$plugin already registered."); + warning("$plugin already registered."); } else { $newPlugins .= $intend.$namespace.'\\'.$plugin.$function."\n"; } From 529778d7e10ecaa0aa3722f4ba6472ed0b710652 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:28:10 +0100 Subject: [PATCH 14/37] Update InstallCommand in Page --- packages/page/src/Commands/InstallCommand.php | 143 +++++++++++++++++- 1 file changed, 137 insertions(+), 6 deletions(-) diff --git a/packages/page/src/Commands/InstallCommand.php b/packages/page/src/Commands/InstallCommand.php index 597894996..464761fb5 100644 --- a/packages/page/src/Commands/InstallCommand.php +++ b/packages/page/src/Commands/InstallCommand.php @@ -3,6 +3,15 @@ namespace Moox\Page\Commands; use Illuminate\Console\Command; +use Illuminate\Support\Facades\File; +use Illuminate\Support\Facades\Schema; + +use function Laravel\Prompts\alert; +use function Laravel\Prompts\confirm; +use function Laravel\Prompts\info; +use function Laravel\Prompts\multiselect; +use function Laravel\Prompts\note; +use function Laravel\Prompts\warning; class InstallCommand extends Command { @@ -25,12 +34,134 @@ class InstallCommand extends Command */ public function handle() { - $this->comment('Publishing Page Configuration...'); - $this->callSilent('vendor:publish', ['--tag' => 'page-config']); + $this->art(); + $this->welcome(); + $this->publish_configuration(); + $this->publish_migrations(); + $this->run_migrations(); + $this->register_plugins(); + $this->finish(); + } + + public function art(): void + { + info(' + + ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓ + ▓▓▒░░▒▓▓▒▒░░░░░░▒▒▓▓▓▒░░░░░░░▒▓▓ ▓▓▓▓▒░░░░░░░▒▓▓▓▓ ▓▓▓▓▓▒░░░░░░░▒▒▓▓▓▓▓▒▒▒▒▓▓ ▓▓▓▒▒▒▒▓▓ + ▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▒░░░░░░░░░░░░░▒▓▓▓ ▓▓▓▓▒░░░░░░░░░░░░░▒▓▓▓░░░░░▒▓▓ ▓▓▒░░░░░▓▓ + ▓▒░░░░░░▒▓▓▓▓▒░░░░░░░▒▓▓▓▓░░░░░▒▓▓▓░░░░░▒▓▓▓▓▒░░░░░░░▓▓▓▓░░░░░░▒▓▓▓▓▓░░░░░░▒▓▓░░░░░▒▓▓▓▓▓░░░░░▒▓▓ + ▓▒░░░░▓▓▓▓ ▓▓░░░░░▓▓▓ ▓▓▓░░░░▒▓▓░░░░▒▓▓▓ ▓▓▓▓░░░░░▓░░░░░░▓▓▓▓ ▓▓▓▒░░░░▓▓▓▒░░░░░▓▓▓░░░░░▓▓▓ + ▓▒░░░░▒▓ ▓▓░░░░░▓▓ ▓▓░░░░▒▓░░░░▒▓▓ ▓▓▓░░▒░░░░░▓▓▓ ▓▓░░░░▒▓▓▓▓░░░░░░░░░░░▓▓ + ▓▒░░░░▒▓ ▓▓░░░░░▓▓ ▓▓░░░░▒▓░░░░▒▓ ▓▓▓░░░░░▒▓▓ ▓▓▒░░░░▓ ▓▓▓░░░░░░░░░▓▓ + ▓▒░░░░▒▓ ▓▓░░░░░▓▓ ▓▓░░░░▒▓░░░░▒▓▓ ▓▓▒░░░░░▒░░▒▓▓ ▓▓░░░░▒▓▓▓▒░░░░░▒░░░░░▒▓ + ▓▒░░░░▒▓ ▓▓░░░░░▓▓ ▓▓░░░░▒▓▓░░░░▒▓▓▓ ▓▓▓▒░░░░░▒▒░░░░░▒▓▓▓ ▓▓▓░░░░░▓▓▓░░░░░▒▓▓▓░░░░░▒▓▓ + ▓▒░░░░▒▓ ▓▓░░░░░▓▓ ▓▓░░░░▒▓▓▓░░░░░░▒▒▓▓▒░░░░░░▒▓▓▓▓░░░░░░░▒▒▓▓▒░░░░░░▓▓▓░░░░░▒▓▓▓▓▓▒░░░░░▓▓ + ▓▒░░░░▒▓ ▓▓░░░░░▓▓ ▓▓░░░░▒▓▓▓▓▒░░░░░░░░░░░░░▒▓▓▓ ▓▓▓▓▒░░░░░░░░░░░░░▒▓▓▒░░░░░▓▓▓ ▓▓▒░░░░░▒▓ + ▓▓░░░▒▓▓ ▓▓▒░░░▒▓▓ ▓▓░░░░▓▓ ▓▓▓▓▒░░░░░░▒▒▓▓▓▓ ▓▓▓▓▓▒▒░░░░░▒▒▓▓▓▓▓░░░░▒▓▓ ▓▓▓░░░░▒▓ + ▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ + + '); + } + + public function welcome(): void + { + info('Welcome to Moox Page Installer'); + } + + public function publish_configuration(): void + { + if (confirm('Do you wish to publish the configuration?', true)) { + if (! File::exists('config/page.php')) { + info('Publishing Page Configuration...'); + $this->call('vendor:publish', ['--tag' => 'page-config']); + } else { + warning('The Page config already exist. The config will not be published.'); + } + } + } + + public function publish_migrations(): void + { + if (confirm('Do you wish to publish the migrations?', true)) { + if (Schema::hasTable('pages')) { + warning('The pages table already exists. The migrations will not be published.'); + } else { + info('Publishing Page Migrations...'); + $this->callSilent('vendor:publish', ['--tag' => 'page-migrations']); + } + } + } + + public function run_migrations(): void + { + if (confirm('Do you wish to run the migrations?', true)) { + info('Running Page Migrations...'); + $this->call('migrate'); + } + } + + public function register_plugins(): void + { + $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); + + if (File::exists($providerPath)) { + + $content = File::get($providerPath); + + $intend = ' '; + + $namespace = "\Moox\Page"; + + $pluginsToAdd = multiselect( + label: 'Which plugins do you want to register?', + options: ['PagePlugin'], + default: ['PagePlugin'], + ); + + $function = '::make(),'; + + $pattern = '/->plugins\(\[([\s\S]*?)\]\);/'; + $newPlugins = ''; + + foreach ($pluginsToAdd as $plugin) { + $searchPlugin = '/'.$plugin.'/'; + if (preg_match($searchPlugin, $content)) { + warning("$plugin already registered."); + } else { + $newPlugins .= $intend.$namespace.'\\'.$plugin.$function."\n"; + } + } + + if ($newPlugins) { - $this->comment('Publishing Page Migrations...'); - $this->callSilent('vendor:publish', ['--tag' => 'page-migrations']); - $this->call('migrate'); - $this->info('Moox Page was installed successfully'); + if (preg_match($pattern, $content)) { + info('Plugins section found. Adding new plugins...'); + + $replacement = "->plugins([$1\n$newPlugins\n ]);"; + $newContent = preg_replace($pattern, $replacement, $content); + + } else { + info('Plugins section created. Adding new plugins...'); + + $pluginsSection = " ->plugins([\n$newPlugins\n ]);"; + $placeholderPattern = '/(\->authMiddleware\(\[.*?\]\))\s*\;/s'; + $replacement = "$1\n".$pluginsSection; + $newContent = preg_replace($placeholderPattern, $replacement, $content, 1); + } + + File::put($providerPath, $newContent); + } + + } else { + + alert('AdminPanelProvider not found. You need to add the plugins manually.'); + } + + } + + public function finish(): void + { + note('Moox Page installed successfully. Enjoy!'); } } From 0b45d9ac1c599e9e519c1b1fcd8db203450204b4 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:28:29 +0100 Subject: [PATCH 15/37] Update press.php --- packages/press/config/press.php | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/packages/press/config/press.php b/packages/press/config/press.php index 035e9abd9..0b67a5fe4 100644 --- a/packages/press/config/press.php +++ b/packages/press/config/press.php @@ -1,20 +1,3 @@ [ - 'press' => [ - 'enabled' => true, - 'label' => 'Press', - 'plural_label' => 'Presss', - 'navigation_group' => 'Press Group', - 'navigation_icon' => 'heroicon-o-play', - 'navigation_sort' => 1, - 'navigation_count_badge' => true, - 'resource' => Moox\Press\Resources\PressResource::class, - ], - ], - 'pruning' => [ - 'enabled' => true, - 'retention_days' => 7, - ], -]; +return []; From 03c350a30a1d69abb6b2d7dcaf4f6a762144fbe1 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:38:48 +0100 Subject: [PATCH 16/37] Update InstallCommand.php --- packages/jobs/src/Commands/InstallCommand.php | 54 ++++++++++--------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/packages/jobs/src/Commands/InstallCommand.php b/packages/jobs/src/Commands/InstallCommand.php index 0a9d8d0ab..32d9bd0a8 100644 --- a/packages/jobs/src/Commands/InstallCommand.php +++ b/packages/jobs/src/Commands/InstallCommand.php @@ -91,36 +91,44 @@ public function checkForFilament(): void public function publishConfiguration(): void { if (confirm('Do you wish to publish the configuration?', true)) { - info('Publishing Jobs Configuration...'); - $this->callSilent('vendor:publish', ['--tag' => 'jobs-config']); + if (! File::exists('config/jobs.php')) { + info('Publishing Jobs Configuration...'); + $this->callSilent('vendor:publish', ['--tag' => 'jobs-config']); + } else { + warning('The Jobs config already exist. The config will not be published.'); + } } } public function publishMigrations(): void { - if (Schema::hasTable('job_batch_manager')) { - warning('The job_batch_manager table already exists. The migrations will not be published.'); - } elseif (confirm('Do you wish to publish the migrations?', true)) { - info('Publishing job_batch_manager Migrations...'); - $this->callSilent('vendor:publish', ['--tag' => 'jobs-batch-migration']); + if (confirm('Do you wish to publish the migrations?', true)) { + if (Schema::hasTable('job_batch_manager')) { + warning('The job_batch_manager table already exists. The migrations will not be published.'); + } else { + info('Publishing job_batch_manager Migrations...'); + $this->callSilent('vendor:publish', ['--tag' => 'jobs-batch-migration']); + } } - - if (Schema::hasTable('job_queue_workers')) { - warning('The job_queue_workers table already exists. The migrations will not be published.'); - } elseif (confirm('Do you wish to publish the migrations?', true)) { - info('Publishing job_queue_workers Migrations...'); - $this->callSilent('vendor:publish', ['--tag' => 'jobs-queue-migration']); + if (confirm('Do you wish to publish the migrations?', true)) { + if (Schema::hasTable('job_queue_workers')) { + warning('The job_queue_workers table already exists. The migrations will not be published.'); + } else { + info('Publishing job_queue_workers Migrations...'); + $this->callSilent('vendor:publish', ['--tag' => 'jobs-queue-migration']); + } } - - if (Schema::hasTable('job_manager')) { - warning('The jobs-manager-migration table already exists. The migrations will not be published.'); - } elseif (confirm('Do you wish to publish the migrations?', true)) { - info('Publishing jobs-manager-migration...'); - $this->callSilent('vendor:publish', ['--tag' => 'jobs-manager-migration']); - - info('Publishing job_manager foreigns Migrations...'); - $this->callSilent('vendor:publish', ['--tag' => 'jobs-manager-foreigns-migration']); + if (confirm('Do you wish to publish the migrations?', true)) { + if (Schema::hasTable('job_manager')) { + warning('The job_manager table already exists. The migrations will not be published.'); + } else { + info('Publishing jobs_manager Migrations...'); + $this->callSilent('vendor:publish', ['--tag' => 'jobs-manager-migration']); + info('Publishing job_manager foreigns Migrations...'); + $this->callSilent('vendor:publish', ['--tag' => 'jobs-manager-foreigns-migration']); + } } + } public function createQueueTables(): void @@ -161,8 +169,6 @@ public function runMigrations(): void public function registerPlugins(): void { - note('Registering the Filament Resources...'); - $queueDriver = ''; if (config('queue.default') == 'database') { From e82a8424767ebfdb769c3da7a6224a69356b7ecd Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:11:13 +0100 Subject: [PATCH 17/37] Packges Jobs/ Core/ Builder InstallerCommand Updated --- .../builder/src/Commands/InstallCommand.php | 25 ++++++++----------- packages/core/src/Commands/InstallCommand.php | 13 ++++++++++ packages/jobs/src/Commands/InstallCommand.php | 2 +- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/packages/builder/src/Commands/InstallCommand.php b/packages/builder/src/Commands/InstallCommand.php index 3bf6eaac3..1d581b350 100644 --- a/packages/builder/src/Commands/InstallCommand.php +++ b/packages/builder/src/Commands/InstallCommand.php @@ -72,9 +72,9 @@ public function welcome(): void public function publish_configuration(): void { if (confirm('Do you wish to publish the configuration?', true)) { - if (! config()->has('builder')) { + if (! File::exists('config/builder.php')) { info('Publishing Builder Configuration...'); - $this->callSilent('vendor:publish', ['--tag' => 'builder-config']); + $this->call('vendor:publish', ['--tag' => 'builder-config']); } else { warning('The Builder config already exist. The config will not be published.'); } @@ -83,13 +83,14 @@ public function publish_configuration(): void public function publish_migrations(): void { - if (Schema::hasTable('items')) { - warning('The items table already exists. The migrations will not be published.'); - } elseif (confirm('Do you wish to publish the migrations?', true)) { - info('Publishing Builder Migrations...'); - $this->callSilent('vendor:publish', ['--tag' => 'builder-migrations']); + if (confirm('Do you wish to publish the migrations?', true)) { + if (Schema::hasTable('items')) { + warning('The items table already exists. The migrations will not be published.'); + } else { + info('Publishing Items Migrations...'); + $this->callSilent('vendor:publish', ['--tag' => 'builder-migrations']); + } } - } public function run_migrations(): void @@ -102,10 +103,6 @@ public function run_migrations(): void public function register_plugins(): void { - $confirmed = confirm('Do you register the plugin?', true); - if ($confirmed) { - note('Registering the Filament Resources...'); - $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); if (File::exists($providerPath)) { @@ -130,7 +127,7 @@ public function register_plugins(): void foreach ($pluginsToAdd as $plugin) { $searchPlugin = '/'.$plugin.'/'; if (preg_match($searchPlugin, $content)) { - info("$plugin already registered."); + warning("$plugin already registered."); } else { $newPlugins .= $intend.$namespace.'\\'.$plugin.$function."\n"; } @@ -160,7 +157,7 @@ public function register_plugins(): void alert('AdminPanelProvider not found. You need to add the plugins manually.'); } - } + } public function finish(): void diff --git a/packages/core/src/Commands/InstallCommand.php b/packages/core/src/Commands/InstallCommand.php index abb682b33..cc0160eeb 100644 --- a/packages/core/src/Commands/InstallCommand.php +++ b/packages/core/src/Commands/InstallCommand.php @@ -29,6 +29,7 @@ public function handle(): void { $this->art(); $this->welcome(); + $this->publish_configuration(); $this->checkForFilament(); $this->registerPlugins(); $this->sayGoodbye(); @@ -60,6 +61,18 @@ public function welcome(): void note('Welcome to the Moox Core installer'); } + public function publish_configuration(): void + { + if (confirm('Do you wish to publish the configuration?', true)) { + if (! File::exists('config/core.php')) { + info('Publishing Core Configuration...'); + $this->call('vendor:publish', ['--tag' => 'core-config']); + } else { + warning('The Core config already exist. The config will not be published.'); + } + } + } + public function checkForFilament(): void { if (! File::exists($this->providerPath)) { diff --git a/packages/jobs/src/Commands/InstallCommand.php b/packages/jobs/src/Commands/InstallCommand.php index 32d9bd0a8..2f64e2d36 100644 --- a/packages/jobs/src/Commands/InstallCommand.php +++ b/packages/jobs/src/Commands/InstallCommand.php @@ -204,7 +204,7 @@ public function registerPlugins(): void foreach ($pluginsToAdd as $plugin) { $searchPlugin = '/'.$plugin.'/'; if (preg_match($searchPlugin, $content)) { - info("$plugin already registered."); + warning("$plugin already registered."); } else { $newPlugins .= $intend.$namespace.'\\'.$plugin.$function."\n"; } From 2aa4a23c55e327efde89bc281aecc48d3f117439 Mon Sep 17 00:00:00 2001 From: Kim-the-Diamond Date: Thu, 7 Mar 2024 12:11:41 +0000 Subject: [PATCH 18/37] Fix styling --- .../builder/src/Commands/InstallCommand.php | 74 +++++++++---------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/packages/builder/src/Commands/InstallCommand.php b/packages/builder/src/Commands/InstallCommand.php index 1d581b350..10ff7c328 100644 --- a/packages/builder/src/Commands/InstallCommand.php +++ b/packages/builder/src/Commands/InstallCommand.php @@ -103,61 +103,61 @@ public function run_migrations(): void public function register_plugins(): void { - $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); + $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); - if (File::exists($providerPath)) { + if (File::exists($providerPath)) { - $content = File::get($providerPath); + $content = File::get($providerPath); - $intend = ' '; + $intend = ' '; - $namespace = "\Moox\Builder"; + $namespace = "\Moox\Builder"; - $pluginsToAdd = multiselect( - label: 'These plugins will be installed:', - options: ['BuilderPlugin'], - default: ['BuilderPlugin'], - ); + $pluginsToAdd = multiselect( + label: 'These plugins will be installed:', + options: ['BuilderPlugin'], + default: ['BuilderPlugin'], + ); - $function = '::make(),'; + $function = '::make(),'; - $pattern = '/->plugins\(\[([\s\S]*?)\]\);/'; - $newPlugins = ''; + $pattern = '/->plugins\(\[([\s\S]*?)\]\);/'; + $newPlugins = ''; - foreach ($pluginsToAdd as $plugin) { - $searchPlugin = '/'.$plugin.'/'; - if (preg_match($searchPlugin, $content)) { - warning("$plugin already registered."); - } else { - $newPlugins .= $intend.$namespace.'\\'.$plugin.$function."\n"; - } + foreach ($pluginsToAdd as $plugin) { + $searchPlugin = '/'.$plugin.'/'; + if (preg_match($searchPlugin, $content)) { + warning("$plugin already registered."); + } else { + $newPlugins .= $intend.$namespace.'\\'.$plugin.$function."\n"; } + } - if ($newPlugins) { - - if (preg_match($pattern, $content)) { - info('Plugins section found. Adding new plugins...'); + if ($newPlugins) { - $replacement = "->plugins([$1\n$newPlugins\n ]);"; - $newContent = preg_replace($pattern, $replacement, $content); + if (preg_match($pattern, $content)) { + info('Plugins section found. Adding new plugins...'); - } else { - info('Plugins section created. Adding new plugins...'); + $replacement = "->plugins([$1\n$newPlugins\n ]);"; + $newContent = preg_replace($pattern, $replacement, $content); - $pluginsSection = " ->plugins([\n$newPlugins\n ]);"; - $placeholderPattern = '/(\->authMiddleware\(\[.*?\]\))\s*\;/s'; - $replacement = "$1\n".$pluginsSection; - $newContent = preg_replace($placeholderPattern, $replacement, $content, 1); - } + } else { + info('Plugins section created. Adding new plugins...'); - File::put($providerPath, $newContent); + $pluginsSection = " ->plugins([\n$newPlugins\n ]);"; + $placeholderPattern = '/(\->authMiddleware\(\[.*?\]\))\s*\;/s'; + $replacement = "$1\n".$pluginsSection; + $newContent = preg_replace($placeholderPattern, $replacement, $content, 1); } - } else { - - alert('AdminPanelProvider not found. You need to add the plugins manually.'); + File::put($providerPath, $newContent); } + } else { + + alert('AdminPanelProvider not found. You need to add the plugins manually.'); + } + } public function finish(): void From 82bf5ce898e58be58fe491ae70027ef88a4ccade Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:19:53 +0100 Subject: [PATCH 19/37] updated all packages InstallCommands with camelcase function names --- packages/audit/src/Commands/InstallCommand.php | 16 ++++++++-------- packages/builder/src/Commands/InstallCommand.php | 16 ++++++++-------- packages/core/src/Commands/InstallCommand.php | 4 ++-- packages/page/src/Commands/InstallCommand.php | 16 ++++++++-------- packages/press/src/Commands/InstallCommand.php | 16 ++++++++-------- packages/sync/src/Commands/InstallCommand.php | 16 ++++++++-------- packages/user/src/Commands/InstallCommand.php | 16 ++++++++-------- 7 files changed, 50 insertions(+), 50 deletions(-) diff --git a/packages/audit/src/Commands/InstallCommand.php b/packages/audit/src/Commands/InstallCommand.php index 4212dfce6..25696f12c 100644 --- a/packages/audit/src/Commands/InstallCommand.php +++ b/packages/audit/src/Commands/InstallCommand.php @@ -36,10 +36,10 @@ public function handle() { $this->art(); $this->welcome(); - $this->publish_configuration(); - $this->publish_migrations(); - $this->run_migrations(); - $this->register_plugins(); + $this->publishConfiguration(); + $this->publishMigrations(); + $this->runMigrations(); + $this->registerPlugins(); $this->finish(); } @@ -69,7 +69,7 @@ public function welcome(): void info('Welcome to Moox Audit Installer'); } - public function publish_configuration(): void + public function publishConfiguration(): void { if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/audit.php')) { @@ -81,7 +81,7 @@ public function publish_configuration(): void } } - public function publish_migrations(): void + public function publishMigrations(): void { if (confirm('Do you wish to publish the migrations?', true)) { if (Schema::hasTable('activity_log')) { @@ -93,7 +93,7 @@ public function publish_migrations(): void } } - public function run_migrations(): void + public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running Audit Migrations...'); @@ -101,7 +101,7 @@ public function run_migrations(): void } } - public function register_plugins(): void + public function registerPlugins(): void { $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); diff --git a/packages/builder/src/Commands/InstallCommand.php b/packages/builder/src/Commands/InstallCommand.php index 1d581b350..4b906c6f6 100644 --- a/packages/builder/src/Commands/InstallCommand.php +++ b/packages/builder/src/Commands/InstallCommand.php @@ -36,10 +36,10 @@ public function handle() { $this->art(); $this->welcome(); - $this->publish_configuration(); - $this->publish_migrations(); - $this->run_migrations(); - $this->register_plugins(); + $this->publishConfiguration(); + $this->publishMigrations(); + $this->runMigrations(); + $this->registerPlugins(); $this->finish(); } @@ -69,7 +69,7 @@ public function welcome(): void info('Welcome to Moox Builder Installer'); } - public function publish_configuration(): void + public function publishConfiguration(): void { if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/builder.php')) { @@ -81,7 +81,7 @@ public function publish_configuration(): void } } - public function publish_migrations(): void + public function publishMigrations(): void { if (confirm('Do you wish to publish the migrations?', true)) { if (Schema::hasTable('items')) { @@ -93,7 +93,7 @@ public function publish_migrations(): void } } - public function run_migrations(): void + public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running Builder Migrations...'); @@ -101,7 +101,7 @@ public function run_migrations(): void } } - public function register_plugins(): void + public function registerPlugins(): void { $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); diff --git a/packages/core/src/Commands/InstallCommand.php b/packages/core/src/Commands/InstallCommand.php index cc0160eeb..91274d92c 100644 --- a/packages/core/src/Commands/InstallCommand.php +++ b/packages/core/src/Commands/InstallCommand.php @@ -29,7 +29,7 @@ public function handle(): void { $this->art(); $this->welcome(); - $this->publish_configuration(); + $this->publishConfiguration(); $this->checkForFilament(); $this->registerPlugins(); $this->sayGoodbye(); @@ -61,7 +61,7 @@ public function welcome(): void note('Welcome to the Moox Core installer'); } - public function publish_configuration(): void + public function publishConfiguration(): void { if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/core.php')) { diff --git a/packages/page/src/Commands/InstallCommand.php b/packages/page/src/Commands/InstallCommand.php index 464761fb5..32172a14b 100644 --- a/packages/page/src/Commands/InstallCommand.php +++ b/packages/page/src/Commands/InstallCommand.php @@ -36,10 +36,10 @@ public function handle() { $this->art(); $this->welcome(); - $this->publish_configuration(); - $this->publish_migrations(); - $this->run_migrations(); - $this->register_plugins(); + $this->publishConfiguration(); + $this->publishMigrations(); + $this->runMigrations(); + $this->registerPlugins(); $this->finish(); } @@ -69,7 +69,7 @@ public function welcome(): void info('Welcome to Moox Page Installer'); } - public function publish_configuration(): void + public function publishConfiguration(): void { if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/page.php')) { @@ -81,7 +81,7 @@ public function publish_configuration(): void } } - public function publish_migrations(): void + public function publishMigrations(): void { if (confirm('Do you wish to publish the migrations?', true)) { if (Schema::hasTable('pages')) { @@ -93,7 +93,7 @@ public function publish_migrations(): void } } - public function run_migrations(): void + public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running Page Migrations...'); @@ -101,7 +101,7 @@ public function run_migrations(): void } } - public function register_plugins(): void + public function registerPlugins(): void { $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); diff --git a/packages/press/src/Commands/InstallCommand.php b/packages/press/src/Commands/InstallCommand.php index 2e3ac5412..a2f6c863d 100644 --- a/packages/press/src/Commands/InstallCommand.php +++ b/packages/press/src/Commands/InstallCommand.php @@ -36,10 +36,10 @@ public function handle() { $this->art(); $this->welcome(); - $this->publish_configuration(); - $this->publish_migrations(); - $this->run_migrations(); - $this->register_plugins(); + $this->publishConfiguration(); + $this->publishMigrations(); + $this->runMigrations(); + $this->registerPlugins(); $this->finish(); } @@ -69,7 +69,7 @@ public function welcome(): void info('Welcome to Moox Press Installer'); } - public function publish_configuration(): void + public function publishConfiguration(): void { if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/press.php')) { @@ -81,7 +81,7 @@ public function publish_configuration(): void } } - public function publish_migrations(): void + public function publishMigrations(): void { if (confirm('Do you wish to publish the migrations?', true)) { if (Schema::hasTable('press')) { @@ -93,7 +93,7 @@ public function publish_migrations(): void } } - public function run_migrations(): void + public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running Press Migrations...'); @@ -101,7 +101,7 @@ public function run_migrations(): void } } - public function register_plugins(): void + public function registerPlugins(): void { $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); diff --git a/packages/sync/src/Commands/InstallCommand.php b/packages/sync/src/Commands/InstallCommand.php index 9973254cc..7af09ab92 100644 --- a/packages/sync/src/Commands/InstallCommand.php +++ b/packages/sync/src/Commands/InstallCommand.php @@ -36,10 +36,10 @@ public function handle() { $this->art(); $this->welcome(); - $this->publish_configuration(); - $this->publish_migrations(); - $this->run_migrations(); - $this->register_plugins(); + $this->publishConfiguration(); + $this->publishMigrations(); + $this->runMigrations(); + $this->registerPlugins(); $this->finish(); } @@ -69,7 +69,7 @@ public function welcome(): void info('Welcome to Moox Sync Installer'); } - public function publish_configuration(): void + public function publishConfiguration(): void { if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/sync.php')) { @@ -81,7 +81,7 @@ public function publish_configuration(): void } } - public function publish_migrations(): void + public function publishMigrations(): void { if (confirm('Do you wish to publish the migrations?', true)) { if (Schema::hasTable('sync')) { @@ -93,7 +93,7 @@ public function publish_migrations(): void } } - public function run_migrations(): void + public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running Sync Migrations...'); @@ -101,7 +101,7 @@ public function run_migrations(): void } } - public function register_plugins(): void + public function registerPlugins(): void { $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); diff --git a/packages/user/src/Commands/InstallCommand.php b/packages/user/src/Commands/InstallCommand.php index 0ffbb7c3d..970a774af 100644 --- a/packages/user/src/Commands/InstallCommand.php +++ b/packages/user/src/Commands/InstallCommand.php @@ -36,10 +36,10 @@ public function handle() { $this->art(); $this->welcome(); - $this->publish_configuration(); - $this->publish_migrations(); - $this->run_migrations(); - $this->register_plugins(); + $this->publishConfiguration(); + $this->publishMigrations(); + $this->runMigrations(); + $this->registerPlugins(); $this->finish(); } @@ -69,7 +69,7 @@ public function welcome(): void info('Welcome to Moox User Installer'); } - public function publish_configuration(): void + public function publishConfiguration(): void { if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/user.php')) { @@ -82,7 +82,7 @@ public function publish_configuration(): void } } - public function publish_migrations(): void + public function publishMigrations(): void { if (confirm('Do you wish to publish the migrations?', true)) { if (Schema::hasTable('user')) { @@ -95,7 +95,7 @@ public function publish_migrations(): void } - public function run_migrations(): void + public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running User Migrations...'); @@ -103,7 +103,7 @@ public function run_migrations(): void } } - public function register_plugins(): void + public function registerPlugins(): void { $providerPath = app_path('Providers/Filament/AdminPanelProvider.php'); From b7682abad0a5a730b0d93abb674be6ee6b9960e6 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:23:34 +0100 Subject: [PATCH 20/37] Updated all packages InstallCommand => callSilent() --- packages/audit/src/Commands/InstallCommand.php | 4 ++-- packages/builder/src/Commands/InstallCommand.php | 4 ++-- packages/core/src/Commands/InstallCommand.php | 4 ++-- packages/jobs/src/Commands/InstallCommand.php | 4 ++-- packages/page/src/Commands/InstallCommand.php | 4 ++-- packages/press/src/Commands/InstallCommand.php | 4 ++-- packages/sync/src/Commands/InstallCommand.php | 4 ++-- packages/user/src/Commands/InstallCommand.php | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/audit/src/Commands/InstallCommand.php b/packages/audit/src/Commands/InstallCommand.php index 25696f12c..0c78ee17a 100644 --- a/packages/audit/src/Commands/InstallCommand.php +++ b/packages/audit/src/Commands/InstallCommand.php @@ -74,7 +74,7 @@ public function publishConfiguration(): void if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/audit.php')) { info('Publishing Audit Configuration...'); - $this->call('vendor:publish', ['--tag' => 'audit-config']); + $this->callSilent('vendor:publish', ['--tag' => 'audit-config']); } else { warning('The Audit config already exist. The config will not be published.'); } @@ -97,7 +97,7 @@ public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running Audit Migrations...'); - $this->call('migrate'); + $this->callSilent('migrate'); } } diff --git a/packages/builder/src/Commands/InstallCommand.php b/packages/builder/src/Commands/InstallCommand.php index 79065369e..b55cec97f 100644 --- a/packages/builder/src/Commands/InstallCommand.php +++ b/packages/builder/src/Commands/InstallCommand.php @@ -74,7 +74,7 @@ public function publishConfiguration(): void if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/builder.php')) { info('Publishing Builder Configuration...'); - $this->call('vendor:publish', ['--tag' => 'builder-config']); + $this->callSilent('vendor:publish', ['--tag' => 'builder-config']); } else { warning('The Builder config already exist. The config will not be published.'); } @@ -97,7 +97,7 @@ public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running Builder Migrations...'); - $this->call('migrate'); + $this->callSilent('migrate'); } } diff --git a/packages/core/src/Commands/InstallCommand.php b/packages/core/src/Commands/InstallCommand.php index 91274d92c..eea72aea0 100644 --- a/packages/core/src/Commands/InstallCommand.php +++ b/packages/core/src/Commands/InstallCommand.php @@ -66,7 +66,7 @@ public function publishConfiguration(): void if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/core.php')) { info('Publishing Core Configuration...'); - $this->call('vendor:publish', ['--tag' => 'core-config']); + $this->callSilent('vendor:publish', ['--tag' => 'core-config']); } else { warning('The Core config already exist. The config will not be published.'); } @@ -82,7 +82,7 @@ public function checkForFilament(): void info(' '); if (confirm('Do you want to install Filament now?', true)) { info('Starting Filament installer...'); - $this->call('filament:install', ['--panels' => true]); + $this->callSilent('filament:install', ['--panels' => true]); } } diff --git a/packages/jobs/src/Commands/InstallCommand.php b/packages/jobs/src/Commands/InstallCommand.php index 2f64e2d36..d84aba020 100644 --- a/packages/jobs/src/Commands/InstallCommand.php +++ b/packages/jobs/src/Commands/InstallCommand.php @@ -75,7 +75,7 @@ public function checkForFilament(): void info(' '); if (confirm('Do you want to install Filament now?', true)) { info('Starting Filament installer...'); - $this->call('filament:install', ['--panels' => true]); + $this->callSilent('filament:install', ['--panels' => true]); } } @@ -163,7 +163,7 @@ public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running Jobs Migrations...'); - $this->call('migrate'); + $this->callSilent('migrate'); } } diff --git a/packages/page/src/Commands/InstallCommand.php b/packages/page/src/Commands/InstallCommand.php index 32172a14b..e6914bd75 100644 --- a/packages/page/src/Commands/InstallCommand.php +++ b/packages/page/src/Commands/InstallCommand.php @@ -74,7 +74,7 @@ public function publishConfiguration(): void if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/page.php')) { info('Publishing Page Configuration...'); - $this->call('vendor:publish', ['--tag' => 'page-config']); + $this->callSilent('vendor:publish', ['--tag' => 'page-config']); } else { warning('The Page config already exist. The config will not be published.'); } @@ -97,7 +97,7 @@ public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running Page Migrations...'); - $this->call('migrate'); + $this->callSilent('migrate'); } } diff --git a/packages/press/src/Commands/InstallCommand.php b/packages/press/src/Commands/InstallCommand.php index a2f6c863d..67816637a 100644 --- a/packages/press/src/Commands/InstallCommand.php +++ b/packages/press/src/Commands/InstallCommand.php @@ -74,7 +74,7 @@ public function publishConfiguration(): void if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/press.php')) { info('Publishing Press Configuration...'); - $this->call('vendor:publish', ['--tag' => 'press-config']); + $this->callSilent('vendor:publish', ['--tag' => 'press-config']); } else { warning('The Press config already exist. The config will not be published.'); } @@ -97,7 +97,7 @@ public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running Press Migrations...'); - $this->call('migrate'); + $this->callSilent('migrate'); } } diff --git a/packages/sync/src/Commands/InstallCommand.php b/packages/sync/src/Commands/InstallCommand.php index 7af09ab92..be9993603 100644 --- a/packages/sync/src/Commands/InstallCommand.php +++ b/packages/sync/src/Commands/InstallCommand.php @@ -74,7 +74,7 @@ public function publishConfiguration(): void if (confirm('Do you wish to publish the configuration?', true)) { if (! File::exists('config/sync.php')) { info('Publishing Sync Configuration...'); - $this->call('vendor:publish', ['--tag' => 'sync-config']); + $this->callSilent('vendor:publish', ['--tag' => 'sync-config']); } else { warning('The Sync config already exist. The config will not be published.'); } @@ -97,7 +97,7 @@ public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running Sync Migrations...'); - $this->call('migrate'); + $this->callSilent('migrate'); } } diff --git a/packages/user/src/Commands/InstallCommand.php b/packages/user/src/Commands/InstallCommand.php index 970a774af..634710126 100644 --- a/packages/user/src/Commands/InstallCommand.php +++ b/packages/user/src/Commands/InstallCommand.php @@ -99,7 +99,7 @@ public function runMigrations(): void { if (confirm('Do you wish to run the migrations?', true)) { info('Running User Migrations...'); - $this->call('migrate'); + $this->callSilent('migrate'); } } From 69536d2c4e93f15e520dc1bdb731d90f7be73dbd Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:30:40 +0100 Subject: [PATCH 21/37] Cleanup PressPlugin --- packages/press/src/PressPlugin.php | 220 +---------------------------- 1 file changed, 3 insertions(+), 217 deletions(-) diff --git a/packages/press/src/PressPlugin.php b/packages/press/src/PressPlugin.php index ad15c1b7a..f0335a3d8 100644 --- a/packages/press/src/PressPlugin.php +++ b/packages/press/src/PressPlugin.php @@ -2,248 +2,34 @@ namespace Moox\Press; -use Closure; use Filament\Contracts\Plugin; use Filament\Panel; use Filament\Support\Concerns\EvaluatesClosures; +use Moox\Press\Resources\PressResource; class PressPlugin implements Plugin { use EvaluatesClosures; - /** - * The resource label. - */ - protected string|Closure|null $label = null; - - /** - * The plural resource label. - */ - protected string|Closure|null $pluralLabel = null; - - /** - * The resource navigation status. - */ - protected ?bool $navigation = null; - - /** - * The resource navigation group. - */ - protected ?string $navigationGroup = null; - - /** - * The resource navigation icon. - */ - protected ?string $navigationIcon = null; - - /** - * The resource navigation sorting order. - */ - protected ?int $navigationSort = null; - - /** - * The resource navigation count badge status. - */ - protected ?bool $navigationCountBadge = null; - - /** - * The pruning status. - */ - protected ?bool $pruning = null; - - /** - * The pruning retention. - */ - protected ?int $pruningRetention = null; - - /** - * The resource class. - */ - protected ?string $resource = null; - - /** - * Get the plugin identifier. - */ public function getId(): string { - return 'press'; + return 'audit'; } - /** - * Register the plugin. - */ public function register(Panel $panel): void { $panel->resources([ - $this->getResource(), + PressResource::class, ]); } - /** - * Boot the plugin. - */ public function boot(Panel $panel): void { // } - /** - * Make a new instance of the plugin. - */ public static function make(): static { return app(static::class); } - - /** - * Get the resource class. - */ - public function getResource(): string - { - return $this->resource ?? config('press.resources.press.resource'); - } - - /** - * Set the resource class. - */ - public function resource(string $resource): static - { - $this->resource = $resource; - - return $this; - } - - /** - * Get the resource label. - */ - public function getLabel(): ?string - { - return $this->evaluate($this->label) ?? config('press.resources.press.label'); - } - - /** - * Set the resource label. - */ - public function label(string $label): static - { - $this->label = $label; - - return $this; - } - - /** - * Get the plural resource label. - */ - public function getPluralLabel(): ?string - { - return $this->evaluate($this->pluralLabel) ?? config('press.resources.press.plural_label'); - } - - /** - * Set the plural resource label. - */ - public function pluralLabel(string $pluralLabel): static - { - $this->pluralLabel = $pluralLabel; - - return $this; - } - - /** - * Get the resource navigation group. - */ - public function getNavigationGroup(): ?string - { - return $this->navigationGroup ?? config('press.resources.press.navigation_group'); - } - - /** - * Set the resource navigation group. - */ - public function navigationGroup(string $navigationGroup): static - { - $this->navigationGroup = $navigationGroup; - - return $this; - } - - /** - * Get the resource icon. - */ - public function getNavigationIcon(): ?string - { - return $this->navigationIcon ?? config('press.resources.press.navigation_icon'); - } - - /** - * Set the resource icon. - */ - public function navigationIcon(string $navigationIcon): static - { - $this->navigationIcon = $navigationIcon; - - return $this; - } - - /** - * Get the resource sort. - */ - public function getNavigationSort(): ?int - { - return $this->navigationSort ?? config('press.resources.press.navigation_sort'); - } - - /** - * Set the resource sort. - */ - public function navigationSort(int $navigationSort): static - { - $this->navigationSort = $navigationSort; - - return $this; - } - - /** - * Get the resource navigation count badge status. - */ - public function getNavigationCountBadge(): ?bool - { - return $this->navigationCountBadge ?? config('press.resources.press.navigation_count_badge'); - } - - /** - * Set the resource navigation count badge status. - */ - public function navigationCountBadge(bool $navigationCountBadge = true): static - { - $this->navigationCountBadge = $navigationCountBadge; - - return $this; - } - - /** - * Determine whether the resource navigation is enabled. - */ - public function shouldRegisterNavigation(): bool - { - return $this->navigation ?? config('press.resources.press.enabled'); - } - - /** - * Enable the resource navigation. - */ - public function enableNavigation(bool $status = true): static - { - $this->navigation = $status; - - return $this; - } - - /** - * Get the resource breadcrumb. - */ - public function getBreadcrumb(): string - { - return __('press::translations.breadcrumb'); - } } From 74c854656a81661e3d0d1223b1301c31463e5aaa Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:40:11 +0100 Subject: [PATCH 22/37] Clenup Press Package --- .../press/resources/lang/de/translations.php | 3 +- .../press/resources/lang/en/translations.php | 3 +- .../press/resources/lang/es/translations.php | 3 +- .../resources/lang/nb_NO/translations.php | 3 +- .../press/src/Resources/PressResource.php | 33 +++++++++---------- 5 files changed, 23 insertions(+), 22 deletions(-) diff --git a/packages/press/resources/lang/de/translations.php b/packages/press/resources/lang/de/translations.php index 3b7a4bcd4..1459d78e0 100644 --- a/packages/press/resources/lang/de/translations.php +++ b/packages/press/resources/lang/de/translations.php @@ -1,8 +1,9 @@ 'Press', + 'plural' => 'Press', 'breadcrumb' => 'Press', - 'title' => 'Press', 'navigation_label' => 'Press', 'navigation_group' => 'Press Gruppe', 'totalone' => 'Press Eins', diff --git a/packages/press/resources/lang/en/translations.php b/packages/press/resources/lang/en/translations.php index 043a24f23..2675bef80 100644 --- a/packages/press/resources/lang/en/translations.php +++ b/packages/press/resources/lang/en/translations.php @@ -1,8 +1,9 @@ 'Press', + 'plural' => 'Press', 'breadcrumb' => 'Press', - 'title' => 'Press', 'navigation_label' => 'Press', 'navigation_group' => 'Press Group', 'totalone' => 'Press One', diff --git a/packages/press/resources/lang/es/translations.php b/packages/press/resources/lang/es/translations.php index 1569adcef..d4f649a83 100644 --- a/packages/press/resources/lang/es/translations.php +++ b/packages/press/resources/lang/es/translations.php @@ -1,8 +1,9 @@ 'Press', + 'plural' => 'Press', 'breadcrumb' => 'Press', - 'title' => 'Press', 'navigation_label' => 'Press', 'navigation_group' => 'Press Grupo', 'totalone' => 'Press Uno', diff --git a/packages/press/resources/lang/nb_NO/translations.php b/packages/press/resources/lang/nb_NO/translations.php index 4c7cc2a3c..ebf05ae61 100644 --- a/packages/press/resources/lang/nb_NO/translations.php +++ b/packages/press/resources/lang/nb_NO/translations.php @@ -1,8 +1,9 @@ 'Bygger', + 'plural' => 'Bygger', 'breadcrumb' => 'Bygger', - 'title' => 'Bygger', 'navigation_label' => 'Bygger', 'navigation_group' => 'Byggergruppe', 'totalone' => 'Bygger én', diff --git a/packages/press/src/Resources/PressResource.php b/packages/press/src/Resources/PressResource.php index db21b9279..4f30d91dd 100644 --- a/packages/press/src/Resources/PressResource.php +++ b/packages/press/src/Resources/PressResource.php @@ -21,6 +21,8 @@ class PressResource extends Resource { protected static ?string $model = Press::class; + protected static ?string $navigationIcon = 'heroicon-o-cube'; + public static function form(Form $form): Form { return $form @@ -79,48 +81,43 @@ public static function getWidgets(): array ]; } - public static function getNavigationBadge(): ?string - { - return PressPlugin::make()->getNavigationCountBadge() ? number_format(static::getModel()::count()) : null; - } - public static function getModelLabel(): string { - return PressPlugin::make()->getLabel(); + return __('press::translations.single'); } public static function getPluralModelLabel(): string { - return PressPlugin::make()->getPluralLabel(); + return __('press::translations.plural'); } public static function getNavigationLabel(): string { - return Str::title(static::getPluralModelLabel()); + return __('press::translations.navigation_label'); } - public static function getNavigationGroup(): ?string + public static function getBreadcrumb(): string { - return PressPlugin::make()->getNavigationGroup(); + return __('press::translations.breadcrumb'); } - public static function getNavigationSort(): ?int + public static function shouldRegisterNavigation(): bool { - return PressPlugin::make()->getNavigationSort(); + return true; } - public static function getBreadcrumb(): string + public static function getNavigationBadge(): ?string { - return PressPlugin::make()->getBreadcrumb(); + return number_format(static::getModel()::count()); } - public static function shouldRegisterNavigation(): bool + public static function getNavigationGroup(): ?string { - return PressPlugin::make()->shouldRegisterNavigation(); + return __('press::translations.navigation_group'); } - public static function getNavigationIcon(): string + public static function getNavigationSort(): ?int { - return PressPlugin::make()->getNavigationIcon(); + return 2001; } } From e03fb94e0a9c265822e3a74a646e8f08e7868215 Mon Sep 17 00:00:00 2001 From: Kim-the-Diamond Date: Thu, 7 Mar 2024 12:40:39 +0000 Subject: [PATCH 23/37] Fix styling --- packages/press/src/Resources/PressResource.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/press/src/Resources/PressResource.php b/packages/press/src/Resources/PressResource.php index 4f30d91dd..62ce0455b 100644 --- a/packages/press/src/Resources/PressResource.php +++ b/packages/press/src/Resources/PressResource.php @@ -11,9 +11,7 @@ use Filament\Tables\Actions\EditAction; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; -use Illuminate\Support\Str; use Moox\Press\Models\Press; -use Moox\Press\PressPlugin; use Moox\Press\Resources\PressResource\Pages\ListPage; use Moox\Press\Resources\PressResource\Widgets\PressWidgets; From b3088c081d959aa62264637a79952dbb4beb242e Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:41:38 +0100 Subject: [PATCH 24/37] Update PressResource.php --- packages/press/src/Resources/PressResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/press/src/Resources/PressResource.php b/packages/press/src/Resources/PressResource.php index 4f30d91dd..e71828d92 100644 --- a/packages/press/src/Resources/PressResource.php +++ b/packages/press/src/Resources/PressResource.php @@ -118,6 +118,6 @@ public static function getNavigationGroup(): ?string public static function getNavigationSort(): ?int { - return 2001; + return 1901; } } From 26f8c0a3dcc15c7d361e5b30b245e057d9b8b1da Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:54:58 +0100 Subject: [PATCH 25/37] updated Jobs --- .../database/migrations/01_create_job_manager_table.php.stub | 1 - packages/jobs/src/Commands/InstallCommand.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/jobs/database/migrations/01_create_job_manager_table.php.stub b/packages/jobs/database/migrations/01_create_job_manager_table.php.stub index 795205ba2..ac959930b 100644 --- a/packages/jobs/database/migrations/01_create_job_manager_table.php.stub +++ b/packages/jobs/database/migrations/01_create_job_manager_table.php.stub @@ -24,7 +24,6 @@ return new class extends Migration { $table->integer('progress')->nullable(); $table->text('exception_message')->nullable(); $table->string('status'); - $table->unsignedBigInteger('job_queue_worker_id'); $table->index('job_id'); $table->index('queue'); diff --git a/packages/jobs/src/Commands/InstallCommand.php b/packages/jobs/src/Commands/InstallCommand.php index d84aba020..8e219b653 100644 --- a/packages/jobs/src/Commands/InstallCommand.php +++ b/packages/jobs/src/Commands/InstallCommand.php @@ -133,7 +133,7 @@ public function publishMigrations(): void public function createQueueTables(): void { - if ($createQueueTables = confirm('Do you wish to create the queue tables?', true)) { + if (confirm('Do you wish to create the queue tables?', true)) { note('Your Jobs are using the database queue driver. Creating Queue Tables...'); if (Schema::hasTable('jobs')) { From 587820529300f4d5a399b1f18427a27e77f345cb Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:58:05 +0100 Subject: [PATCH 26/37] Testes Install command --- app/Providers/Filament/AdminPanelProvider.php | 21 ++++++++ config/audit.php | 3 ++ config/builder.php | 3 ++ config/core.php | 5 ++ config/file.php | 20 ++++++++ config/jobs.php | 50 +++++++++++++++++++ config/page.php | 20 ++++++++ config/press.php | 3 ++ config/sync.php | 3 ++ ...03_07_122630_01_create_platforms_table.php | 40 +++++++++++++++ ...024_03_07_122631_02_create_syncs_table.php | 37 ++++++++++++++ .../2024_03_07_122749_create_press_table.php | 32 ++++++++++++ .../2024_03_07_124032_create_pages_table.php | 32 ++++++++++++ ..._07_125512_01_create_job_manager_table.php | 43 ++++++++++++++++ ...5512_02_create_job_batch_manager_table.php | 37 ++++++++++++++ ...5512_03_create_job_queue_workers_table.php | 38 ++++++++++++++ ...2_04_add_foreigns_to_job_manager_table.php | 32 ++++++++++++ ..._03_07_125523_create_job_batches_table.php | 35 +++++++++++++ .../2024_03_07_125523_create_jobs_table.php | 32 ++++++++++++ .../2024_03_07_125619_create_items_table.php | 32 ++++++++++++ ...03_07_125640_create_activity_log_table.php | 32 ++++++++++++ 21 files changed, 550 insertions(+) create mode 100644 config/audit.php create mode 100644 config/builder.php create mode 100644 config/core.php create mode 100644 config/file.php create mode 100644 config/jobs.php create mode 100644 config/page.php create mode 100644 config/press.php create mode 100644 config/sync.php create mode 100644 database/migrations/2024_03_07_122630_01_create_platforms_table.php create mode 100644 database/migrations/2024_03_07_122631_02_create_syncs_table.php create mode 100644 database/migrations/2024_03_07_122749_create_press_table.php create mode 100644 database/migrations/2024_03_07_124032_create_pages_table.php create mode 100644 database/migrations/2024_03_07_125512_01_create_job_manager_table.php create mode 100644 database/migrations/2024_03_07_125512_02_create_job_batch_manager_table.php create mode 100644 database/migrations/2024_03_07_125512_03_create_job_queue_workers_table.php create mode 100644 database/migrations/2024_03_07_125512_04_add_foreigns_to_job_manager_table.php create mode 100644 database/migrations/2024_03_07_125523_create_job_batches_table.php create mode 100644 database/migrations/2024_03_07_125523_create_jobs_table.php create mode 100644 database/migrations/2024_03_07_125619_create_items_table.php create mode 100644 database/migrations/2024_03_07_125640_create_activity_log_table.php diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index bfadae6b5..f9e6f2450 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -74,6 +74,27 @@ public function panel(Panel $panel): Panel \Moox\User\UserPlugin::make(), + + \Moox\Sync\SyncPlugin::make(), + \Moox\Sync\PlatformPlugin::make(), + + + \Moox\Press\PressPlugin::make(), + + + \Moox\Page\PagePlugin::make(), + + + \Moox\Jobs\JobsPlugin::make(), + \Moox\Jobs\JobsFailedPlugin::make(), + \Moox\Jobs\JobsBatchesPlugin::make(), + + + \Moox\Builder\BuilderPlugin::make(), + + + \Moox\Audit\AuditPlugin::make(), + ]); } } diff --git a/config/audit.php b/config/audit.php new file mode 100644 index 000000000..0b67a5fe4 --- /dev/null +++ b/config/audit.php @@ -0,0 +1,3 @@ + [ + 'file' => [ + 'enabled' => true, + 'label' => 'File', + 'plural_label' => 'Files', + 'navigation_group' => 'File Group', + 'navigation_icon' => 'heroicon-o-play', + 'navigation_sort' => 1, + 'navigation_count_badge' => true, + 'resource' => Moox\File\Resources\FileResource::class, + ], + ], + 'pruning' => [ + 'enabled' => true, + 'retention_days' => 7, + ], +]; diff --git a/config/jobs.php b/config/jobs.php new file mode 100644 index 000000000..baae5d14c --- /dev/null +++ b/config/jobs.php @@ -0,0 +1,50 @@ + [ + 'jobs' => [ + 'enabled' => true, + 'label' => 'Job', + 'plural_label' => 'Jobs', + 'navigation_group' => 'Job manager', + 'navigation_icon' => 'heroicon-o-play', + 'navigation_sort' => 1, + 'navigation_count_badge' => true, + 'resource' => Moox\Jobs\Resources\JobsResource::class, + ], + 'jobs_waiting' => [ + 'enabled' => true, + 'label' => 'Job waiting', + 'plural_label' => 'Jobs waiting', + 'navigation_group' => 'Job manager', + 'navigation_icon' => 'heroicon-o-pause', + 'navigation_sort' => 2, + 'navigation_count_badge' => true, + 'resource' => Moox\Jobs\Resources\JobsWaitingResource::class, + ], + 'failed_jobs' => [ + 'enabled' => true, + 'label' => 'Failed Job', + 'plural_label' => 'Failed Jobs', + 'navigation_group' => 'Job manager', + 'navigation_icon' => 'heroicon-o-exclamation-triangle', + 'navigation_sort' => 3, + 'navigation_count_badge' => true, + 'resource' => Moox\Jobs\Resources\JobsFailedResource::class, + ], + 'job_batches' => [ + 'enabled' => true, + 'label' => 'Job Batch', + 'plural_label' => 'Job Batches', + 'navigation_group' => 'Job manager', + 'navigation_icon' => 'heroicon-o-inbox-stack', + 'navigation_sort' => 4, + 'navigation_count_badge' => true, + 'resource' => Moox\Jobs\Resources\JobBatchesResource::class, + ], + ], + 'pruning' => [ + 'enabled' => true, + 'retention_days' => 7, + ], +]; diff --git a/config/page.php b/config/page.php new file mode 100644 index 000000000..90bbd461a --- /dev/null +++ b/config/page.php @@ -0,0 +1,20 @@ + [ + 'page' => [ + 'enabled' => true, + 'label' => 'Page', + 'plural_label' => 'Pages', + 'navigation_group' => 'Page Group', + 'navigation_icon' => 'heroicon-o-play', + 'navigation_sort' => 1, + 'navigation_count_badge' => true, + 'resource' => Moox\Page\Resources\PageResource::class, + ], + ], + 'pruning' => [ + 'enabled' => true, + 'retention_days' => 7, + ], +]; diff --git a/config/press.php b/config/press.php new file mode 100644 index 000000000..0b67a5fe4 --- /dev/null +++ b/config/press.php @@ -0,0 +1,3 @@ +bigIncrements('id'); + $table->string('title'); + $table->string('slug'); + $table->string('domain'); + $table->boolean('selection')->nullable(); + $table->tinyInteger('order')->nullable(); + $table->boolean('locked')->nullable(); + $table->boolean('master')->nullable(); + $table->string('thumbnail')->nullable(); + $table->unsignedBigInteger('platformable_id'); + $table->string('platformable_type'); + + $table->index('platformable_id'); + $table->index('platformable_type'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('platforms'); + } +}; diff --git a/database/migrations/2024_03_07_122631_02_create_syncs_table.php b/database/migrations/2024_03_07_122631_02_create_syncs_table.php new file mode 100644 index 000000000..10d637cc0 --- /dev/null +++ b/database/migrations/2024_03_07_122631_02_create_syncs_table.php @@ -0,0 +1,37 @@ +bigIncrements('id'); + $table->unsignedBigInteger('syncable_id'); + $table->string('syncable_type'); + $table->unsignedBigInteger('source_platform_id'); + $table->unsignedBigInteger('target_platform_id'); + $table->timestamp('last_sync'); + + $table->index('syncable_id'); + $table->index('syncable_type'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + + { + Schema::dropIfExists('sync'); + } +}; diff --git a/database/migrations/2024_03_07_122749_create_press_table.php b/database/migrations/2024_03_07_122749_create_press_table.php new file mode 100644 index 000000000..83d2e2534 --- /dev/null +++ b/database/migrations/2024_03_07_122749_create_press_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name')->nullable(); + $table->timestamp('started_at')->nullable()->index(); + $table->timestamp('finished_at')->nullable(); + $table->boolean('failed')->default(false)->index(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + + { + Schema::dropIfExists('press'); + } +}; diff --git a/database/migrations/2024_03_07_124032_create_pages_table.php b/database/migrations/2024_03_07_124032_create_pages_table.php new file mode 100644 index 000000000..f989004e8 --- /dev/null +++ b/database/migrations/2024_03_07_124032_create_pages_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name')->nullable(); + $table->timestamp('started_at')->nullable()->index(); + $table->timestamp('finished_at')->nullable(); + $table->boolean('failed')->default(false)->index(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + + { + Schema::dropIfExists('page'); + } +}; diff --git a/database/migrations/2024_03_07_125512_01_create_job_manager_table.php b/database/migrations/2024_03_07_125512_01_create_job_manager_table.php new file mode 100644 index 000000000..ac959930b --- /dev/null +++ b/database/migrations/2024_03_07_125512_01_create_job_manager_table.php @@ -0,0 +1,43 @@ +bigIncrements('id'); + $table->string('job_id'); + $table->string('name')->nullable(); + $table->string('queue')->nullable(); + $table->string('connection')->nullable(); + $table->timestamp('available_at'); + $table->timestamp('started_at')->nullable(); + $table->timestamp('finished_at')->nullable(); + $table->boolean('failed'); + $table->integer('attempt'); + $table->integer('progress')->nullable(); + $table->text('exception_message')->nullable(); + $table->string('status'); + + $table->index('job_id'); + $table->index('queue'); + $table->index('status'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('job_manager'); + } +}; diff --git a/database/migrations/2024_03_07_125512_02_create_job_batch_manager_table.php b/database/migrations/2024_03_07_125512_02_create_job_batch_manager_table.php new file mode 100644 index 000000000..5c514f6d8 --- /dev/null +++ b/database/migrations/2024_03_07_125512_02_create_job_batch_manager_table.php @@ -0,0 +1,37 @@ +bigIncrements('id'); + $table->string('batch_id'); + $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->timestamp('cancelled_at')->nullable(); + $table->timestamp('finished_at')->nullable(); + $table->string('status'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('job_batch_manager'); + } +}; diff --git a/database/migrations/2024_03_07_125512_03_create_job_queue_workers_table.php b/database/migrations/2024_03_07_125512_03_create_job_queue_workers_table.php new file mode 100644 index 000000000..acc898c16 --- /dev/null +++ b/database/migrations/2024_03_07_125512_03_create_job_queue_workers_table.php @@ -0,0 +1,38 @@ +bigIncrements('id'); + $table->string('worker_pid'); + $table->string('queue'); + $table->string('connection'); + $table->string('worker_server')->nullable(); + $table->string('supervisor')->nullable(); + $table->string('status'); + $table->timestamp('started_at')->nullable(); + $table->timestamp('stopped_at')->nullable(); + + $table->index('worker_pid'); + $table->index('queue'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('job_queue_workers'); + } +}; diff --git a/database/migrations/2024_03_07_125512_04_add_foreigns_to_job_manager_table.php b/database/migrations/2024_03_07_125512_04_add_foreigns_to_job_manager_table.php new file mode 100644 index 000000000..6a67869a3 --- /dev/null +++ b/database/migrations/2024_03_07_125512_04_add_foreigns_to_job_manager_table.php @@ -0,0 +1,32 @@ +foreignId('job_queue_worker_id') + ->references('id') + ->on('job_queue_workers') + ->onUpdate('CASCADE') + ->onDelete('CASCADE'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('job_manager', function (Blueprint $table) { + $table->dropForeign(['job_queue_worker_id']); + }); + } +}; diff --git a/database/migrations/2024_03_07_125523_create_job_batches_table.php b/database/migrations/2024_03_07_125523_create_job_batches_table.php new file mode 100644 index 000000000..50e38c20f --- /dev/null +++ b/database/migrations/2024_03_07_125523_create_job_batches_table.php @@ -0,0 +1,35 @@ +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(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('job_batches'); + } +}; diff --git a/database/migrations/2024_03_07_125523_create_jobs_table.php b/database/migrations/2024_03_07_125523_create_jobs_table.php new file mode 100644 index 000000000..6098d9b12 --- /dev/null +++ b/database/migrations/2024_03_07_125523_create_jobs_table.php @@ -0,0 +1,32 @@ +bigIncrements('id'); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + } +}; diff --git a/database/migrations/2024_03_07_125619_create_items_table.php b/database/migrations/2024_03_07_125619_create_items_table.php new file mode 100644 index 000000000..93682fe95 --- /dev/null +++ b/database/migrations/2024_03_07_125619_create_items_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name')->nullable(); + $table->timestamp('started_at')->nullable()->index(); + $table->timestamp('finished_at')->nullable(); + $table->boolean('failed')->default(false)->index(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + + { + Schema::dropIfExists('builder'); + } +}; diff --git a/database/migrations/2024_03_07_125640_create_activity_log_table.php b/database/migrations/2024_03_07_125640_create_activity_log_table.php new file mode 100644 index 000000000..5d88e4a4f --- /dev/null +++ b/database/migrations/2024_03_07_125640_create_activity_log_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name')->nullable(); + $table->timestamp('started_at')->nullable()->index(); + $table->timestamp('finished_at')->nullable(); + $table->boolean('failed')->default(false)->index(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + + { + Schema::dropIfExists('audit'); + } +}; From 672dab2b4e0a45646382fb0b00dcdbbe2f97d856 Mon Sep 17 00:00:00 2001 From: Kim-the-Diamond Date: Thu, 7 Mar 2024 12:58:30 +0000 Subject: [PATCH 27/37] Fix styling --- app/Providers/Filament/AdminPanelProvider.php | 6 ------ .../2024_03_07_122630_01_create_platforms_table.php | 7 ++++--- .../migrations/2024_03_07_122631_02_create_syncs_table.php | 1 - .../migrations/2024_03_07_122749_create_press_table.php | 1 - .../migrations/2024_03_07_124032_create_pages_table.php | 1 - .../2024_03_07_125512_01_create_job_manager_table.php | 7 ++++--- ...2024_03_07_125512_02_create_job_batch_manager_table.php | 7 ++++--- ...2024_03_07_125512_03_create_job_queue_workers_table.php | 7 ++++--- ...4_03_07_125512_04_add_foreigns_to_job_manager_table.php | 7 ++++--- .../migrations/2024_03_07_125619_create_items_table.php | 1 - .../2024_03_07_125640_create_activity_log_table.php | 1 - 11 files changed, 20 insertions(+), 26 deletions(-) diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index f9e6f2450..6ddff74fa 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -74,25 +74,19 @@ public function panel(Panel $panel): Panel \Moox\User\UserPlugin::make(), - \Moox\Sync\SyncPlugin::make(), \Moox\Sync\PlatformPlugin::make(), - \Moox\Press\PressPlugin::make(), - \Moox\Page\PagePlugin::make(), - \Moox\Jobs\JobsPlugin::make(), \Moox\Jobs\JobsFailedPlugin::make(), \Moox\Jobs\JobsBatchesPlugin::make(), - \Moox\Builder\BuilderPlugin::make(), - \Moox\Audit\AuditPlugin::make(), ]); diff --git a/database/migrations/2024_03_07_122630_01_create_platforms_table.php b/database/migrations/2024_03_07_122630_01_create_platforms_table.php index 8e6cb489d..84489d407 100644 --- a/database/migrations/2024_03_07_122630_01_create_platforms_table.php +++ b/database/migrations/2024_03_07_122630_01_create_platforms_table.php @@ -1,10 +1,11 @@ Date: Thu, 7 Mar 2024 14:02:33 +0100 Subject: [PATCH 28/37] Update JobManager.php --- packages/jobs/src/Models/JobManager.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/jobs/src/Models/JobManager.php b/packages/jobs/src/Models/JobManager.php index 03235f268..1ed959e0f 100644 --- a/packages/jobs/src/Models/JobManager.php +++ b/packages/jobs/src/Models/JobManager.php @@ -14,6 +14,11 @@ class JobManager extends Model protected $table = 'job_manager'; + /** + * The attributes that are mass assignable. + * + * @var array + */ protected $fillable = [ 'job_id', 'name', @@ -27,6 +32,11 @@ class JobManager extends Model 'status', ]; + /** + * The attributes that should be cast. + * + * @var array + */ protected $casts = [ 'failed' => 'bool', 'started_at' => 'datetime', From 6bb80798806c937f37e85bea44767b05873b34f9 Mon Sep 17 00:00:00 2001 From: KimSpeer <93331309+Kim-the-Diamond@users.noreply.github.com> Date: Thu, 7 Mar 2024 14:10:01 +0100 Subject: [PATCH 29/37] Update FailedJob.php --- packages/jobs/src/Models/FailedJob.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/jobs/src/Models/FailedJob.php b/packages/jobs/src/Models/FailedJob.php index adc8219df..edab86920 100644 --- a/packages/jobs/src/Models/FailedJob.php +++ b/packages/jobs/src/Models/FailedJob.php @@ -7,4 +7,16 @@ class FailedJob extends Model { public $timestamps = false; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'uuid', + 'connection', + 'queue', + 'failed_at' + ]; } From c826c10bd9abfc4bc3ad2eb64234a35025d44919 Mon Sep 17 00:00:00 2001 From: Kim-the-Diamond Date: Thu, 7 Mar 2024 13:10:31 +0000 Subject: [PATCH 30/37] Fix styling --- packages/jobs/src/Models/FailedJob.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jobs/src/Models/FailedJob.php b/packages/jobs/src/Models/FailedJob.php index edab86920..e0ee5d5d1 100644 --- a/packages/jobs/src/Models/FailedJob.php +++ b/packages/jobs/src/Models/FailedJob.php @@ -17,6 +17,6 @@ class FailedJob extends Model 'uuid', 'connection', 'queue', - 'failed_at' + 'failed_at', ]; } From cb52a2e2696c5a921f13e27b5076e5c7de24187b Mon Sep 17 00:00:00 2001 From: Alf Drollinger Date: Thu, 7 Mar 2024 14:43:34 +0100 Subject: [PATCH 31/37] Jobs V3 w-i-p --- packages/jobs/src/Models/FailedJob.php | 12 ------------ packages/jobs/src/Models/JobManager.php | 10 ---------- 2 files changed, 22 deletions(-) diff --git a/packages/jobs/src/Models/FailedJob.php b/packages/jobs/src/Models/FailedJob.php index e0ee5d5d1..adc8219df 100644 --- a/packages/jobs/src/Models/FailedJob.php +++ b/packages/jobs/src/Models/FailedJob.php @@ -7,16 +7,4 @@ class FailedJob extends Model { public $timestamps = false; - - /** - * The attributes that are mass assignable. - * - * @var array - */ - protected $fillable = [ - 'uuid', - 'connection', - 'queue', - 'failed_at', - ]; } diff --git a/packages/jobs/src/Models/JobManager.php b/packages/jobs/src/Models/JobManager.php index 1ed959e0f..03235f268 100644 --- a/packages/jobs/src/Models/JobManager.php +++ b/packages/jobs/src/Models/JobManager.php @@ -14,11 +14,6 @@ class JobManager extends Model protected $table = 'job_manager'; - /** - * The attributes that are mass assignable. - * - * @var array - */ protected $fillable = [ 'job_id', 'name', @@ -32,11 +27,6 @@ class JobManager extends Model 'status', ]; - /** - * The attributes that should be cast. - * - * @var array - */ protected $casts = [ 'failed' => 'bool', 'started_at' => 'datetime', From 32385ca61c265befa8b9a3eb09f435942db4f4b7 Mon Sep 17 00:00:00 2001 From: Alf Drollinger Date: Thu, 7 Mar 2024 15:12:07 +0100 Subject: [PATCH 32/37] Jobs V3 FailedJobs phpstan issue --- packages/jobs/src/Models/FailedJob.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/jobs/src/Models/FailedJob.php b/packages/jobs/src/Models/FailedJob.php index adc8219df..80c4f4d76 100644 --- a/packages/jobs/src/Models/FailedJob.php +++ b/packages/jobs/src/Models/FailedJob.php @@ -4,6 +4,13 @@ use Illuminate\Database\Eloquent\Model; +/** + * @property int $id + * @property string $uuid + * @property string $connection + * @property string $queue + * @property \Carbon\Carbon $failed_at + */ class FailedJob extends Model { public $timestamps = false; From afdaabf0ba058ebbcbdc020408aaad074baba211 Mon Sep 17 00:00:00 2001 From: Alf Drollinger Date: Thu, 7 Mar 2024 15:28:54 +0100 Subject: [PATCH 33/37] Jobs V3 phpstan fix --- packages/jobs/src/Models/JobManager.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/jobs/src/Models/JobManager.php b/packages/jobs/src/Models/JobManager.php index 03235f268..1ed959e0f 100644 --- a/packages/jobs/src/Models/JobManager.php +++ b/packages/jobs/src/Models/JobManager.php @@ -14,6 +14,11 @@ class JobManager extends Model protected $table = 'job_manager'; + /** + * The attributes that are mass assignable. + * + * @var array + */ protected $fillable = [ 'job_id', 'name', @@ -27,6 +32,11 @@ class JobManager extends Model 'status', ]; + /** + * The attributes that should be cast. + * + * @var array + */ protected $casts = [ 'failed' => 'bool', 'started_at' => 'datetime', From f547f9e4f8c5677f1af8deb9a6e706615b8a488b Mon Sep 17 00:00:00 2001 From: Alf Drollinger Date: Fri, 8 Mar 2024 07:15:55 +0100 Subject: [PATCH 34/37] Debug Jobs --- app/Providers/Filament/AdminPanelProvider.php | 3 ++ ..._03_07_145829_create_failed_jobs_table.php | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 database/migrations/2024_03_07_145829_create_failed_jobs_table.php diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 6ddff74fa..e8343c693 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -89,6 +89,9 @@ public function panel(Panel $panel): Panel \Moox\Audit\AuditPlugin::make(), + + \Moox\Jobs\JobsWaitingPlugin::make(), + ]); } } diff --git a/database/migrations/2024_03_07_145829_create_failed_jobs_table.php b/database/migrations/2024_03_07_145829_create_failed_jobs_table.php new file mode 100644 index 000000000..249da8171 --- /dev/null +++ b/database/migrations/2024_03_07_145829_create_failed_jobs_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('failed_jobs'); + } +}; From 1190a09f13d04e843f3fce362c5fe28e53073a7b Mon Sep 17 00:00:00 2001 From: adrolli Date: Fri, 8 Mar 2024 06:16:19 +0000 Subject: [PATCH 35/37] Fix styling --- app/Providers/Filament/AdminPanelProvider.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index e8343c693..41da82046 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -89,7 +89,6 @@ public function panel(Panel $panel): Panel \Moox\Audit\AuditPlugin::make(), - \Moox\Jobs\JobsWaitingPlugin::make(), ]); From 6270760ebdaf2f412488e0b3e2c371fdee722fa9 Mon Sep 17 00:00:00 2001 From: Alf Drollinger Date: Fri, 8 Mar 2024 08:26:20 +0100 Subject: [PATCH 36/37] Jobs V3 fix db --- composer.lock | 92 +++++++++---------- ..._07_125512_01_create_job_manager_table.php | 4 +- ...2_04_add_foreigns_to_job_manager_table.php | 5 +- .../01_create_job_manager_table.php.stub | 4 +- ...add_foreigns_to_job_manager_table.php.stub | 1 + public/css/filament/filament/app.css | 2 +- 6 files changed, 55 insertions(+), 53 deletions(-) diff --git a/composer.lock b/composer.lock index 408f0163d..10bc6c204 100644 --- a/composer.lock +++ b/composer.lock @@ -1357,16 +1357,16 @@ }, { "name": "filament/actions", - "version": "v3.2.44", + "version": "v3.2.45", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", - "reference": "e64667172371b0993c28032eeb34dd6fc63cc603" + "reference": "3a859410aaf76fb5bf1c549da9cca2ac652f26f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/e64667172371b0993c28032eeb34dd6fc63cc603", - "reference": "e64667172371b0993c28032eeb34dd6fc63cc603", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/3a859410aaf76fb5bf1c549da9cca2ac652f26f5", + "reference": "3a859410aaf76fb5bf1c549da9cca2ac652f26f5", "shasum": "" }, "require": { @@ -1406,20 +1406,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-03-05T14:33:19+00:00" + "time": "2024-03-07T13:17:38+00:00" }, { "name": "filament/filament", - "version": "v3.2.44", + "version": "v3.2.45", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "02313102899d3964cad22b6d96cbe731a6a5b999" + "reference": "8fd6884b47810d82e26300caf13cd7e28957d44f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/02313102899d3964cad22b6d96cbe731a6a5b999", - "reference": "02313102899d3964cad22b6d96cbe731a6a5b999", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/8fd6884b47810d82e26300caf13cd7e28957d44f", + "reference": "8fd6884b47810d82e26300caf13cd7e28957d44f", "shasum": "" }, "require": { @@ -1471,20 +1471,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-03-05T14:33:38+00:00" + "time": "2024-03-07T13:17:55+00:00" }, { "name": "filament/forms", - "version": "v3.2.44", + "version": "v3.2.45", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "de893403d9fd18c5b34dbec1579e387721477e3c" + "reference": "c379e41ecfdd66fc2b50fa7db591ab118c4f6de7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/de893403d9fd18c5b34dbec1579e387721477e3c", - "reference": "de893403d9fd18c5b34dbec1579e387721477e3c", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/c379e41ecfdd66fc2b50fa7db591ab118c4f6de7", + "reference": "c379e41ecfdd66fc2b50fa7db591ab118c4f6de7", "shasum": "" }, "require": { @@ -1527,20 +1527,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-03-05T14:33:15+00:00" + "time": "2024-03-07T13:17:40+00:00" }, { "name": "filament/infolists", - "version": "v3.2.44", + "version": "v3.2.45", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", - "reference": "9d13f101531ef920961967f1e4501540a22e1659" + "reference": "cca6545710362cdd42e349defb7d7bb4b21a7de3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/infolists/zipball/9d13f101531ef920961967f1e4501540a22e1659", - "reference": "9d13f101531ef920961967f1e4501540a22e1659", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/cca6545710362cdd42e349defb7d7bb4b21a7de3", + "reference": "cca6545710362cdd42e349defb7d7bb4b21a7de3", "shasum": "" }, "require": { @@ -1578,11 +1578,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-03-04T12:09:37+00:00" + "time": "2024-03-07T13:17:47+00:00" }, { "name": "filament/notifications", - "version": "v3.2.44", + "version": "v3.2.45", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", @@ -1634,16 +1634,16 @@ }, { "name": "filament/support", - "version": "v3.2.44", + "version": "v3.2.45", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", - "reference": "1f5ba74e8755f5a11c0bf53907d8d9ed1f8d868d" + "reference": "f60a06fc11ce0520bf8296c350fa6e3ba2556632" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/1f5ba74e8755f5a11c0bf53907d8d9ed1f8d868d", - "reference": "1f5ba74e8755f5a11c0bf53907d8d9ed1f8d868d", + "url": "https://api.github.com/repos/filamentphp/support/zipball/f60a06fc11ce0520bf8296c350fa6e3ba2556632", + "reference": "f60a06fc11ce0520bf8296c350fa6e3ba2556632", "shasum": "" }, "require": { @@ -1687,20 +1687,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-03-05T14:33:52+00:00" + "time": "2024-03-07T13:18:04+00:00" }, { "name": "filament/tables", - "version": "v3.2.44", + "version": "v3.2.45", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", - "reference": "cccab09e017f618b7803e93ea3a2e91c999fdf3f" + "reference": "2c2587a71b0e3fe3c5c0fae9dc9f70e74005b1c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/cccab09e017f618b7803e93ea3a2e91c999fdf3f", - "reference": "cccab09e017f618b7803e93ea3a2e91c999fdf3f", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/2c2587a71b0e3fe3c5c0fae9dc9f70e74005b1c9", + "reference": "2c2587a71b0e3fe3c5c0fae9dc9f70e74005b1c9", "shasum": "" }, "require": { @@ -1740,11 +1740,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-03-05T14:33:51+00:00" + "time": "2024-03-07T13:18:08+00:00" }, { "name": "filament/widgets", - "version": "v3.2.44", + "version": "v3.2.45", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", @@ -3654,7 +3654,7 @@ "dist": { "type": "path", "url": "packages/audit", - "reference": "4fb265fbd9014d97391fce53bf2d8ccd4251cde9" + "reference": "e133b42a547d1eb9988a451b92954afb1d99dbe3" }, "require": { "moox/core": "*" @@ -3700,7 +3700,7 @@ "dist": { "type": "path", "url": "packages/builder", - "reference": "01b30ed16881edff98cc438c4152ba8711bc6771" + "reference": "9caacf039b39da25f82c15d94127b90a587c237d" }, "require": { "moox/core": "*" @@ -3746,7 +3746,7 @@ "dist": { "type": "path", "url": "packages/core", - "reference": "70a8650e517729f761f66995bb2c8621fa7cea9e" + "reference": "83b08ac7b241fe0c755dc28a87f0f830d3383d6f" }, "require": { "filament/filament": "^3.2", @@ -3799,7 +3799,7 @@ "dist": { "type": "path", "url": "packages/jobs", - "reference": "b81a8859b79567676e69e3cb1618987757b020b5" + "reference": "10ee64375bc69c0245ee63998d210f616e082d36" }, "require": { "moox/core": "*" @@ -3853,7 +3853,7 @@ "dist": { "type": "path", "url": "packages/page", - "reference": "9317e8b6b51c148df0513062399e439768efbed8" + "reference": "017d564053cf4b9171a6b8c4ca2803649f3f6494" }, "require": { "moox/core": "*" @@ -3899,7 +3899,7 @@ "dist": { "type": "path", "url": "packages/press", - "reference": "ab0f6a94d4865b0d4e95e4680d813acba8801e7b" + "reference": "1ec8020e2617d66bf74001d539ea30e57d858443" }, "require": { "moox/core": "*" @@ -3945,7 +3945,7 @@ "dist": { "type": "path", "url": "packages/sync", - "reference": "dc50c8759948ba794e1978b8f199e4e0bc08efaf" + "reference": "f68d4a91382621507d438704c5d1f4373a6edfa9" }, "require": { "moox/core": "*" @@ -3991,7 +3991,7 @@ "dist": { "type": "path", "url": "packages/user", - "reference": "c5aa0b285e083f0e69040a04554e7aa0b98cb9af" + "reference": "a6982686c9bec5bab73bdfe96bcf8087dee87d7f" }, "require": { "bezhansalleh/filament-shield": "^3.0", @@ -10833,16 +10833,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.59", + "version": "1.10.60", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "e607609388d3a6d418a50a49f7940e8086798281" + "reference": "95dcea7d6c628a3f2f56d091d8a0219485a86bbe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e607609388d3a6d418a50a49f7940e8086798281", - "reference": "e607609388d3a6d418a50a49f7940e8086798281", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/95dcea7d6c628a3f2f56d091d8a0219485a86bbe", + "reference": "95dcea7d6c628a3f2f56d091d8a0219485a86bbe", "shasum": "" }, "require": { @@ -10891,7 +10891,7 @@ "type": "tidelift" } ], - "time": "2024-02-20T13:59:13+00:00" + "time": "2024-03-07T13:30:19+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -13545,5 +13545,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/database/migrations/2024_03_07_125512_01_create_job_manager_table.php b/database/migrations/2024_03_07_125512_01_create_job_manager_table.php index a8603e1e4..d46a83164 100644 --- a/database/migrations/2024_03_07_125512_01_create_job_manager_table.php +++ b/database/migrations/2024_03_07_125512_01_create_job_manager_table.php @@ -17,10 +17,10 @@ public function up(): void $table->string('name')->nullable(); $table->string('queue')->nullable(); $table->string('connection')->nullable(); - $table->timestamp('available_at'); + $table->timestamp('available_at')->nullable(); $table->timestamp('started_at')->nullable(); $table->timestamp('finished_at')->nullable(); - $table->boolean('failed'); + $table->boolean('failed')->nullable(); $table->integer('attempt'); $table->integer('progress')->nullable(); $table->text('exception_message')->nullable(); diff --git a/database/migrations/2024_03_07_125512_04_add_foreigns_to_job_manager_table.php b/database/migrations/2024_03_07_125512_04_add_foreigns_to_job_manager_table.php index 57f20ea22..6844cab04 100644 --- a/database/migrations/2024_03_07_125512_04_add_foreigns_to_job_manager_table.php +++ b/database/migrations/2024_03_07_125512_04_add_foreigns_to_job_manager_table.php @@ -12,8 +12,9 @@ public function up(): void { Schema::table('job_manager', function (Blueprint $table) { - $table - ->foreignId('job_queue_worker_id') + $foreignColumn = $table->foreignId('job_queue_worker_id')->nullable(); + + $foreignColumn ->references('id') ->on('job_queue_workers') ->onUpdate('CASCADE') diff --git a/packages/jobs/database/migrations/01_create_job_manager_table.php.stub b/packages/jobs/database/migrations/01_create_job_manager_table.php.stub index ac959930b..f2010d28c 100644 --- a/packages/jobs/database/migrations/01_create_job_manager_table.php.stub +++ b/packages/jobs/database/migrations/01_create_job_manager_table.php.stub @@ -16,10 +16,10 @@ return new class extends Migration { $table->string('name')->nullable(); $table->string('queue')->nullable(); $table->string('connection')->nullable(); - $table->timestamp('available_at'); + $table->timestamp('available_at')->nullable(); $table->timestamp('started_at')->nullable(); $table->timestamp('finished_at')->nullable(); - $table->boolean('failed'); + $table->boolean('failed')->nullable(); $table->integer('attempt'); $table->integer('progress')->nullable(); $table->text('exception_message')->nullable(); diff --git a/packages/jobs/database/migrations/04_add_foreigns_to_job_manager_table.php.stub b/packages/jobs/database/migrations/04_add_foreigns_to_job_manager_table.php.stub index 6a67869a3..7b2cb8869 100644 --- a/packages/jobs/database/migrations/04_add_foreigns_to_job_manager_table.php.stub +++ b/packages/jobs/database/migrations/04_add_foreigns_to_job_manager_table.php.stub @@ -11,6 +11,7 @@ return new class extends Migration { public function up(): void { Schema::table('job_manager', function (Blueprint $table) { + $table->bigInteger('job_queue_worker_id')->nullable(); $table ->foreignId('job_queue_worker_id') ->references('id') diff --git a/public/css/filament/filament/app.css b/public/css/filament/filament/app.css index a5db0fb42..843cf7a37 100644 --- a/public/css/filament/filament/app.css +++ b/public/css/filament/filament/app.css @@ -1 +1 @@ -/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{border-color:rgba(var(--gray-200),1);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-400),1);opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-400),1);opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{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='rgba(var(--gray-500), var(--tw-stroke-opacity, 1))' 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;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]: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")}@media (forced-colors:active) {[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]: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")}@media (forced-colors:active) {[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}@media (forced-colors:active) {[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root.dark{color-scheme:dark}[data-field-wrapper]{scroll-margin-top:8rem}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-left-color:var(--tw-prose-quote-borders);border-left-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-left:1em;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-bottom:2em;margin-top:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);color:var(--tw-prose-kbd);font-family:inherit;font-size:.875em;font-weight:500;padding:.1875em .375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-bottom:.5714286em;padding-left:.5714286em;padding-right:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-left:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8571429em;padding:.1428571em .3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding:.6666667em 1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-left:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-left:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(.prose-sm>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-left:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:.6666667em;padding-left:1em;padding-right:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.6666667em 1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-base{font-size:1rem;line-height:1.75}.prose-base :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose-base :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6em;margin-top:1.6em;padding-left:1em}.prose-base :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.25em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose-base :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.5em;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose-base :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose-base :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose-base :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.875em;padding:.1875em .375em}.prose-base :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-base :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;padding:.8571429em 1.1428571em}.prose-base :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose-base :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose-base :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose-base :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose-base :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose-base :where(.prose-base>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(.prose-base>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(.prose-base>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-left:1.625em}.prose-base :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3em;margin-top:3em}.prose-base :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857}.prose-base :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:.5714286em;padding-left:.5714286em;padding-right:.5714286em}.prose-base :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-base :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-base :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}.prose-base :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-base :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-base :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose-base :where(.prose-base>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(.prose-base>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6666667em;margin-top:1.6666667em;padding-left:1em}.prose-lg :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8888889em;padding:.2222222em .4444444em}.prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-lg :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8666667em}.prose-lg :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding:1em 1.5em}.prose-lg :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.5555556em}.prose-lg :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.5555556em}.prose-lg :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4444444em}.prose-lg :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4444444em}.prose-lg :where(.prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(.prose-lg>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(.prose-lg>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;padding-left:1.5555556em}.prose-lg :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.prose-lg :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:.75em;padding-left:.75em;padding-right:.75em}.prose-lg :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-lg :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.75em}.prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-lg :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg :where(.prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(.prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-4{inset:1rem}.inset-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.inset-y-0{bottom:0;top:0}.-bottom-1\/2{bottom:-50%}.-top-1{top:-.25rem}.-top-1\/2{top:-50%}.-top-2{top:-.5rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-1\/2{bottom:50%}.end-0{inset-inline-end:0}.end-4{inset-inline-end:1rem}.end-6{inset-inline-end:1.5rem}.left-3{left:.75rem}.start-0{inset-inline-start:0}.start-full{inset-inline-start:100%}.top-0{top:0}.top-1\/2{top:50%}.top-4{top:1rem}.top-6{top:1.5rem}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.col-\[--col-span-default\]{grid-column:var(--col-span-default)}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:var(--col-start-default)}.row-start-2{grid-row-start:2}.-m-0{margin:0}.-m-0\.5{margin:-.125rem}.-m-1{margin:-.25rem}.-m-1\.5{margin:-.375rem}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.-m-3{margin:-.75rem}.-m-3\.5{margin:-.875rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.my-16{margin-bottom:4rem;margin-top:4rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-auto{margin-bottom:auto;margin-top:auto}.\!mt-0{margin-top:0!important}.-mb-4{margin-bottom:-1rem}.-mb-6{margin-bottom:-1.5rem}.-me-2{margin-inline-end:-.5rem}.-ms-0{margin-inline-start:0}.-ms-0\.5{margin-inline-start:-.125rem}.-ms-1{margin-inline-start:-.25rem}.-ms-2{margin-inline-start:-.5rem}.-mt-3{margin-top:-.75rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.-mt-7{margin-top:-1.75rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.me-1{margin-inline-end:.25rem}.me-4{margin-inline-end:1rem}.me-6{margin-inline-end:1.5rem}.ml-auto{margin-left:auto}.ms-1{margin-inline-start:.25rem}.ms-auto{margin-inline-start:auto}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.line-clamp-\[--line-clamp\]{-webkit-box-orient:vertical;-webkit-line-clamp:var(--line-clamp);display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.h-0{height:0}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[100dvh\],.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:24rem}.min-h-\[theme\(spacing\.48\)\]{min-height:12rem}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.min-w-\[theme\(spacing\.8\)\]{min-width:2rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[14rem\]{max-width:14rem}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-min{max-width:-moz-min-content;max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:1536px}.max-w-screen-lg{max-width:1024px}.max-w-screen-md{max-width:768px}.max-w-screen-sm{max-width:640px}.max-w-screen-xl{max-width:1280px}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-12,.-translate-x-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-12{--tw-translate-x:-3rem}.-translate-x-5{--tw-translate-x:-1.25rem}.-translate-x-5,.-translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x:-100%}.-translate-y-12{--tw-translate-y:-3rem}.-translate-y-12,.translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x:0px}.translate-x-12{--tw-translate-x:3rem}.translate-x-12,.translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-full{--tw-translate-x:100%}.translate-x-full,.translate-y-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-12{--tw-translate-y:3rem}.-rotate-180{--tw-rotate:-180deg}.-rotate-180,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.scroll-mt-9{scroll-margin-top:2.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{-moz-columns:var(--cols-default);columns:var(--cols-default)}.break-inside-avoid{-moz-column-break-inside:avoid;break-inside:avoid}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:var(--cols-default)}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\2c minmax\(theme\(spacing\.7\)\2c 1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-6{row-gap:1.5rem}.gap-y-7{row-gap:1.75rem}.gap-y-8{row-gap:2rem}.gap-y-px{row-gap:1px}.-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.5rem*var(--tw-space-x-reverse))}.-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.75rem*var(--tw-space-x-reverse))}.-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1rem*var(--tw-space-x-reverse))}.-space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.25rem*var(--tw-space-x-reverse))}.-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.5rem*var(--tw-space-x-reverse))}.-space-x-7>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.75rem*var(--tw-space-x-reverse))}.-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-2rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-100),var(--tw-divide-opacity))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-200),var(--tw-divide-opacity))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x-\[0\.5px\]{border-left-width:.5px;border-right-width:.5px}.border-y{border-bottom-width:1px;border-top-width:1px}.\!border-t-0{border-top-width:0!important}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-e{border-inline-end-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.\!border-none{border-style:none!important}.border-none{border-style:none}.border-gray-100{--tw-border-opacity:1;border-color:rgba(var(--gray-100),var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(var(--gray-300),var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.border-primary-500{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.border-primary-600{--tw-border-opacity:1;border-color:rgba(var(--primary-600),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-t-gray-200{--tw-border-opacity:1;border-top-color:rgba(var(--gray-200),var(--tw-border-opacity))}.\!bg-gray-50{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))!important}.\!bg-gray-700{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-custom-100{--tw-bg-opacity:1;background-color:rgba(var(--c-100),var(--tw-bg-opacity))}.bg-custom-50{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(var(--gray-200),var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.bg-gray-950\/50{background-color:rgba(var(--gray-950),.5)}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/0{background-color:hsla(0,0%,100%,0)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.bg-cover{background-size:cover}.bg-center{background-position:50%}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-bottom:0;padding-top:0}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pe-0{padding-inline-end:0}.pe-1{padding-inline-end:.25rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-6{padding-inline-end:1.5rem}.pe-8{padding-inline-end:2rem}.ps-0{padding-inline-start:0}.ps-1{padding-inline-start:.25rem}.ps-2{padding-inline-start:.5rem}.ps-3{padding-inline-start:.75rem}.ps-4{padding-inline-start:1rem}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.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"}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-thin{font-weight:100}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-loose{line-height:2}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.text-custom-400{--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.text-custom-50{--tw-text-opacity:1;color:rgba(var(--c-50),var(--tw-text-opacity))}.text-custom-500{--tw-text-opacity:1;color:rgba(var(--c-500),var(--tw-text-opacity))}.text-custom-600{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.text-custom-700\/50{color:rgba(var(--c-700),.5)}.text-danger-600{--tw-text-opacity:1;color:rgba(var(--danger-600),var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgba(var(--gray-100),var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.text-gray-700\/50{color:rgba(var(--gray-700),.5)}.text-gray-950{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-0{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-custom-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.ring-custom-600\/10{--tw-ring-color:rgba(var(--c-600),0.1)}.ring-custom-600\/20{--tw-ring-color:rgba(var(--c-600),0.2)}.ring-danger-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-300),var(--tw-ring-opacity))}.ring-gray-600\/10{--tw-ring-color:rgba(var(--gray-600),0.1)}.ring-gray-900\/10{--tw-ring-color:rgba(var(--gray-900),0.1)}.ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}.ring-gray-950\/5{--tw-ring-color:rgba(var(--gray-950),0.05)}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-white\/10{--tw-ring-color:hsla(0,0%,100%,.1)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-100{transition-delay:.1s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[transform\:translateZ\(0\)\]{transform:translateZ(0)}:is(.dark .dark\:prose-invert){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{bottom:0;content:var(--tw-content);top:0}.before\:start-0:before{content:var(--tw-content);inset-inline-start:0}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0:before{content:var(--tw-content);width:0}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:bg-primary-600:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.first\:border-s-0:first-child{border-inline-start-width:0}.first\:border-t-0:first-child{border-top-width:0}.last\:border-e-0:last-child{border-inline-end-width:0}.first-of-type\:ps-1:first-of-type{padding-inline-start:.25rem}.last-of-type\:pe-1:last-of-type{padding-inline-end:.25rem}.checked\:ring-0:checked{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:bg-gray-50:focus-within{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:bg-custom-400\/10:hover{background-color:rgba(var(--c-400),.1)}.hover\:bg-custom-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.hover\:bg-gray-400\/10:hover{background-color:rgba(var(--gray-400),.1)}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:text-custom-600:hover{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.hover\:text-custom-700\/75:hover{color:rgba(var(--c-700),.75)}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.hover\:text-gray-700\/75:hover{color:rgba(var(--gray-700),.75)}.hover\:opacity-100:hover{opacity:1}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-danger-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.focus\:ring-primary-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px}.checked\:focus\:ring-danger-500\/50:focus:checked{--tw-ring-color:rgba(var(--danger-500),0.5)}.checked\:focus\:ring-primary-500\/50:focus:checked{--tw-ring-color:rgba(var(--primary-500),0.5)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-primary-500:focus-visible{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.focus-visible\:bg-custom-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.focus-visible\:bg-gray-100:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.focus-visible\:bg-gray-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.focus-visible\:text-custom-700\/75:focus-visible{color:rgba(var(--c-700),.75)}.focus-visible\:text-gray-500:focus-visible{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.focus-visible\:text-gray-700\/75:focus-visible{color:rgba(var(--gray-700),.75)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:ring-custom-500\/50:focus-visible{--tw-ring-color:rgba(var(--c-500),0.5)}.focus-visible\:ring-custom-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:rgba(var(--gray-400),0.4)}.focus-visible\:ring-primary-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.focus-visible\:ring-primary-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.disabled\:text-gray-50:disabled{--tw-text-opacity:1;color:rgba(var(--gray-50),var(--tw-text-opacity))}.disabled\:text-gray-500:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:rgba(var(--gray-500),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:checked\:bg-current:checked:disabled{background-color:currentColor}.disabled\:checked\:text-gray-400:checked:disabled{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group\/item:first-child .group-first\/item\:rounded-s-lg{border-end-start-radius:.5rem;border-start-start-radius:.5rem}.group\/item:last-child .group-last\/item\:rounded-e-lg{border-end-end-radius:.5rem;border-start-end-radius:.5rem}.group:hover .group-hover\:text-gray-500,.group\/button:hover .group-hover\/button\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:hover .group-hover\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:hover .group-hover\/item\:underline,.group\/link:hover .group-hover\/link\:underline{text-decoration-line:underline}.group:focus-visible .group-focus-visible\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:focus-visible .group-focus-visible\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:focus-visible .group-focus-visible\/item\:underline{text-decoration-line:underline}.group\/link:focus-visible .group-focus-visible\/link\:underline{text-decoration-line:underline}:is(.dark .dark\:flex){display:flex}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:divide-white\/10)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:divide-white\/5)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:border-gray-600){--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgba(var(--gray-700),var(--tw-border-opacity))}:is(.dark .dark\:border-primary-500){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}:is(.dark .dark\:border-white\/10){border-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:border-white\/5){border-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:border-t-white\/10){border-top-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:\!bg-gray-700){--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-custom-400\/10){background-color:rgba(var(--c-400),.1)}:is(.dark .dark\:bg-custom-500){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}:is(.dark .dark\:bg-custom-500\/20){background-color:rgba(var(--c-500),.2)}:is(.dark .dark\:bg-gray-400\/10){background-color:rgba(var(--gray-400),.1)}:is(.dark .dark\:bg-gray-500){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-500\/20){background-color:rgba(var(--gray-500),.2)}:is(.dark .dark\:bg-gray-600){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-900\/30){background-color:rgba(var(--gray-900),.3)}:is(.dark .dark\:bg-gray-950){--tw-bg-opacity:1;background-color:rgba(var(--gray-950),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-950\/75){background-color:rgba(var(--gray-950),.75)}:is(.dark .dark\:bg-primary-400){--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary-500){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}:is(.dark .dark\:bg-transparent){background-color:transparent}:is(.dark .dark\:bg-white\/10){background-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:bg-white\/5){background-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:fill-current){fill:currentColor}:is(.dark .dark\:text-custom-300\/50){color:rgba(var(--c-300),.5)}:is(.dark .dark\:text-custom-400){--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}:is(.dark .dark\:text-custom-400\/10){color:rgba(var(--c-400),.1)}:is(.dark .dark\:text-danger-400){--tw-text-opacity:1;color:rgba(var(--danger-400),var(--tw-text-opacity))}:is(.dark .dark\:text-danger-500){--tw-text-opacity:1;color:rgba(var(--danger-500),var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300\/50){color:rgba(var(--gray-300),.5)}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}:is(.dark .dark\:text-gray-700){--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}:is(.dark .dark\:text-gray-800){--tw-text-opacity:1;color:rgba(var(--gray-800),var(--tw-text-opacity))}:is(.dark .dark\:text-primary-400){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}:is(.dark .dark\:text-primary-500){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:text-white\/5){color:hsla(0,0%,100%,.05)}:is(.dark .dark\:ring-custom-400\/30){--tw-ring-color:rgba(var(--c-400),0.3)}:is(.dark .dark\:ring-custom-500){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}:is(.dark .dark\:ring-danger-500){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}:is(.dark .dark\:ring-gray-400\/20){--tw-ring-color:rgba(var(--gray-400),0.2)}:is(.dark .dark\:ring-gray-50\/10){--tw-ring-color:rgba(var(--gray-50),0.1)}:is(.dark .dark\:ring-gray-700){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-700),var(--tw-ring-opacity))}:is(.dark .dark\:ring-gray-900){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-900),var(--tw-ring-opacity))}:is(.dark .dark\:ring-white\/10){--tw-ring-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:ring-white\/20){--tw-ring-color:hsla(0,0%,100%,.2)}:is(.dark .dark\:placeholder\:text-gray-500)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-gray-500)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}:is(.dark .dark\:before\:bg-primary-500):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}:is(.dark .dark\:checked\:bg-danger-500:checked){--tw-bg-opacity:1;background-color:rgba(var(--danger-500),var(--tw-bg-opacity))}:is(.dark .dark\:checked\:bg-primary-500:checked){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}:is(.dark .dark\:focus-within\:bg-white\/5:focus-within){background-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:hover\:bg-custom-400:hover){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-custom-400\/10:hover){background-color:rgba(var(--c-400),.1)}:is(.dark .dark\:hover\:bg-white\/10:hover){background-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:hover\:bg-white\/5:hover){background-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:hover\:text-custom-300:hover){--tw-text-opacity:1;color:rgba(var(--c-300),var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-custom-300\/75:hover){color:rgba(var(--c-300),.75)}:is(.dark .dark\:hover\:text-gray-200:hover){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-gray-300\/75:hover){color:rgba(var(--gray-300),.75)}:is(.dark .dark\:hover\:text-gray-400:hover){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .dark\:hover\:ring-white\/20:hover){--tw-ring-color:hsla(0,0%,100%,.2)}:is(.dark .dark\:focus\:ring-danger-500:focus){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-primary-500:focus){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}:is(.dark .dark\:checked\:focus\:ring-danger-400\/50:focus:checked){--tw-ring-color:rgba(var(--danger-400),0.5)}:is(.dark .dark\:checked\:focus\:ring-primary-400\/50:focus:checked){--tw-ring-color:rgba(var(--primary-400),0.5)}:is(.dark .dark\:focus-visible\:border-primary-500:focus-visible){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}:is(.dark .dark\:focus-visible\:bg-custom-400\/10:focus-visible){background-color:rgba(var(--c-400),.1)}:is(.dark .dark\:focus-visible\:bg-white\/5:focus-visible){background-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:focus-visible\:text-custom-300\/75:focus-visible){color:rgba(var(--c-300),.75)}:is(.dark .dark\:focus-visible\:text-gray-300\/75:focus-visible){color:rgba(var(--gray-300),.75)}:is(.dark .dark\:focus-visible\:text-gray-400:focus-visible){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .dark\:focus-visible\:ring-custom-400\/50:focus-visible){--tw-ring-color:rgba(var(--c-400),0.5)}:is(.dark .dark\:focus-visible\:ring-custom-500:focus-visible){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}:is(.dark .dark\:focus-visible\:ring-primary-500:focus-visible){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}:is(.dark .dark\:disabled\:bg-transparent:disabled){background-color:transparent}:is(.dark .dark\:disabled\:text-gray-400:disabled){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .dark\:disabled\:ring-white\/10:disabled){--tw-ring-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled){-webkit-text-fill-color:rgba(var(--gray-400),1)}:is(.dark .dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled)::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}:is(.dark .dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled)::placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}:is(.dark .dark\:disabled\:checked\:bg-gray-600:checked:disabled){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}:is(.dark .group\/button:hover .dark\:group-hover\/button\:text-gray-400){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .group:hover .dark\:group-hover\:text-gray-200){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}:is(.dark .group:hover .dark\:group-hover\:text-gray-400){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .group:focus-visible .dark\:group-focus-visible\:text-gray-200){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}:is(.dark .group:focus-visible .dark\:group-focus-visible\:text-gray-400){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.sm\:relative{position:relative}.sm\:inset-x-auto{left:auto;right:auto}.sm\:end-0{inset-inline-end:0}.sm\:col-\[--col-span-sm\]{grid-column:var(--col-span-sm)}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:var(--col-start-sm)}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.sm\:ms-auto{margin-inline-start:auto}.sm\:mt-7{margin-top:1.75rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:hidden{display:none}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:w-screen{width:100vw}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-4xl{max-width:56rem}.sm\:max-w-5xl{max-width:64rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-7xl{max-width:80rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:columns-\[--cols-sm\]{-moz-columns:var(--cols-sm);columns:var(--cols-sm)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[--cols-sm\]{grid-template-columns:var(--cols-sm)}.sm\:grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-1{gap:.25rem}.sm\:gap-3{gap:.75rem}.sm\:gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-10{padding:2.5rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1{padding-bottom:.25rem;padding-top:.25rem}.sm\:py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.sm\:pe-3{padding-inline-end:.75rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:ps-3{padding-inline-start:.75rem}.sm\:ps-6{padding-inline-start:1.5rem}.sm\:pt-1{padding-top:.25rem}.sm\:pt-1\.5{padding-top:.375rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:leading-6{line-height:1.5rem}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:.75rem}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:1.5rem}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:.75rem}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:1.5rem}}@media (min-width:768px){.md\:bottom-4{bottom:1rem}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:var(--col-span-md)}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:var(--col-start-md)}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:inline-grid{display:inline-grid}.md\:hidden{display:none}.md\:columns-\[--cols-md\]{-moz-columns:var(--cols-md);columns:var(--cols-md)}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:var(--cols-md)}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}.md\:gap-1{gap:.25rem}.md\:gap-3{gap:.75rem}.md\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(0px*var(--tw-divide-y-reverse));border-top-width:calc(0px*(1 - var(--tw-divide-y-reverse)))}.md\:rounded-xl{border-radius:.75rem}.md\:p-20{padding:5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:pe-3{padding-inline-end:.75rem}.md\:pe-6{padding-inline-end:1.5rem}.md\:ps-3{padding-inline-start:.75rem}}@media (min-width:1024px){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:var(--col-span-lg)}.lg\:col-start-\[--col-start-lg\]{grid-column-start:var(--col-start-lg)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:table-cell{display:table-cell}.lg\:inline-grid{display:inline-grid}.lg\:hidden{display:none}.lg\:h-full{height:100%}.lg\:max-w-xs{max-width:20rem}.lg\:-translate-x-full{--tw-translate-x:-100%}.lg\:-translate-x-full,.lg\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:translate-x-0{--tw-translate-x:0px}.lg\:columns-\[--cols-lg\]{-moz-columns:var(--cols-lg);columns:var(--cols-lg)}.lg\:grid-cols-\[--cols-lg\]{grid-template-columns:var(--cols-lg)}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:gap-1{gap:.25rem}.lg\:gap-3{gap:.75rem}.lg\:bg-transparent{background-color:transparent}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pe-8{padding-inline-end:2rem}.lg\:shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.lg\:shadow-none,.lg\:shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lg\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lg\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}:is(.dark .dark\:lg\:bg-transparent){background-color:transparent}}@media (min-width:1280px){.xl\:col-\[--col-span-xl\]{grid-column:var(--col-span-xl)}.xl\:col-start-\[--col-start-xl\]{grid-column-start:var(--col-start-xl)}.xl\:block{display:block}.xl\:table-cell{display:table-cell}.xl\:inline-grid{display:inline-grid}.xl\:hidden{display:none}.xl\:columns-\[--cols-xl\]{-moz-columns:var(--cols-xl);columns:var(--cols-xl)}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:var(--cols-xl)}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:gap-1{gap:.25rem}.xl\:gap-3{gap:.75rem}}@media (min-width:1536px){.\32xl\:col-\[--col-span-2xl\]{grid-column:var(--col-span-2xl)}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:var(--col-start-2xl)}.\32xl\:block{display:block}.\32xl\:table-cell{display:table-cell}.\32xl\:inline-grid{display:inline-grid}.\32xl\:hidden{display:none}.\32xl\:columns-\[--cols-2xl\]{-moz-columns:var(--cols-2xl);columns:var(--cols-2xl)}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:var(--cols-2xl)}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-start{align-items:flex-start}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-center{align-items:center}.\32xl\:gap-1{gap:.25rem}.\32xl\:gap-3{gap:.75rem}}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-5:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/2:where([dir=rtl],[dir=rtl] *){--tw-translate-x:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:flex-row-reverse:where([dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.rtl\:divide-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}@media (min-width:1024px){.rtl\:lg\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:lg\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}.\[\&\.trix-active\]\:bg-gray-50.trix-active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.\[\&\.trix-active\]\:text-primary-600.trix-active{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}:is(.dark .dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active){background-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:\[\&\.trix-active\]\:text-primary-400.trix-active){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}:is(.dark .dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-500:focus-within:not(:has(.fi-ac-action:focus))){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}:is(.dark .dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-500:focus-within:not(:has(.fi-ac-action:focus))){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of .fi-btn)){--tw-shadow:-1px 0 0 0 rgba(var(--gray-200),1);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of .fi-btn))){--tw-shadow:-1px 0 0 0 hsla(0,0%,100%,.2);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of .fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of .fi-btn){border-end-start-radius:.5rem;border-start-start-radius:.5rem}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of .fi-btn){border-end-end-radius:.5rem;border-start-end-radius:.5rem}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{bottom:0;content:var(--tw-content);top:0}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:0}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:.125rem}.\[\&\>\*\:first-child\]\:before\:bg-primary-600>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}:is(.dark .\[\&\>\*\:first-child\]\:dark\:before\:bg-primary-500)>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:0}.\[\&_\.fi-badge-delete-button\]\:hidden .fi-badge-delete-button{display:none}.\[\&_\.filepond--root\]\:font-sans .filepond--root{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.\[\&_optgroup\]\:bg-white optgroup{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}:is(.dark .\[\&_optgroup\]\:dark\:bg-gray-900) optgroup{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.\[\&_option\]\:bg-white option{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}:is(.dark .\[\&_option\]\:dark\:bg-gray-900) option{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}@media(hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[\@media\(hover\:hover\)\]\:duration-75{transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:checked+.\[input\:checked\+\&\]\:hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}:is(.dark input:checked+.dark\:\[input\:checked\+\&\]\:bg-custom-500){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}:is(.dark input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-custom-400:hover){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}input:checked:focus-visible+.\[input\:checked\:focus-visible\+\&\]\:ring-custom-500\/50{--tw-ring-color:rgba(var(--c-500),0.5)}:is(.dark input:checked:focus-visible+.dark\:\[input\:checked\:focus-visible\+\&\]\:ring-custom-400\/50){--tw-ring-color:rgba(var(--c-400),0.5)}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}:is(.dark input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20){--tw-ring-color:hsla(0,0%,100%,.2)} \ No newline at end of file +/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{border-color:rgba(var(--gray-200),1);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-400),1);opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-400),1);opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{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='rgba(var(--gray-500), var(--tw-stroke-opacity, 1))' 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;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]: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")}@media (forced-colors:active) {[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]: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")}@media (forced-colors:active) {[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}@media (forced-colors:active) {[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root.dark{color-scheme:dark}[data-field-wrapper]{scroll-margin-top:8rem}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-left-color:var(--tw-prose-quote-borders);border-left-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-left:1em;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-bottom:2em;margin-top:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);color:var(--tw-prose-kbd);font-family:inherit;font-size:.875em;font-weight:500;padding:.1875em .375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-bottom:.5714286em;padding-left:.5714286em;padding-right:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-left:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8571429em;padding:.1428571em .3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding:.6666667em 1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-left:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-left:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(.prose-sm>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-left:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:.6666667em;padding-left:1em;padding-right:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.6666667em 1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-base{font-size:1rem;line-height:1.75}.prose-base :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose-base :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6em;margin-top:1.6em;padding-left:1em}.prose-base :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.25em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose-base :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.5em;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose-base :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose-base :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose-base :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.875em;padding:.1875em .375em}.prose-base :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-base :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;padding:.8571429em 1.1428571em}.prose-base :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose-base :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose-base :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose-base :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose-base :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose-base :where(.prose-base>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(.prose-base>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(.prose-base>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-left:1.625em}.prose-base :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3em;margin-top:3em}.prose-base :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857}.prose-base :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:.5714286em;padding-left:.5714286em;padding-right:.5714286em}.prose-base :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-base :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-base :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}.prose-base :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-base :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-base :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose-base :where(.prose-base>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(.prose-base>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6666667em;margin-top:1.6666667em;padding-left:1em}.prose-lg :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8888889em;padding:.2222222em .4444444em}.prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-lg :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8666667em}.prose-lg :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding:1em 1.5em}.prose-lg :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.5555556em}.prose-lg :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.5555556em}.prose-lg :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4444444em}.prose-lg :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4444444em}.prose-lg :where(.prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(.prose-lg>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(.prose-lg>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;padding-left:1.5555556em}.prose-lg :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.prose-lg :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:.75em;padding-left:.75em;padding-right:.75em}.prose-lg :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-lg :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.75em}.prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-lg :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg :where(.prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(.prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-4{inset:1rem}.inset-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.inset-y-0{bottom:0;top:0}.-bottom-1\/2{bottom:-50%}.-top-1{top:-.25rem}.-top-1\/2{top:-50%}.-top-2{top:-.5rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-1\/2{bottom:50%}.end-0{inset-inline-end:0}.end-4{inset-inline-end:1rem}.end-6{inset-inline-end:1.5rem}.left-3{left:.75rem}.start-0{inset-inline-start:0}.start-full{inset-inline-start:100%}.top-0{top:0}.top-1\/2{top:50%}.top-4{top:1rem}.top-6{top:1.5rem}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.col-\[--col-span-default\]{grid-column:var(--col-span-default)}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:var(--col-start-default)}.row-start-2{grid-row-start:2}.-m-0{margin:0}.-m-0\.5{margin:-.125rem}.-m-1{margin:-.25rem}.-m-1\.5{margin:-.375rem}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.-m-3{margin:-.75rem}.-m-3\.5{margin:-.875rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.my-16{margin-bottom:4rem;margin-top:4rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-auto{margin-bottom:auto;margin-top:auto}.\!mt-0{margin-top:0!important}.-mb-4{margin-bottom:-1rem}.-mb-6{margin-bottom:-1.5rem}.-me-2{margin-inline-end:-.5rem}.-ms-0{margin-inline-start:0}.-ms-0\.5{margin-inline-start:-.125rem}.-ms-1{margin-inline-start:-.25rem}.-ms-2{margin-inline-start:-.5rem}.-mt-3{margin-top:-.75rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.-mt-7{margin-top:-1.75rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.me-1{margin-inline-end:.25rem}.me-4{margin-inline-end:1rem}.me-6{margin-inline-end:1.5rem}.ml-auto{margin-left:auto}.ms-1{margin-inline-start:.25rem}.ms-auto{margin-inline-start:auto}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.line-clamp-\[--line-clamp\]{-webkit-box-orient:vertical;-webkit-line-clamp:var(--line-clamp);display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.h-0{height:0}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[100dvh\],.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:24rem}.min-h-\[theme\(spacing\.48\)\]{min-height:12rem}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.min-w-\[theme\(spacing\.8\)\]{min-width:2rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[14rem\]{max-width:14rem}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-min{max-width:-moz-min-content;max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:1536px}.max-w-screen-lg{max-width:1024px}.max-w-screen-md{max-width:768px}.max-w-screen-sm{max-width:640px}.max-w-screen-xl{max-width:1280px}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-12,.-translate-x-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-12{--tw-translate-x:-3rem}.-translate-x-5{--tw-translate-x:-1.25rem}.-translate-x-5,.-translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x:-100%}.-translate-y-12{--tw-translate-y:-3rem}.-translate-y-12,.translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x:0px}.translate-x-12{--tw-translate-x:3rem}.translate-x-12,.translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-full{--tw-translate-x:100%}.translate-x-full,.translate-y-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-12{--tw-translate-y:3rem}.-rotate-180{--tw-rotate:-180deg}.-rotate-180,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.scroll-mt-9{scroll-margin-top:2.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{-moz-columns:var(--cols-default);columns:var(--cols-default)}.break-inside-avoid{-moz-column-break-inside:avoid;break-inside:avoid}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:var(--cols-default)}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\2c minmax\(theme\(spacing\.7\)\2c 1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-6{row-gap:1.5rem}.gap-y-7{row-gap:1.75rem}.gap-y-8{row-gap:2rem}.gap-y-px{row-gap:1px}.-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.5rem*var(--tw-space-x-reverse))}.-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.75rem*var(--tw-space-x-reverse))}.-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1rem*var(--tw-space-x-reverse))}.-space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.25rem*var(--tw-space-x-reverse))}.-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.5rem*var(--tw-space-x-reverse))}.-space-x-7>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.75rem*var(--tw-space-x-reverse))}.-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-2rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-100),var(--tw-divide-opacity))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-200),var(--tw-divide-opacity))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x-\[0\.5px\]{border-left-width:.5px;border-right-width:.5px}.border-y{border-bottom-width:1px;border-top-width:1px}.\!border-t-0{border-top-width:0!important}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-e{border-inline-end-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.\!border-none{border-style:none!important}.border-none{border-style:none}.border-gray-100{--tw-border-opacity:1;border-color:rgba(var(--gray-100),var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(var(--gray-300),var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.border-primary-500{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.border-primary-600{--tw-border-opacity:1;border-color:rgba(var(--primary-600),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-t-gray-200{--tw-border-opacity:1;border-top-color:rgba(var(--gray-200),var(--tw-border-opacity))}.\!bg-gray-50{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))!important}.\!bg-gray-700{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-custom-100{--tw-bg-opacity:1;background-color:rgba(var(--c-100),var(--tw-bg-opacity))}.bg-custom-50{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(var(--gray-200),var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.bg-gray-950\/50{background-color:rgba(var(--gray-950),.5)}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/0{background-color:hsla(0,0%,100%,0)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.bg-cover{background-size:cover}.bg-center{background-position:50%}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-bottom:0;padding-top:0}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pe-0{padding-inline-end:0}.pe-1{padding-inline-end:.25rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-6{padding-inline-end:1.5rem}.pe-8{padding-inline-end:2rem}.ps-0{padding-inline-start:0}.ps-1{padding-inline-start:.25rem}.ps-2{padding-inline-start:.5rem}.ps-3{padding-inline-start:.75rem}.ps-4{padding-inline-start:1rem}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.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"}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-thin{font-weight:100}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-loose{line-height:2}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.text-custom-400{--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.text-custom-50{--tw-text-opacity:1;color:rgba(var(--c-50),var(--tw-text-opacity))}.text-custom-500{--tw-text-opacity:1;color:rgba(var(--c-500),var(--tw-text-opacity))}.text-custom-600{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.text-custom-700\/50{color:rgba(var(--c-700),.5)}.text-danger-600{--tw-text-opacity:1;color:rgba(var(--danger-600),var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgba(var(--gray-100),var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.text-gray-700\/50{color:rgba(var(--gray-700),.5)}.text-gray-950{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-0{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-custom-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.ring-custom-600\/10{--tw-ring-color:rgba(var(--c-600),0.1)}.ring-custom-600\/20{--tw-ring-color:rgba(var(--c-600),0.2)}.ring-danger-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-300),var(--tw-ring-opacity))}.ring-gray-600\/10{--tw-ring-color:rgba(var(--gray-600),0.1)}.ring-gray-900\/10{--tw-ring-color:rgba(var(--gray-900),0.1)}.ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}.ring-gray-950\/5{--tw-ring-color:rgba(var(--gray-950),0.05)}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-white\/10{--tw-ring-color:hsla(0,0%,100%,.1)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-100{transition-delay:.1s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[transform\:translateZ\(0\)\]{transform:translateZ(0)}:is(.dark .dark\:prose-invert){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{bottom:0;content:var(--tw-content);top:0}.before\:start-0:before{content:var(--tw-content);inset-inline-start:0}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0:before{content:var(--tw-content);width:0}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:bg-primary-600:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.first\:border-s-0:first-child{border-inline-start-width:0}.first\:border-t-0:first-child{border-top-width:0}.last\:border-e-0:last-child{border-inline-end-width:0}.first-of-type\:ps-1:first-of-type{padding-inline-start:.25rem}.last-of-type\:pe-1:last-of-type{padding-inline-end:.25rem}.checked\:ring-0:checked{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:bg-gray-50:focus-within{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:bg-custom-400\/10:hover{background-color:rgba(var(--c-400),.1)}.hover\:bg-custom-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.hover\:bg-gray-400\/10:hover{background-color:rgba(var(--gray-400),.1)}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:text-custom-600:hover{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.hover\:text-custom-700\/75:hover{color:rgba(var(--c-700),.75)}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.hover\:text-gray-700\/75:hover{color:rgba(var(--gray-700),.75)}.hover\:opacity-100:hover{opacity:1}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-danger-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.focus\:ring-primary-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px}.checked\:focus\:ring-danger-500\/50:focus:checked{--tw-ring-color:rgba(var(--danger-500),0.5)}.checked\:focus\:ring-primary-500\/50:focus:checked{--tw-ring-color:rgba(var(--primary-500),0.5)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-primary-500:focus-visible{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.focus-visible\:bg-custom-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.focus-visible\:bg-gray-100:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.focus-visible\:bg-gray-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.focus-visible\:text-custom-700\/75:focus-visible{color:rgba(var(--c-700),.75)}.focus-visible\:text-gray-500:focus-visible{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.focus-visible\:text-gray-700\/75:focus-visible{color:rgba(var(--gray-700),.75)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:ring-custom-500\/50:focus-visible{--tw-ring-color:rgba(var(--c-500),0.5)}.focus-visible\:ring-custom-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:rgba(var(--gray-400),0.4)}.focus-visible\:ring-primary-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.focus-visible\:ring-primary-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.disabled\:text-gray-50:disabled{--tw-text-opacity:1;color:rgba(var(--gray-50),var(--tw-text-opacity))}.disabled\:text-gray-500:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:rgba(var(--gray-500),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:checked\:bg-current:checked:disabled{background-color:currentColor}.disabled\:checked\:text-gray-400:checked:disabled{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group\/item:first-child .group-first\/item\:rounded-s-lg{border-end-start-radius:.5rem;border-start-start-radius:.5rem}.group\/item:last-child .group-last\/item\:rounded-e-lg{border-end-end-radius:.5rem;border-start-end-radius:.5rem}.group:hover .group-hover\:text-gray-500,.group\/button:hover .group-hover\/button\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:hover .group-hover\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:hover .group-hover\/item\:underline,.group\/link:hover .group-hover\/link\:underline{text-decoration-line:underline}.group:focus-visible .group-focus-visible\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:focus-visible .group-focus-visible\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:focus-visible .group-focus-visible\/item\:underline{text-decoration-line:underline}.group\/link:focus-visible .group-focus-visible\/link\:underline{text-decoration-line:underline}:is(.dark .dark\:flex){display:flex}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:divide-white\/10)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:divide-white\/5)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:border-gray-600){--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgba(var(--gray-700),var(--tw-border-opacity))}:is(.dark .dark\:border-primary-500){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}:is(.dark .dark\:border-white\/10){border-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:border-white\/5){border-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:border-t-white\/10){border-top-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:\!bg-gray-700){--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-custom-400\/10){background-color:rgba(var(--c-400),.1)}:is(.dark .dark\:bg-custom-500){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}:is(.dark .dark\:bg-custom-500\/20){background-color:rgba(var(--c-500),.2)}:is(.dark .dark\:bg-gray-400\/10){background-color:rgba(var(--gray-400),.1)}:is(.dark .dark\:bg-gray-500){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-500\/20){background-color:rgba(var(--gray-500),.2)}:is(.dark .dark\:bg-gray-600){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-900\/30){background-color:rgba(var(--gray-900),.3)}:is(.dark .dark\:bg-gray-950){--tw-bg-opacity:1;background-color:rgba(var(--gray-950),var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-950\/75){background-color:rgba(var(--gray-950),.75)}:is(.dark .dark\:bg-primary-400){--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary-500){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}:is(.dark .dark\:bg-transparent){background-color:transparent}:is(.dark .dark\:bg-white\/10){background-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:bg-white\/5){background-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:fill-current){fill:currentColor}:is(.dark .dark\:text-custom-300\/50){color:rgba(var(--c-300),.5)}:is(.dark .dark\:text-custom-400){--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}:is(.dark .dark\:text-custom-400\/10){color:rgba(var(--c-400),.1)}:is(.dark .dark\:text-danger-400){--tw-text-opacity:1;color:rgba(var(--danger-400),var(--tw-text-opacity))}:is(.dark .dark\:text-danger-500){--tw-text-opacity:1;color:rgba(var(--danger-500),var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300\/50){color:rgba(var(--gray-300),.5)}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}:is(.dark .dark\:text-gray-700){--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}:is(.dark .dark\:text-gray-800){--tw-text-opacity:1;color:rgba(var(--gray-800),var(--tw-text-opacity))}:is(.dark .dark\:text-primary-400){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}:is(.dark .dark\:text-primary-500){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:text-white\/5){color:hsla(0,0%,100%,.05)}:is(.dark .dark\:ring-custom-400\/30){--tw-ring-color:rgba(var(--c-400),0.3)}:is(.dark .dark\:ring-custom-500){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}:is(.dark .dark\:ring-danger-500){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}:is(.dark .dark\:ring-gray-400\/20){--tw-ring-color:rgba(var(--gray-400),0.2)}:is(.dark .dark\:ring-gray-50\/10){--tw-ring-color:rgba(var(--gray-50),0.1)}:is(.dark .dark\:ring-gray-700){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-700),var(--tw-ring-opacity))}:is(.dark .dark\:ring-gray-900){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-900),var(--tw-ring-opacity))}:is(.dark .dark\:ring-white\/10){--tw-ring-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:ring-white\/20){--tw-ring-color:hsla(0,0%,100%,.2)}:is(.dark .dark\:placeholder\:text-gray-500)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-gray-500)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}:is(.dark .dark\:before\:bg-primary-500):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}:is(.dark .dark\:checked\:bg-danger-500:checked){--tw-bg-opacity:1;background-color:rgba(var(--danger-500),var(--tw-bg-opacity))}:is(.dark .dark\:checked\:bg-primary-500:checked){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}:is(.dark .dark\:focus-within\:bg-white\/5:focus-within){background-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:hover\:bg-custom-400:hover){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-custom-400\/10:hover){background-color:rgba(var(--c-400),.1)}:is(.dark .dark\:hover\:bg-white\/10:hover){background-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:hover\:bg-white\/5:hover){background-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:hover\:text-custom-300:hover){--tw-text-opacity:1;color:rgba(var(--c-300),var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-custom-300\/75:hover){color:rgba(var(--c-300),.75)}:is(.dark .dark\:hover\:text-gray-200:hover){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-gray-300\/75:hover){color:rgba(var(--gray-300),.75)}:is(.dark .dark\:hover\:text-gray-400:hover){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .dark\:hover\:ring-white\/20:hover){--tw-ring-color:hsla(0,0%,100%,.2)}:is(.dark .dark\:focus\:ring-danger-500:focus){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}:is(.dark .dark\:focus\:ring-primary-500:focus){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}:is(.dark .dark\:checked\:focus\:ring-danger-400\/50:focus:checked){--tw-ring-color:rgba(var(--danger-400),0.5)}:is(.dark .dark\:checked\:focus\:ring-primary-400\/50:focus:checked){--tw-ring-color:rgba(var(--primary-400),0.5)}:is(.dark .dark\:focus-visible\:border-primary-500:focus-visible){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}:is(.dark .dark\:focus-visible\:bg-custom-400\/10:focus-visible){background-color:rgba(var(--c-400),.1)}:is(.dark .dark\:focus-visible\:bg-white\/5:focus-visible){background-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:focus-visible\:text-custom-300\/75:focus-visible){color:rgba(var(--c-300),.75)}:is(.dark .dark\:focus-visible\:text-gray-300\/75:focus-visible){color:rgba(var(--gray-300),.75)}:is(.dark .dark\:focus-visible\:text-gray-400:focus-visible){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .dark\:focus-visible\:ring-custom-400\/50:focus-visible){--tw-ring-color:rgba(var(--c-400),0.5)}:is(.dark .dark\:focus-visible\:ring-custom-500:focus-visible){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}:is(.dark .dark\:focus-visible\:ring-primary-500:focus-visible){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}:is(.dark .dark\:disabled\:bg-transparent:disabled){background-color:transparent}:is(.dark .dark\:disabled\:text-gray-400:disabled){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .dark\:disabled\:ring-white\/10:disabled){--tw-ring-color:hsla(0,0%,100%,.1)}:is(.dark .dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled){-webkit-text-fill-color:rgba(var(--gray-400),1)}:is(.dark .dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled)::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}:is(.dark .dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled)::placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}:is(.dark .dark\:disabled\:checked\:bg-gray-600:checked:disabled){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}:is(.dark .group\/button:hover .dark\:group-hover\/button\:text-gray-400){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .group:hover .dark\:group-hover\:text-gray-200){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}:is(.dark .group:hover .dark\:group-hover\:text-gray-400){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}:is(.dark .group:focus-visible .dark\:group-focus-visible\:text-gray-200){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}:is(.dark .group:focus-visible .dark\:group-focus-visible\:text-gray-400){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.sm\:relative{position:relative}.sm\:inset-x-auto{left:auto;right:auto}.sm\:end-0{inset-inline-end:0}.sm\:col-\[--col-span-sm\]{grid-column:var(--col-span-sm)}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:var(--col-start-sm)}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.sm\:ms-auto{margin-inline-start:auto}.sm\:mt-7{margin-top:1.75rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:hidden{display:none}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:w-screen{width:100vw}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-4xl{max-width:56rem}.sm\:max-w-5xl{max-width:64rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-7xl{max-width:80rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:columns-\[--cols-sm\]{-moz-columns:var(--cols-sm);columns:var(--cols-sm)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[--cols-sm\]{grid-template-columns:var(--cols-sm)}.sm\:grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-1{gap:.25rem}.sm\:gap-3{gap:.75rem}.sm\:gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-10{padding:2.5rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1{padding-bottom:.25rem;padding-top:.25rem}.sm\:py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.sm\:pe-3{padding-inline-end:.75rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:ps-3{padding-inline-start:.75rem}.sm\:ps-6{padding-inline-start:1.5rem}.sm\:pt-1{padding-top:.25rem}.sm\:pt-1\.5{padding-top:.375rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:leading-6{line-height:1.5rem}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:.75rem}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:1.5rem}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:.75rem}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:1.5rem}}@media (min-width:768px){.md\:bottom-4{bottom:1rem}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:var(--col-span-md)}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:var(--col-start-md)}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:inline-grid{display:inline-grid}.md\:hidden{display:none}.md\:columns-\[--cols-md\]{-moz-columns:var(--cols-md);columns:var(--cols-md)}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:var(--cols-md)}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}.md\:gap-1{gap:.25rem}.md\:gap-3{gap:.75rem}.md\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(0px*var(--tw-divide-y-reverse));border-top-width:calc(0px*(1 - var(--tw-divide-y-reverse)))}.md\:rounded-xl{border-radius:.75rem}.md\:p-20{padding:5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:pe-6{padding-inline-end:1.5rem}.md\:ps-3{padding-inline-start:.75rem}}@media (min-width:1024px){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:var(--col-span-lg)}.lg\:col-start-\[--col-start-lg\]{grid-column-start:var(--col-start-lg)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:table-cell{display:table-cell}.lg\:inline-grid{display:inline-grid}.lg\:hidden{display:none}.lg\:h-full{height:100%}.lg\:max-w-xs{max-width:20rem}.lg\:-translate-x-full{--tw-translate-x:-100%}.lg\:-translate-x-full,.lg\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:translate-x-0{--tw-translate-x:0px}.lg\:columns-\[--cols-lg\]{-moz-columns:var(--cols-lg);columns:var(--cols-lg)}.lg\:grid-cols-\[--cols-lg\]{grid-template-columns:var(--cols-lg)}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:gap-1{gap:.25rem}.lg\:gap-3{gap:.75rem}.lg\:bg-transparent{background-color:transparent}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pe-8{padding-inline-end:2rem}.lg\:shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.lg\:shadow-none,.lg\:shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lg\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lg\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}:is(.dark .dark\:lg\:bg-transparent){background-color:transparent}}@media (min-width:1280px){.xl\:col-\[--col-span-xl\]{grid-column:var(--col-span-xl)}.xl\:col-start-\[--col-start-xl\]{grid-column-start:var(--col-start-xl)}.xl\:block{display:block}.xl\:table-cell{display:table-cell}.xl\:inline-grid{display:inline-grid}.xl\:hidden{display:none}.xl\:columns-\[--cols-xl\]{-moz-columns:var(--cols-xl);columns:var(--cols-xl)}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:var(--cols-xl)}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:gap-1{gap:.25rem}.xl\:gap-3{gap:.75rem}}@media (min-width:1536px){.\32xl\:col-\[--col-span-2xl\]{grid-column:var(--col-span-2xl)}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:var(--col-start-2xl)}.\32xl\:block{display:block}.\32xl\:table-cell{display:table-cell}.\32xl\:inline-grid{display:inline-grid}.\32xl\:hidden{display:none}.\32xl\:columns-\[--cols-2xl\]{-moz-columns:var(--cols-2xl);columns:var(--cols-2xl)}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:var(--cols-2xl)}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-start{align-items:flex-start}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-center{align-items:center}.\32xl\:gap-1{gap:.25rem}.\32xl\:gap-3{gap:.75rem}}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-5:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/2:where([dir=rtl],[dir=rtl] *){--tw-translate-x:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:flex-row-reverse:where([dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.rtl\:divide-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}@media (min-width:1024px){.rtl\:lg\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:lg\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}.\[\&\.trix-active\]\:bg-gray-50.trix-active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.\[\&\.trix-active\]\:text-primary-600.trix-active{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}:is(.dark .dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active){background-color:hsla(0,0%,100%,.05)}:is(.dark .dark\:\[\&\.trix-active\]\:text-primary-400.trix-active){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}:is(.dark .dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-500:focus-within:not(:has(.fi-ac-action:focus))){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}:is(.dark .dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-500:focus-within:not(:has(.fi-ac-action:focus))){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of .fi-btn)){--tw-shadow:-1px 0 0 0 rgba(var(--gray-200),1);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of .fi-btn))){--tw-shadow:-1px 0 0 0 hsla(0,0%,100%,.2);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of .fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of .fi-btn){border-end-start-radius:.5rem;border-start-start-radius:.5rem}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of .fi-btn){border-end-end-radius:.5rem;border-start-end-radius:.5rem}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{bottom:0;content:var(--tw-content);top:0}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:0}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:.125rem}.\[\&\>\*\:first-child\]\:before\:bg-primary-600>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}:is(.dark .\[\&\>\*\:first-child\]\:dark\:before\:bg-primary-500)>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:0}.\[\&_\.fi-badge-delete-button\]\:hidden .fi-badge-delete-button{display:none}.\[\&_\.filepond--root\]\:font-sans .filepond--root{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.\[\&_optgroup\]\:bg-white optgroup{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}:is(.dark .\[\&_optgroup\]\:dark\:bg-gray-900) optgroup{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.\[\&_option\]\:bg-white option{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}:is(.dark .\[\&_option\]\:dark\:bg-gray-900) option{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}@media(hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[\@media\(hover\:hover\)\]\:duration-75{transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:checked+.\[input\:checked\+\&\]\:hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}:is(.dark input:checked+.dark\:\[input\:checked\+\&\]\:bg-custom-500){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}:is(.dark input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-custom-400:hover){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}input:checked:focus-visible+.\[input\:checked\:focus-visible\+\&\]\:ring-custom-500\/50{--tw-ring-color:rgba(var(--c-500),0.5)}:is(.dark input:checked:focus-visible+.dark\:\[input\:checked\:focus-visible\+\&\]\:ring-custom-400\/50){--tw-ring-color:rgba(var(--c-400),0.5)}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}:is(.dark input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20){--tw-ring-color:hsla(0,0%,100%,.2)} \ No newline at end of file From 0faa710d775e3918fd2b15db6bf9a56264ff2a29 Mon Sep 17 00:00:00 2001 From: Alf Drollinger Date: Fri, 8 Mar 2024 08:29:03 +0100 Subject: [PATCH 37/37] Jobs V3 last fix to merge --- .../04_add_foreigns_to_job_manager_table.php.stub | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/jobs/database/migrations/04_add_foreigns_to_job_manager_table.php.stub b/packages/jobs/database/migrations/04_add_foreigns_to_job_manager_table.php.stub index 7b2cb8869..d04e23354 100644 --- a/packages/jobs/database/migrations/04_add_foreigns_to_job_manager_table.php.stub +++ b/packages/jobs/database/migrations/04_add_foreigns_to_job_manager_table.php.stub @@ -11,9 +11,9 @@ return new class extends Migration { public function up(): void { Schema::table('job_manager', function (Blueprint $table) { - $table->bigInteger('job_queue_worker_id')->nullable(); - $table - ->foreignId('job_queue_worker_id') + $foreignColumn = $table->foreignId('job_queue_worker_id')->nullable(); + + $foreignColumn ->references('id') ->on('job_queue_workers') ->onUpdate('CASCADE')