From 80861742061aa605f5ea08ab8a0a4f9ab5d172bc Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Mon, 2 Oct 2023 16:58:00 +1000 Subject: [PATCH 01/22] wip --- .../2023_06_07_000001_create_pulse_tables.php | 23 +++---- src/Recorders/Jobs.php | 60 +++++++++++++++---- tests/Feature/JobsTest.php | 59 ++++++++++++++++++ 3 files changed, 122 insertions(+), 20 deletions(-) diff --git a/database/migrations/2023_06_07_000001_create_pulse_tables.php b/database/migrations/2023_06_07_000001_create_pulse_tables.php index df6a984c..0153671b 100644 --- a/database/migrations/2023_06_07_000001_create_pulse_tables.php +++ b/database/migrations/2023_06_07_000001_create_pulse_tables.php @@ -68,13 +68,16 @@ public function up(): void $table->string('user_id')->nullable(); $table->string('job'); $table->uuid('job_uuid'); + $table->datetime('processing_at')->nullable(); + $table->datetime('processed_at')->nullable(); + $table->datetime('failed_at')->nullable(); $table->unsignedInteger('slow')->default(0); $table->unsignedInteger('slowest')->nullable(); // TODO: verify this update index. Needs to find job quickly. $table->index(['job_uuid']); - $table->index(['date', 'job', 'slowest']); // slow_jobs - $table->index(['date', 'user_id']); // user_usage + // $table->index(['date', 'job', 'slowest']); // slow_jobs + // $table->index(['date', 'user_id']); // user_usage }); Schema::create('pulse_cache_interactions', function (Blueprint $table) { @@ -93,14 +96,14 @@ public function up(): void $table->index(['uri', 'date', 'duration']); }); - Schema::create('pulse_queue_sizes', function (Blueprint $table) { - $table->datetime('date'); - $table->string('connection'); - $table->string('queue'); - $table->unsignedInteger('size'); - $table->unsignedInteger('failed'); - // TODO: indexes? - }); + // Schema::create('pulse_queue_sizes', function (Blueprint $table) { + // $table->datetime('date'); + // $table->string('connection'); + // $table->string('queue'); + // $table->unsignedInteger('size'); + // $table->unsignedInteger('failed'); + // // TODO: indexes? + // }); } /** diff --git a/src/Recorders/Jobs.php b/src/Recorders/Jobs.php index db0bf98e..4ba3a2a1 100644 --- a/src/Recorders/Jobs.php +++ b/src/Recorders/Jobs.php @@ -75,23 +75,63 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce if ($event instanceof JobProcessing) { $this->lastJobStartedProcessingAt = $now; + // TODO: Add update here? return null; } $duration = $this->lastJobStartedProcessingAt->diffInMilliseconds($now); + $processingAt = $this->lastJobStartedProcessingAt?->toDateTimeString(); - if ($duration < $this->config->get('pulse.recorders.'.static::class.'.threshold')) { - return null; + if ($event instanceof JobReleasedAfterException) { + return tap(new Update( + $this->table, + ['job_uuid' => (string) $event->job->uuid()], + fn (array $attributes) => [ + 'processing_at' => $attributes['processing_at'] ?? $processingAt, + 'slowest' => max($attributes['slowest'] ?? 0, $duration), + 'slow' => $attributes['slow'] + 1, + ], + ), fn () => $this->lastJobStartedProcessingAt = null); + } + + if ($event instanceof JobProcessed) { + return tap(new Update( + $this->table, + ['job_uuid' => (string) $event->job->uuid()], + fn (array $attributes) => [ + 'processing_at' => $attributes['processing_at'] ?? $processingAt, + 'processed_at' => $now->toDateTimeString(), + 'slowest' => max($attributes['slowest'] ?? 0, $duration), + 'slow' => $attributes['slow'] + 1, + ], + ), fn () => $this->lastJobStartedProcessingAt = null); } - return tap(new Update( - $this->table, - ['job_uuid' => (string) $event->job->uuid()], - fn (array $attributes) => [ - 'slowest' => max($attributes['slowest'] ?? 0, $duration), - 'slow' => $attributes['slow'] + 1, - ], - ), fn () => $this->lastJobStartedProcessingAt = null); + if ($event instanceof JobFailed) { + return tap(new Update( + $this->table, + ['job_uuid' => (string) $event->job->uuid()], + fn (array $attributes) => [ + 'processing_at' => $attributes['processing_at'] ?? $processingAt, + 'failed_at' => $now->toDateTimeString(), + 'slowest' => max($attributes['slowest'] ?? 0, $duration), + 'slow' => $attributes['slow'] + 1, + ], + ), fn () => $this->lastJobStartedProcessingAt = null); + } + + // if ($duration < $this->config->get('pulse.slow_job_threshold')) { + // return null; + // } + + // return tap(new Update( + // $this->table, + // ['job_uuid' => (string) $event->job->uuid()], + // fn (array $attributes) => [ + // 'slowest' => max($attributes['slowest'] ?? 0, $duration), + // 'slow' => $attributes['slow'] + 1, + // ], + // ), fn () => $this->lastJobStartedProcessingAt = null); } } diff --git a/tests/Feature/JobsTest.php b/tests/Feature/JobsTest.php index 2ca1ac77..60373a18 100644 --- a/tests/Feature/JobsTest.php +++ b/tests/Feature/JobsTest.php @@ -30,6 +30,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => null, + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -53,6 +56,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => null, + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'Illuminate\Queue\CallQueuedClosure', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -74,6 +80,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => null, + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -99,6 +108,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => null, + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -118,6 +130,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => '2000-01-02 03:04:10', + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -129,6 +144,7 @@ * Work the job for the second time. */ + Carbon::setTestNow('2000-01-02 03:04:15'); Artisan::call('queue:work', ['--max-jobs' => 1, '--stop-when-empty' => true]); expect(Queue::size())->toBe(1); @@ -136,6 +152,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => '2000-01-02 03:04:10', + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -147,6 +166,7 @@ * Work the job for the third time. */ + Carbon::setTestNow('2000-01-02 03:04:20'); Artisan::call('queue:work', ['--max-jobs' => 1, '--stop-when-empty' => true]); expect(Queue::size())->toBe(0); @@ -154,6 +174,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => '2000-01-02 03:04:10', + 'processed_at' => null, + 'failed_at' => '2000-01-02 03:04:20', 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -179,6 +202,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => null, + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -198,6 +224,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => '2000-01-02 03:04:10', + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -209,6 +238,7 @@ * Work the job for the second time. */ + Carbon::setTestNow('2000-01-02 03:04:15'); Artisan::call('queue:work', ['--max-jobs' => 1, '--stop-when-empty' => true]); expect(Queue::size())->toBe(1); @@ -216,6 +246,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => '2000-01-02 03:04:10', + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -227,6 +260,7 @@ * Work the job for the third time. */ + Carbon::setTestNow('2000-01-02 03:04:20'); Artisan::call('queue:work', ['--max-jobs' => 1, '--stop-when-empty' => true]); expect(Queue::size())->toBe(0); @@ -234,6 +268,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => '2000-01-02 03:04:10', + 'processed_at' => null, + 'failed_at' => '2000-01-02 03:04:20', 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -259,6 +296,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => null, + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobThatPassesOnTheSecondAttempt', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -278,6 +318,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => '2000-01-02 03:04:10', + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobThatPassesOnTheSecondAttempt', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -289,6 +332,7 @@ * Work the job for the second time. */ + Carbon::setTestNow('2000-01-02 03:04:15'); Artisan::call('queue:work', ['--max-jobs' => 1, '--stop-when-empty' => true]); expect(Queue::size())->toBe(0); @@ -296,6 +340,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => '2000-01-02 03:04:10', + 'processed_at' => '2000-01-02 03:04:15', + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobThatPassesOnTheSecondAttempt', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -321,6 +368,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => null, + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MySlowJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -340,6 +390,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => '2000-01-02 03:04:10', + 'processed_at' => '2000-01-02 03:04:10', + 'failed_at' => null, 'user_id' => null, 'job' => 'MySlowJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -365,6 +418,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => null, + 'processed_at' => null, + 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobThatManuallyFails', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', @@ -384,6 +440,9 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'processing_at' => '2000-01-02 03:04:10', + 'processed_at' => null, + 'failed_at' => '2000-01-02 03:04:10', 'user_id' => null, 'job' => 'MyJobThatManuallyFails', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', From 4b765b9359e0ed3cfb34df94da90f19c5f5c3349 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Mon, 2 Oct 2023 17:48:32 +1000 Subject: [PATCH 02/22] wip --- .../2023_06_07_000001_create_pulse_tables.php | 2 ++ src/Recorders/Jobs.php | 2 ++ tests/Feature/JobsTest.php | 36 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/database/migrations/2023_06_07_000001_create_pulse_tables.php b/database/migrations/2023_06_07_000001_create_pulse_tables.php index 0153671b..498b7b89 100644 --- a/database/migrations/2023_06_07_000001_create_pulse_tables.php +++ b/database/migrations/2023_06_07_000001_create_pulse_tables.php @@ -68,6 +68,8 @@ public function up(): void $table->string('user_id')->nullable(); $table->string('job'); $table->uuid('job_uuid'); + $table->string('connection'); + $table->string('queue'); $table->datetime('processing_at')->nullable(); $table->datetime('processed_at')->nullable(); $table->datetime('failed_at')->nullable(); diff --git a/src/Recorders/Jobs.php b/src/Recorders/Jobs.php index 4ba3a2a1..157f2877 100644 --- a/src/Recorders/Jobs.php +++ b/src/Recorders/Jobs.php @@ -69,6 +69,8 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce ? $event->job : $event->job::class, 'job_uuid' => $event->payload()['uuid'], + 'connection' => $event->connectionName, + 'queue' => $event->job->queue ?? 'default', 'user_id' => $this->pulse->authenticatedUserIdResolver(), ]); } diff --git a/tests/Feature/JobsTest.php b/tests/Feature/JobsTest.php index 60373a18..786ae917 100644 --- a/tests/Feature/JobsTest.php +++ b/tests/Feature/JobsTest.php @@ -36,6 +36,8 @@ 'user_id' => null, 'job' => 'MyJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 0, 'slowest' => null, ]); @@ -62,6 +64,8 @@ 'user_id' => null, 'job' => 'Illuminate\Queue\CallQueuedClosure', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 0, 'slowest' => null, ]); @@ -86,6 +90,8 @@ 'user_id' => null, 'job' => 'MyJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 0, 'slowest' => null, ]); @@ -114,6 +120,8 @@ 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 0, 'slowest' => null, ]); @@ -136,6 +144,8 @@ 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 1, 'slowest' => 11, ]); @@ -158,6 +168,8 @@ 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 2, 'slowest' => 22, ]); @@ -180,6 +192,8 @@ 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 3, 'slowest' => 33, ]); @@ -208,6 +222,8 @@ 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 0, 'slowest' => null, ]); @@ -230,6 +246,8 @@ 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 1, 'slowest' => 99, ]); @@ -252,6 +270,8 @@ 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 2, 'slowest' => 99, ]); @@ -274,6 +294,8 @@ 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 3, 'slowest' => 99, ]); @@ -302,6 +324,8 @@ 'user_id' => null, 'job' => 'MyJobThatPassesOnTheSecondAttempt', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 0, 'slowest' => null, ]); @@ -324,6 +348,8 @@ 'user_id' => null, 'job' => 'MyJobThatPassesOnTheSecondAttempt', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 1, 'slowest' => 99, ]); @@ -346,6 +372,8 @@ 'user_id' => null, 'job' => 'MyJobThatPassesOnTheSecondAttempt', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 2, 'slowest' => 99, ]); @@ -374,6 +402,8 @@ 'user_id' => null, 'job' => 'MySlowJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 0, 'slowest' => null, ]); @@ -396,6 +426,8 @@ 'user_id' => null, 'job' => 'MySlowJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 1, 'slowest' => 100, ]); @@ -424,6 +456,8 @@ 'user_id' => null, 'job' => 'MyJobThatManuallyFails', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 0, 'slowest' => null, ]); @@ -446,6 +480,8 @@ 'user_id' => null, 'job' => 'MyJobThatManuallyFails', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'connection' => 'database', + 'queue' => 'default', 'slow' => 1, 'slowest' => 100, ]); From 1120a7969cb43ae28b4f082205f1e8dcadacd703 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Mon, 2 Oct 2023 17:53:17 +1000 Subject: [PATCH 03/22] wip --- .../2023_06_07_000001_create_pulse_tables.php | 9 --- phpstan-baseline.neon | 10 --- src/Recorders/QueueSizes.php | 74 ------------------- 3 files changed, 93 deletions(-) delete mode 100644 src/Recorders/QueueSizes.php diff --git a/database/migrations/2023_06_07_000001_create_pulse_tables.php b/database/migrations/2023_06_07_000001_create_pulse_tables.php index 498b7b89..6e19808c 100644 --- a/database/migrations/2023_06_07_000001_create_pulse_tables.php +++ b/database/migrations/2023_06_07_000001_create_pulse_tables.php @@ -97,15 +97,6 @@ public function up(): void $table->string('user_id')->nullable(); $table->index(['uri', 'date', 'duration']); }); - - // Schema::create('pulse_queue_sizes', function (Blueprint $table) { - // $table->datetime('date'); - // $table->string('connection'); - // $table->string('queue'); - // $table->unsignedInteger('size'); - // $table->unsignedInteger('failed'); - // // TODO: indexes? - // }); } /** diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 1d110da4..cf4ac706 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -80,16 +80,6 @@ parameters: count: 1 path: src/Recorders/Jobs.php - - - message: "#^Unable to resolve the template type TKey in call to function collect$#" - count: 1 - path: src/Recorders/QueueSizes.php - - - - message: "#^Unable to resolve the template type TValue in call to function collect$#" - count: 1 - path: src/Recorders/QueueSizes.php - - message: "#^Call to an undefined method Illuminate\\\\Contracts\\\\Http\\\\Kernel\\:\\:whenRequestLifecycleIsLongerThan\\(\\)\\.$#" count: 1 diff --git a/src/Recorders/QueueSizes.php b/src/Recorders/QueueSizes.php deleted file mode 100644 index f66a2b0c..00000000 --- a/src/Recorders/QueueSizes.php +++ /dev/null @@ -1,74 +0,0 @@ - - */ - public function record(Beat $event): Enumerable - { - if ($event->time->second % 15 !== 0) { - return collect([]); - } - - if (! $this->cache->lock("laravel:pulse:check-queue-size:{$event->time->timestamp}", (int) $event->interval->totalSeconds)->get()) { - return collect([]); - } - - return collect($this->config->get('pulse.queues')) - ->groupBy(fn ($value, $key) => is_int($key) ? $this->config->get('queue.default') : $key) - ->map->flatten() - ->flatMap(fn (Collection $queues, string $connection) => $queues->map(fn (string $queue) => new Entry($this->table, [ - 'date' => $event->time->toDateTimeString(), - 'connection' => $connection, - 'queue' => $queue, - 'size' => $this->queue->connection($connection)->size($queue), - // TODO we need to recommed adding indexes to the failed jobs "queue" and "connection" columns, otherwise - // this is gonna take forever on large tables. - 'failed' => $this->failedJobs instanceof CountableFailedJobProvider - ? $this->failedJobs->count($connection, $queue) - : 0, - ]))); - } -} From e0c4091505cd758ed0a956a5e4cd85a0b6f5479a Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Mon, 2 Oct 2023 17:59:57 +1000 Subject: [PATCH 04/22] wip --- config/pulse.php | 1 + src/Queries/Queues.php | 1 + 2 files changed, 2 insertions(+) diff --git a/config/pulse.php b/config/pulse.php index 459f7778..32b449c3 100644 --- a/config/pulse.php +++ b/config/pulse.php @@ -177,6 +177,7 @@ */ // TODO clean up this example after chatting with Jess. + // TODO: Remove? 'queues' => [ 'default', // 'default-connection:queue-1', diff --git a/src/Queries/Queues.php b/src/Queries/Queues.php index 6b5b5556..1539fc8b 100644 --- a/src/Queries/Queues.php +++ b/src/Queries/Queues.php @@ -32,6 +32,7 @@ public function __construct( */ public function __invoke(): Enumerable { + // TODO: Get historic and current stats from the pulse_jobs table, similar to system stats charts and current value. return collect($this->config->get('pulse.queues')) ->groupBy(fn ($value, $key) => is_int($key) ? $this->config->get('queue.default') : $key) ->map->flatten() From 7b41b62184097a5e1d6174d445ac23cae5625c26 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Mon, 2 Oct 2023 18:00:24 +1000 Subject: [PATCH 05/22] wip --- database/migrations/2023_06_07_000001_create_pulse_tables.php | 1 - 1 file changed, 1 deletion(-) diff --git a/database/migrations/2023_06_07_000001_create_pulse_tables.php b/database/migrations/2023_06_07_000001_create_pulse_tables.php index 6e19808c..c425088e 100644 --- a/database/migrations/2023_06_07_000001_create_pulse_tables.php +++ b/database/migrations/2023_06_07_000001_create_pulse_tables.php @@ -111,6 +111,5 @@ public function down(): void Schema::dropIfExists('pulse_jobs'); Schema::dropIfExists('pulse_cache_interactions'); Schema::dropIfExists('pulse_outgoing_requests'); - Schema::dropIfExists('pulse_queue_sizes'); } }; From 72a1fd36e9d054acb83f0df730aaf8518c7aa052 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Wed, 4 Oct 2023 10:24:36 +1000 Subject: [PATCH 06/22] wip --- config/pulse.php | 32 -------------------------------- src/Recorders/Jobs.php | 20 ++++---------------- 2 files changed, 4 insertions(+), 48 deletions(-) diff --git a/config/pulse.php b/config/pulse.php index 32b449c3..426e00eb 100644 --- a/config/pulse.php +++ b/config/pulse.php @@ -167,38 +167,6 @@ ], ], - /* - |-------------------------------------------------------------------------- - | Pulse Queue Monitoring - |-------------------------------------------------------------------------- - | - | The queues to show stats for. - | - */ - - // TODO clean up this example after chatting with Jess. - // TODO: Remove? - 'queues' => [ - 'default', - // 'default-connection:queue-1', - // 'default-connection:queue-2', - // env('QUEUE_CONNECTION', 'sync') => [ - // 'default-connection:queue-3-via-array', - // ], - // 'specific-connection' => [ - // 'queue-a', - // 'queue-1', - // ], - // 'connection-1' => [ - // 'queue-1', - // 'queue-2' - // ], - // 'connection-2' => [ - // 'queue-1', - // 'queue-2' - // ], - ], - /* |-------------------------------------------------------------------------- | Pulse Sample Rate diff --git a/src/Recorders/Jobs.php b/src/Recorders/Jobs.php index 157f2877..f909f3f0 100644 --- a/src/Recorders/Jobs.php +++ b/src/Recorders/Jobs.php @@ -84,6 +84,7 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce $duration = $this->lastJobStartedProcessingAt->diffInMilliseconds($now); $processingAt = $this->lastJobStartedProcessingAt?->toDateTimeString(); + $slow = $duration >= $this->config->get('pulse.slow_job_threshold') ? 1 : 0; if ($event instanceof JobReleasedAfterException) { return tap(new Update( @@ -92,7 +93,7 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce fn (array $attributes) => [ 'processing_at' => $attributes['processing_at'] ?? $processingAt, 'slowest' => max($attributes['slowest'] ?? 0, $duration), - 'slow' => $attributes['slow'] + 1, + 'slow' => $attributes['slow'] + $slow, ], ), fn () => $this->lastJobStartedProcessingAt = null); } @@ -105,7 +106,7 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce 'processing_at' => $attributes['processing_at'] ?? $processingAt, 'processed_at' => $now->toDateTimeString(), 'slowest' => max($attributes['slowest'] ?? 0, $duration), - 'slow' => $attributes['slow'] + 1, + 'slow' => $attributes['slow'] + $slow, ], ), fn () => $this->lastJobStartedProcessingAt = null); } @@ -118,22 +119,9 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce 'processing_at' => $attributes['processing_at'] ?? $processingAt, 'failed_at' => $now->toDateTimeString(), 'slowest' => max($attributes['slowest'] ?? 0, $duration), - 'slow' => $attributes['slow'] + 1, + 'slow' => $attributes['slow'] + $slow, ], ), fn () => $this->lastJobStartedProcessingAt = null); } - - // if ($duration < $this->config->get('pulse.slow_job_threshold')) { - // return null; - // } - - // return tap(new Update( - // $this->table, - // ['job_uuid' => (string) $event->job->uuid()], - // fn (array $attributes) => [ - // 'slowest' => max($attributes['slowest'] ?? 0, $duration), - // 'slow' => $attributes['slow'] + 1, - // ], - // ), fn () => $this->lastJobStartedProcessingAt = null); } } From 301f11b23e01670e6782b417045d3a93c445cdc2 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Wed, 4 Oct 2023 17:57:56 +1000 Subject: [PATCH 07/22] wip --- dist/pulse.css | 2 +- resources/views/livewire/queues.blade.php | 150 +++++++++++++++++----- src/Livewire/Queues.php | 7 +- src/Queries/Queues.php | 132 ++++++++++++++++--- src/Queries/SlowJobs.php | 1 + src/Recorders/Jobs.php | 2 + 6 files changed, 242 insertions(+), 52 deletions(-) diff --git a/dist/pulse.css b/dist/pulse.css index 198ecc97..6212e8c3 100644 --- a/dist/pulse.css +++ b/dist/pulse.css @@ -1 +1 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;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-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 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:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--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)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--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: rgb(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: rgb(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}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.col-span-1{grid-column:span 1 / span 1}.col-span-10{grid-column:span 10 / span 10}.col-span-11{grid-column:span 11 / span 11}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-5{grid-column:span 5 / span 5}.col-span-6{grid-column:span 6 / span 6}.col-span-7{grid-column:span 7 / span 7}.col-span-8{grid-column:span 8 / span 8}.col-span-9{grid-column:span 9 / span 9}.col-span-full{grid-column:1 / -1}.row-span-1{grid-row:span 1 / span 1}.row-span-2{grid-row:span 2 / span 2}.row-span-3{grid-row:span 3 / span 3}.row-span-4{grid-row:span 4 / span 4}.row-span-5{grid-row:span 5 / span 5}.row-span-6{grid-row:span 6 / span 6}.row-span-full{grid-row:1 / -1}.mx-auto{margin-left:auto;margin-right:auto}.mb-3{margin-bottom:.75rem}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-1\/3{height:33.333333%}.h-1\/4{height:25%}.h-1\/5{height:20%}.h-1\/6{height:16.666667%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-128{height:32rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/3{height:66.666667%}.h-2\/4{height:50%}.h-2\/5{height:40%}.h-2\/6{height:33.333333%}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-3\/4{height:75%}.h-3\/5{height:60%}.h-3\/6{height:50%}.h-32{height:8rem}.h-36{height:9rem}.h-4{height:1rem}.h-4\/5{height:80%}.h-4\/6{height:66.666667%}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\/6{height:83.333333%}.h-52{height:13rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[30px\]{height:30px}.h-\[52px\]{height:52px}.max-h-0{max-height:0px}.max-h-0\.5{max-height:.125rem}.max-h-1{max-height:.25rem}.max-h-1\.5{max-height:.375rem}.max-h-10{max-height:2.5rem}.max-h-11{max-height:2.75rem}.max-h-12{max-height:3rem}.max-h-14{max-height:3.5rem}.max-h-16{max-height:4rem}.max-h-2{max-height:.5rem}.max-h-2\.5{max-height:.625rem}.max-h-20{max-height:5rem}.max-h-24{max-height:6rem}.max-h-28{max-height:7rem}.max-h-3{max-height:.75rem}.max-h-3\.5{max-height:.875rem}.max-h-32{max-height:8rem}.max-h-36{max-height:9rem}.max-h-4{max-height:1rem}.max-h-40{max-height:10rem}.max-h-44{max-height:11rem}.max-h-48{max-height:12rem}.max-h-5{max-height:1.25rem}.max-h-52{max-height:13rem}.max-h-56{max-height:14rem}.max-h-6{max-height:1.5rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-7{max-height:1.75rem}.max-h-72{max-height:18rem}.max-h-8{max-height:2rem}.max-h-80{max-height:20rem}.max-h-9{max-height:2.25rem}.max-h-96{max-height:24rem}.min-h-0{min-height:0px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\/12{width:8.333333%}.w-1\/2{width:50%}.w-14{width:3.5rem}.w-2\/12{width:16.666667%}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/12{width:25%}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-\[42rem\]{min-width:42rem}.max-w-\[1px\]{max-width:1px}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-\[10000\]{flex-grow:10000}.basis-0{flex-basis:0px}.basis-56{flex-basis:14rem}.basis-full{flex-basis:100%}.origin-bottom{transform-origin:bottom}.origin-top-right{transform-origin:top right}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-\[max-content\,minmax\(max-content\,1fr\)\,max-content\,minmax\(0\,2fr\)\,max-content\,minmax\(0\,2fr\)\,minmax\(max-content\,1fr\)\]{grid-template-columns:max-content minmax(max-content,1fr) max-content minmax(0,2fr) max-content minmax(0,2fr) minmax(max-content,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-500{stroke:#6b7280}.stroke-red-500{stroke:#ef4444}.\!p-0{padding:0!important}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-12{padding-bottom:3rem}.pb-px{padding-bottom:1px}.pl-3{padding-left:.75rem}.pr-8{padding-right:2rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-25{opacity:.25}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 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)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-gray-900\/5{--tw-ring-color: rgb(17 24 39 / .05)}.\@container{container-type:inline-size}.\@container\/scroll-wrapper{container-type:inline-size;container-name:scroll-wrapper}.\[scrollbar-color\:theme\(colors\.gray\.500\)_transparent\]{scrollbar-color:#6b7280 transparent}.\[scrollbar-width\:thin\]{scrollbar-width:thin}[x-cloak]{display:none}.first\:h-0:first-child{height:0px}.first\:rounded-l-md:first-child{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.first\:pl-3:first-child{padding-left:.75rem}.last\:rounded-r-md:last-child{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.last\:pr-3:last-child{padding-right:.75rem}.focus-within\:ring:focus-within{--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.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(0px + 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)}@container (min-width: 24rem){.\@sm\:block{display:block}.\@sm\:px-3{padding-left:.75rem;padding-right:.75rem}}@container (min-width: 28rem){.\@md\:mb-6{margin-bottom:1.5rem}}@container (min-width: 32rem){.\@lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 48rem){.\@3xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 72rem){.\@6xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}html :where(.default\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:col-span-full){grid-column:1 / -1}html :where(.default\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:row-span-full){grid-row:1 / -1}html :where(.default\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:gap-6){gap:1.5rem}:is(.dark .dark\:block){display:block}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-blue-700){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-500){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-900){--tw-border-opacity: 1;border-color:rgb(17 24 39 / var(--tw-border-opacity))}:is(.dark .dark\:border-purple-700){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity))}:is(.dark .dark\:border-red-700){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity))}:is(.dark .dark\:bg-blue-900){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800\/50){background-color:#1f293780}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-950){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-900){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-900){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}:is(.dark .dark\:from-gray-900){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}:is(.dark .dark\:to-gray-800){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}:is(.dark .dark\:stroke-gray-400){stroke:#9ca3af}:is(.dark .dark\:stroke-gray-700){stroke:#374151}:is(.dark .dark\:text-blue-300){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-100){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-600){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}:is(.dark .dark\:text-purple-300){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity))}:is(.dark .dark\:text-red-300){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity))}:is(.dark .dark\:hover\:bg-gray-700:hover){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-800:hover){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-gray-500:hover){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:text-gray-500:focus){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:col-span-10{grid-column:span 10 / span 10}.sm\:col-span-11{grid-column:span 11 / span 11}.sm\:col-span-12{grid-column:span 12 / span 12}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-5{grid-column:span 5 / span 5}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:col-span-7{grid-column:span 7 / span 7}.sm\:col-span-8{grid-column:span 8 / span 8}.sm\:col-span-9{grid-column:span 9 / span 9}.sm\:col-span-full{grid-column:1 / -1}.sm\:row-span-1{grid-row:span 1 / span 1}.sm\:row-span-2{grid-row:span 2 / span 2}.sm\:row-span-3{grid-row:span 3 / span 3}.sm\:row-span-4{grid-row:span 4 / span 4}.sm\:row-span-5{grid-row:span 5 / span 5}.sm\:row-span-6{grid-row:span 6 / span 6}.sm\:row-span-full{grid-row:1 / -1}.sm\:h-0{height:0px}.sm\:h-0\.5{height:.125rem}.sm\:h-1{height:.25rem}.sm\:h-1\.5{height:.375rem}.sm\:h-1\/2{height:50%}.sm\:h-1\/3{height:33.333333%}.sm\:h-1\/4{height:25%}.sm\:h-1\/5{height:20%}.sm\:h-1\/6{height:16.666667%}.sm\:h-10{height:2.5rem}.sm\:h-11{height:2.75rem}.sm\:h-12{height:3rem}.sm\:h-128{height:32rem}.sm\:h-14{height:3.5rem}.sm\:h-16{height:4rem}.sm\:h-2{height:.5rem}.sm\:h-2\.5{height:.625rem}.sm\:h-2\/3{height:66.666667%}.sm\:h-2\/4{height:50%}.sm\:h-2\/5{height:40%}.sm\:h-2\/6{height:33.333333%}.sm\:h-20{height:5rem}.sm\:h-24{height:6rem}.sm\:h-28{height:7rem}.sm\:h-3{height:.75rem}.sm\:h-3\.5{height:.875rem}.sm\:h-3\/4{height:75%}.sm\:h-3\/5{height:60%}.sm\:h-3\/6{height:50%}.sm\:h-32{height:8rem}.sm\:h-36{height:9rem}.sm\:h-4{height:1rem}.sm\:h-4\/5{height:80%}.sm\:h-4\/6{height:66.666667%}.sm\:h-40{height:10rem}.sm\:h-44{height:11rem}.sm\:h-48{height:12rem}.sm\:h-5{height:1.25rem}.sm\:h-5\/6{height:83.333333%}.sm\:h-52{height:13rem}.sm\:h-56{height:14rem}.sm\:h-6{height:1.5rem}.sm\:h-60{height:15rem}.sm\:h-64{height:16rem}.sm\:h-7{height:1.75rem}.sm\:h-72{height:18rem}.sm\:h-8{height:2rem}.sm\:h-80{height:20rem}.sm\:h-9{height:2.25rem}.sm\:h-96{height:24rem}.sm\:max-h-0{max-height:0px}.sm\:max-h-0\.5{max-height:.125rem}.sm\:max-h-1{max-height:.25rem}.sm\:max-h-1\.5{max-height:.375rem}.sm\:max-h-10{max-height:2.5rem}.sm\:max-h-11{max-height:2.75rem}.sm\:max-h-12{max-height:3rem}.sm\:max-h-14{max-height:3.5rem}.sm\:max-h-16{max-height:4rem}.sm\:max-h-2{max-height:.5rem}.sm\:max-h-2\.5{max-height:.625rem}.sm\:max-h-20{max-height:5rem}.sm\:max-h-24{max-height:6rem}.sm\:max-h-28{max-height:7rem}.sm\:max-h-3{max-height:.75rem}.sm\:max-h-3\.5{max-height:.875rem}.sm\:max-h-32{max-height:8rem}.sm\:max-h-36{max-height:9rem}.sm\:max-h-4{max-height:1rem}.sm\:max-h-40{max-height:10rem}.sm\:max-h-44{max-height:11rem}.sm\:max-h-48{max-height:12rem}.sm\:max-h-5{max-height:1.25rem}.sm\:max-h-52{max-height:13rem}.sm\:max-h-56{max-height:14rem}.sm\:max-h-6{max-height:1.5rem}.sm\:max-h-60{max-height:15rem}.sm\:max-h-64{max-height:16rem}.sm\:max-h-7{max-height:1.75rem}.sm\:max-h-72{max-height:18rem}.sm\:max-h-8{max-height:2rem}.sm\:max-h-80{max-height:20rem}.sm\:max-h-9{max-height:2.25rem}.sm\:max-h-96{max-height:24rem}.sm\:min-h-0{min-height:0px}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:p-6{padding:1.5rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-10{grid-column:span 10 / span 10}.md\:col-span-11{grid-column:span 11 / span 11}.md\:col-span-12{grid-column:span 12 / span 12}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-3{grid-column:span 3 / span 3}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-span-7{grid-column:span 7 / span 7}.md\:col-span-8{grid-column:span 8 / span 8}.md\:col-span-9{grid-column:span 9 / span 9}.md\:col-span-full{grid-column:1 / -1}.md\:row-span-1{grid-row:span 1 / span 1}.md\:row-span-2{grid-row:span 2 / span 2}.md\:row-span-3{grid-row:span 3 / span 3}.md\:row-span-4{grid-row:span 4 / span 4}.md\:row-span-5{grid-row:span 5 / span 5}.md\:row-span-6{grid-row:span 6 / span 6}.md\:row-span-full{grid-row:1 / -1}.md\:h-0{height:0px}.md\:h-0\.5{height:.125rem}.md\:h-1{height:.25rem}.md\:h-1\.5{height:.375rem}.md\:h-1\/2{height:50%}.md\:h-1\/3{height:33.333333%}.md\:h-1\/4{height:25%}.md\:h-1\/5{height:20%}.md\:h-1\/6{height:16.666667%}.md\:h-10{height:2.5rem}.md\:h-11{height:2.75rem}.md\:h-12{height:3rem}.md\:h-128{height:32rem}.md\:h-14{height:3.5rem}.md\:h-16{height:4rem}.md\:h-2{height:.5rem}.md\:h-2\.5{height:.625rem}.md\:h-2\/3{height:66.666667%}.md\:h-2\/4{height:50%}.md\:h-2\/5{height:40%}.md\:h-2\/6{height:33.333333%}.md\:h-20{height:5rem}.md\:h-24{height:6rem}.md\:h-28{height:7rem}.md\:h-3{height:.75rem}.md\:h-3\.5{height:.875rem}.md\:h-3\/4{height:75%}.md\:h-3\/5{height:60%}.md\:h-3\/6{height:50%}.md\:h-32{height:8rem}.md\:h-36{height:9rem}.md\:h-4{height:1rem}.md\:h-4\/5{height:80%}.md\:h-4\/6{height:66.666667%}.md\:h-40{height:10rem}.md\:h-44{height:11rem}.md\:h-48{height:12rem}.md\:h-5{height:1.25rem}.md\:h-5\/6{height:83.333333%}.md\:h-52{height:13rem}.md\:h-56{height:14rem}.md\:h-6{height:1.5rem}.md\:h-60{height:15rem}.md\:h-64{height:16rem}.md\:h-7{height:1.75rem}.md\:h-72{height:18rem}.md\:h-8{height:2rem}.md\:h-80{height:20rem}.md\:h-9{height:2.25rem}.md\:h-96{height:24rem}.md\:max-h-0{max-height:0px}.md\:max-h-0\.5{max-height:.125rem}.md\:max-h-1{max-height:.25rem}.md\:max-h-1\.5{max-height:.375rem}.md\:max-h-10{max-height:2.5rem}.md\:max-h-11{max-height:2.75rem}.md\:max-h-12{max-height:3rem}.md\:max-h-14{max-height:3.5rem}.md\:max-h-16{max-height:4rem}.md\:max-h-2{max-height:.5rem}.md\:max-h-2\.5{max-height:.625rem}.md\:max-h-20{max-height:5rem}.md\:max-h-24{max-height:6rem}.md\:max-h-28{max-height:7rem}.md\:max-h-3{max-height:.75rem}.md\:max-h-3\.5{max-height:.875rem}.md\:max-h-32{max-height:8rem}.md\:max-h-36{max-height:9rem}.md\:max-h-4{max-height:1rem}.md\:max-h-40{max-height:10rem}.md\:max-h-44{max-height:11rem}.md\:max-h-48{max-height:12rem}.md\:max-h-5{max-height:1.25rem}.md\:max-h-52{max-height:13rem}.md\:max-h-56{max-height:14rem}.md\:max-h-6{max-height:1.5rem}.md\:max-h-60{max-height:15rem}.md\:max-h-64{max-height:16rem}.md\:max-h-7{max-height:1.75rem}.md\:max-h-72{max-height:18rem}.md\:max-h-8{max-height:2rem}.md\:max-h-80{max-height:20rem}.md\:max-h-9{max-height:2.25rem}.md\:max-h-96{max-height:24rem}.md\:min-h-0{min-height:0px}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-10{grid-column:span 10 / span 10}.lg\:col-span-11{grid-column:span 11 / span 11}.lg\:col-span-12{grid-column:span 12 / span 12}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-5{grid-column:span 5 / span 5}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-span-9{grid-column:span 9 / span 9}.lg\:col-span-full{grid-column:1 / -1}.lg\:row-span-1{grid-row:span 1 / span 1}.lg\:row-span-2{grid-row:span 2 / span 2}.lg\:row-span-3{grid-row:span 3 / span 3}.lg\:row-span-4{grid-row:span 4 / span 4}.lg\:row-span-5{grid-row:span 5 / span 5}.lg\:row-span-6{grid-row:span 6 / span 6}.lg\:row-span-full{grid-row:1 / -1}.lg\:h-0{height:0px}.lg\:h-0\.5{height:.125rem}.lg\:h-1{height:.25rem}.lg\:h-1\.5{height:.375rem}.lg\:h-1\/2{height:50%}.lg\:h-1\/3{height:33.333333%}.lg\:h-1\/4{height:25%}.lg\:h-1\/5{height:20%}.lg\:h-1\/6{height:16.666667%}.lg\:h-10{height:2.5rem}.lg\:h-11{height:2.75rem}.lg\:h-12{height:3rem}.lg\:h-128{height:32rem}.lg\:h-14{height:3.5rem}.lg\:h-16{height:4rem}.lg\:h-2{height:.5rem}.lg\:h-2\.5{height:.625rem}.lg\:h-2\/3{height:66.666667%}.lg\:h-2\/4{height:50%}.lg\:h-2\/5{height:40%}.lg\:h-2\/6{height:33.333333%}.lg\:h-20{height:5rem}.lg\:h-24{height:6rem}.lg\:h-28{height:7rem}.lg\:h-3{height:.75rem}.lg\:h-3\.5{height:.875rem}.lg\:h-3\/4{height:75%}.lg\:h-3\/5{height:60%}.lg\:h-3\/6{height:50%}.lg\:h-32{height:8rem}.lg\:h-36{height:9rem}.lg\:h-4{height:1rem}.lg\:h-4\/5{height:80%}.lg\:h-4\/6{height:66.666667%}.lg\:h-40{height:10rem}.lg\:h-44{height:11rem}.lg\:h-48{height:12rem}.lg\:h-5{height:1.25rem}.lg\:h-5\/6{height:83.333333%}.lg\:h-52{height:13rem}.lg\:h-56{height:14rem}.lg\:h-6{height:1.5rem}.lg\:h-60{height:15rem}.lg\:h-64{height:16rem}.lg\:h-7{height:1.75rem}.lg\:h-72{height:18rem}.lg\:h-8{height:2rem}.lg\:h-80{height:20rem}.lg\:h-9{height:2.25rem}.lg\:h-96{height:24rem}.lg\:max-h-0{max-height:0px}.lg\:max-h-0\.5{max-height:.125rem}.lg\:max-h-1{max-height:.25rem}.lg\:max-h-1\.5{max-height:.375rem}.lg\:max-h-10{max-height:2.5rem}.lg\:max-h-11{max-height:2.75rem}.lg\:max-h-12{max-height:3rem}.lg\:max-h-14{max-height:3.5rem}.lg\:max-h-16{max-height:4rem}.lg\:max-h-2{max-height:.5rem}.lg\:max-h-2\.5{max-height:.625rem}.lg\:max-h-20{max-height:5rem}.lg\:max-h-24{max-height:6rem}.lg\:max-h-28{max-height:7rem}.lg\:max-h-3{max-height:.75rem}.lg\:max-h-3\.5{max-height:.875rem}.lg\:max-h-32{max-height:8rem}.lg\:max-h-36{max-height:9rem}.lg\:max-h-4{max-height:1rem}.lg\:max-h-40{max-height:10rem}.lg\:max-h-44{max-height:11rem}.lg\:max-h-48{max-height:12rem}.lg\:max-h-5{max-height:1.25rem}.lg\:max-h-52{max-height:13rem}.lg\:max-h-56{max-height:14rem}.lg\:max-h-6{max-height:1.5rem}.lg\:max-h-60{max-height:15rem}.lg\:max-h-64{max-height:16rem}.lg\:max-h-7{max-height:1.75rem}.lg\:max-h-72{max-height:18rem}.lg\:max-h-8{max-height:2rem}.lg\:max-h-80{max-height:20rem}.lg\:max-h-9{max-height:2.25rem}.lg\:max-h-96{max-height:24rem}.lg\:min-h-0{min-height:0px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:lg\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:lg\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:lg\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:lg\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:lg\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:lg\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:lg\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:lg\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:lg\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:lg\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:lg\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:lg\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:lg\:col-span-full){grid-column:1 / -1}html :where(.default\:lg\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:lg\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:lg\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:lg\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:lg\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:lg\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:lg\:row-span-full){grid-row:1 / -1}html :where(.default\:lg\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-10{grid-column:span 10 / span 10}.xl\:col-span-11{grid-column:span 11 / span 11}.xl\:col-span-12{grid-column:span 12 / span 12}.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-5{grid-column:span 5 / span 5}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-7{grid-column:span 7 / span 7}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-span-full{grid-column:1 / -1}.xl\:row-span-1{grid-row:span 1 / span 1}.xl\:row-span-2{grid-row:span 2 / span 2}.xl\:row-span-3{grid-row:span 3 / span 3}.xl\:row-span-4{grid-row:span 4 / span 4}.xl\:row-span-5{grid-row:span 5 / span 5}.xl\:row-span-6{grid-row:span 6 / span 6}.xl\:row-span-full{grid-row:1 / -1}.xl\:h-0{height:0px}.xl\:h-0\.5{height:.125rem}.xl\:h-1{height:.25rem}.xl\:h-1\.5{height:.375rem}.xl\:h-1\/2{height:50%}.xl\:h-1\/3{height:33.333333%}.xl\:h-1\/4{height:25%}.xl\:h-1\/5{height:20%}.xl\:h-1\/6{height:16.666667%}.xl\:h-10{height:2.5rem}.xl\:h-11{height:2.75rem}.xl\:h-12{height:3rem}.xl\:h-128{height:32rem}.xl\:h-14{height:3.5rem}.xl\:h-16{height:4rem}.xl\:h-2{height:.5rem}.xl\:h-2\.5{height:.625rem}.xl\:h-2\/3{height:66.666667%}.xl\:h-2\/4{height:50%}.xl\:h-2\/5{height:40%}.xl\:h-2\/6{height:33.333333%}.xl\:h-20{height:5rem}.xl\:h-24{height:6rem}.xl\:h-28{height:7rem}.xl\:h-3{height:.75rem}.xl\:h-3\.5{height:.875rem}.xl\:h-3\/4{height:75%}.xl\:h-3\/5{height:60%}.xl\:h-3\/6{height:50%}.xl\:h-32{height:8rem}.xl\:h-36{height:9rem}.xl\:h-4{height:1rem}.xl\:h-4\/5{height:80%}.xl\:h-4\/6{height:66.666667%}.xl\:h-40{height:10rem}.xl\:h-44{height:11rem}.xl\:h-48{height:12rem}.xl\:h-5{height:1.25rem}.xl\:h-5\/6{height:83.333333%}.xl\:h-52{height:13rem}.xl\:h-56{height:14rem}.xl\:h-6{height:1.5rem}.xl\:h-60{height:15rem}.xl\:h-64{height:16rem}.xl\:h-7{height:1.75rem}.xl\:h-72{height:18rem}.xl\:h-8{height:2rem}.xl\:h-80{height:20rem}.xl\:h-9{height:2.25rem}.xl\:h-96{height:24rem}.xl\:max-h-0{max-height:0px}.xl\:max-h-0\.5{max-height:.125rem}.xl\:max-h-1{max-height:.25rem}.xl\:max-h-1\.5{max-height:.375rem}.xl\:max-h-10{max-height:2.5rem}.xl\:max-h-11{max-height:2.75rem}.xl\:max-h-12{max-height:3rem}.xl\:max-h-14{max-height:3.5rem}.xl\:max-h-16{max-height:4rem}.xl\:max-h-2{max-height:.5rem}.xl\:max-h-2\.5{max-height:.625rem}.xl\:max-h-20{max-height:5rem}.xl\:max-h-24{max-height:6rem}.xl\:max-h-28{max-height:7rem}.xl\:max-h-3{max-height:.75rem}.xl\:max-h-3\.5{max-height:.875rem}.xl\:max-h-32{max-height:8rem}.xl\:max-h-36{max-height:9rem}.xl\:max-h-4{max-height:1rem}.xl\:max-h-40{max-height:10rem}.xl\:max-h-44{max-height:11rem}.xl\:max-h-48{max-height:12rem}.xl\:max-h-5{max-height:1.25rem}.xl\:max-h-52{max-height:13rem}.xl\:max-h-56{max-height:14rem}.xl\:max-h-6{max-height:1.5rem}.xl\:max-h-60{max-height:15rem}.xl\:max-h-64{max-height:16rem}.xl\:max-h-7{max-height:1.75rem}.xl\:max-h-72{max-height:18rem}.xl\:max-h-8{max-height:2rem}.xl\:max-h-80{max-height:20rem}.xl\:max-h-9{max-height:2.25rem}.xl\:max-h-96{max-height:24rem}.xl\:min-h-0{min-height:0px}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:pr-12{padding-right:3rem}}@media (min-width: 1536px){.\32xl\:col-span-1{grid-column:span 1 / span 1}.\32xl\:col-span-10{grid-column:span 10 / span 10}.\32xl\:col-span-11{grid-column:span 11 / span 11}.\32xl\:col-span-12{grid-column:span 12 / span 12}.\32xl\:col-span-2{grid-column:span 2 / span 2}.\32xl\:col-span-3{grid-column:span 3 / span 3}.\32xl\:col-span-4{grid-column:span 4 / span 4}.\32xl\:col-span-5{grid-column:span 5 / span 5}.\32xl\:col-span-6{grid-column:span 6 / span 6}.\32xl\:col-span-7{grid-column:span 7 / span 7}.\32xl\:col-span-8{grid-column:span 8 / span 8}.\32xl\:col-span-9{grid-column:span 9 / span 9}.\32xl\:col-span-full{grid-column:1 / -1}.\32xl\:row-span-1{grid-row:span 1 / span 1}.\32xl\:row-span-2{grid-row:span 2 / span 2}.\32xl\:row-span-3{grid-row:span 3 / span 3}.\32xl\:row-span-4{grid-row:span 4 / span 4}.\32xl\:row-span-5{grid-row:span 5 / span 5}.\32xl\:row-span-6{grid-row:span 6 / span 6}.\32xl\:row-span-full{grid-row:1 / -1}.\32xl\:h-0{height:0px}.\32xl\:h-0\.5{height:.125rem}.\32xl\:h-1{height:.25rem}.\32xl\:h-1\.5{height:.375rem}.\32xl\:h-1\/2{height:50%}.\32xl\:h-1\/3{height:33.333333%}.\32xl\:h-1\/4{height:25%}.\32xl\:h-1\/5{height:20%}.\32xl\:h-1\/6{height:16.666667%}.\32xl\:h-10{height:2.5rem}.\32xl\:h-11{height:2.75rem}.\32xl\:h-12{height:3rem}.\32xl\:h-128{height:32rem}.\32xl\:h-14{height:3.5rem}.\32xl\:h-16{height:4rem}.\32xl\:h-2{height:.5rem}.\32xl\:h-2\.5{height:.625rem}.\32xl\:h-2\/3{height:66.666667%}.\32xl\:h-2\/4{height:50%}.\32xl\:h-2\/5{height:40%}.\32xl\:h-2\/6{height:33.333333%}.\32xl\:h-20{height:5rem}.\32xl\:h-24{height:6rem}.\32xl\:h-28{height:7rem}.\32xl\:h-3{height:.75rem}.\32xl\:h-3\.5{height:.875rem}.\32xl\:h-3\/4{height:75%}.\32xl\:h-3\/5{height:60%}.\32xl\:h-3\/6{height:50%}.\32xl\:h-32{height:8rem}.\32xl\:h-36{height:9rem}.\32xl\:h-4{height:1rem}.\32xl\:h-4\/5{height:80%}.\32xl\:h-4\/6{height:66.666667%}.\32xl\:h-40{height:10rem}.\32xl\:h-44{height:11rem}.\32xl\:h-48{height:12rem}.\32xl\:h-5{height:1.25rem}.\32xl\:h-5\/6{height:83.333333%}.\32xl\:h-52{height:13rem}.\32xl\:h-56{height:14rem}.\32xl\:h-6{height:1.5rem}.\32xl\:h-60{height:15rem}.\32xl\:h-64{height:16rem}.\32xl\:h-7{height:1.75rem}.\32xl\:h-72{height:18rem}.\32xl\:h-8{height:2rem}.\32xl\:h-80{height:20rem}.\32xl\:h-9{height:2.25rem}.\32xl\:h-96{height:24rem}.\32xl\:max-h-0{max-height:0px}.\32xl\:max-h-0\.5{max-height:.125rem}.\32xl\:max-h-1{max-height:.25rem}.\32xl\:max-h-1\.5{max-height:.375rem}.\32xl\:max-h-10{max-height:2.5rem}.\32xl\:max-h-11{max-height:2.75rem}.\32xl\:max-h-12{max-height:3rem}.\32xl\:max-h-14{max-height:3.5rem}.\32xl\:max-h-16{max-height:4rem}.\32xl\:max-h-2{max-height:.5rem}.\32xl\:max-h-2\.5{max-height:.625rem}.\32xl\:max-h-20{max-height:5rem}.\32xl\:max-h-24{max-height:6rem}.\32xl\:max-h-28{max-height:7rem}.\32xl\:max-h-3{max-height:.75rem}.\32xl\:max-h-3\.5{max-height:.875rem}.\32xl\:max-h-32{max-height:8rem}.\32xl\:max-h-36{max-height:9rem}.\32xl\:max-h-4{max-height:1rem}.\32xl\:max-h-40{max-height:10rem}.\32xl\:max-h-44{max-height:11rem}.\32xl\:max-h-48{max-height:12rem}.\32xl\:max-h-5{max-height:1.25rem}.\32xl\:max-h-52{max-height:13rem}.\32xl\:max-h-56{max-height:14rem}.\32xl\:max-h-6{max-height:1.5rem}.\32xl\:max-h-60{max-height:15rem}.\32xl\:max-h-64{max-height:16rem}.\32xl\:max-h-7{max-height:1.75rem}.\32xl\:max-h-72{max-height:18rem}.\32xl\:max-h-8{max-height:2rem}.\32xl\:max-h-80{max-height:20rem}.\32xl\:max-h-9{max-height:2.25rem}.\32xl\:max-h-96{max-height:24rem}.\32xl\:min-h-0{min-height:0px}.\32xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.\32xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.\32xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.\32xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.\32xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\32xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\32xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.\32xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.\32xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}.\[\&\:nth-child\(1n\+15\)\]\:border-t:nth-child(n+15){border-top-width:1px}.\[\&\>svg\]\:h-6>svg{height:1.5rem}.\[\&\>svg\]\:w-6>svg{width:1.5rem}.\[\&\>svg\]\:flex-shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:stroke-gray-400>svg{stroke:#9ca3af}:is(.dark .\[\&\>svg\]\:dark\:stroke-gray-600)>svg{stroke:#4b5563} +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;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-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 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:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--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)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--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: rgb(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: rgb(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}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.col-span-1{grid-column:span 1 / span 1}.col-span-10{grid-column:span 10 / span 10}.col-span-11{grid-column:span 11 / span 11}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-5{grid-column:span 5 / span 5}.col-span-6{grid-column:span 6 / span 6}.col-span-7{grid-column:span 7 / span 7}.col-span-8{grid-column:span 8 / span 8}.col-span-9{grid-column:span 9 / span 9}.col-span-full{grid-column:1 / -1}.row-span-1{grid-row:span 1 / span 1}.row-span-2{grid-row:span 2 / span 2}.row-span-3{grid-row:span 3 / span 3}.row-span-4{grid-row:span 4 / span 4}.row-span-5{grid-row:span 5 / span 5}.row-span-6{grid-row:span 6 / span 6}.row-span-full{grid-row:1 / -1}.mx-auto{margin-left:auto;margin-right:auto}.mx-px{margin-left:1px;margin-right:1px}.mb-3{margin-bottom:.75rem}.mb-px{margin-bottom:1px}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-1\/3{height:33.333333%}.h-1\/4{height:25%}.h-1\/5{height:20%}.h-1\/6{height:16.666667%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-128{height:32rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/3{height:66.666667%}.h-2\/4{height:50%}.h-2\/5{height:40%}.h-2\/6{height:33.333333%}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-3\/4{height:75%}.h-3\/5{height:60%}.h-3\/6{height:50%}.h-32{height:8rem}.h-36{height:9rem}.h-4{height:1rem}.h-4\/5{height:80%}.h-4\/6{height:66.666667%}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\/6{height:83.333333%}.h-52{height:13rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[30px\]{height:30px}.h-\[52px\]{height:52px}.max-h-0{max-height:0px}.max-h-0\.5{max-height:.125rem}.max-h-1{max-height:.25rem}.max-h-1\.5{max-height:.375rem}.max-h-10{max-height:2.5rem}.max-h-11{max-height:2.75rem}.max-h-12{max-height:3rem}.max-h-14{max-height:3.5rem}.max-h-16{max-height:4rem}.max-h-2{max-height:.5rem}.max-h-2\.5{max-height:.625rem}.max-h-20{max-height:5rem}.max-h-24{max-height:6rem}.max-h-28{max-height:7rem}.max-h-3{max-height:.75rem}.max-h-3\.5{max-height:.875rem}.max-h-32{max-height:8rem}.max-h-36{max-height:9rem}.max-h-4{max-height:1rem}.max-h-40{max-height:10rem}.max-h-44{max-height:11rem}.max-h-48{max-height:12rem}.max-h-5{max-height:1.25rem}.max-h-52{max-height:13rem}.max-h-56{max-height:14rem}.max-h-6{max-height:1.5rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-7{max-height:1.75rem}.max-h-72{max-height:18rem}.max-h-8{max-height:2rem}.max-h-80{max-height:20rem}.max-h-9{max-height:2.25rem}.max-h-96{max-height:24rem}.min-h-0{min-height:0px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\/12{width:8.333333%}.w-1\/2{width:50%}.w-14{width:3.5rem}.w-2\/12{width:16.666667%}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/12{width:25%}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-\[42rem\]{min-width:42rem}.max-w-\[1px\]{max-width:1px}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-\[10000\]{flex-grow:10000}.basis-0{flex-basis:0px}.basis-56{flex-basis:14rem}.basis-full{flex-basis:100%}.origin-bottom{transform-origin:bottom}.origin-top-right{transform-origin:top right}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-\[max-content\,minmax\(max-content\,1fr\)\,max-content\,minmax\(0\,2fr\)\,max-content\,minmax\(0\,2fr\)\,minmax\(max-content\,1fr\)\]{grid-template-columns:max-content minmax(max-content,1fr) max-content minmax(0,2fr) max-content minmax(0,2fr) minmax(max-content,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity))}.bg-\[\#9333ea\]{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity))}.bg-\[\#e11d48\]{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity))}.bg-\[rgba\(147\,51\,234\,0\.5\)\]{background-color:#9333ea80}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-500{stroke:#6b7280}.stroke-red-500{stroke:#ef4444}.\!p-0{padding:0!important}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-12{padding-bottom:3rem}.pb-px{padding-bottom:1px}.pl-3{padding-left:.75rem}.pr-8{padding-right:2rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-25{opacity:.25}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 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)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-gray-900\/10{--tw-ring-color: rgb(17 24 39 / .1)}.ring-gray-900\/5{--tw-ring-color: rgb(17 24 39 / .05)}.\@container{container-type:inline-size}.\@container\/scroll-wrapper{container-type:inline-size;container-name:scroll-wrapper}.\[scrollbar-color\:theme\(colors\.gray\.500\)_transparent\]{scrollbar-color:#6b7280 transparent}.\[scrollbar-width\:thin\]{scrollbar-width:thin}[x-cloak]{display:none}.first\:h-0:first-child{height:0px}.first\:rounded-l-md:first-child{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.first\:pl-3:first-child{padding-left:.75rem}.last\:rounded-r-md:last-child{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.last\:pr-3:last-child{padding-right:.75rem}.focus-within\:ring:focus-within{--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.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(0px + 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)}@container (min-width: 24rem){.\@sm\:block{display:block}.\@sm\:px-3{padding-left:.75rem;padding-right:.75rem}}@container (min-width: 28rem){.\@md\:mb-6{margin-bottom:1.5rem}}@container (min-width: 32rem){.\@lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 48rem){.\@3xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 72rem){.\@6xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}html :where(.default\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:col-span-full){grid-column:1 / -1}html :where(.default\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:row-span-full){grid-row:1 / -1}html :where(.default\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:gap-6){gap:1.5rem}:is(.dark .dark\:block){display:block}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-blue-700){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-500){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-900){--tw-border-opacity: 1;border-color:rgb(17 24 39 / var(--tw-border-opacity))}:is(.dark .dark\:border-purple-700){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity))}:is(.dark .dark\:border-red-700){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity))}:is(.dark .dark\:bg-blue-900){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800\/50){background-color:#1f293780}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-950){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-900){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-900){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}:is(.dark .dark\:from-gray-900){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}:is(.dark .dark\:to-gray-800){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}:is(.dark .dark\:stroke-gray-400){stroke:#9ca3af}:is(.dark .dark\:stroke-gray-700){stroke:#374151}:is(.dark .dark\:text-blue-300){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-100){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-600){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}:is(.dark .dark\:text-purple-300){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity))}:is(.dark .dark\:text-red-300){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity))}:is(.dark .dark\:ring-gray-100\/10){--tw-ring-color: rgb(243 244 246 / .1)}:is(.dark .dark\:hover\:bg-gray-700:hover){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-800:hover){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-gray-500:hover){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:text-gray-500:focus){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:col-span-10{grid-column:span 10 / span 10}.sm\:col-span-11{grid-column:span 11 / span 11}.sm\:col-span-12{grid-column:span 12 / span 12}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-5{grid-column:span 5 / span 5}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:col-span-7{grid-column:span 7 / span 7}.sm\:col-span-8{grid-column:span 8 / span 8}.sm\:col-span-9{grid-column:span 9 / span 9}.sm\:col-span-full{grid-column:1 / -1}.sm\:row-span-1{grid-row:span 1 / span 1}.sm\:row-span-2{grid-row:span 2 / span 2}.sm\:row-span-3{grid-row:span 3 / span 3}.sm\:row-span-4{grid-row:span 4 / span 4}.sm\:row-span-5{grid-row:span 5 / span 5}.sm\:row-span-6{grid-row:span 6 / span 6}.sm\:row-span-full{grid-row:1 / -1}.sm\:h-0{height:0px}.sm\:h-0\.5{height:.125rem}.sm\:h-1{height:.25rem}.sm\:h-1\.5{height:.375rem}.sm\:h-1\/2{height:50%}.sm\:h-1\/3{height:33.333333%}.sm\:h-1\/4{height:25%}.sm\:h-1\/5{height:20%}.sm\:h-1\/6{height:16.666667%}.sm\:h-10{height:2.5rem}.sm\:h-11{height:2.75rem}.sm\:h-12{height:3rem}.sm\:h-128{height:32rem}.sm\:h-14{height:3.5rem}.sm\:h-16{height:4rem}.sm\:h-2{height:.5rem}.sm\:h-2\.5{height:.625rem}.sm\:h-2\/3{height:66.666667%}.sm\:h-2\/4{height:50%}.sm\:h-2\/5{height:40%}.sm\:h-2\/6{height:33.333333%}.sm\:h-20{height:5rem}.sm\:h-24{height:6rem}.sm\:h-28{height:7rem}.sm\:h-3{height:.75rem}.sm\:h-3\.5{height:.875rem}.sm\:h-3\/4{height:75%}.sm\:h-3\/5{height:60%}.sm\:h-3\/6{height:50%}.sm\:h-32{height:8rem}.sm\:h-36{height:9rem}.sm\:h-4{height:1rem}.sm\:h-4\/5{height:80%}.sm\:h-4\/6{height:66.666667%}.sm\:h-40{height:10rem}.sm\:h-44{height:11rem}.sm\:h-48{height:12rem}.sm\:h-5{height:1.25rem}.sm\:h-5\/6{height:83.333333%}.sm\:h-52{height:13rem}.sm\:h-56{height:14rem}.sm\:h-6{height:1.5rem}.sm\:h-60{height:15rem}.sm\:h-64{height:16rem}.sm\:h-7{height:1.75rem}.sm\:h-72{height:18rem}.sm\:h-8{height:2rem}.sm\:h-80{height:20rem}.sm\:h-9{height:2.25rem}.sm\:h-96{height:24rem}.sm\:max-h-0{max-height:0px}.sm\:max-h-0\.5{max-height:.125rem}.sm\:max-h-1{max-height:.25rem}.sm\:max-h-1\.5{max-height:.375rem}.sm\:max-h-10{max-height:2.5rem}.sm\:max-h-11{max-height:2.75rem}.sm\:max-h-12{max-height:3rem}.sm\:max-h-14{max-height:3.5rem}.sm\:max-h-16{max-height:4rem}.sm\:max-h-2{max-height:.5rem}.sm\:max-h-2\.5{max-height:.625rem}.sm\:max-h-20{max-height:5rem}.sm\:max-h-24{max-height:6rem}.sm\:max-h-28{max-height:7rem}.sm\:max-h-3{max-height:.75rem}.sm\:max-h-3\.5{max-height:.875rem}.sm\:max-h-32{max-height:8rem}.sm\:max-h-36{max-height:9rem}.sm\:max-h-4{max-height:1rem}.sm\:max-h-40{max-height:10rem}.sm\:max-h-44{max-height:11rem}.sm\:max-h-48{max-height:12rem}.sm\:max-h-5{max-height:1.25rem}.sm\:max-h-52{max-height:13rem}.sm\:max-h-56{max-height:14rem}.sm\:max-h-6{max-height:1.5rem}.sm\:max-h-60{max-height:15rem}.sm\:max-h-64{max-height:16rem}.sm\:max-h-7{max-height:1.75rem}.sm\:max-h-72{max-height:18rem}.sm\:max-h-8{max-height:2rem}.sm\:max-h-80{max-height:20rem}.sm\:max-h-9{max-height:2.25rem}.sm\:max-h-96{max-height:24rem}.sm\:min-h-0{min-height:0px}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:p-6{padding:1.5rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-10{grid-column:span 10 / span 10}.md\:col-span-11{grid-column:span 11 / span 11}.md\:col-span-12{grid-column:span 12 / span 12}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-3{grid-column:span 3 / span 3}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-span-7{grid-column:span 7 / span 7}.md\:col-span-8{grid-column:span 8 / span 8}.md\:col-span-9{grid-column:span 9 / span 9}.md\:col-span-full{grid-column:1 / -1}.md\:row-span-1{grid-row:span 1 / span 1}.md\:row-span-2{grid-row:span 2 / span 2}.md\:row-span-3{grid-row:span 3 / span 3}.md\:row-span-4{grid-row:span 4 / span 4}.md\:row-span-5{grid-row:span 5 / span 5}.md\:row-span-6{grid-row:span 6 / span 6}.md\:row-span-full{grid-row:1 / -1}.md\:h-0{height:0px}.md\:h-0\.5{height:.125rem}.md\:h-1{height:.25rem}.md\:h-1\.5{height:.375rem}.md\:h-1\/2{height:50%}.md\:h-1\/3{height:33.333333%}.md\:h-1\/4{height:25%}.md\:h-1\/5{height:20%}.md\:h-1\/6{height:16.666667%}.md\:h-10{height:2.5rem}.md\:h-11{height:2.75rem}.md\:h-12{height:3rem}.md\:h-128{height:32rem}.md\:h-14{height:3.5rem}.md\:h-16{height:4rem}.md\:h-2{height:.5rem}.md\:h-2\.5{height:.625rem}.md\:h-2\/3{height:66.666667%}.md\:h-2\/4{height:50%}.md\:h-2\/5{height:40%}.md\:h-2\/6{height:33.333333%}.md\:h-20{height:5rem}.md\:h-24{height:6rem}.md\:h-28{height:7rem}.md\:h-3{height:.75rem}.md\:h-3\.5{height:.875rem}.md\:h-3\/4{height:75%}.md\:h-3\/5{height:60%}.md\:h-3\/6{height:50%}.md\:h-32{height:8rem}.md\:h-36{height:9rem}.md\:h-4{height:1rem}.md\:h-4\/5{height:80%}.md\:h-4\/6{height:66.666667%}.md\:h-40{height:10rem}.md\:h-44{height:11rem}.md\:h-48{height:12rem}.md\:h-5{height:1.25rem}.md\:h-5\/6{height:83.333333%}.md\:h-52{height:13rem}.md\:h-56{height:14rem}.md\:h-6{height:1.5rem}.md\:h-60{height:15rem}.md\:h-64{height:16rem}.md\:h-7{height:1.75rem}.md\:h-72{height:18rem}.md\:h-8{height:2rem}.md\:h-80{height:20rem}.md\:h-9{height:2.25rem}.md\:h-96{height:24rem}.md\:max-h-0{max-height:0px}.md\:max-h-0\.5{max-height:.125rem}.md\:max-h-1{max-height:.25rem}.md\:max-h-1\.5{max-height:.375rem}.md\:max-h-10{max-height:2.5rem}.md\:max-h-11{max-height:2.75rem}.md\:max-h-12{max-height:3rem}.md\:max-h-14{max-height:3.5rem}.md\:max-h-16{max-height:4rem}.md\:max-h-2{max-height:.5rem}.md\:max-h-2\.5{max-height:.625rem}.md\:max-h-20{max-height:5rem}.md\:max-h-24{max-height:6rem}.md\:max-h-28{max-height:7rem}.md\:max-h-3{max-height:.75rem}.md\:max-h-3\.5{max-height:.875rem}.md\:max-h-32{max-height:8rem}.md\:max-h-36{max-height:9rem}.md\:max-h-4{max-height:1rem}.md\:max-h-40{max-height:10rem}.md\:max-h-44{max-height:11rem}.md\:max-h-48{max-height:12rem}.md\:max-h-5{max-height:1.25rem}.md\:max-h-52{max-height:13rem}.md\:max-h-56{max-height:14rem}.md\:max-h-6{max-height:1.5rem}.md\:max-h-60{max-height:15rem}.md\:max-h-64{max-height:16rem}.md\:max-h-7{max-height:1.75rem}.md\:max-h-72{max-height:18rem}.md\:max-h-8{max-height:2rem}.md\:max-h-80{max-height:20rem}.md\:max-h-9{max-height:2.25rem}.md\:max-h-96{max-height:24rem}.md\:min-h-0{min-height:0px}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-10{grid-column:span 10 / span 10}.lg\:col-span-11{grid-column:span 11 / span 11}.lg\:col-span-12{grid-column:span 12 / span 12}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-5{grid-column:span 5 / span 5}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-span-9{grid-column:span 9 / span 9}.lg\:col-span-full{grid-column:1 / -1}.lg\:row-span-1{grid-row:span 1 / span 1}.lg\:row-span-2{grid-row:span 2 / span 2}.lg\:row-span-3{grid-row:span 3 / span 3}.lg\:row-span-4{grid-row:span 4 / span 4}.lg\:row-span-5{grid-row:span 5 / span 5}.lg\:row-span-6{grid-row:span 6 / span 6}.lg\:row-span-full{grid-row:1 / -1}.lg\:h-0{height:0px}.lg\:h-0\.5{height:.125rem}.lg\:h-1{height:.25rem}.lg\:h-1\.5{height:.375rem}.lg\:h-1\/2{height:50%}.lg\:h-1\/3{height:33.333333%}.lg\:h-1\/4{height:25%}.lg\:h-1\/5{height:20%}.lg\:h-1\/6{height:16.666667%}.lg\:h-10{height:2.5rem}.lg\:h-11{height:2.75rem}.lg\:h-12{height:3rem}.lg\:h-128{height:32rem}.lg\:h-14{height:3.5rem}.lg\:h-16{height:4rem}.lg\:h-2{height:.5rem}.lg\:h-2\.5{height:.625rem}.lg\:h-2\/3{height:66.666667%}.lg\:h-2\/4{height:50%}.lg\:h-2\/5{height:40%}.lg\:h-2\/6{height:33.333333%}.lg\:h-20{height:5rem}.lg\:h-24{height:6rem}.lg\:h-28{height:7rem}.lg\:h-3{height:.75rem}.lg\:h-3\.5{height:.875rem}.lg\:h-3\/4{height:75%}.lg\:h-3\/5{height:60%}.lg\:h-3\/6{height:50%}.lg\:h-32{height:8rem}.lg\:h-36{height:9rem}.lg\:h-4{height:1rem}.lg\:h-4\/5{height:80%}.lg\:h-4\/6{height:66.666667%}.lg\:h-40{height:10rem}.lg\:h-44{height:11rem}.lg\:h-48{height:12rem}.lg\:h-5{height:1.25rem}.lg\:h-5\/6{height:83.333333%}.lg\:h-52{height:13rem}.lg\:h-56{height:14rem}.lg\:h-6{height:1.5rem}.lg\:h-60{height:15rem}.lg\:h-64{height:16rem}.lg\:h-7{height:1.75rem}.lg\:h-72{height:18rem}.lg\:h-8{height:2rem}.lg\:h-80{height:20rem}.lg\:h-9{height:2.25rem}.lg\:h-96{height:24rem}.lg\:max-h-0{max-height:0px}.lg\:max-h-0\.5{max-height:.125rem}.lg\:max-h-1{max-height:.25rem}.lg\:max-h-1\.5{max-height:.375rem}.lg\:max-h-10{max-height:2.5rem}.lg\:max-h-11{max-height:2.75rem}.lg\:max-h-12{max-height:3rem}.lg\:max-h-14{max-height:3.5rem}.lg\:max-h-16{max-height:4rem}.lg\:max-h-2{max-height:.5rem}.lg\:max-h-2\.5{max-height:.625rem}.lg\:max-h-20{max-height:5rem}.lg\:max-h-24{max-height:6rem}.lg\:max-h-28{max-height:7rem}.lg\:max-h-3{max-height:.75rem}.lg\:max-h-3\.5{max-height:.875rem}.lg\:max-h-32{max-height:8rem}.lg\:max-h-36{max-height:9rem}.lg\:max-h-4{max-height:1rem}.lg\:max-h-40{max-height:10rem}.lg\:max-h-44{max-height:11rem}.lg\:max-h-48{max-height:12rem}.lg\:max-h-5{max-height:1.25rem}.lg\:max-h-52{max-height:13rem}.lg\:max-h-56{max-height:14rem}.lg\:max-h-6{max-height:1.5rem}.lg\:max-h-60{max-height:15rem}.lg\:max-h-64{max-height:16rem}.lg\:max-h-7{max-height:1.75rem}.lg\:max-h-72{max-height:18rem}.lg\:max-h-8{max-height:2rem}.lg\:max-h-80{max-height:20rem}.lg\:max-h-9{max-height:2.25rem}.lg\:max-h-96{max-height:24rem}.lg\:min-h-0{min-height:0px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:lg\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:lg\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:lg\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:lg\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:lg\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:lg\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:lg\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:lg\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:lg\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:lg\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:lg\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:lg\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:lg\:col-span-full){grid-column:1 / -1}html :where(.default\:lg\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:lg\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:lg\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:lg\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:lg\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:lg\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:lg\:row-span-full){grid-row:1 / -1}html :where(.default\:lg\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-10{grid-column:span 10 / span 10}.xl\:col-span-11{grid-column:span 11 / span 11}.xl\:col-span-12{grid-column:span 12 / span 12}.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-5{grid-column:span 5 / span 5}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-7{grid-column:span 7 / span 7}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-span-full{grid-column:1 / -1}.xl\:row-span-1{grid-row:span 1 / span 1}.xl\:row-span-2{grid-row:span 2 / span 2}.xl\:row-span-3{grid-row:span 3 / span 3}.xl\:row-span-4{grid-row:span 4 / span 4}.xl\:row-span-5{grid-row:span 5 / span 5}.xl\:row-span-6{grid-row:span 6 / span 6}.xl\:row-span-full{grid-row:1 / -1}.xl\:h-0{height:0px}.xl\:h-0\.5{height:.125rem}.xl\:h-1{height:.25rem}.xl\:h-1\.5{height:.375rem}.xl\:h-1\/2{height:50%}.xl\:h-1\/3{height:33.333333%}.xl\:h-1\/4{height:25%}.xl\:h-1\/5{height:20%}.xl\:h-1\/6{height:16.666667%}.xl\:h-10{height:2.5rem}.xl\:h-11{height:2.75rem}.xl\:h-12{height:3rem}.xl\:h-128{height:32rem}.xl\:h-14{height:3.5rem}.xl\:h-16{height:4rem}.xl\:h-2{height:.5rem}.xl\:h-2\.5{height:.625rem}.xl\:h-2\/3{height:66.666667%}.xl\:h-2\/4{height:50%}.xl\:h-2\/5{height:40%}.xl\:h-2\/6{height:33.333333%}.xl\:h-20{height:5rem}.xl\:h-24{height:6rem}.xl\:h-28{height:7rem}.xl\:h-3{height:.75rem}.xl\:h-3\.5{height:.875rem}.xl\:h-3\/4{height:75%}.xl\:h-3\/5{height:60%}.xl\:h-3\/6{height:50%}.xl\:h-32{height:8rem}.xl\:h-36{height:9rem}.xl\:h-4{height:1rem}.xl\:h-4\/5{height:80%}.xl\:h-4\/6{height:66.666667%}.xl\:h-40{height:10rem}.xl\:h-44{height:11rem}.xl\:h-48{height:12rem}.xl\:h-5{height:1.25rem}.xl\:h-5\/6{height:83.333333%}.xl\:h-52{height:13rem}.xl\:h-56{height:14rem}.xl\:h-6{height:1.5rem}.xl\:h-60{height:15rem}.xl\:h-64{height:16rem}.xl\:h-7{height:1.75rem}.xl\:h-72{height:18rem}.xl\:h-8{height:2rem}.xl\:h-80{height:20rem}.xl\:h-9{height:2.25rem}.xl\:h-96{height:24rem}.xl\:max-h-0{max-height:0px}.xl\:max-h-0\.5{max-height:.125rem}.xl\:max-h-1{max-height:.25rem}.xl\:max-h-1\.5{max-height:.375rem}.xl\:max-h-10{max-height:2.5rem}.xl\:max-h-11{max-height:2.75rem}.xl\:max-h-12{max-height:3rem}.xl\:max-h-14{max-height:3.5rem}.xl\:max-h-16{max-height:4rem}.xl\:max-h-2{max-height:.5rem}.xl\:max-h-2\.5{max-height:.625rem}.xl\:max-h-20{max-height:5rem}.xl\:max-h-24{max-height:6rem}.xl\:max-h-28{max-height:7rem}.xl\:max-h-3{max-height:.75rem}.xl\:max-h-3\.5{max-height:.875rem}.xl\:max-h-32{max-height:8rem}.xl\:max-h-36{max-height:9rem}.xl\:max-h-4{max-height:1rem}.xl\:max-h-40{max-height:10rem}.xl\:max-h-44{max-height:11rem}.xl\:max-h-48{max-height:12rem}.xl\:max-h-5{max-height:1.25rem}.xl\:max-h-52{max-height:13rem}.xl\:max-h-56{max-height:14rem}.xl\:max-h-6{max-height:1.5rem}.xl\:max-h-60{max-height:15rem}.xl\:max-h-64{max-height:16rem}.xl\:max-h-7{max-height:1.75rem}.xl\:max-h-72{max-height:18rem}.xl\:max-h-8{max-height:2rem}.xl\:max-h-80{max-height:20rem}.xl\:max-h-9{max-height:2.25rem}.xl\:max-h-96{max-height:24rem}.xl\:min-h-0{min-height:0px}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:pr-12{padding-right:3rem}}@media (min-width: 1536px){.\32xl\:col-span-1{grid-column:span 1 / span 1}.\32xl\:col-span-10{grid-column:span 10 / span 10}.\32xl\:col-span-11{grid-column:span 11 / span 11}.\32xl\:col-span-12{grid-column:span 12 / span 12}.\32xl\:col-span-2{grid-column:span 2 / span 2}.\32xl\:col-span-3{grid-column:span 3 / span 3}.\32xl\:col-span-4{grid-column:span 4 / span 4}.\32xl\:col-span-5{grid-column:span 5 / span 5}.\32xl\:col-span-6{grid-column:span 6 / span 6}.\32xl\:col-span-7{grid-column:span 7 / span 7}.\32xl\:col-span-8{grid-column:span 8 / span 8}.\32xl\:col-span-9{grid-column:span 9 / span 9}.\32xl\:col-span-full{grid-column:1 / -1}.\32xl\:row-span-1{grid-row:span 1 / span 1}.\32xl\:row-span-2{grid-row:span 2 / span 2}.\32xl\:row-span-3{grid-row:span 3 / span 3}.\32xl\:row-span-4{grid-row:span 4 / span 4}.\32xl\:row-span-5{grid-row:span 5 / span 5}.\32xl\:row-span-6{grid-row:span 6 / span 6}.\32xl\:row-span-full{grid-row:1 / -1}.\32xl\:h-0{height:0px}.\32xl\:h-0\.5{height:.125rem}.\32xl\:h-1{height:.25rem}.\32xl\:h-1\.5{height:.375rem}.\32xl\:h-1\/2{height:50%}.\32xl\:h-1\/3{height:33.333333%}.\32xl\:h-1\/4{height:25%}.\32xl\:h-1\/5{height:20%}.\32xl\:h-1\/6{height:16.666667%}.\32xl\:h-10{height:2.5rem}.\32xl\:h-11{height:2.75rem}.\32xl\:h-12{height:3rem}.\32xl\:h-128{height:32rem}.\32xl\:h-14{height:3.5rem}.\32xl\:h-16{height:4rem}.\32xl\:h-2{height:.5rem}.\32xl\:h-2\.5{height:.625rem}.\32xl\:h-2\/3{height:66.666667%}.\32xl\:h-2\/4{height:50%}.\32xl\:h-2\/5{height:40%}.\32xl\:h-2\/6{height:33.333333%}.\32xl\:h-20{height:5rem}.\32xl\:h-24{height:6rem}.\32xl\:h-28{height:7rem}.\32xl\:h-3{height:.75rem}.\32xl\:h-3\.5{height:.875rem}.\32xl\:h-3\/4{height:75%}.\32xl\:h-3\/5{height:60%}.\32xl\:h-3\/6{height:50%}.\32xl\:h-32{height:8rem}.\32xl\:h-36{height:9rem}.\32xl\:h-4{height:1rem}.\32xl\:h-4\/5{height:80%}.\32xl\:h-4\/6{height:66.666667%}.\32xl\:h-40{height:10rem}.\32xl\:h-44{height:11rem}.\32xl\:h-48{height:12rem}.\32xl\:h-5{height:1.25rem}.\32xl\:h-5\/6{height:83.333333%}.\32xl\:h-52{height:13rem}.\32xl\:h-56{height:14rem}.\32xl\:h-6{height:1.5rem}.\32xl\:h-60{height:15rem}.\32xl\:h-64{height:16rem}.\32xl\:h-7{height:1.75rem}.\32xl\:h-72{height:18rem}.\32xl\:h-8{height:2rem}.\32xl\:h-80{height:20rem}.\32xl\:h-9{height:2.25rem}.\32xl\:h-96{height:24rem}.\32xl\:max-h-0{max-height:0px}.\32xl\:max-h-0\.5{max-height:.125rem}.\32xl\:max-h-1{max-height:.25rem}.\32xl\:max-h-1\.5{max-height:.375rem}.\32xl\:max-h-10{max-height:2.5rem}.\32xl\:max-h-11{max-height:2.75rem}.\32xl\:max-h-12{max-height:3rem}.\32xl\:max-h-14{max-height:3.5rem}.\32xl\:max-h-16{max-height:4rem}.\32xl\:max-h-2{max-height:.5rem}.\32xl\:max-h-2\.5{max-height:.625rem}.\32xl\:max-h-20{max-height:5rem}.\32xl\:max-h-24{max-height:6rem}.\32xl\:max-h-28{max-height:7rem}.\32xl\:max-h-3{max-height:.75rem}.\32xl\:max-h-3\.5{max-height:.875rem}.\32xl\:max-h-32{max-height:8rem}.\32xl\:max-h-36{max-height:9rem}.\32xl\:max-h-4{max-height:1rem}.\32xl\:max-h-40{max-height:10rem}.\32xl\:max-h-44{max-height:11rem}.\32xl\:max-h-48{max-height:12rem}.\32xl\:max-h-5{max-height:1.25rem}.\32xl\:max-h-52{max-height:13rem}.\32xl\:max-h-56{max-height:14rem}.\32xl\:max-h-6{max-height:1.5rem}.\32xl\:max-h-60{max-height:15rem}.\32xl\:max-h-64{max-height:16rem}.\32xl\:max-h-7{max-height:1.75rem}.\32xl\:max-h-72{max-height:18rem}.\32xl\:max-h-8{max-height:2rem}.\32xl\:max-h-80{max-height:20rem}.\32xl\:max-h-9{max-height:2.25rem}.\32xl\:max-h-96{max-height:24rem}.\32xl\:min-h-0{min-height:0px}.\32xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.\32xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.\32xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.\32xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.\32xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\32xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\32xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.\32xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.\32xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}.\[\&\:nth-child\(1n\+15\)\]\:border-t:nth-child(n+15){border-top-width:1px}.\[\&\>svg\]\:h-6>svg{height:1.5rem}.\[\&\>svg\]\:w-6>svg{width:1.5rem}.\[\&\>svg\]\:flex-shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:stroke-gray-400>svg{stroke:#9ca3af}:is(.dark .\[\&\>svg\]\:dark\:stroke-gray-600)>svg{stroke:#4b5563} diff --git a/resources/views/livewire/queues.blade.php b/resources/views/livewire/queues.blade.php index c9170d48..aaf1af32 100644 --- a/resources/views/livewire/queues.blade.php +++ b/resources/views/livewire/queues.blade.php @@ -3,38 +3,128 @@ + +
+
+
+ Queued +
+
+
+ Processed +
+
+
+ Failed +
+
+
- - - - - - - - - Name - Pending - Failed - - - - @foreach ($queues as $queue) - - - - {{ $queue['queue'] }}{{ $showConnection ? '('.$queue['connection'].')' : '' }} - - - {{ number_format($queue['size']) }} - - - {{ number_format($queue['failed']) }} - - - @endforeach - - +
+ @foreach ($queues as $queue => $readings) +
+

+ {{ Str::after($queue, ':') }} + @if ($showConnection) + ({{ Str::before($queue, ':') }}) + @endif +

+ @php $latest = $readings->last() @endphp + {{--

Queued: {{ $latest->queued }} --}} + {{-- Failed: {{ $latest->failed }} --}} + {{-- Processed: {{ $latest->processed }}

--}} +
+ +
+
+ @endforeach +
diff --git a/src/Livewire/Queues.php b/src/Livewire/Queues.php index 1f9a6397..e6d7d7c5 100644 --- a/src/Livewire/Queues.php +++ b/src/Livewire/Queues.php @@ -5,13 +5,14 @@ use Illuminate\Contracts\Support\Renderable; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\View; +use Illuminate\Support\Str; use Laravel\Pulse\Queries\Queues as QueuesQuery; use Livewire\Attributes\Lazy; #[Lazy] class Queues extends Card { - use Concerns\ShouldNotReportUsage; + use Concerns\HasPeriod, Concerns\ShouldNotReportUsage; /** * Render the component. @@ -19,8 +20,8 @@ class Queues extends Card public function render(QueuesQuery $query): Renderable { return View::make('pulse::livewire.queues', [ - 'queues' => $queues = Cache::remember('laravel:pulse:queues:live', 5, fn () => $query()), - 'showConnection' => $queues->pluck('connection')->unique()->count() > 1, + 'queues' => $queues = Cache::remember('laravel:pulse:queues', 5, fn () => $query($this->periodAsInterval())), + 'showConnection' => $queues->keys()->map(fn ($queue) => Str::before($queue, ':'))->unique()->count() > 1, ]); } } diff --git a/src/Queries/Queues.php b/src/Queries/Queues.php index 1539fc8b..e70d2350 100644 --- a/src/Queries/Queues.php +++ b/src/Queries/Queues.php @@ -2,25 +2,28 @@ namespace Laravel\Pulse\Queries; +use Carbon\CarbonImmutable; +use Carbon\CarbonInterval as Interval; use Illuminate\Config\Repository; -use Illuminate\Queue\Failed\CountableFailedJobProvider; -use Illuminate\Queue\Failed\FailedJobProviderInterface; -use Illuminate\Queue\QueueManager; +use Illuminate\Database\DatabaseManager; +use Illuminate\Database\Query\Builder; use Illuminate\Support\Collection; use Illuminate\Support\Enumerable; +use stdClass; /** * @internal */ class Queues { + use Concerns\InteractsWithConnection; + /** * Create a new query instance. */ public function __construct( protected Repository $config, - protected QueueManager $queue, - protected FailedJobProviderInterface $failedJobs, + protected DatabaseManager $db, ) { // } @@ -30,19 +33,112 @@ public function __construct( * * @return \Illuminate\Support\Enumerable */ - public function __invoke(): Enumerable + public function __invoke(Interval $interval): Enumerable { - // TODO: Get historic and current stats from the pulse_jobs table, similar to system stats charts and current value. - return collect($this->config->get('pulse.queues')) - ->groupBy(fn ($value, $key) => is_int($key) ? $this->config->get('queue.default') : $key) - ->map->flatten() - ->flatMap(fn (Collection $queues, string $connection) => $queues->map(fn (string $queue) => [ - 'connection' => $connection, - 'queue' => $queue, - 'size' => $this->queue->connection($connection)->size($queue), - 'failed' => $this->failedJobs instanceof CountableFailedJobProvider - ? $this->failedJobs->count($connection, $queue) - : 0, - ])); + $now = new CarbonImmutable; + + $maxDataPoints = 60; + + $currentBucket = CarbonImmutable::createFromTimestamp( + floor($now->getTimestamp() / ($interval->totalSeconds / $maxDataPoints)) * ($interval->totalSeconds / $maxDataPoints) + ); + + $secondsPerPeriod = (int) ($interval->totalSeconds / $maxDataPoints); + + $padding = collect([]) + ->pad(60, null) + ->map(fn (mixed $value, int $i) => (object) [ + 'date' => $currentBucket->subSeconds($i * $secondsPerPeriod)->format('Y-m-d H:i'), + 'queued' => 0, + 'processing' => 0, + 'failed' => 0, + 'processed' => 0, + ]) + ->reverse() + ->keyBy('date'); + + $readings = $this->connection()->query() + ->select('bucket', 'connection', 'queue') + ->selectRaw('COUNT(`queued_at`) AS `queued`') + ->selectRaw('COUNT(`processing_at`) AS `processing`') + ->selectRaw('COUNT(`processed_at`) AS `processed`') + ->selectRaw('COUNT(`failed_at`) AS `failed`') + ->fromSub( + fn (Builder $query) => $query + // Queued + ->from('pulse_jobs') + ->select('connection', 'queue') + ->selectRaw('`date` AS `queued_at`') + ->selectRaw('NULL AS `processing_at`') + ->selectRaw('NULL AS `processed_at`') + ->selectRaw('NULL AS `failed_at`') + // Divide the data into buckets. + ->selectRaw('FLOOR(UNIX_TIMESTAMP(CONVERT_TZ(`date`, ?, @@session.time_zone)) / ?) AS `bucket`', [$now->format('P'), $secondsPerPeriod]) + ->where('date', '>=', $now->ceilSeconds($interval->totalSeconds / $maxDataPoints)->subSeconds((int) $interval->totalSeconds)) + ->whereNotNull('date') + // Processing + ->union(fn (Builder $query) => $query + ->from('pulse_jobs') + ->select('connection', 'queue') + ->selectRaw('NULL AS `queued_at`') + ->addSelect('processing_at') + ->selectRaw('NULL AS `processed_at`') + ->selectRaw('NULL AS `failed_at`') + // Divide the data into buckets. + ->selectRaw('FLOOR(UNIX_TIMESTAMP(CONVERT_TZ(`processing_at`, ?, @@session.time_zone)) / ?) AS `bucket`', [$now->format('P'), $secondsPerPeriod]) + ->where('processing_at', '>=', $now->ceilSeconds($interval->totalSeconds / $maxDataPoints)->subSeconds((int) $interval->totalSeconds)) + ->whereNotNull('processing_at') + ) + // Processed + ->union(fn (Builder $query) => $query + ->from('pulse_jobs') + ->select('connection', 'queue') + ->selectRaw('NULL AS `queued_at`') + ->selectRaw('NULL AS `processing_at`') + ->addSelect('processed_at') + ->selectRaw('NULL AS `failed_at`') + // Divide the data into buckets. + ->selectRaw('FLOOR(UNIX_TIMESTAMP(CONVERT_TZ(`processed_at`, ?, @@session.time_zone)) / ?) AS `bucket`', [$now->format('P'), $secondsPerPeriod]) + ->where('processed_at', '>=', $now->ceilSeconds($interval->totalSeconds / $maxDataPoints)->subSeconds((int) $interval->totalSeconds)) + ->whereNotNull('processed_at') + ) + // Failed + ->union(fn (Builder $query) => $query + ->from('pulse_jobs') + ->select('connection', 'queue') + ->selectRaw('NULL AS `queued_at`') + ->selectRaw('NULL AS `processing_at`') + ->selectRaw('NULL AS `processed_at`') + ->addSelect('failed_at') + // Divide the data into buckets. + ->selectRaw('FLOOR(UNIX_TIMESTAMP(CONVERT_TZ(`failed_at`, ?, @@session.time_zone)) / ?) AS `bucket`', [$now->format('P'), $secondsPerPeriod]) + ->where('failed_at', '>=', $now->ceilSeconds($interval->totalSeconds / $maxDataPoints)->subSeconds((int) $interval->totalSeconds)) + ->whereNotNull('failed_at') + ), + 'grouped' + ) + ->groupBy('connection', 'queue', 'bucket') + ->orderByDesc('bucket') + ->get() + ->reverse() + ->groupBy(fn ($value) => "{$value->connection}:{$value->queue}") + ->map(function (Collection $readings) use ($secondsPerPeriod, $padding) { + $readings = $readings + ->mapWithKeys(function (stdClass $reading) use ($secondsPerPeriod) { + $date = CarbonImmutable::createFromTimestamp($reading->bucket * $secondsPerPeriod)->format('Y-m-d H:i'); + + return [$date => (object) [ + 'date' => $date, + 'queued' => $reading->queued, + 'processing' => $reading->queued, + 'processed' => $reading->processed, + 'failed' => $reading->failed, + ]]; + }); + + return $padding->merge($readings)->values(); + }); + + return $readings; } } diff --git a/src/Queries/SlowJobs.php b/src/Queries/SlowJobs.php index c14c6939..3c352cf6 100644 --- a/src/Queries/SlowJobs.php +++ b/src/Queries/SlowJobs.php @@ -36,6 +36,7 @@ public function __invoke(Interval $interval): Collection return $this->connection()->table('pulse_jobs') ->selectRaw('`job`, SUM(slow) as count, MAX(slowest) as slowest') + // TODO: processed_at or failed_at ->where('date', '>', $now->subSeconds((int) $interval->totalSeconds)->toDateTimeString()) ->where('slow', '>', 0) ->groupBy('job') diff --git a/src/Recorders/Jobs.php b/src/Recorders/Jobs.php index f909f3f0..01f3ba61 100644 --- a/src/Recorders/Jobs.php +++ b/src/Recorders/Jobs.php @@ -75,6 +75,8 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce ]); } + // TODO: Store an entry per-retry? + if ($event instanceof JobProcessing) { $this->lastJobStartedProcessingAt = $now; // TODO: Add update here? From 554d40247c568793b9b08ceab229e60eb7684969 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Wed, 4 Oct 2023 18:04:11 +1000 Subject: [PATCH 08/22] wip --- phpstan-baseline.neon | 10 ---------- src/Queries/Queues.php | 4 ++-- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index cf4ac706..d5eee2a1 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -30,16 +30,6 @@ parameters: count: 3 path: src/PulseServiceProvider.php - - - message: "#^Unable to resolve the template type TKey in call to function collect$#" - count: 1 - path: src/Queries/Queues.php - - - - message: "#^Unable to resolve the template type TValue in call to function collect$#" - count: 1 - path: src/Queries/Queues.php - - message: "#^Method Laravel\\\\Pulse\\\\Queries\\\\Servers\\:\\:__invoke\\(\\) return type with generic class Illuminate\\\\Support\\\\Collection does not specify its types\\: TKey, TValue$#" count: 1 diff --git a/src/Queries/Queues.php b/src/Queries/Queues.php index e70d2350..fb906912 100644 --- a/src/Queries/Queues.php +++ b/src/Queries/Queues.php @@ -31,9 +31,9 @@ public function __construct( /** * Run the query. * - * @return \Illuminate\Support\Enumerable + * @return \Illuminate\Support\Collection> */ - public function __invoke(Interval $interval): Enumerable + public function __invoke(Interval $interval): Collection { $now = new CarbonImmutable; From d8a3a019605eb0fd79049c0614fb053df779c0c6 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Thu, 5 Oct 2023 02:27:18 +1000 Subject: [PATCH 09/22] wip --- resources/views/livewire/queues.blade.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/resources/views/livewire/queues.blade.php b/resources/views/livewire/queues.blade.php index aaf1af32..f0480fc8 100644 --- a/resources/views/livewire/queues.blade.php +++ b/resources/views/livewire/queues.blade.php @@ -32,9 +32,6 @@ @endif @php $latest = $readings->last() @endphp - {{--

Queued: {{ $latest->queued }} --}} - {{-- Failed: {{ $latest->failed }} --}} - {{-- Processed: {{ $latest->processed }}

--}}
From 9382f77ea4ed1a43e683088c11c2fa6ba9bbff03 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Fri, 6 Oct 2023 12:33:54 +1000 Subject: [PATCH 10/22] Update queues to use standard cache pattern and stats display --- resources/views/livewire/queues.blade.php | 6 +++++- src/Livewire/Queues.php | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/resources/views/livewire/queues.blade.php b/resources/views/livewire/queues.blade.php index f0480fc8..91d2ffda 100644 --- a/resources/views/livewire/queues.blade.php +++ b/resources/views/livewire/queues.blade.php @@ -1,5 +1,9 @@ - + diff --git a/src/Livewire/Queues.php b/src/Livewire/Queues.php index e6d7d7c5..43b0b150 100644 --- a/src/Livewire/Queues.php +++ b/src/Livewire/Queues.php @@ -3,7 +3,6 @@ namespace Laravel\Pulse\Livewire; use Illuminate\Contracts\Support\Renderable; -use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\View; use Illuminate\Support\Str; use Laravel\Pulse\Queries\Queues as QueuesQuery; @@ -12,16 +11,20 @@ #[Lazy] class Queues extends Card { - use Concerns\HasPeriod, Concerns\ShouldNotReportUsage; + use Concerns\HasPeriod, Concerns\RemembersQueries, Concerns\ShouldNotReportUsage; /** * Render the component. */ public function render(QueuesQuery $query): Renderable { + [$queues, $time, $runAt] = $this->remember($query); + return View::make('pulse::livewire.queues', [ - 'queues' => $queues = Cache::remember('laravel:pulse:queues', 5, fn () => $query($this->periodAsInterval())), + 'queues' => $queues, 'showConnection' => $queues->keys()->map(fn ($queue) => Str::before($queue, ':'))->unique()->count() > 1, + 'time' => $time, + 'runAt' => $runAt, ]); } } From 72e3e46dac78ebf417d5203a48ba6e2e70b04576 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Fri, 6 Oct 2023 13:05:41 +1000 Subject: [PATCH 11/22] Live update queue charts --- resources/views/livewire/queues.blade.php | 19 ++++++++++++++++++- src/Livewire/Queues.php | 4 ++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/resources/views/livewire/queues.blade.php b/resources/views/livewire/queues.blade.php index 91d2ffda..17a08cef 100644 --- a/resources/views/livewire/queues.blade.php +++ b/resources/views/livewire/queues.blade.php @@ -119,8 +119,25 @@ class="h-12 mt-1" }, } ) + + Livewire.on('queues-chart-update', ({ queues }) => { + if (chart === undefined) { + return + } + + if (queues['{{ $queue }}'] === undefined && chart) { + chart.destroy() + chart = undefined + return + } + + chart.data.labels = queues['{{ $queue }}'].map(reading => reading.date) + chart.data.datasets[0].data = queues['{{ $queue }}'].map(reading => reading.queued) + chart.data.datasets[1].data = queues['{{ $queue }}'].map(reading => reading.processed) + chart.data.datasets[2].data = queues['{{ $queue }}'].map(reading => reading.failed) + chart.update() + }) } - // TODO: Live update chart }" > diff --git a/src/Livewire/Queues.php b/src/Livewire/Queues.php index 43b0b150..943a3a89 100644 --- a/src/Livewire/Queues.php +++ b/src/Livewire/Queues.php @@ -20,6 +20,10 @@ public function render(QueuesQuery $query): Renderable { [$queues, $time, $runAt] = $this->remember($query); + if (request()->hasHeader('X-Livewire')) { + $this->dispatch('queues-chart-update', queues: $queues); + } + return View::make('pulse::livewire.queues', [ 'queues' => $queues, 'showConnection' => $queues->keys()->map(fn ($queue) => Str::before($queue, ':'))->unique()->count() > 1, From 7a17aae1534095125a7dc75c0996e3c244edfaa5 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Fri, 6 Oct 2023 15:21:51 +1000 Subject: [PATCH 12/22] wip --- dist/pulse.css | 2 +- resources/views/livewire/queues.blade.php | 196 +++++++++++----------- src/Queries/Queues.php | 1 + 3 files changed, 104 insertions(+), 95 deletions(-) diff --git a/dist/pulse.css b/dist/pulse.css index 6212e8c3..abf87031 100644 --- a/dist/pulse.css +++ b/dist/pulse.css @@ -1 +1 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;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-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 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:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--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)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--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: rgb(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: rgb(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}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.col-span-1{grid-column:span 1 / span 1}.col-span-10{grid-column:span 10 / span 10}.col-span-11{grid-column:span 11 / span 11}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-5{grid-column:span 5 / span 5}.col-span-6{grid-column:span 6 / span 6}.col-span-7{grid-column:span 7 / span 7}.col-span-8{grid-column:span 8 / span 8}.col-span-9{grid-column:span 9 / span 9}.col-span-full{grid-column:1 / -1}.row-span-1{grid-row:span 1 / span 1}.row-span-2{grid-row:span 2 / span 2}.row-span-3{grid-row:span 3 / span 3}.row-span-4{grid-row:span 4 / span 4}.row-span-5{grid-row:span 5 / span 5}.row-span-6{grid-row:span 6 / span 6}.row-span-full{grid-row:1 / -1}.mx-auto{margin-left:auto;margin-right:auto}.mx-px{margin-left:1px;margin-right:1px}.mb-3{margin-bottom:.75rem}.mb-px{margin-bottom:1px}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-1\/3{height:33.333333%}.h-1\/4{height:25%}.h-1\/5{height:20%}.h-1\/6{height:16.666667%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-128{height:32rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/3{height:66.666667%}.h-2\/4{height:50%}.h-2\/5{height:40%}.h-2\/6{height:33.333333%}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-3\/4{height:75%}.h-3\/5{height:60%}.h-3\/6{height:50%}.h-32{height:8rem}.h-36{height:9rem}.h-4{height:1rem}.h-4\/5{height:80%}.h-4\/6{height:66.666667%}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\/6{height:83.333333%}.h-52{height:13rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[30px\]{height:30px}.h-\[52px\]{height:52px}.max-h-0{max-height:0px}.max-h-0\.5{max-height:.125rem}.max-h-1{max-height:.25rem}.max-h-1\.5{max-height:.375rem}.max-h-10{max-height:2.5rem}.max-h-11{max-height:2.75rem}.max-h-12{max-height:3rem}.max-h-14{max-height:3.5rem}.max-h-16{max-height:4rem}.max-h-2{max-height:.5rem}.max-h-2\.5{max-height:.625rem}.max-h-20{max-height:5rem}.max-h-24{max-height:6rem}.max-h-28{max-height:7rem}.max-h-3{max-height:.75rem}.max-h-3\.5{max-height:.875rem}.max-h-32{max-height:8rem}.max-h-36{max-height:9rem}.max-h-4{max-height:1rem}.max-h-40{max-height:10rem}.max-h-44{max-height:11rem}.max-h-48{max-height:12rem}.max-h-5{max-height:1.25rem}.max-h-52{max-height:13rem}.max-h-56{max-height:14rem}.max-h-6{max-height:1.5rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-7{max-height:1.75rem}.max-h-72{max-height:18rem}.max-h-8{max-height:2rem}.max-h-80{max-height:20rem}.max-h-9{max-height:2.25rem}.max-h-96{max-height:24rem}.min-h-0{min-height:0px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\/12{width:8.333333%}.w-1\/2{width:50%}.w-14{width:3.5rem}.w-2\/12{width:16.666667%}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/12{width:25%}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-\[42rem\]{min-width:42rem}.max-w-\[1px\]{max-width:1px}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-\[10000\]{flex-grow:10000}.basis-0{flex-basis:0px}.basis-56{flex-basis:14rem}.basis-full{flex-basis:100%}.origin-bottom{transform-origin:bottom}.origin-top-right{transform-origin:top right}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-\[max-content\,minmax\(max-content\,1fr\)\,max-content\,minmax\(0\,2fr\)\,max-content\,minmax\(0\,2fr\)\,minmax\(max-content\,1fr\)\]{grid-template-columns:max-content minmax(max-content,1fr) max-content minmax(0,2fr) max-content minmax(0,2fr) minmax(max-content,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity))}.bg-\[\#9333ea\]{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity))}.bg-\[\#e11d48\]{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity))}.bg-\[rgba\(147\,51\,234\,0\.5\)\]{background-color:#9333ea80}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-500{stroke:#6b7280}.stroke-red-500{stroke:#ef4444}.\!p-0{padding:0!important}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-12{padding-bottom:3rem}.pb-px{padding-bottom:1px}.pl-3{padding-left:.75rem}.pr-8{padding-right:2rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-25{opacity:.25}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 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)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-gray-900\/10{--tw-ring-color: rgb(17 24 39 / .1)}.ring-gray-900\/5{--tw-ring-color: rgb(17 24 39 / .05)}.\@container{container-type:inline-size}.\@container\/scroll-wrapper{container-type:inline-size;container-name:scroll-wrapper}.\[scrollbar-color\:theme\(colors\.gray\.500\)_transparent\]{scrollbar-color:#6b7280 transparent}.\[scrollbar-width\:thin\]{scrollbar-width:thin}[x-cloak]{display:none}.first\:h-0:first-child{height:0px}.first\:rounded-l-md:first-child{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.first\:pl-3:first-child{padding-left:.75rem}.last\:rounded-r-md:last-child{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.last\:pr-3:last-child{padding-right:.75rem}.focus-within\:ring:focus-within{--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.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(0px + 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)}@container (min-width: 24rem){.\@sm\:block{display:block}.\@sm\:px-3{padding-left:.75rem;padding-right:.75rem}}@container (min-width: 28rem){.\@md\:mb-6{margin-bottom:1.5rem}}@container (min-width: 32rem){.\@lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 48rem){.\@3xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 72rem){.\@6xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}html :where(.default\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:col-span-full){grid-column:1 / -1}html :where(.default\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:row-span-full){grid-row:1 / -1}html :where(.default\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:gap-6){gap:1.5rem}:is(.dark .dark\:block){display:block}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-blue-700){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-500){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-900){--tw-border-opacity: 1;border-color:rgb(17 24 39 / var(--tw-border-opacity))}:is(.dark .dark\:border-purple-700){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity))}:is(.dark .dark\:border-red-700){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity))}:is(.dark .dark\:bg-blue-900){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800\/50){background-color:#1f293780}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-950){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-900){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-900){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}:is(.dark .dark\:from-gray-900){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}:is(.dark .dark\:to-gray-800){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}:is(.dark .dark\:stroke-gray-400){stroke:#9ca3af}:is(.dark .dark\:stroke-gray-700){stroke:#374151}:is(.dark .dark\:text-blue-300){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-100){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-600){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}:is(.dark .dark\:text-purple-300){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity))}:is(.dark .dark\:text-red-300){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity))}:is(.dark .dark\:ring-gray-100\/10){--tw-ring-color: rgb(243 244 246 / .1)}:is(.dark .dark\:hover\:bg-gray-700:hover){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-800:hover){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-gray-500:hover){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:text-gray-500:focus){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:col-span-10{grid-column:span 10 / span 10}.sm\:col-span-11{grid-column:span 11 / span 11}.sm\:col-span-12{grid-column:span 12 / span 12}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-5{grid-column:span 5 / span 5}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:col-span-7{grid-column:span 7 / span 7}.sm\:col-span-8{grid-column:span 8 / span 8}.sm\:col-span-9{grid-column:span 9 / span 9}.sm\:col-span-full{grid-column:1 / -1}.sm\:row-span-1{grid-row:span 1 / span 1}.sm\:row-span-2{grid-row:span 2 / span 2}.sm\:row-span-3{grid-row:span 3 / span 3}.sm\:row-span-4{grid-row:span 4 / span 4}.sm\:row-span-5{grid-row:span 5 / span 5}.sm\:row-span-6{grid-row:span 6 / span 6}.sm\:row-span-full{grid-row:1 / -1}.sm\:h-0{height:0px}.sm\:h-0\.5{height:.125rem}.sm\:h-1{height:.25rem}.sm\:h-1\.5{height:.375rem}.sm\:h-1\/2{height:50%}.sm\:h-1\/3{height:33.333333%}.sm\:h-1\/4{height:25%}.sm\:h-1\/5{height:20%}.sm\:h-1\/6{height:16.666667%}.sm\:h-10{height:2.5rem}.sm\:h-11{height:2.75rem}.sm\:h-12{height:3rem}.sm\:h-128{height:32rem}.sm\:h-14{height:3.5rem}.sm\:h-16{height:4rem}.sm\:h-2{height:.5rem}.sm\:h-2\.5{height:.625rem}.sm\:h-2\/3{height:66.666667%}.sm\:h-2\/4{height:50%}.sm\:h-2\/5{height:40%}.sm\:h-2\/6{height:33.333333%}.sm\:h-20{height:5rem}.sm\:h-24{height:6rem}.sm\:h-28{height:7rem}.sm\:h-3{height:.75rem}.sm\:h-3\.5{height:.875rem}.sm\:h-3\/4{height:75%}.sm\:h-3\/5{height:60%}.sm\:h-3\/6{height:50%}.sm\:h-32{height:8rem}.sm\:h-36{height:9rem}.sm\:h-4{height:1rem}.sm\:h-4\/5{height:80%}.sm\:h-4\/6{height:66.666667%}.sm\:h-40{height:10rem}.sm\:h-44{height:11rem}.sm\:h-48{height:12rem}.sm\:h-5{height:1.25rem}.sm\:h-5\/6{height:83.333333%}.sm\:h-52{height:13rem}.sm\:h-56{height:14rem}.sm\:h-6{height:1.5rem}.sm\:h-60{height:15rem}.sm\:h-64{height:16rem}.sm\:h-7{height:1.75rem}.sm\:h-72{height:18rem}.sm\:h-8{height:2rem}.sm\:h-80{height:20rem}.sm\:h-9{height:2.25rem}.sm\:h-96{height:24rem}.sm\:max-h-0{max-height:0px}.sm\:max-h-0\.5{max-height:.125rem}.sm\:max-h-1{max-height:.25rem}.sm\:max-h-1\.5{max-height:.375rem}.sm\:max-h-10{max-height:2.5rem}.sm\:max-h-11{max-height:2.75rem}.sm\:max-h-12{max-height:3rem}.sm\:max-h-14{max-height:3.5rem}.sm\:max-h-16{max-height:4rem}.sm\:max-h-2{max-height:.5rem}.sm\:max-h-2\.5{max-height:.625rem}.sm\:max-h-20{max-height:5rem}.sm\:max-h-24{max-height:6rem}.sm\:max-h-28{max-height:7rem}.sm\:max-h-3{max-height:.75rem}.sm\:max-h-3\.5{max-height:.875rem}.sm\:max-h-32{max-height:8rem}.sm\:max-h-36{max-height:9rem}.sm\:max-h-4{max-height:1rem}.sm\:max-h-40{max-height:10rem}.sm\:max-h-44{max-height:11rem}.sm\:max-h-48{max-height:12rem}.sm\:max-h-5{max-height:1.25rem}.sm\:max-h-52{max-height:13rem}.sm\:max-h-56{max-height:14rem}.sm\:max-h-6{max-height:1.5rem}.sm\:max-h-60{max-height:15rem}.sm\:max-h-64{max-height:16rem}.sm\:max-h-7{max-height:1.75rem}.sm\:max-h-72{max-height:18rem}.sm\:max-h-8{max-height:2rem}.sm\:max-h-80{max-height:20rem}.sm\:max-h-9{max-height:2.25rem}.sm\:max-h-96{max-height:24rem}.sm\:min-h-0{min-height:0px}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:p-6{padding:1.5rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-10{grid-column:span 10 / span 10}.md\:col-span-11{grid-column:span 11 / span 11}.md\:col-span-12{grid-column:span 12 / span 12}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-3{grid-column:span 3 / span 3}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-span-7{grid-column:span 7 / span 7}.md\:col-span-8{grid-column:span 8 / span 8}.md\:col-span-9{grid-column:span 9 / span 9}.md\:col-span-full{grid-column:1 / -1}.md\:row-span-1{grid-row:span 1 / span 1}.md\:row-span-2{grid-row:span 2 / span 2}.md\:row-span-3{grid-row:span 3 / span 3}.md\:row-span-4{grid-row:span 4 / span 4}.md\:row-span-5{grid-row:span 5 / span 5}.md\:row-span-6{grid-row:span 6 / span 6}.md\:row-span-full{grid-row:1 / -1}.md\:h-0{height:0px}.md\:h-0\.5{height:.125rem}.md\:h-1{height:.25rem}.md\:h-1\.5{height:.375rem}.md\:h-1\/2{height:50%}.md\:h-1\/3{height:33.333333%}.md\:h-1\/4{height:25%}.md\:h-1\/5{height:20%}.md\:h-1\/6{height:16.666667%}.md\:h-10{height:2.5rem}.md\:h-11{height:2.75rem}.md\:h-12{height:3rem}.md\:h-128{height:32rem}.md\:h-14{height:3.5rem}.md\:h-16{height:4rem}.md\:h-2{height:.5rem}.md\:h-2\.5{height:.625rem}.md\:h-2\/3{height:66.666667%}.md\:h-2\/4{height:50%}.md\:h-2\/5{height:40%}.md\:h-2\/6{height:33.333333%}.md\:h-20{height:5rem}.md\:h-24{height:6rem}.md\:h-28{height:7rem}.md\:h-3{height:.75rem}.md\:h-3\.5{height:.875rem}.md\:h-3\/4{height:75%}.md\:h-3\/5{height:60%}.md\:h-3\/6{height:50%}.md\:h-32{height:8rem}.md\:h-36{height:9rem}.md\:h-4{height:1rem}.md\:h-4\/5{height:80%}.md\:h-4\/6{height:66.666667%}.md\:h-40{height:10rem}.md\:h-44{height:11rem}.md\:h-48{height:12rem}.md\:h-5{height:1.25rem}.md\:h-5\/6{height:83.333333%}.md\:h-52{height:13rem}.md\:h-56{height:14rem}.md\:h-6{height:1.5rem}.md\:h-60{height:15rem}.md\:h-64{height:16rem}.md\:h-7{height:1.75rem}.md\:h-72{height:18rem}.md\:h-8{height:2rem}.md\:h-80{height:20rem}.md\:h-9{height:2.25rem}.md\:h-96{height:24rem}.md\:max-h-0{max-height:0px}.md\:max-h-0\.5{max-height:.125rem}.md\:max-h-1{max-height:.25rem}.md\:max-h-1\.5{max-height:.375rem}.md\:max-h-10{max-height:2.5rem}.md\:max-h-11{max-height:2.75rem}.md\:max-h-12{max-height:3rem}.md\:max-h-14{max-height:3.5rem}.md\:max-h-16{max-height:4rem}.md\:max-h-2{max-height:.5rem}.md\:max-h-2\.5{max-height:.625rem}.md\:max-h-20{max-height:5rem}.md\:max-h-24{max-height:6rem}.md\:max-h-28{max-height:7rem}.md\:max-h-3{max-height:.75rem}.md\:max-h-3\.5{max-height:.875rem}.md\:max-h-32{max-height:8rem}.md\:max-h-36{max-height:9rem}.md\:max-h-4{max-height:1rem}.md\:max-h-40{max-height:10rem}.md\:max-h-44{max-height:11rem}.md\:max-h-48{max-height:12rem}.md\:max-h-5{max-height:1.25rem}.md\:max-h-52{max-height:13rem}.md\:max-h-56{max-height:14rem}.md\:max-h-6{max-height:1.5rem}.md\:max-h-60{max-height:15rem}.md\:max-h-64{max-height:16rem}.md\:max-h-7{max-height:1.75rem}.md\:max-h-72{max-height:18rem}.md\:max-h-8{max-height:2rem}.md\:max-h-80{max-height:20rem}.md\:max-h-9{max-height:2.25rem}.md\:max-h-96{max-height:24rem}.md\:min-h-0{min-height:0px}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-10{grid-column:span 10 / span 10}.lg\:col-span-11{grid-column:span 11 / span 11}.lg\:col-span-12{grid-column:span 12 / span 12}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-5{grid-column:span 5 / span 5}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-span-9{grid-column:span 9 / span 9}.lg\:col-span-full{grid-column:1 / -1}.lg\:row-span-1{grid-row:span 1 / span 1}.lg\:row-span-2{grid-row:span 2 / span 2}.lg\:row-span-3{grid-row:span 3 / span 3}.lg\:row-span-4{grid-row:span 4 / span 4}.lg\:row-span-5{grid-row:span 5 / span 5}.lg\:row-span-6{grid-row:span 6 / span 6}.lg\:row-span-full{grid-row:1 / -1}.lg\:h-0{height:0px}.lg\:h-0\.5{height:.125rem}.lg\:h-1{height:.25rem}.lg\:h-1\.5{height:.375rem}.lg\:h-1\/2{height:50%}.lg\:h-1\/3{height:33.333333%}.lg\:h-1\/4{height:25%}.lg\:h-1\/5{height:20%}.lg\:h-1\/6{height:16.666667%}.lg\:h-10{height:2.5rem}.lg\:h-11{height:2.75rem}.lg\:h-12{height:3rem}.lg\:h-128{height:32rem}.lg\:h-14{height:3.5rem}.lg\:h-16{height:4rem}.lg\:h-2{height:.5rem}.lg\:h-2\.5{height:.625rem}.lg\:h-2\/3{height:66.666667%}.lg\:h-2\/4{height:50%}.lg\:h-2\/5{height:40%}.lg\:h-2\/6{height:33.333333%}.lg\:h-20{height:5rem}.lg\:h-24{height:6rem}.lg\:h-28{height:7rem}.lg\:h-3{height:.75rem}.lg\:h-3\.5{height:.875rem}.lg\:h-3\/4{height:75%}.lg\:h-3\/5{height:60%}.lg\:h-3\/6{height:50%}.lg\:h-32{height:8rem}.lg\:h-36{height:9rem}.lg\:h-4{height:1rem}.lg\:h-4\/5{height:80%}.lg\:h-4\/6{height:66.666667%}.lg\:h-40{height:10rem}.lg\:h-44{height:11rem}.lg\:h-48{height:12rem}.lg\:h-5{height:1.25rem}.lg\:h-5\/6{height:83.333333%}.lg\:h-52{height:13rem}.lg\:h-56{height:14rem}.lg\:h-6{height:1.5rem}.lg\:h-60{height:15rem}.lg\:h-64{height:16rem}.lg\:h-7{height:1.75rem}.lg\:h-72{height:18rem}.lg\:h-8{height:2rem}.lg\:h-80{height:20rem}.lg\:h-9{height:2.25rem}.lg\:h-96{height:24rem}.lg\:max-h-0{max-height:0px}.lg\:max-h-0\.5{max-height:.125rem}.lg\:max-h-1{max-height:.25rem}.lg\:max-h-1\.5{max-height:.375rem}.lg\:max-h-10{max-height:2.5rem}.lg\:max-h-11{max-height:2.75rem}.lg\:max-h-12{max-height:3rem}.lg\:max-h-14{max-height:3.5rem}.lg\:max-h-16{max-height:4rem}.lg\:max-h-2{max-height:.5rem}.lg\:max-h-2\.5{max-height:.625rem}.lg\:max-h-20{max-height:5rem}.lg\:max-h-24{max-height:6rem}.lg\:max-h-28{max-height:7rem}.lg\:max-h-3{max-height:.75rem}.lg\:max-h-3\.5{max-height:.875rem}.lg\:max-h-32{max-height:8rem}.lg\:max-h-36{max-height:9rem}.lg\:max-h-4{max-height:1rem}.lg\:max-h-40{max-height:10rem}.lg\:max-h-44{max-height:11rem}.lg\:max-h-48{max-height:12rem}.lg\:max-h-5{max-height:1.25rem}.lg\:max-h-52{max-height:13rem}.lg\:max-h-56{max-height:14rem}.lg\:max-h-6{max-height:1.5rem}.lg\:max-h-60{max-height:15rem}.lg\:max-h-64{max-height:16rem}.lg\:max-h-7{max-height:1.75rem}.lg\:max-h-72{max-height:18rem}.lg\:max-h-8{max-height:2rem}.lg\:max-h-80{max-height:20rem}.lg\:max-h-9{max-height:2.25rem}.lg\:max-h-96{max-height:24rem}.lg\:min-h-0{min-height:0px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:lg\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:lg\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:lg\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:lg\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:lg\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:lg\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:lg\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:lg\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:lg\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:lg\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:lg\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:lg\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:lg\:col-span-full){grid-column:1 / -1}html :where(.default\:lg\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:lg\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:lg\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:lg\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:lg\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:lg\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:lg\:row-span-full){grid-row:1 / -1}html :where(.default\:lg\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-10{grid-column:span 10 / span 10}.xl\:col-span-11{grid-column:span 11 / span 11}.xl\:col-span-12{grid-column:span 12 / span 12}.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-5{grid-column:span 5 / span 5}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-7{grid-column:span 7 / span 7}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-span-full{grid-column:1 / -1}.xl\:row-span-1{grid-row:span 1 / span 1}.xl\:row-span-2{grid-row:span 2 / span 2}.xl\:row-span-3{grid-row:span 3 / span 3}.xl\:row-span-4{grid-row:span 4 / span 4}.xl\:row-span-5{grid-row:span 5 / span 5}.xl\:row-span-6{grid-row:span 6 / span 6}.xl\:row-span-full{grid-row:1 / -1}.xl\:h-0{height:0px}.xl\:h-0\.5{height:.125rem}.xl\:h-1{height:.25rem}.xl\:h-1\.5{height:.375rem}.xl\:h-1\/2{height:50%}.xl\:h-1\/3{height:33.333333%}.xl\:h-1\/4{height:25%}.xl\:h-1\/5{height:20%}.xl\:h-1\/6{height:16.666667%}.xl\:h-10{height:2.5rem}.xl\:h-11{height:2.75rem}.xl\:h-12{height:3rem}.xl\:h-128{height:32rem}.xl\:h-14{height:3.5rem}.xl\:h-16{height:4rem}.xl\:h-2{height:.5rem}.xl\:h-2\.5{height:.625rem}.xl\:h-2\/3{height:66.666667%}.xl\:h-2\/4{height:50%}.xl\:h-2\/5{height:40%}.xl\:h-2\/6{height:33.333333%}.xl\:h-20{height:5rem}.xl\:h-24{height:6rem}.xl\:h-28{height:7rem}.xl\:h-3{height:.75rem}.xl\:h-3\.5{height:.875rem}.xl\:h-3\/4{height:75%}.xl\:h-3\/5{height:60%}.xl\:h-3\/6{height:50%}.xl\:h-32{height:8rem}.xl\:h-36{height:9rem}.xl\:h-4{height:1rem}.xl\:h-4\/5{height:80%}.xl\:h-4\/6{height:66.666667%}.xl\:h-40{height:10rem}.xl\:h-44{height:11rem}.xl\:h-48{height:12rem}.xl\:h-5{height:1.25rem}.xl\:h-5\/6{height:83.333333%}.xl\:h-52{height:13rem}.xl\:h-56{height:14rem}.xl\:h-6{height:1.5rem}.xl\:h-60{height:15rem}.xl\:h-64{height:16rem}.xl\:h-7{height:1.75rem}.xl\:h-72{height:18rem}.xl\:h-8{height:2rem}.xl\:h-80{height:20rem}.xl\:h-9{height:2.25rem}.xl\:h-96{height:24rem}.xl\:max-h-0{max-height:0px}.xl\:max-h-0\.5{max-height:.125rem}.xl\:max-h-1{max-height:.25rem}.xl\:max-h-1\.5{max-height:.375rem}.xl\:max-h-10{max-height:2.5rem}.xl\:max-h-11{max-height:2.75rem}.xl\:max-h-12{max-height:3rem}.xl\:max-h-14{max-height:3.5rem}.xl\:max-h-16{max-height:4rem}.xl\:max-h-2{max-height:.5rem}.xl\:max-h-2\.5{max-height:.625rem}.xl\:max-h-20{max-height:5rem}.xl\:max-h-24{max-height:6rem}.xl\:max-h-28{max-height:7rem}.xl\:max-h-3{max-height:.75rem}.xl\:max-h-3\.5{max-height:.875rem}.xl\:max-h-32{max-height:8rem}.xl\:max-h-36{max-height:9rem}.xl\:max-h-4{max-height:1rem}.xl\:max-h-40{max-height:10rem}.xl\:max-h-44{max-height:11rem}.xl\:max-h-48{max-height:12rem}.xl\:max-h-5{max-height:1.25rem}.xl\:max-h-52{max-height:13rem}.xl\:max-h-56{max-height:14rem}.xl\:max-h-6{max-height:1.5rem}.xl\:max-h-60{max-height:15rem}.xl\:max-h-64{max-height:16rem}.xl\:max-h-7{max-height:1.75rem}.xl\:max-h-72{max-height:18rem}.xl\:max-h-8{max-height:2rem}.xl\:max-h-80{max-height:20rem}.xl\:max-h-9{max-height:2.25rem}.xl\:max-h-96{max-height:24rem}.xl\:min-h-0{min-height:0px}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:pr-12{padding-right:3rem}}@media (min-width: 1536px){.\32xl\:col-span-1{grid-column:span 1 / span 1}.\32xl\:col-span-10{grid-column:span 10 / span 10}.\32xl\:col-span-11{grid-column:span 11 / span 11}.\32xl\:col-span-12{grid-column:span 12 / span 12}.\32xl\:col-span-2{grid-column:span 2 / span 2}.\32xl\:col-span-3{grid-column:span 3 / span 3}.\32xl\:col-span-4{grid-column:span 4 / span 4}.\32xl\:col-span-5{grid-column:span 5 / span 5}.\32xl\:col-span-6{grid-column:span 6 / span 6}.\32xl\:col-span-7{grid-column:span 7 / span 7}.\32xl\:col-span-8{grid-column:span 8 / span 8}.\32xl\:col-span-9{grid-column:span 9 / span 9}.\32xl\:col-span-full{grid-column:1 / -1}.\32xl\:row-span-1{grid-row:span 1 / span 1}.\32xl\:row-span-2{grid-row:span 2 / span 2}.\32xl\:row-span-3{grid-row:span 3 / span 3}.\32xl\:row-span-4{grid-row:span 4 / span 4}.\32xl\:row-span-5{grid-row:span 5 / span 5}.\32xl\:row-span-6{grid-row:span 6 / span 6}.\32xl\:row-span-full{grid-row:1 / -1}.\32xl\:h-0{height:0px}.\32xl\:h-0\.5{height:.125rem}.\32xl\:h-1{height:.25rem}.\32xl\:h-1\.5{height:.375rem}.\32xl\:h-1\/2{height:50%}.\32xl\:h-1\/3{height:33.333333%}.\32xl\:h-1\/4{height:25%}.\32xl\:h-1\/5{height:20%}.\32xl\:h-1\/6{height:16.666667%}.\32xl\:h-10{height:2.5rem}.\32xl\:h-11{height:2.75rem}.\32xl\:h-12{height:3rem}.\32xl\:h-128{height:32rem}.\32xl\:h-14{height:3.5rem}.\32xl\:h-16{height:4rem}.\32xl\:h-2{height:.5rem}.\32xl\:h-2\.5{height:.625rem}.\32xl\:h-2\/3{height:66.666667%}.\32xl\:h-2\/4{height:50%}.\32xl\:h-2\/5{height:40%}.\32xl\:h-2\/6{height:33.333333%}.\32xl\:h-20{height:5rem}.\32xl\:h-24{height:6rem}.\32xl\:h-28{height:7rem}.\32xl\:h-3{height:.75rem}.\32xl\:h-3\.5{height:.875rem}.\32xl\:h-3\/4{height:75%}.\32xl\:h-3\/5{height:60%}.\32xl\:h-3\/6{height:50%}.\32xl\:h-32{height:8rem}.\32xl\:h-36{height:9rem}.\32xl\:h-4{height:1rem}.\32xl\:h-4\/5{height:80%}.\32xl\:h-4\/6{height:66.666667%}.\32xl\:h-40{height:10rem}.\32xl\:h-44{height:11rem}.\32xl\:h-48{height:12rem}.\32xl\:h-5{height:1.25rem}.\32xl\:h-5\/6{height:83.333333%}.\32xl\:h-52{height:13rem}.\32xl\:h-56{height:14rem}.\32xl\:h-6{height:1.5rem}.\32xl\:h-60{height:15rem}.\32xl\:h-64{height:16rem}.\32xl\:h-7{height:1.75rem}.\32xl\:h-72{height:18rem}.\32xl\:h-8{height:2rem}.\32xl\:h-80{height:20rem}.\32xl\:h-9{height:2.25rem}.\32xl\:h-96{height:24rem}.\32xl\:max-h-0{max-height:0px}.\32xl\:max-h-0\.5{max-height:.125rem}.\32xl\:max-h-1{max-height:.25rem}.\32xl\:max-h-1\.5{max-height:.375rem}.\32xl\:max-h-10{max-height:2.5rem}.\32xl\:max-h-11{max-height:2.75rem}.\32xl\:max-h-12{max-height:3rem}.\32xl\:max-h-14{max-height:3.5rem}.\32xl\:max-h-16{max-height:4rem}.\32xl\:max-h-2{max-height:.5rem}.\32xl\:max-h-2\.5{max-height:.625rem}.\32xl\:max-h-20{max-height:5rem}.\32xl\:max-h-24{max-height:6rem}.\32xl\:max-h-28{max-height:7rem}.\32xl\:max-h-3{max-height:.75rem}.\32xl\:max-h-3\.5{max-height:.875rem}.\32xl\:max-h-32{max-height:8rem}.\32xl\:max-h-36{max-height:9rem}.\32xl\:max-h-4{max-height:1rem}.\32xl\:max-h-40{max-height:10rem}.\32xl\:max-h-44{max-height:11rem}.\32xl\:max-h-48{max-height:12rem}.\32xl\:max-h-5{max-height:1.25rem}.\32xl\:max-h-52{max-height:13rem}.\32xl\:max-h-56{max-height:14rem}.\32xl\:max-h-6{max-height:1.5rem}.\32xl\:max-h-60{max-height:15rem}.\32xl\:max-h-64{max-height:16rem}.\32xl\:max-h-7{max-height:1.75rem}.\32xl\:max-h-72{max-height:18rem}.\32xl\:max-h-8{max-height:2rem}.\32xl\:max-h-80{max-height:20rem}.\32xl\:max-h-9{max-height:2.25rem}.\32xl\:max-h-96{max-height:24rem}.\32xl\:min-h-0{min-height:0px}.\32xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.\32xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.\32xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.\32xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.\32xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\32xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\32xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.\32xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.\32xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}.\[\&\:nth-child\(1n\+15\)\]\:border-t:nth-child(n+15){border-top-width:1px}.\[\&\>svg\]\:h-6>svg{height:1.5rem}.\[\&\>svg\]\:w-6>svg{width:1.5rem}.\[\&\>svg\]\:flex-shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:stroke-gray-400>svg{stroke:#9ca3af}:is(.dark .\[\&\>svg\]\:dark\:stroke-gray-600)>svg{stroke:#4b5563} +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;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-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 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:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--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)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--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: rgb(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: rgb(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}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-left-px{left:-1px}.-top-2{top:-.5rem}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.col-span-1{grid-column:span 1 / span 1}.col-span-10{grid-column:span 10 / span 10}.col-span-11{grid-column:span 11 / span 11}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-5{grid-column:span 5 / span 5}.col-span-6{grid-column:span 6 / span 6}.col-span-7{grid-column:span 7 / span 7}.col-span-8{grid-column:span 8 / span 8}.col-span-9{grid-column:span 9 / span 9}.col-span-full{grid-column:1 / -1}.row-span-1{grid-row:span 1 / span 1}.row-span-2{grid-row:span 2 / span 2}.row-span-3{grid-row:span 3 / span 3}.row-span-4{grid-row:span 4 / span 4}.row-span-5{grid-row:span 5 / span 5}.row-span-6{grid-row:span 6 / span 6}.row-span-full{grid-row:1 / -1}.mx-auto{margin-left:auto;margin-right:auto}.mx-px{margin-left:1px;margin-right:1px}.mb-3{margin-bottom:.75rem}.mb-px{margin-bottom:1px}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-1\/3{height:33.333333%}.h-1\/4{height:25%}.h-1\/5{height:20%}.h-1\/6{height:16.666667%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-128{height:32rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/3{height:66.666667%}.h-2\/4{height:50%}.h-2\/5{height:40%}.h-2\/6{height:33.333333%}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-3\/4{height:75%}.h-3\/5{height:60%}.h-3\/6{height:50%}.h-32{height:8rem}.h-36{height:9rem}.h-4{height:1rem}.h-4\/5{height:80%}.h-4\/6{height:66.666667%}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\/6{height:83.333333%}.h-52{height:13rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[30px\]{height:30px}.h-\[52px\]{height:52px}.max-h-0{max-height:0px}.max-h-0\.5{max-height:.125rem}.max-h-1{max-height:.25rem}.max-h-1\.5{max-height:.375rem}.max-h-10{max-height:2.5rem}.max-h-11{max-height:2.75rem}.max-h-12{max-height:3rem}.max-h-14{max-height:3.5rem}.max-h-16{max-height:4rem}.max-h-2{max-height:.5rem}.max-h-2\.5{max-height:.625rem}.max-h-20{max-height:5rem}.max-h-24{max-height:6rem}.max-h-28{max-height:7rem}.max-h-3{max-height:.75rem}.max-h-3\.5{max-height:.875rem}.max-h-32{max-height:8rem}.max-h-36{max-height:9rem}.max-h-4{max-height:1rem}.max-h-40{max-height:10rem}.max-h-44{max-height:11rem}.max-h-48{max-height:12rem}.max-h-5{max-height:1.25rem}.max-h-52{max-height:13rem}.max-h-56{max-height:14rem}.max-h-6{max-height:1.5rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-7{max-height:1.75rem}.max-h-72{max-height:18rem}.max-h-8{max-height:2rem}.max-h-80{max-height:20rem}.max-h-9{max-height:2.25rem}.max-h-96{max-height:24rem}.min-h-0{min-height:0px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\/12{width:8.333333%}.w-1\/2{width:50%}.w-14{width:3.5rem}.w-2\/12{width:16.666667%}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/12{width:25%}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-\[42rem\]{min-width:42rem}.max-w-\[1px\]{max-width:1px}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-\[10000\]{flex-grow:10000}.basis-0{flex-basis:0px}.basis-56{flex-basis:14rem}.basis-full{flex-basis:100%}.origin-bottom{transform-origin:bottom}.origin-top-right{transform-origin:top right}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-\[max-content\,minmax\(max-content\,1fr\)\,max-content\,minmax\(0\,2fr\)\,max-content\,minmax\(0\,2fr\)\,minmax\(max-content\,1fr\)\]{grid-template-columns:max-content minmax(max-content,1fr) max-content minmax(0,2fr) max-content minmax(0,2fr) minmax(max-content,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity))}.bg-\[\#9333ea\]{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity))}.bg-\[\#e11d48\]{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity))}.bg-\[rgba\(147\,51\,234\,0\.5\)\]{background-color:#9333ea80}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-500{stroke:#6b7280}.stroke-red-500{stroke:#ef4444}.\!p-0{padding:0!important}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-12{padding-bottom:3rem}.pb-px{padding-bottom:1px}.pl-3{padding-left:.75rem}.pr-8{padding-right:2rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-25{opacity:.25}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 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)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-gray-900\/10{--tw-ring-color: rgb(17 24 39 / .1)}.ring-gray-900\/5{--tw-ring-color: rgb(17 24 39 / .05)}.\@container{container-type:inline-size}.\@container\/scroll-wrapper{container-type:inline-size;container-name:scroll-wrapper}.\[scrollbar-color\:theme\(colors\.gray\.500\)_transparent\]{scrollbar-color:#6b7280 transparent}.\[scrollbar-width\:thin\]{scrollbar-width:thin}[x-cloak]{display:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:right-\[calc\(-1\*var\(--triangle-size\)\)\]:after{content:var(--tw-content);right:calc(-1 * var(--triangle-size))}.after\:top-\[calc\(50\%-var\(--triangle-size\)\)\]:after{content:var(--tw-content);top:calc(50% - var(--triangle-size))}.after\:border-b-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-bottom-width:var(--triangle-size)}.after\:border-l-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-left-width:var(--triangle-size)}.after\:border-t-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-top-width:var(--triangle-size)}.after\:border-transparent:after{content:var(--tw-content);border-color:transparent}.after\:border-l-purple-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-left-color:rgb(168 85 247 / var(--tw-border-opacity))}.after\:\[--triangle-size\:4px\]:after{content:var(--tw-content);--triangle-size: 4px}.first\:h-0:first-child{height:0px}.first\:rounded-l-md:first-child{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.first\:pl-3:first-child{padding-left:.75rem}.last\:rounded-r-md:last-child{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.last\:pr-3:last-child{padding-right:.75rem}.focus-within\:ring:focus-within{--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.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(0px + 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)}@container (min-width: 24rem){.\@sm\:block{display:block}.\@sm\:px-3{padding-left:.75rem;padding-right:.75rem}}@container (min-width: 28rem){.\@md\:mb-6{margin-bottom:1.5rem}}@container (min-width: 32rem){.\@lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 48rem){.\@3xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 72rem){.\@6xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}html :where(.default\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:col-span-full){grid-column:1 / -1}html :where(.default\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:row-span-full){grid-row:1 / -1}html :where(.default\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:gap-6){gap:1.5rem}:is(.dark .dark\:block){display:block}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-blue-700){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-500){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-900){--tw-border-opacity: 1;border-color:rgb(17 24 39 / var(--tw-border-opacity))}:is(.dark .dark\:border-purple-700){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity))}:is(.dark .dark\:border-red-700){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity))}:is(.dark .dark\:bg-blue-900){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800\/50){background-color:#1f293780}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-950){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-900){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-900){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}:is(.dark .dark\:from-gray-900){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}:is(.dark .dark\:to-gray-800){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}:is(.dark .dark\:stroke-gray-400){stroke:#9ca3af}:is(.dark .dark\:stroke-gray-700){stroke:#374151}:is(.dark .dark\:text-blue-300){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-100){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-600){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}:is(.dark .dark\:text-purple-300){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity))}:is(.dark .dark\:text-red-300){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity))}:is(.dark .dark\:ring-gray-100\/10){--tw-ring-color: rgb(243 244 246 / .1)}:is(.dark .dark\:hover\:bg-gray-700:hover){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-800:hover){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-gray-500:hover){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:text-gray-500:focus){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:col-span-10{grid-column:span 10 / span 10}.sm\:col-span-11{grid-column:span 11 / span 11}.sm\:col-span-12{grid-column:span 12 / span 12}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-5{grid-column:span 5 / span 5}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:col-span-7{grid-column:span 7 / span 7}.sm\:col-span-8{grid-column:span 8 / span 8}.sm\:col-span-9{grid-column:span 9 / span 9}.sm\:col-span-full{grid-column:1 / -1}.sm\:row-span-1{grid-row:span 1 / span 1}.sm\:row-span-2{grid-row:span 2 / span 2}.sm\:row-span-3{grid-row:span 3 / span 3}.sm\:row-span-4{grid-row:span 4 / span 4}.sm\:row-span-5{grid-row:span 5 / span 5}.sm\:row-span-6{grid-row:span 6 / span 6}.sm\:row-span-full{grid-row:1 / -1}.sm\:h-0{height:0px}.sm\:h-0\.5{height:.125rem}.sm\:h-1{height:.25rem}.sm\:h-1\.5{height:.375rem}.sm\:h-1\/2{height:50%}.sm\:h-1\/3{height:33.333333%}.sm\:h-1\/4{height:25%}.sm\:h-1\/5{height:20%}.sm\:h-1\/6{height:16.666667%}.sm\:h-10{height:2.5rem}.sm\:h-11{height:2.75rem}.sm\:h-12{height:3rem}.sm\:h-128{height:32rem}.sm\:h-14{height:3.5rem}.sm\:h-16{height:4rem}.sm\:h-2{height:.5rem}.sm\:h-2\.5{height:.625rem}.sm\:h-2\/3{height:66.666667%}.sm\:h-2\/4{height:50%}.sm\:h-2\/5{height:40%}.sm\:h-2\/6{height:33.333333%}.sm\:h-20{height:5rem}.sm\:h-24{height:6rem}.sm\:h-28{height:7rem}.sm\:h-3{height:.75rem}.sm\:h-3\.5{height:.875rem}.sm\:h-3\/4{height:75%}.sm\:h-3\/5{height:60%}.sm\:h-3\/6{height:50%}.sm\:h-32{height:8rem}.sm\:h-36{height:9rem}.sm\:h-4{height:1rem}.sm\:h-4\/5{height:80%}.sm\:h-4\/6{height:66.666667%}.sm\:h-40{height:10rem}.sm\:h-44{height:11rem}.sm\:h-48{height:12rem}.sm\:h-5{height:1.25rem}.sm\:h-5\/6{height:83.333333%}.sm\:h-52{height:13rem}.sm\:h-56{height:14rem}.sm\:h-6{height:1.5rem}.sm\:h-60{height:15rem}.sm\:h-64{height:16rem}.sm\:h-7{height:1.75rem}.sm\:h-72{height:18rem}.sm\:h-8{height:2rem}.sm\:h-80{height:20rem}.sm\:h-9{height:2.25rem}.sm\:h-96{height:24rem}.sm\:max-h-0{max-height:0px}.sm\:max-h-0\.5{max-height:.125rem}.sm\:max-h-1{max-height:.25rem}.sm\:max-h-1\.5{max-height:.375rem}.sm\:max-h-10{max-height:2.5rem}.sm\:max-h-11{max-height:2.75rem}.sm\:max-h-12{max-height:3rem}.sm\:max-h-14{max-height:3.5rem}.sm\:max-h-16{max-height:4rem}.sm\:max-h-2{max-height:.5rem}.sm\:max-h-2\.5{max-height:.625rem}.sm\:max-h-20{max-height:5rem}.sm\:max-h-24{max-height:6rem}.sm\:max-h-28{max-height:7rem}.sm\:max-h-3{max-height:.75rem}.sm\:max-h-3\.5{max-height:.875rem}.sm\:max-h-32{max-height:8rem}.sm\:max-h-36{max-height:9rem}.sm\:max-h-4{max-height:1rem}.sm\:max-h-40{max-height:10rem}.sm\:max-h-44{max-height:11rem}.sm\:max-h-48{max-height:12rem}.sm\:max-h-5{max-height:1.25rem}.sm\:max-h-52{max-height:13rem}.sm\:max-h-56{max-height:14rem}.sm\:max-h-6{max-height:1.5rem}.sm\:max-h-60{max-height:15rem}.sm\:max-h-64{max-height:16rem}.sm\:max-h-7{max-height:1.75rem}.sm\:max-h-72{max-height:18rem}.sm\:max-h-8{max-height:2rem}.sm\:max-h-80{max-height:20rem}.sm\:max-h-9{max-height:2.25rem}.sm\:max-h-96{max-height:24rem}.sm\:min-h-0{min-height:0px}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:p-6{padding:1.5rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-10{grid-column:span 10 / span 10}.md\:col-span-11{grid-column:span 11 / span 11}.md\:col-span-12{grid-column:span 12 / span 12}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-3{grid-column:span 3 / span 3}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-span-7{grid-column:span 7 / span 7}.md\:col-span-8{grid-column:span 8 / span 8}.md\:col-span-9{grid-column:span 9 / span 9}.md\:col-span-full{grid-column:1 / -1}.md\:row-span-1{grid-row:span 1 / span 1}.md\:row-span-2{grid-row:span 2 / span 2}.md\:row-span-3{grid-row:span 3 / span 3}.md\:row-span-4{grid-row:span 4 / span 4}.md\:row-span-5{grid-row:span 5 / span 5}.md\:row-span-6{grid-row:span 6 / span 6}.md\:row-span-full{grid-row:1 / -1}.md\:h-0{height:0px}.md\:h-0\.5{height:.125rem}.md\:h-1{height:.25rem}.md\:h-1\.5{height:.375rem}.md\:h-1\/2{height:50%}.md\:h-1\/3{height:33.333333%}.md\:h-1\/4{height:25%}.md\:h-1\/5{height:20%}.md\:h-1\/6{height:16.666667%}.md\:h-10{height:2.5rem}.md\:h-11{height:2.75rem}.md\:h-12{height:3rem}.md\:h-128{height:32rem}.md\:h-14{height:3.5rem}.md\:h-16{height:4rem}.md\:h-2{height:.5rem}.md\:h-2\.5{height:.625rem}.md\:h-2\/3{height:66.666667%}.md\:h-2\/4{height:50%}.md\:h-2\/5{height:40%}.md\:h-2\/6{height:33.333333%}.md\:h-20{height:5rem}.md\:h-24{height:6rem}.md\:h-28{height:7rem}.md\:h-3{height:.75rem}.md\:h-3\.5{height:.875rem}.md\:h-3\/4{height:75%}.md\:h-3\/5{height:60%}.md\:h-3\/6{height:50%}.md\:h-32{height:8rem}.md\:h-36{height:9rem}.md\:h-4{height:1rem}.md\:h-4\/5{height:80%}.md\:h-4\/6{height:66.666667%}.md\:h-40{height:10rem}.md\:h-44{height:11rem}.md\:h-48{height:12rem}.md\:h-5{height:1.25rem}.md\:h-5\/6{height:83.333333%}.md\:h-52{height:13rem}.md\:h-56{height:14rem}.md\:h-6{height:1.5rem}.md\:h-60{height:15rem}.md\:h-64{height:16rem}.md\:h-7{height:1.75rem}.md\:h-72{height:18rem}.md\:h-8{height:2rem}.md\:h-80{height:20rem}.md\:h-9{height:2.25rem}.md\:h-96{height:24rem}.md\:max-h-0{max-height:0px}.md\:max-h-0\.5{max-height:.125rem}.md\:max-h-1{max-height:.25rem}.md\:max-h-1\.5{max-height:.375rem}.md\:max-h-10{max-height:2.5rem}.md\:max-h-11{max-height:2.75rem}.md\:max-h-12{max-height:3rem}.md\:max-h-14{max-height:3.5rem}.md\:max-h-16{max-height:4rem}.md\:max-h-2{max-height:.5rem}.md\:max-h-2\.5{max-height:.625rem}.md\:max-h-20{max-height:5rem}.md\:max-h-24{max-height:6rem}.md\:max-h-28{max-height:7rem}.md\:max-h-3{max-height:.75rem}.md\:max-h-3\.5{max-height:.875rem}.md\:max-h-32{max-height:8rem}.md\:max-h-36{max-height:9rem}.md\:max-h-4{max-height:1rem}.md\:max-h-40{max-height:10rem}.md\:max-h-44{max-height:11rem}.md\:max-h-48{max-height:12rem}.md\:max-h-5{max-height:1.25rem}.md\:max-h-52{max-height:13rem}.md\:max-h-56{max-height:14rem}.md\:max-h-6{max-height:1.5rem}.md\:max-h-60{max-height:15rem}.md\:max-h-64{max-height:16rem}.md\:max-h-7{max-height:1.75rem}.md\:max-h-72{max-height:18rem}.md\:max-h-8{max-height:2rem}.md\:max-h-80{max-height:20rem}.md\:max-h-9{max-height:2.25rem}.md\:max-h-96{max-height:24rem}.md\:min-h-0{min-height:0px}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-10{grid-column:span 10 / span 10}.lg\:col-span-11{grid-column:span 11 / span 11}.lg\:col-span-12{grid-column:span 12 / span 12}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-5{grid-column:span 5 / span 5}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-span-9{grid-column:span 9 / span 9}.lg\:col-span-full{grid-column:1 / -1}.lg\:row-span-1{grid-row:span 1 / span 1}.lg\:row-span-2{grid-row:span 2 / span 2}.lg\:row-span-3{grid-row:span 3 / span 3}.lg\:row-span-4{grid-row:span 4 / span 4}.lg\:row-span-5{grid-row:span 5 / span 5}.lg\:row-span-6{grid-row:span 6 / span 6}.lg\:row-span-full{grid-row:1 / -1}.lg\:h-0{height:0px}.lg\:h-0\.5{height:.125rem}.lg\:h-1{height:.25rem}.lg\:h-1\.5{height:.375rem}.lg\:h-1\/2{height:50%}.lg\:h-1\/3{height:33.333333%}.lg\:h-1\/4{height:25%}.lg\:h-1\/5{height:20%}.lg\:h-1\/6{height:16.666667%}.lg\:h-10{height:2.5rem}.lg\:h-11{height:2.75rem}.lg\:h-12{height:3rem}.lg\:h-128{height:32rem}.lg\:h-14{height:3.5rem}.lg\:h-16{height:4rem}.lg\:h-2{height:.5rem}.lg\:h-2\.5{height:.625rem}.lg\:h-2\/3{height:66.666667%}.lg\:h-2\/4{height:50%}.lg\:h-2\/5{height:40%}.lg\:h-2\/6{height:33.333333%}.lg\:h-20{height:5rem}.lg\:h-24{height:6rem}.lg\:h-28{height:7rem}.lg\:h-3{height:.75rem}.lg\:h-3\.5{height:.875rem}.lg\:h-3\/4{height:75%}.lg\:h-3\/5{height:60%}.lg\:h-3\/6{height:50%}.lg\:h-32{height:8rem}.lg\:h-36{height:9rem}.lg\:h-4{height:1rem}.lg\:h-4\/5{height:80%}.lg\:h-4\/6{height:66.666667%}.lg\:h-40{height:10rem}.lg\:h-44{height:11rem}.lg\:h-48{height:12rem}.lg\:h-5{height:1.25rem}.lg\:h-5\/6{height:83.333333%}.lg\:h-52{height:13rem}.lg\:h-56{height:14rem}.lg\:h-6{height:1.5rem}.lg\:h-60{height:15rem}.lg\:h-64{height:16rem}.lg\:h-7{height:1.75rem}.lg\:h-72{height:18rem}.lg\:h-8{height:2rem}.lg\:h-80{height:20rem}.lg\:h-9{height:2.25rem}.lg\:h-96{height:24rem}.lg\:max-h-0{max-height:0px}.lg\:max-h-0\.5{max-height:.125rem}.lg\:max-h-1{max-height:.25rem}.lg\:max-h-1\.5{max-height:.375rem}.lg\:max-h-10{max-height:2.5rem}.lg\:max-h-11{max-height:2.75rem}.lg\:max-h-12{max-height:3rem}.lg\:max-h-14{max-height:3.5rem}.lg\:max-h-16{max-height:4rem}.lg\:max-h-2{max-height:.5rem}.lg\:max-h-2\.5{max-height:.625rem}.lg\:max-h-20{max-height:5rem}.lg\:max-h-24{max-height:6rem}.lg\:max-h-28{max-height:7rem}.lg\:max-h-3{max-height:.75rem}.lg\:max-h-3\.5{max-height:.875rem}.lg\:max-h-32{max-height:8rem}.lg\:max-h-36{max-height:9rem}.lg\:max-h-4{max-height:1rem}.lg\:max-h-40{max-height:10rem}.lg\:max-h-44{max-height:11rem}.lg\:max-h-48{max-height:12rem}.lg\:max-h-5{max-height:1.25rem}.lg\:max-h-52{max-height:13rem}.lg\:max-h-56{max-height:14rem}.lg\:max-h-6{max-height:1.5rem}.lg\:max-h-60{max-height:15rem}.lg\:max-h-64{max-height:16rem}.lg\:max-h-7{max-height:1.75rem}.lg\:max-h-72{max-height:18rem}.lg\:max-h-8{max-height:2rem}.lg\:max-h-80{max-height:20rem}.lg\:max-h-9{max-height:2.25rem}.lg\:max-h-96{max-height:24rem}.lg\:min-h-0{min-height:0px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:lg\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:lg\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:lg\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:lg\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:lg\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:lg\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:lg\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:lg\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:lg\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:lg\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:lg\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:lg\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:lg\:col-span-full){grid-column:1 / -1}html :where(.default\:lg\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:lg\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:lg\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:lg\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:lg\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:lg\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:lg\:row-span-full){grid-row:1 / -1}html :where(.default\:lg\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-10{grid-column:span 10 / span 10}.xl\:col-span-11{grid-column:span 11 / span 11}.xl\:col-span-12{grid-column:span 12 / span 12}.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-5{grid-column:span 5 / span 5}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-7{grid-column:span 7 / span 7}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-span-full{grid-column:1 / -1}.xl\:row-span-1{grid-row:span 1 / span 1}.xl\:row-span-2{grid-row:span 2 / span 2}.xl\:row-span-3{grid-row:span 3 / span 3}.xl\:row-span-4{grid-row:span 4 / span 4}.xl\:row-span-5{grid-row:span 5 / span 5}.xl\:row-span-6{grid-row:span 6 / span 6}.xl\:row-span-full{grid-row:1 / -1}.xl\:h-0{height:0px}.xl\:h-0\.5{height:.125rem}.xl\:h-1{height:.25rem}.xl\:h-1\.5{height:.375rem}.xl\:h-1\/2{height:50%}.xl\:h-1\/3{height:33.333333%}.xl\:h-1\/4{height:25%}.xl\:h-1\/5{height:20%}.xl\:h-1\/6{height:16.666667%}.xl\:h-10{height:2.5rem}.xl\:h-11{height:2.75rem}.xl\:h-12{height:3rem}.xl\:h-128{height:32rem}.xl\:h-14{height:3.5rem}.xl\:h-16{height:4rem}.xl\:h-2{height:.5rem}.xl\:h-2\.5{height:.625rem}.xl\:h-2\/3{height:66.666667%}.xl\:h-2\/4{height:50%}.xl\:h-2\/5{height:40%}.xl\:h-2\/6{height:33.333333%}.xl\:h-20{height:5rem}.xl\:h-24{height:6rem}.xl\:h-28{height:7rem}.xl\:h-3{height:.75rem}.xl\:h-3\.5{height:.875rem}.xl\:h-3\/4{height:75%}.xl\:h-3\/5{height:60%}.xl\:h-3\/6{height:50%}.xl\:h-32{height:8rem}.xl\:h-36{height:9rem}.xl\:h-4{height:1rem}.xl\:h-4\/5{height:80%}.xl\:h-4\/6{height:66.666667%}.xl\:h-40{height:10rem}.xl\:h-44{height:11rem}.xl\:h-48{height:12rem}.xl\:h-5{height:1.25rem}.xl\:h-5\/6{height:83.333333%}.xl\:h-52{height:13rem}.xl\:h-56{height:14rem}.xl\:h-6{height:1.5rem}.xl\:h-60{height:15rem}.xl\:h-64{height:16rem}.xl\:h-7{height:1.75rem}.xl\:h-72{height:18rem}.xl\:h-8{height:2rem}.xl\:h-80{height:20rem}.xl\:h-9{height:2.25rem}.xl\:h-96{height:24rem}.xl\:max-h-0{max-height:0px}.xl\:max-h-0\.5{max-height:.125rem}.xl\:max-h-1{max-height:.25rem}.xl\:max-h-1\.5{max-height:.375rem}.xl\:max-h-10{max-height:2.5rem}.xl\:max-h-11{max-height:2.75rem}.xl\:max-h-12{max-height:3rem}.xl\:max-h-14{max-height:3.5rem}.xl\:max-h-16{max-height:4rem}.xl\:max-h-2{max-height:.5rem}.xl\:max-h-2\.5{max-height:.625rem}.xl\:max-h-20{max-height:5rem}.xl\:max-h-24{max-height:6rem}.xl\:max-h-28{max-height:7rem}.xl\:max-h-3{max-height:.75rem}.xl\:max-h-3\.5{max-height:.875rem}.xl\:max-h-32{max-height:8rem}.xl\:max-h-36{max-height:9rem}.xl\:max-h-4{max-height:1rem}.xl\:max-h-40{max-height:10rem}.xl\:max-h-44{max-height:11rem}.xl\:max-h-48{max-height:12rem}.xl\:max-h-5{max-height:1.25rem}.xl\:max-h-52{max-height:13rem}.xl\:max-h-56{max-height:14rem}.xl\:max-h-6{max-height:1.5rem}.xl\:max-h-60{max-height:15rem}.xl\:max-h-64{max-height:16rem}.xl\:max-h-7{max-height:1.75rem}.xl\:max-h-72{max-height:18rem}.xl\:max-h-8{max-height:2rem}.xl\:max-h-80{max-height:20rem}.xl\:max-h-9{max-height:2.25rem}.xl\:max-h-96{max-height:24rem}.xl\:min-h-0{min-height:0px}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:pr-12{padding-right:3rem}}@media (min-width: 1536px){.\32xl\:col-span-1{grid-column:span 1 / span 1}.\32xl\:col-span-10{grid-column:span 10 / span 10}.\32xl\:col-span-11{grid-column:span 11 / span 11}.\32xl\:col-span-12{grid-column:span 12 / span 12}.\32xl\:col-span-2{grid-column:span 2 / span 2}.\32xl\:col-span-3{grid-column:span 3 / span 3}.\32xl\:col-span-4{grid-column:span 4 / span 4}.\32xl\:col-span-5{grid-column:span 5 / span 5}.\32xl\:col-span-6{grid-column:span 6 / span 6}.\32xl\:col-span-7{grid-column:span 7 / span 7}.\32xl\:col-span-8{grid-column:span 8 / span 8}.\32xl\:col-span-9{grid-column:span 9 / span 9}.\32xl\:col-span-full{grid-column:1 / -1}.\32xl\:row-span-1{grid-row:span 1 / span 1}.\32xl\:row-span-2{grid-row:span 2 / span 2}.\32xl\:row-span-3{grid-row:span 3 / span 3}.\32xl\:row-span-4{grid-row:span 4 / span 4}.\32xl\:row-span-5{grid-row:span 5 / span 5}.\32xl\:row-span-6{grid-row:span 6 / span 6}.\32xl\:row-span-full{grid-row:1 / -1}.\32xl\:h-0{height:0px}.\32xl\:h-0\.5{height:.125rem}.\32xl\:h-1{height:.25rem}.\32xl\:h-1\.5{height:.375rem}.\32xl\:h-1\/2{height:50%}.\32xl\:h-1\/3{height:33.333333%}.\32xl\:h-1\/4{height:25%}.\32xl\:h-1\/5{height:20%}.\32xl\:h-1\/6{height:16.666667%}.\32xl\:h-10{height:2.5rem}.\32xl\:h-11{height:2.75rem}.\32xl\:h-12{height:3rem}.\32xl\:h-128{height:32rem}.\32xl\:h-14{height:3.5rem}.\32xl\:h-16{height:4rem}.\32xl\:h-2{height:.5rem}.\32xl\:h-2\.5{height:.625rem}.\32xl\:h-2\/3{height:66.666667%}.\32xl\:h-2\/4{height:50%}.\32xl\:h-2\/5{height:40%}.\32xl\:h-2\/6{height:33.333333%}.\32xl\:h-20{height:5rem}.\32xl\:h-24{height:6rem}.\32xl\:h-28{height:7rem}.\32xl\:h-3{height:.75rem}.\32xl\:h-3\.5{height:.875rem}.\32xl\:h-3\/4{height:75%}.\32xl\:h-3\/5{height:60%}.\32xl\:h-3\/6{height:50%}.\32xl\:h-32{height:8rem}.\32xl\:h-36{height:9rem}.\32xl\:h-4{height:1rem}.\32xl\:h-4\/5{height:80%}.\32xl\:h-4\/6{height:66.666667%}.\32xl\:h-40{height:10rem}.\32xl\:h-44{height:11rem}.\32xl\:h-48{height:12rem}.\32xl\:h-5{height:1.25rem}.\32xl\:h-5\/6{height:83.333333%}.\32xl\:h-52{height:13rem}.\32xl\:h-56{height:14rem}.\32xl\:h-6{height:1.5rem}.\32xl\:h-60{height:15rem}.\32xl\:h-64{height:16rem}.\32xl\:h-7{height:1.75rem}.\32xl\:h-72{height:18rem}.\32xl\:h-8{height:2rem}.\32xl\:h-80{height:20rem}.\32xl\:h-9{height:2.25rem}.\32xl\:h-96{height:24rem}.\32xl\:max-h-0{max-height:0px}.\32xl\:max-h-0\.5{max-height:.125rem}.\32xl\:max-h-1{max-height:.25rem}.\32xl\:max-h-1\.5{max-height:.375rem}.\32xl\:max-h-10{max-height:2.5rem}.\32xl\:max-h-11{max-height:2.75rem}.\32xl\:max-h-12{max-height:3rem}.\32xl\:max-h-14{max-height:3.5rem}.\32xl\:max-h-16{max-height:4rem}.\32xl\:max-h-2{max-height:.5rem}.\32xl\:max-h-2\.5{max-height:.625rem}.\32xl\:max-h-20{max-height:5rem}.\32xl\:max-h-24{max-height:6rem}.\32xl\:max-h-28{max-height:7rem}.\32xl\:max-h-3{max-height:.75rem}.\32xl\:max-h-3\.5{max-height:.875rem}.\32xl\:max-h-32{max-height:8rem}.\32xl\:max-h-36{max-height:9rem}.\32xl\:max-h-4{max-height:1rem}.\32xl\:max-h-40{max-height:10rem}.\32xl\:max-h-44{max-height:11rem}.\32xl\:max-h-48{max-height:12rem}.\32xl\:max-h-5{max-height:1.25rem}.\32xl\:max-h-52{max-height:13rem}.\32xl\:max-h-56{max-height:14rem}.\32xl\:max-h-6{max-height:1.5rem}.\32xl\:max-h-60{max-height:15rem}.\32xl\:max-h-64{max-height:16rem}.\32xl\:max-h-7{max-height:1.75rem}.\32xl\:max-h-72{max-height:18rem}.\32xl\:max-h-8{max-height:2rem}.\32xl\:max-h-80{max-height:20rem}.\32xl\:max-h-9{max-height:2.25rem}.\32xl\:max-h-96{max-height:24rem}.\32xl\:min-h-0{min-height:0px}.\32xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.\32xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.\32xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.\32xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.\32xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\32xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\32xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.\32xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.\32xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}.\[\&\:nth-child\(1n\+15\)\]\:border-t:nth-child(n+15){border-top-width:1px}.\[\&\>svg\]\:h-6>svg{height:1.5rem}.\[\&\>svg\]\:w-6>svg{width:1.5rem}.\[\&\>svg\]\:flex-shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:stroke-gray-400>svg{stroke:#9ca3af}:is(.dark .\[\&\>svg\]\:dark\:stroke-gray-600)>svg{stroke:#4b5563} diff --git a/resources/views/livewire/queues.blade.php b/resources/views/livewire/queues.blade.php index 17a08cef..b8bf7b03 100644 --- a/resources/views/livewire/queues.blade.php +++ b/resources/views/livewire/queues.blade.php @@ -26,7 +26,7 @@ -
+
@foreach ($queues as $queue => $readings)

@@ -36,111 +36,119 @@ @endif

@php $latest = $readings->last() @endphp -
+
{{ number_format($highest) }}
+ +
- + chart.data.labels = queues['{{ $queue }}'].map(reading => reading.date) + chart.data.datasets[0].data = queues['{{ $queue }}'].map(reading => reading.queued) + chart.data.datasets[1].data = queues['{{ $queue }}'].map(reading => reading.processed) + chart.data.datasets[2].data = queues['{{ $queue }}'].map(reading => reading.failed) + chart.update() + }) + } + }" + > + +
@endforeach diff --git a/src/Queries/Queues.php b/src/Queries/Queues.php index fb906912..2046d0d2 100644 --- a/src/Queries/Queues.php +++ b/src/Queries/Queues.php @@ -122,6 +122,7 @@ public function __invoke(Interval $interval): Collection ->get() ->reverse() ->groupBy(fn ($value) => "{$value->connection}:{$value->queue}") + ->sortKeys() ->map(function (Collection $readings) use ($secondsPerPeriod, $padding) { $readings = $readings ->mapWithKeys(function (stdClass $reading) use ($secondsPerPeriod) { From f4b9d21d8fdf4b758046213dada54ecd3239e4bc Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Fri, 6 Oct 2023 17:14:21 +1000 Subject: [PATCH 13/22] Add loading state to queues card --- resources/views/livewire/queues.blade.php | 251 ++++++++++++---------- 1 file changed, 136 insertions(+), 115 deletions(-) diff --git a/resources/views/livewire/queues.blade.php b/resources/views/livewire/queues.blade.php index b8bf7b03..fb05f995 100644 --- a/resources/views/livewire/queues.blade.php +++ b/resources/views/livewire/queues.blade.php @@ -26,132 +26,153 @@ -
- @foreach ($queues as $queue => $readings) -
-

- {{ Str::after($queue, ':') }} - @if ($showConnection) - ({{ Str::before($queue, ':') }}) - @endif -

- @php $latest = $readings->last() @endphp - @php - $highest = $readings->map(fn ($reading) => max( - $reading->queued, - $reading->processed, - $reading->failed, - ))->max() - @endphp +
-
{{ number_format($highest) }}
+ Livewire.hook('commit', ({ component, succeed }) => { + if (component.name === $wire.__instance.name) { + succeed(() => this.loadingNewDataset = false) + } + }) + } + }" + class="min-h-full flex flex-col" + :class="loadingNewDataset ? 'opacity-25 animate-pulse' : ''" + > + @if (count($queues) === 0) + + @else +
+ @foreach ($queues as $queue => $readings) +
+

+ {{ Str::after($queue, ':') }} + @if ($showConnection) + ({{ Str::before($queue, ':') }}) + @endif +

+ @php $latest = $readings->last() @endphp + @php + $highest = $readings->map(fn ($reading) => max( + $reading->queued, + $reading->processed, + $reading->failed, + ))->max() + @endphp -
+
{{ number_format($highest) }}
+ +
- + chart.data.labels = queues['{{ $queue }}'].map(reading => reading.date) + chart.data.datasets[0].data = queues['{{ $queue }}'].map(reading => reading.queued) + chart.data.datasets[1].data = queues['{{ $queue }}'].map(reading => reading.processed) + chart.data.datasets[2].data = queues['{{ $queue }}'].map(reading => reading.failed) + chart.update() + }) + } + }" + > + +
+
-
+ @endforeach
- @endforeach + @endif
From 3d5bcef3a331f83ccdb4ffece2a03bc1884f1411 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Tue, 10 Oct 2023 11:30:51 +1000 Subject: [PATCH 14/22] wip --- src/Queries/Queues.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Queries/Queues.php b/src/Queries/Queues.php index 2046d0d2..ddd945cc 100644 --- a/src/Queries/Queues.php +++ b/src/Queries/Queues.php @@ -8,7 +8,6 @@ use Illuminate\Database\DatabaseManager; use Illuminate\Database\Query\Builder; use Illuminate\Support\Collection; -use Illuminate\Support\Enumerable; use stdClass; /** From ca75f28c1c77fa2989ef92b2ca8956900675bcd0 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Wed, 11 Oct 2023 11:50:50 +1000 Subject: [PATCH 15/22] Update chart --- dist/pulse.css | 2 +- resources/views/livewire/queues.blade.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/pulse.css b/dist/pulse.css index abf87031..f731ec2d 100644 --- a/dist/pulse.css +++ b/dist/pulse.css @@ -1 +1 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;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-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 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:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--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)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--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: rgb(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: rgb(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}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-left-px{left:-1px}.-top-2{top:-.5rem}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.col-span-1{grid-column:span 1 / span 1}.col-span-10{grid-column:span 10 / span 10}.col-span-11{grid-column:span 11 / span 11}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-5{grid-column:span 5 / span 5}.col-span-6{grid-column:span 6 / span 6}.col-span-7{grid-column:span 7 / span 7}.col-span-8{grid-column:span 8 / span 8}.col-span-9{grid-column:span 9 / span 9}.col-span-full{grid-column:1 / -1}.row-span-1{grid-row:span 1 / span 1}.row-span-2{grid-row:span 2 / span 2}.row-span-3{grid-row:span 3 / span 3}.row-span-4{grid-row:span 4 / span 4}.row-span-5{grid-row:span 5 / span 5}.row-span-6{grid-row:span 6 / span 6}.row-span-full{grid-row:1 / -1}.mx-auto{margin-left:auto;margin-right:auto}.mx-px{margin-left:1px;margin-right:1px}.mb-3{margin-bottom:.75rem}.mb-px{margin-bottom:1px}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-1\/3{height:33.333333%}.h-1\/4{height:25%}.h-1\/5{height:20%}.h-1\/6{height:16.666667%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-128{height:32rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/3{height:66.666667%}.h-2\/4{height:50%}.h-2\/5{height:40%}.h-2\/6{height:33.333333%}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-3\/4{height:75%}.h-3\/5{height:60%}.h-3\/6{height:50%}.h-32{height:8rem}.h-36{height:9rem}.h-4{height:1rem}.h-4\/5{height:80%}.h-4\/6{height:66.666667%}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\/6{height:83.333333%}.h-52{height:13rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[30px\]{height:30px}.h-\[52px\]{height:52px}.max-h-0{max-height:0px}.max-h-0\.5{max-height:.125rem}.max-h-1{max-height:.25rem}.max-h-1\.5{max-height:.375rem}.max-h-10{max-height:2.5rem}.max-h-11{max-height:2.75rem}.max-h-12{max-height:3rem}.max-h-14{max-height:3.5rem}.max-h-16{max-height:4rem}.max-h-2{max-height:.5rem}.max-h-2\.5{max-height:.625rem}.max-h-20{max-height:5rem}.max-h-24{max-height:6rem}.max-h-28{max-height:7rem}.max-h-3{max-height:.75rem}.max-h-3\.5{max-height:.875rem}.max-h-32{max-height:8rem}.max-h-36{max-height:9rem}.max-h-4{max-height:1rem}.max-h-40{max-height:10rem}.max-h-44{max-height:11rem}.max-h-48{max-height:12rem}.max-h-5{max-height:1.25rem}.max-h-52{max-height:13rem}.max-h-56{max-height:14rem}.max-h-6{max-height:1.5rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-7{max-height:1.75rem}.max-h-72{max-height:18rem}.max-h-8{max-height:2rem}.max-h-80{max-height:20rem}.max-h-9{max-height:2.25rem}.max-h-96{max-height:24rem}.min-h-0{min-height:0px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\/12{width:8.333333%}.w-1\/2{width:50%}.w-14{width:3.5rem}.w-2\/12{width:16.666667%}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/12{width:25%}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-\[42rem\]{min-width:42rem}.max-w-\[1px\]{max-width:1px}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-\[10000\]{flex-grow:10000}.basis-0{flex-basis:0px}.basis-56{flex-basis:14rem}.basis-full{flex-basis:100%}.origin-bottom{transform-origin:bottom}.origin-top-right{transform-origin:top right}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-\[max-content\,minmax\(max-content\,1fr\)\,max-content\,minmax\(0\,2fr\)\,max-content\,minmax\(0\,2fr\)\,minmax\(max-content\,1fr\)\]{grid-template-columns:max-content minmax(max-content,1fr) max-content minmax(0,2fr) max-content minmax(0,2fr) minmax(max-content,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity))}.bg-\[\#9333ea\]{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity))}.bg-\[\#e11d48\]{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity))}.bg-\[rgba\(147\,51\,234\,0\.5\)\]{background-color:#9333ea80}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-500{stroke:#6b7280}.stroke-red-500{stroke:#ef4444}.\!p-0{padding:0!important}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-12{padding-bottom:3rem}.pb-px{padding-bottom:1px}.pl-3{padding-left:.75rem}.pr-8{padding-right:2rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-25{opacity:.25}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 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)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-gray-900\/10{--tw-ring-color: rgb(17 24 39 / .1)}.ring-gray-900\/5{--tw-ring-color: rgb(17 24 39 / .05)}.\@container{container-type:inline-size}.\@container\/scroll-wrapper{container-type:inline-size;container-name:scroll-wrapper}.\[scrollbar-color\:theme\(colors\.gray\.500\)_transparent\]{scrollbar-color:#6b7280 transparent}.\[scrollbar-width\:thin\]{scrollbar-width:thin}[x-cloak]{display:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:right-\[calc\(-1\*var\(--triangle-size\)\)\]:after{content:var(--tw-content);right:calc(-1 * var(--triangle-size))}.after\:top-\[calc\(50\%-var\(--triangle-size\)\)\]:after{content:var(--tw-content);top:calc(50% - var(--triangle-size))}.after\:border-b-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-bottom-width:var(--triangle-size)}.after\:border-l-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-left-width:var(--triangle-size)}.after\:border-t-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-top-width:var(--triangle-size)}.after\:border-transparent:after{content:var(--tw-content);border-color:transparent}.after\:border-l-purple-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-left-color:rgb(168 85 247 / var(--tw-border-opacity))}.after\:\[--triangle-size\:4px\]:after{content:var(--tw-content);--triangle-size: 4px}.first\:h-0:first-child{height:0px}.first\:rounded-l-md:first-child{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.first\:pl-3:first-child{padding-left:.75rem}.last\:rounded-r-md:last-child{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.last\:pr-3:last-child{padding-right:.75rem}.focus-within\:ring:focus-within{--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.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(0px + 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)}@container (min-width: 24rem){.\@sm\:block{display:block}.\@sm\:px-3{padding-left:.75rem;padding-right:.75rem}}@container (min-width: 28rem){.\@md\:mb-6{margin-bottom:1.5rem}}@container (min-width: 32rem){.\@lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 48rem){.\@3xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 72rem){.\@6xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}html :where(.default\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:col-span-full){grid-column:1 / -1}html :where(.default\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:row-span-full){grid-row:1 / -1}html :where(.default\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:gap-6){gap:1.5rem}:is(.dark .dark\:block){display:block}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-blue-700){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-500){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-900){--tw-border-opacity: 1;border-color:rgb(17 24 39 / var(--tw-border-opacity))}:is(.dark .dark\:border-purple-700){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity))}:is(.dark .dark\:border-red-700){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity))}:is(.dark .dark\:bg-blue-900){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800\/50){background-color:#1f293780}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-950){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-900){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-900){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}:is(.dark .dark\:from-gray-900){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}:is(.dark .dark\:to-gray-800){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}:is(.dark .dark\:stroke-gray-400){stroke:#9ca3af}:is(.dark .dark\:stroke-gray-700){stroke:#374151}:is(.dark .dark\:text-blue-300){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-100){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-600){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}:is(.dark .dark\:text-purple-300){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity))}:is(.dark .dark\:text-red-300){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity))}:is(.dark .dark\:ring-gray-100\/10){--tw-ring-color: rgb(243 244 246 / .1)}:is(.dark .dark\:hover\:bg-gray-700:hover){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-800:hover){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-gray-500:hover){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:text-gray-500:focus){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:col-span-10{grid-column:span 10 / span 10}.sm\:col-span-11{grid-column:span 11 / span 11}.sm\:col-span-12{grid-column:span 12 / span 12}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-5{grid-column:span 5 / span 5}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:col-span-7{grid-column:span 7 / span 7}.sm\:col-span-8{grid-column:span 8 / span 8}.sm\:col-span-9{grid-column:span 9 / span 9}.sm\:col-span-full{grid-column:1 / -1}.sm\:row-span-1{grid-row:span 1 / span 1}.sm\:row-span-2{grid-row:span 2 / span 2}.sm\:row-span-3{grid-row:span 3 / span 3}.sm\:row-span-4{grid-row:span 4 / span 4}.sm\:row-span-5{grid-row:span 5 / span 5}.sm\:row-span-6{grid-row:span 6 / span 6}.sm\:row-span-full{grid-row:1 / -1}.sm\:h-0{height:0px}.sm\:h-0\.5{height:.125rem}.sm\:h-1{height:.25rem}.sm\:h-1\.5{height:.375rem}.sm\:h-1\/2{height:50%}.sm\:h-1\/3{height:33.333333%}.sm\:h-1\/4{height:25%}.sm\:h-1\/5{height:20%}.sm\:h-1\/6{height:16.666667%}.sm\:h-10{height:2.5rem}.sm\:h-11{height:2.75rem}.sm\:h-12{height:3rem}.sm\:h-128{height:32rem}.sm\:h-14{height:3.5rem}.sm\:h-16{height:4rem}.sm\:h-2{height:.5rem}.sm\:h-2\.5{height:.625rem}.sm\:h-2\/3{height:66.666667%}.sm\:h-2\/4{height:50%}.sm\:h-2\/5{height:40%}.sm\:h-2\/6{height:33.333333%}.sm\:h-20{height:5rem}.sm\:h-24{height:6rem}.sm\:h-28{height:7rem}.sm\:h-3{height:.75rem}.sm\:h-3\.5{height:.875rem}.sm\:h-3\/4{height:75%}.sm\:h-3\/5{height:60%}.sm\:h-3\/6{height:50%}.sm\:h-32{height:8rem}.sm\:h-36{height:9rem}.sm\:h-4{height:1rem}.sm\:h-4\/5{height:80%}.sm\:h-4\/6{height:66.666667%}.sm\:h-40{height:10rem}.sm\:h-44{height:11rem}.sm\:h-48{height:12rem}.sm\:h-5{height:1.25rem}.sm\:h-5\/6{height:83.333333%}.sm\:h-52{height:13rem}.sm\:h-56{height:14rem}.sm\:h-6{height:1.5rem}.sm\:h-60{height:15rem}.sm\:h-64{height:16rem}.sm\:h-7{height:1.75rem}.sm\:h-72{height:18rem}.sm\:h-8{height:2rem}.sm\:h-80{height:20rem}.sm\:h-9{height:2.25rem}.sm\:h-96{height:24rem}.sm\:max-h-0{max-height:0px}.sm\:max-h-0\.5{max-height:.125rem}.sm\:max-h-1{max-height:.25rem}.sm\:max-h-1\.5{max-height:.375rem}.sm\:max-h-10{max-height:2.5rem}.sm\:max-h-11{max-height:2.75rem}.sm\:max-h-12{max-height:3rem}.sm\:max-h-14{max-height:3.5rem}.sm\:max-h-16{max-height:4rem}.sm\:max-h-2{max-height:.5rem}.sm\:max-h-2\.5{max-height:.625rem}.sm\:max-h-20{max-height:5rem}.sm\:max-h-24{max-height:6rem}.sm\:max-h-28{max-height:7rem}.sm\:max-h-3{max-height:.75rem}.sm\:max-h-3\.5{max-height:.875rem}.sm\:max-h-32{max-height:8rem}.sm\:max-h-36{max-height:9rem}.sm\:max-h-4{max-height:1rem}.sm\:max-h-40{max-height:10rem}.sm\:max-h-44{max-height:11rem}.sm\:max-h-48{max-height:12rem}.sm\:max-h-5{max-height:1.25rem}.sm\:max-h-52{max-height:13rem}.sm\:max-h-56{max-height:14rem}.sm\:max-h-6{max-height:1.5rem}.sm\:max-h-60{max-height:15rem}.sm\:max-h-64{max-height:16rem}.sm\:max-h-7{max-height:1.75rem}.sm\:max-h-72{max-height:18rem}.sm\:max-h-8{max-height:2rem}.sm\:max-h-80{max-height:20rem}.sm\:max-h-9{max-height:2.25rem}.sm\:max-h-96{max-height:24rem}.sm\:min-h-0{min-height:0px}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:p-6{padding:1.5rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-10{grid-column:span 10 / span 10}.md\:col-span-11{grid-column:span 11 / span 11}.md\:col-span-12{grid-column:span 12 / span 12}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-3{grid-column:span 3 / span 3}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-span-7{grid-column:span 7 / span 7}.md\:col-span-8{grid-column:span 8 / span 8}.md\:col-span-9{grid-column:span 9 / span 9}.md\:col-span-full{grid-column:1 / -1}.md\:row-span-1{grid-row:span 1 / span 1}.md\:row-span-2{grid-row:span 2 / span 2}.md\:row-span-3{grid-row:span 3 / span 3}.md\:row-span-4{grid-row:span 4 / span 4}.md\:row-span-5{grid-row:span 5 / span 5}.md\:row-span-6{grid-row:span 6 / span 6}.md\:row-span-full{grid-row:1 / -1}.md\:h-0{height:0px}.md\:h-0\.5{height:.125rem}.md\:h-1{height:.25rem}.md\:h-1\.5{height:.375rem}.md\:h-1\/2{height:50%}.md\:h-1\/3{height:33.333333%}.md\:h-1\/4{height:25%}.md\:h-1\/5{height:20%}.md\:h-1\/6{height:16.666667%}.md\:h-10{height:2.5rem}.md\:h-11{height:2.75rem}.md\:h-12{height:3rem}.md\:h-128{height:32rem}.md\:h-14{height:3.5rem}.md\:h-16{height:4rem}.md\:h-2{height:.5rem}.md\:h-2\.5{height:.625rem}.md\:h-2\/3{height:66.666667%}.md\:h-2\/4{height:50%}.md\:h-2\/5{height:40%}.md\:h-2\/6{height:33.333333%}.md\:h-20{height:5rem}.md\:h-24{height:6rem}.md\:h-28{height:7rem}.md\:h-3{height:.75rem}.md\:h-3\.5{height:.875rem}.md\:h-3\/4{height:75%}.md\:h-3\/5{height:60%}.md\:h-3\/6{height:50%}.md\:h-32{height:8rem}.md\:h-36{height:9rem}.md\:h-4{height:1rem}.md\:h-4\/5{height:80%}.md\:h-4\/6{height:66.666667%}.md\:h-40{height:10rem}.md\:h-44{height:11rem}.md\:h-48{height:12rem}.md\:h-5{height:1.25rem}.md\:h-5\/6{height:83.333333%}.md\:h-52{height:13rem}.md\:h-56{height:14rem}.md\:h-6{height:1.5rem}.md\:h-60{height:15rem}.md\:h-64{height:16rem}.md\:h-7{height:1.75rem}.md\:h-72{height:18rem}.md\:h-8{height:2rem}.md\:h-80{height:20rem}.md\:h-9{height:2.25rem}.md\:h-96{height:24rem}.md\:max-h-0{max-height:0px}.md\:max-h-0\.5{max-height:.125rem}.md\:max-h-1{max-height:.25rem}.md\:max-h-1\.5{max-height:.375rem}.md\:max-h-10{max-height:2.5rem}.md\:max-h-11{max-height:2.75rem}.md\:max-h-12{max-height:3rem}.md\:max-h-14{max-height:3.5rem}.md\:max-h-16{max-height:4rem}.md\:max-h-2{max-height:.5rem}.md\:max-h-2\.5{max-height:.625rem}.md\:max-h-20{max-height:5rem}.md\:max-h-24{max-height:6rem}.md\:max-h-28{max-height:7rem}.md\:max-h-3{max-height:.75rem}.md\:max-h-3\.5{max-height:.875rem}.md\:max-h-32{max-height:8rem}.md\:max-h-36{max-height:9rem}.md\:max-h-4{max-height:1rem}.md\:max-h-40{max-height:10rem}.md\:max-h-44{max-height:11rem}.md\:max-h-48{max-height:12rem}.md\:max-h-5{max-height:1.25rem}.md\:max-h-52{max-height:13rem}.md\:max-h-56{max-height:14rem}.md\:max-h-6{max-height:1.5rem}.md\:max-h-60{max-height:15rem}.md\:max-h-64{max-height:16rem}.md\:max-h-7{max-height:1.75rem}.md\:max-h-72{max-height:18rem}.md\:max-h-8{max-height:2rem}.md\:max-h-80{max-height:20rem}.md\:max-h-9{max-height:2.25rem}.md\:max-h-96{max-height:24rem}.md\:min-h-0{min-height:0px}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-10{grid-column:span 10 / span 10}.lg\:col-span-11{grid-column:span 11 / span 11}.lg\:col-span-12{grid-column:span 12 / span 12}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-5{grid-column:span 5 / span 5}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-span-9{grid-column:span 9 / span 9}.lg\:col-span-full{grid-column:1 / -1}.lg\:row-span-1{grid-row:span 1 / span 1}.lg\:row-span-2{grid-row:span 2 / span 2}.lg\:row-span-3{grid-row:span 3 / span 3}.lg\:row-span-4{grid-row:span 4 / span 4}.lg\:row-span-5{grid-row:span 5 / span 5}.lg\:row-span-6{grid-row:span 6 / span 6}.lg\:row-span-full{grid-row:1 / -1}.lg\:h-0{height:0px}.lg\:h-0\.5{height:.125rem}.lg\:h-1{height:.25rem}.lg\:h-1\.5{height:.375rem}.lg\:h-1\/2{height:50%}.lg\:h-1\/3{height:33.333333%}.lg\:h-1\/4{height:25%}.lg\:h-1\/5{height:20%}.lg\:h-1\/6{height:16.666667%}.lg\:h-10{height:2.5rem}.lg\:h-11{height:2.75rem}.lg\:h-12{height:3rem}.lg\:h-128{height:32rem}.lg\:h-14{height:3.5rem}.lg\:h-16{height:4rem}.lg\:h-2{height:.5rem}.lg\:h-2\.5{height:.625rem}.lg\:h-2\/3{height:66.666667%}.lg\:h-2\/4{height:50%}.lg\:h-2\/5{height:40%}.lg\:h-2\/6{height:33.333333%}.lg\:h-20{height:5rem}.lg\:h-24{height:6rem}.lg\:h-28{height:7rem}.lg\:h-3{height:.75rem}.lg\:h-3\.5{height:.875rem}.lg\:h-3\/4{height:75%}.lg\:h-3\/5{height:60%}.lg\:h-3\/6{height:50%}.lg\:h-32{height:8rem}.lg\:h-36{height:9rem}.lg\:h-4{height:1rem}.lg\:h-4\/5{height:80%}.lg\:h-4\/6{height:66.666667%}.lg\:h-40{height:10rem}.lg\:h-44{height:11rem}.lg\:h-48{height:12rem}.lg\:h-5{height:1.25rem}.lg\:h-5\/6{height:83.333333%}.lg\:h-52{height:13rem}.lg\:h-56{height:14rem}.lg\:h-6{height:1.5rem}.lg\:h-60{height:15rem}.lg\:h-64{height:16rem}.lg\:h-7{height:1.75rem}.lg\:h-72{height:18rem}.lg\:h-8{height:2rem}.lg\:h-80{height:20rem}.lg\:h-9{height:2.25rem}.lg\:h-96{height:24rem}.lg\:max-h-0{max-height:0px}.lg\:max-h-0\.5{max-height:.125rem}.lg\:max-h-1{max-height:.25rem}.lg\:max-h-1\.5{max-height:.375rem}.lg\:max-h-10{max-height:2.5rem}.lg\:max-h-11{max-height:2.75rem}.lg\:max-h-12{max-height:3rem}.lg\:max-h-14{max-height:3.5rem}.lg\:max-h-16{max-height:4rem}.lg\:max-h-2{max-height:.5rem}.lg\:max-h-2\.5{max-height:.625rem}.lg\:max-h-20{max-height:5rem}.lg\:max-h-24{max-height:6rem}.lg\:max-h-28{max-height:7rem}.lg\:max-h-3{max-height:.75rem}.lg\:max-h-3\.5{max-height:.875rem}.lg\:max-h-32{max-height:8rem}.lg\:max-h-36{max-height:9rem}.lg\:max-h-4{max-height:1rem}.lg\:max-h-40{max-height:10rem}.lg\:max-h-44{max-height:11rem}.lg\:max-h-48{max-height:12rem}.lg\:max-h-5{max-height:1.25rem}.lg\:max-h-52{max-height:13rem}.lg\:max-h-56{max-height:14rem}.lg\:max-h-6{max-height:1.5rem}.lg\:max-h-60{max-height:15rem}.lg\:max-h-64{max-height:16rem}.lg\:max-h-7{max-height:1.75rem}.lg\:max-h-72{max-height:18rem}.lg\:max-h-8{max-height:2rem}.lg\:max-h-80{max-height:20rem}.lg\:max-h-9{max-height:2.25rem}.lg\:max-h-96{max-height:24rem}.lg\:min-h-0{min-height:0px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:lg\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:lg\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:lg\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:lg\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:lg\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:lg\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:lg\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:lg\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:lg\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:lg\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:lg\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:lg\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:lg\:col-span-full){grid-column:1 / -1}html :where(.default\:lg\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:lg\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:lg\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:lg\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:lg\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:lg\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:lg\:row-span-full){grid-row:1 / -1}html :where(.default\:lg\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-10{grid-column:span 10 / span 10}.xl\:col-span-11{grid-column:span 11 / span 11}.xl\:col-span-12{grid-column:span 12 / span 12}.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-5{grid-column:span 5 / span 5}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-7{grid-column:span 7 / span 7}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-span-full{grid-column:1 / -1}.xl\:row-span-1{grid-row:span 1 / span 1}.xl\:row-span-2{grid-row:span 2 / span 2}.xl\:row-span-3{grid-row:span 3 / span 3}.xl\:row-span-4{grid-row:span 4 / span 4}.xl\:row-span-5{grid-row:span 5 / span 5}.xl\:row-span-6{grid-row:span 6 / span 6}.xl\:row-span-full{grid-row:1 / -1}.xl\:h-0{height:0px}.xl\:h-0\.5{height:.125rem}.xl\:h-1{height:.25rem}.xl\:h-1\.5{height:.375rem}.xl\:h-1\/2{height:50%}.xl\:h-1\/3{height:33.333333%}.xl\:h-1\/4{height:25%}.xl\:h-1\/5{height:20%}.xl\:h-1\/6{height:16.666667%}.xl\:h-10{height:2.5rem}.xl\:h-11{height:2.75rem}.xl\:h-12{height:3rem}.xl\:h-128{height:32rem}.xl\:h-14{height:3.5rem}.xl\:h-16{height:4rem}.xl\:h-2{height:.5rem}.xl\:h-2\.5{height:.625rem}.xl\:h-2\/3{height:66.666667%}.xl\:h-2\/4{height:50%}.xl\:h-2\/5{height:40%}.xl\:h-2\/6{height:33.333333%}.xl\:h-20{height:5rem}.xl\:h-24{height:6rem}.xl\:h-28{height:7rem}.xl\:h-3{height:.75rem}.xl\:h-3\.5{height:.875rem}.xl\:h-3\/4{height:75%}.xl\:h-3\/5{height:60%}.xl\:h-3\/6{height:50%}.xl\:h-32{height:8rem}.xl\:h-36{height:9rem}.xl\:h-4{height:1rem}.xl\:h-4\/5{height:80%}.xl\:h-4\/6{height:66.666667%}.xl\:h-40{height:10rem}.xl\:h-44{height:11rem}.xl\:h-48{height:12rem}.xl\:h-5{height:1.25rem}.xl\:h-5\/6{height:83.333333%}.xl\:h-52{height:13rem}.xl\:h-56{height:14rem}.xl\:h-6{height:1.5rem}.xl\:h-60{height:15rem}.xl\:h-64{height:16rem}.xl\:h-7{height:1.75rem}.xl\:h-72{height:18rem}.xl\:h-8{height:2rem}.xl\:h-80{height:20rem}.xl\:h-9{height:2.25rem}.xl\:h-96{height:24rem}.xl\:max-h-0{max-height:0px}.xl\:max-h-0\.5{max-height:.125rem}.xl\:max-h-1{max-height:.25rem}.xl\:max-h-1\.5{max-height:.375rem}.xl\:max-h-10{max-height:2.5rem}.xl\:max-h-11{max-height:2.75rem}.xl\:max-h-12{max-height:3rem}.xl\:max-h-14{max-height:3.5rem}.xl\:max-h-16{max-height:4rem}.xl\:max-h-2{max-height:.5rem}.xl\:max-h-2\.5{max-height:.625rem}.xl\:max-h-20{max-height:5rem}.xl\:max-h-24{max-height:6rem}.xl\:max-h-28{max-height:7rem}.xl\:max-h-3{max-height:.75rem}.xl\:max-h-3\.5{max-height:.875rem}.xl\:max-h-32{max-height:8rem}.xl\:max-h-36{max-height:9rem}.xl\:max-h-4{max-height:1rem}.xl\:max-h-40{max-height:10rem}.xl\:max-h-44{max-height:11rem}.xl\:max-h-48{max-height:12rem}.xl\:max-h-5{max-height:1.25rem}.xl\:max-h-52{max-height:13rem}.xl\:max-h-56{max-height:14rem}.xl\:max-h-6{max-height:1.5rem}.xl\:max-h-60{max-height:15rem}.xl\:max-h-64{max-height:16rem}.xl\:max-h-7{max-height:1.75rem}.xl\:max-h-72{max-height:18rem}.xl\:max-h-8{max-height:2rem}.xl\:max-h-80{max-height:20rem}.xl\:max-h-9{max-height:2.25rem}.xl\:max-h-96{max-height:24rem}.xl\:min-h-0{min-height:0px}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:pr-12{padding-right:3rem}}@media (min-width: 1536px){.\32xl\:col-span-1{grid-column:span 1 / span 1}.\32xl\:col-span-10{grid-column:span 10 / span 10}.\32xl\:col-span-11{grid-column:span 11 / span 11}.\32xl\:col-span-12{grid-column:span 12 / span 12}.\32xl\:col-span-2{grid-column:span 2 / span 2}.\32xl\:col-span-3{grid-column:span 3 / span 3}.\32xl\:col-span-4{grid-column:span 4 / span 4}.\32xl\:col-span-5{grid-column:span 5 / span 5}.\32xl\:col-span-6{grid-column:span 6 / span 6}.\32xl\:col-span-7{grid-column:span 7 / span 7}.\32xl\:col-span-8{grid-column:span 8 / span 8}.\32xl\:col-span-9{grid-column:span 9 / span 9}.\32xl\:col-span-full{grid-column:1 / -1}.\32xl\:row-span-1{grid-row:span 1 / span 1}.\32xl\:row-span-2{grid-row:span 2 / span 2}.\32xl\:row-span-3{grid-row:span 3 / span 3}.\32xl\:row-span-4{grid-row:span 4 / span 4}.\32xl\:row-span-5{grid-row:span 5 / span 5}.\32xl\:row-span-6{grid-row:span 6 / span 6}.\32xl\:row-span-full{grid-row:1 / -1}.\32xl\:h-0{height:0px}.\32xl\:h-0\.5{height:.125rem}.\32xl\:h-1{height:.25rem}.\32xl\:h-1\.5{height:.375rem}.\32xl\:h-1\/2{height:50%}.\32xl\:h-1\/3{height:33.333333%}.\32xl\:h-1\/4{height:25%}.\32xl\:h-1\/5{height:20%}.\32xl\:h-1\/6{height:16.666667%}.\32xl\:h-10{height:2.5rem}.\32xl\:h-11{height:2.75rem}.\32xl\:h-12{height:3rem}.\32xl\:h-128{height:32rem}.\32xl\:h-14{height:3.5rem}.\32xl\:h-16{height:4rem}.\32xl\:h-2{height:.5rem}.\32xl\:h-2\.5{height:.625rem}.\32xl\:h-2\/3{height:66.666667%}.\32xl\:h-2\/4{height:50%}.\32xl\:h-2\/5{height:40%}.\32xl\:h-2\/6{height:33.333333%}.\32xl\:h-20{height:5rem}.\32xl\:h-24{height:6rem}.\32xl\:h-28{height:7rem}.\32xl\:h-3{height:.75rem}.\32xl\:h-3\.5{height:.875rem}.\32xl\:h-3\/4{height:75%}.\32xl\:h-3\/5{height:60%}.\32xl\:h-3\/6{height:50%}.\32xl\:h-32{height:8rem}.\32xl\:h-36{height:9rem}.\32xl\:h-4{height:1rem}.\32xl\:h-4\/5{height:80%}.\32xl\:h-4\/6{height:66.666667%}.\32xl\:h-40{height:10rem}.\32xl\:h-44{height:11rem}.\32xl\:h-48{height:12rem}.\32xl\:h-5{height:1.25rem}.\32xl\:h-5\/6{height:83.333333%}.\32xl\:h-52{height:13rem}.\32xl\:h-56{height:14rem}.\32xl\:h-6{height:1.5rem}.\32xl\:h-60{height:15rem}.\32xl\:h-64{height:16rem}.\32xl\:h-7{height:1.75rem}.\32xl\:h-72{height:18rem}.\32xl\:h-8{height:2rem}.\32xl\:h-80{height:20rem}.\32xl\:h-9{height:2.25rem}.\32xl\:h-96{height:24rem}.\32xl\:max-h-0{max-height:0px}.\32xl\:max-h-0\.5{max-height:.125rem}.\32xl\:max-h-1{max-height:.25rem}.\32xl\:max-h-1\.5{max-height:.375rem}.\32xl\:max-h-10{max-height:2.5rem}.\32xl\:max-h-11{max-height:2.75rem}.\32xl\:max-h-12{max-height:3rem}.\32xl\:max-h-14{max-height:3.5rem}.\32xl\:max-h-16{max-height:4rem}.\32xl\:max-h-2{max-height:.5rem}.\32xl\:max-h-2\.5{max-height:.625rem}.\32xl\:max-h-20{max-height:5rem}.\32xl\:max-h-24{max-height:6rem}.\32xl\:max-h-28{max-height:7rem}.\32xl\:max-h-3{max-height:.75rem}.\32xl\:max-h-3\.5{max-height:.875rem}.\32xl\:max-h-32{max-height:8rem}.\32xl\:max-h-36{max-height:9rem}.\32xl\:max-h-4{max-height:1rem}.\32xl\:max-h-40{max-height:10rem}.\32xl\:max-h-44{max-height:11rem}.\32xl\:max-h-48{max-height:12rem}.\32xl\:max-h-5{max-height:1.25rem}.\32xl\:max-h-52{max-height:13rem}.\32xl\:max-h-56{max-height:14rem}.\32xl\:max-h-6{max-height:1.5rem}.\32xl\:max-h-60{max-height:15rem}.\32xl\:max-h-64{max-height:16rem}.\32xl\:max-h-7{max-height:1.75rem}.\32xl\:max-h-72{max-height:18rem}.\32xl\:max-h-8{max-height:2rem}.\32xl\:max-h-80{max-height:20rem}.\32xl\:max-h-9{max-height:2.25rem}.\32xl\:max-h-96{max-height:24rem}.\32xl\:min-h-0{min-height:0px}.\32xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.\32xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.\32xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.\32xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.\32xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\32xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\32xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.\32xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.\32xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}.\[\&\:nth-child\(1n\+15\)\]\:border-t:nth-child(n+15){border-top-width:1px}.\[\&\>svg\]\:h-6>svg{height:1.5rem}.\[\&\>svg\]\:w-6>svg{width:1.5rem}.\[\&\>svg\]\:flex-shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:stroke-gray-400>svg{stroke:#9ca3af}:is(.dark .\[\&\>svg\]\:dark\:stroke-gray-600)>svg{stroke:#4b5563} +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;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-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 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:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--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)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--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: rgb(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: rgb(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}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-left-px{left:-1px}.-top-2{top:-.5rem}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.col-span-1{grid-column:span 1 / span 1}.col-span-10{grid-column:span 10 / span 10}.col-span-11{grid-column:span 11 / span 11}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-5{grid-column:span 5 / span 5}.col-span-6{grid-column:span 6 / span 6}.col-span-7{grid-column:span 7 / span 7}.col-span-8{grid-column:span 8 / span 8}.col-span-9{grid-column:span 9 / span 9}.col-span-full{grid-column:1 / -1}.row-span-1{grid-row:span 1 / span 1}.row-span-2{grid-row:span 2 / span 2}.row-span-3{grid-row:span 3 / span 3}.row-span-4{grid-row:span 4 / span 4}.row-span-5{grid-row:span 5 / span 5}.row-span-6{grid-row:span 6 / span 6}.row-span-full{grid-row:1 / -1}.mx-auto{margin-left:auto;margin-right:auto}.mx-px{margin-left:1px;margin-right:1px}.mb-3{margin-bottom:.75rem}.mb-px{margin-bottom:1px}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-1\/3{height:33.333333%}.h-1\/4{height:25%}.h-1\/5{height:20%}.h-1\/6{height:16.666667%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-128{height:32rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/3{height:66.666667%}.h-2\/4{height:50%}.h-2\/5{height:40%}.h-2\/6{height:33.333333%}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-3\/4{height:75%}.h-3\/5{height:60%}.h-3\/6{height:50%}.h-32{height:8rem}.h-36{height:9rem}.h-4{height:1rem}.h-4\/5{height:80%}.h-4\/6{height:66.666667%}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\/6{height:83.333333%}.h-52{height:13rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[30px\]{height:30px}.h-\[52px\]{height:52px}.max-h-0{max-height:0px}.max-h-0\.5{max-height:.125rem}.max-h-1{max-height:.25rem}.max-h-1\.5{max-height:.375rem}.max-h-10{max-height:2.5rem}.max-h-11{max-height:2.75rem}.max-h-12{max-height:3rem}.max-h-14{max-height:3.5rem}.max-h-16{max-height:4rem}.max-h-2{max-height:.5rem}.max-h-2\.5{max-height:.625rem}.max-h-20{max-height:5rem}.max-h-24{max-height:6rem}.max-h-28{max-height:7rem}.max-h-3{max-height:.75rem}.max-h-3\.5{max-height:.875rem}.max-h-32{max-height:8rem}.max-h-36{max-height:9rem}.max-h-4{max-height:1rem}.max-h-40{max-height:10rem}.max-h-44{max-height:11rem}.max-h-48{max-height:12rem}.max-h-5{max-height:1.25rem}.max-h-52{max-height:13rem}.max-h-56{max-height:14rem}.max-h-6{max-height:1.5rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-7{max-height:1.75rem}.max-h-72{max-height:18rem}.max-h-8{max-height:2rem}.max-h-80{max-height:20rem}.max-h-9{max-height:2.25rem}.max-h-96{max-height:24rem}.min-h-0{min-height:0px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\/12{width:8.333333%}.w-1\/2{width:50%}.w-14{width:3.5rem}.w-2\/12{width:16.666667%}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/12{width:25%}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-\[42rem\]{min-width:42rem}.max-w-\[1px\]{max-width:1px}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-\[10000\]{flex-grow:10000}.basis-0{flex-basis:0px}.basis-56{flex-basis:14rem}.basis-full{flex-basis:100%}.origin-bottom{transform-origin:bottom}.origin-top-right{transform-origin:top right}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-\[max-content\,minmax\(max-content\,1fr\)\,max-content\,minmax\(0\,2fr\)\,max-content\,minmax\(0\,2fr\)\,minmax\(max-content\,1fr\)\]{grid-template-columns:max-content minmax(max-content,1fr) max-content minmax(0,2fr) max-content minmax(0,2fr) minmax(max-content,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity))}.bg-\[\#9333ea\]{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity))}.bg-\[\#e11d48\]{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity))}.bg-\[rgba\(147\,51\,234\,0\.5\)\]{background-color:#9333ea80}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-500{stroke:#6b7280}.stroke-red-500{stroke:#ef4444}.\!p-0{padding:0!important}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-12{padding-bottom:3rem}.pb-px{padding-bottom:1px}.pl-3{padding-left:.75rem}.pr-8{padding-right:2rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-25{opacity:.25}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 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)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-gray-900\/5{--tw-ring-color: rgb(17 24 39 / .05)}.\@container{container-type:inline-size}.\@container\/scroll-wrapper{container-type:inline-size;container-name:scroll-wrapper}.\[scrollbar-color\:theme\(colors\.gray\.500\)_transparent\]{scrollbar-color:#6b7280 transparent}.\[scrollbar-width\:thin\]{scrollbar-width:thin}[x-cloak]{display:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:right-\[calc\(-1\*var\(--triangle-size\)\)\]:after{content:var(--tw-content);right:calc(-1 * var(--triangle-size))}.after\:top-\[calc\(50\%-var\(--triangle-size\)\)\]:after{content:var(--tw-content);top:calc(50% - var(--triangle-size))}.after\:border-b-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-bottom-width:var(--triangle-size)}.after\:border-l-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-left-width:var(--triangle-size)}.after\:border-t-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-top-width:var(--triangle-size)}.after\:border-transparent:after{content:var(--tw-content);border-color:transparent}.after\:border-l-purple-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-left-color:rgb(168 85 247 / var(--tw-border-opacity))}.after\:\[--triangle-size\:4px\]:after{content:var(--tw-content);--triangle-size: 4px}.first\:h-0:first-child{height:0px}.first\:rounded-l-md:first-child{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.first\:pl-3:first-child{padding-left:.75rem}.last\:rounded-r-md:last-child{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.last\:pr-3:last-child{padding-right:.75rem}.focus-within\:ring:focus-within{--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.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(0px + 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)}@container (min-width: 24rem){.\@sm\:block{display:block}.\@sm\:px-3{padding-left:.75rem;padding-right:.75rem}}@container (min-width: 28rem){.\@md\:mb-6{margin-bottom:1.5rem}}@container (min-width: 32rem){.\@lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 48rem){.\@3xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 72rem){.\@6xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}html :where(.default\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:col-span-full){grid-column:1 / -1}html :where(.default\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:row-span-full){grid-row:1 / -1}html :where(.default\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:gap-6){gap:1.5rem}:is(.dark .dark\:block){display:block}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-blue-700){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-500){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-900){--tw-border-opacity: 1;border-color:rgb(17 24 39 / var(--tw-border-opacity))}:is(.dark .dark\:border-purple-700){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity))}:is(.dark .dark\:border-red-700){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity))}:is(.dark .dark\:bg-blue-900){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800\/50){background-color:#1f293780}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-950){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-900){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-900){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}:is(.dark .dark\:from-gray-900){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}:is(.dark .dark\:to-gray-800){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}:is(.dark .dark\:stroke-gray-400){stroke:#9ca3af}:is(.dark .dark\:stroke-gray-700){stroke:#374151}:is(.dark .dark\:text-blue-300){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-100){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-600){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}:is(.dark .dark\:text-purple-300){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity))}:is(.dark .dark\:text-red-300){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity))}:is(.dark .dark\:ring-gray-100\/10){--tw-ring-color: rgb(243 244 246 / .1)}:is(.dark .dark\:hover\:bg-gray-700:hover){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-800:hover){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-gray-500:hover){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:text-gray-500:focus){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:col-span-10{grid-column:span 10 / span 10}.sm\:col-span-11{grid-column:span 11 / span 11}.sm\:col-span-12{grid-column:span 12 / span 12}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-5{grid-column:span 5 / span 5}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:col-span-7{grid-column:span 7 / span 7}.sm\:col-span-8{grid-column:span 8 / span 8}.sm\:col-span-9{grid-column:span 9 / span 9}.sm\:col-span-full{grid-column:1 / -1}.sm\:row-span-1{grid-row:span 1 / span 1}.sm\:row-span-2{grid-row:span 2 / span 2}.sm\:row-span-3{grid-row:span 3 / span 3}.sm\:row-span-4{grid-row:span 4 / span 4}.sm\:row-span-5{grid-row:span 5 / span 5}.sm\:row-span-6{grid-row:span 6 / span 6}.sm\:row-span-full{grid-row:1 / -1}.sm\:h-0{height:0px}.sm\:h-0\.5{height:.125rem}.sm\:h-1{height:.25rem}.sm\:h-1\.5{height:.375rem}.sm\:h-1\/2{height:50%}.sm\:h-1\/3{height:33.333333%}.sm\:h-1\/4{height:25%}.sm\:h-1\/5{height:20%}.sm\:h-1\/6{height:16.666667%}.sm\:h-10{height:2.5rem}.sm\:h-11{height:2.75rem}.sm\:h-12{height:3rem}.sm\:h-128{height:32rem}.sm\:h-14{height:3.5rem}.sm\:h-16{height:4rem}.sm\:h-2{height:.5rem}.sm\:h-2\.5{height:.625rem}.sm\:h-2\/3{height:66.666667%}.sm\:h-2\/4{height:50%}.sm\:h-2\/5{height:40%}.sm\:h-2\/6{height:33.333333%}.sm\:h-20{height:5rem}.sm\:h-24{height:6rem}.sm\:h-28{height:7rem}.sm\:h-3{height:.75rem}.sm\:h-3\.5{height:.875rem}.sm\:h-3\/4{height:75%}.sm\:h-3\/5{height:60%}.sm\:h-3\/6{height:50%}.sm\:h-32{height:8rem}.sm\:h-36{height:9rem}.sm\:h-4{height:1rem}.sm\:h-4\/5{height:80%}.sm\:h-4\/6{height:66.666667%}.sm\:h-40{height:10rem}.sm\:h-44{height:11rem}.sm\:h-48{height:12rem}.sm\:h-5{height:1.25rem}.sm\:h-5\/6{height:83.333333%}.sm\:h-52{height:13rem}.sm\:h-56{height:14rem}.sm\:h-6{height:1.5rem}.sm\:h-60{height:15rem}.sm\:h-64{height:16rem}.sm\:h-7{height:1.75rem}.sm\:h-72{height:18rem}.sm\:h-8{height:2rem}.sm\:h-80{height:20rem}.sm\:h-9{height:2.25rem}.sm\:h-96{height:24rem}.sm\:max-h-0{max-height:0px}.sm\:max-h-0\.5{max-height:.125rem}.sm\:max-h-1{max-height:.25rem}.sm\:max-h-1\.5{max-height:.375rem}.sm\:max-h-10{max-height:2.5rem}.sm\:max-h-11{max-height:2.75rem}.sm\:max-h-12{max-height:3rem}.sm\:max-h-14{max-height:3.5rem}.sm\:max-h-16{max-height:4rem}.sm\:max-h-2{max-height:.5rem}.sm\:max-h-2\.5{max-height:.625rem}.sm\:max-h-20{max-height:5rem}.sm\:max-h-24{max-height:6rem}.sm\:max-h-28{max-height:7rem}.sm\:max-h-3{max-height:.75rem}.sm\:max-h-3\.5{max-height:.875rem}.sm\:max-h-32{max-height:8rem}.sm\:max-h-36{max-height:9rem}.sm\:max-h-4{max-height:1rem}.sm\:max-h-40{max-height:10rem}.sm\:max-h-44{max-height:11rem}.sm\:max-h-48{max-height:12rem}.sm\:max-h-5{max-height:1.25rem}.sm\:max-h-52{max-height:13rem}.sm\:max-h-56{max-height:14rem}.sm\:max-h-6{max-height:1.5rem}.sm\:max-h-60{max-height:15rem}.sm\:max-h-64{max-height:16rem}.sm\:max-h-7{max-height:1.75rem}.sm\:max-h-72{max-height:18rem}.sm\:max-h-8{max-height:2rem}.sm\:max-h-80{max-height:20rem}.sm\:max-h-9{max-height:2.25rem}.sm\:max-h-96{max-height:24rem}.sm\:min-h-0{min-height:0px}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:p-6{padding:1.5rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-10{grid-column:span 10 / span 10}.md\:col-span-11{grid-column:span 11 / span 11}.md\:col-span-12{grid-column:span 12 / span 12}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-3{grid-column:span 3 / span 3}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-span-7{grid-column:span 7 / span 7}.md\:col-span-8{grid-column:span 8 / span 8}.md\:col-span-9{grid-column:span 9 / span 9}.md\:col-span-full{grid-column:1 / -1}.md\:row-span-1{grid-row:span 1 / span 1}.md\:row-span-2{grid-row:span 2 / span 2}.md\:row-span-3{grid-row:span 3 / span 3}.md\:row-span-4{grid-row:span 4 / span 4}.md\:row-span-5{grid-row:span 5 / span 5}.md\:row-span-6{grid-row:span 6 / span 6}.md\:row-span-full{grid-row:1 / -1}.md\:h-0{height:0px}.md\:h-0\.5{height:.125rem}.md\:h-1{height:.25rem}.md\:h-1\.5{height:.375rem}.md\:h-1\/2{height:50%}.md\:h-1\/3{height:33.333333%}.md\:h-1\/4{height:25%}.md\:h-1\/5{height:20%}.md\:h-1\/6{height:16.666667%}.md\:h-10{height:2.5rem}.md\:h-11{height:2.75rem}.md\:h-12{height:3rem}.md\:h-128{height:32rem}.md\:h-14{height:3.5rem}.md\:h-16{height:4rem}.md\:h-2{height:.5rem}.md\:h-2\.5{height:.625rem}.md\:h-2\/3{height:66.666667%}.md\:h-2\/4{height:50%}.md\:h-2\/5{height:40%}.md\:h-2\/6{height:33.333333%}.md\:h-20{height:5rem}.md\:h-24{height:6rem}.md\:h-28{height:7rem}.md\:h-3{height:.75rem}.md\:h-3\.5{height:.875rem}.md\:h-3\/4{height:75%}.md\:h-3\/5{height:60%}.md\:h-3\/6{height:50%}.md\:h-32{height:8rem}.md\:h-36{height:9rem}.md\:h-4{height:1rem}.md\:h-4\/5{height:80%}.md\:h-4\/6{height:66.666667%}.md\:h-40{height:10rem}.md\:h-44{height:11rem}.md\:h-48{height:12rem}.md\:h-5{height:1.25rem}.md\:h-5\/6{height:83.333333%}.md\:h-52{height:13rem}.md\:h-56{height:14rem}.md\:h-6{height:1.5rem}.md\:h-60{height:15rem}.md\:h-64{height:16rem}.md\:h-7{height:1.75rem}.md\:h-72{height:18rem}.md\:h-8{height:2rem}.md\:h-80{height:20rem}.md\:h-9{height:2.25rem}.md\:h-96{height:24rem}.md\:max-h-0{max-height:0px}.md\:max-h-0\.5{max-height:.125rem}.md\:max-h-1{max-height:.25rem}.md\:max-h-1\.5{max-height:.375rem}.md\:max-h-10{max-height:2.5rem}.md\:max-h-11{max-height:2.75rem}.md\:max-h-12{max-height:3rem}.md\:max-h-14{max-height:3.5rem}.md\:max-h-16{max-height:4rem}.md\:max-h-2{max-height:.5rem}.md\:max-h-2\.5{max-height:.625rem}.md\:max-h-20{max-height:5rem}.md\:max-h-24{max-height:6rem}.md\:max-h-28{max-height:7rem}.md\:max-h-3{max-height:.75rem}.md\:max-h-3\.5{max-height:.875rem}.md\:max-h-32{max-height:8rem}.md\:max-h-36{max-height:9rem}.md\:max-h-4{max-height:1rem}.md\:max-h-40{max-height:10rem}.md\:max-h-44{max-height:11rem}.md\:max-h-48{max-height:12rem}.md\:max-h-5{max-height:1.25rem}.md\:max-h-52{max-height:13rem}.md\:max-h-56{max-height:14rem}.md\:max-h-6{max-height:1.5rem}.md\:max-h-60{max-height:15rem}.md\:max-h-64{max-height:16rem}.md\:max-h-7{max-height:1.75rem}.md\:max-h-72{max-height:18rem}.md\:max-h-8{max-height:2rem}.md\:max-h-80{max-height:20rem}.md\:max-h-9{max-height:2.25rem}.md\:max-h-96{max-height:24rem}.md\:min-h-0{min-height:0px}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-10{grid-column:span 10 / span 10}.lg\:col-span-11{grid-column:span 11 / span 11}.lg\:col-span-12{grid-column:span 12 / span 12}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-5{grid-column:span 5 / span 5}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-span-9{grid-column:span 9 / span 9}.lg\:col-span-full{grid-column:1 / -1}.lg\:row-span-1{grid-row:span 1 / span 1}.lg\:row-span-2{grid-row:span 2 / span 2}.lg\:row-span-3{grid-row:span 3 / span 3}.lg\:row-span-4{grid-row:span 4 / span 4}.lg\:row-span-5{grid-row:span 5 / span 5}.lg\:row-span-6{grid-row:span 6 / span 6}.lg\:row-span-full{grid-row:1 / -1}.lg\:h-0{height:0px}.lg\:h-0\.5{height:.125rem}.lg\:h-1{height:.25rem}.lg\:h-1\.5{height:.375rem}.lg\:h-1\/2{height:50%}.lg\:h-1\/3{height:33.333333%}.lg\:h-1\/4{height:25%}.lg\:h-1\/5{height:20%}.lg\:h-1\/6{height:16.666667%}.lg\:h-10{height:2.5rem}.lg\:h-11{height:2.75rem}.lg\:h-12{height:3rem}.lg\:h-128{height:32rem}.lg\:h-14{height:3.5rem}.lg\:h-16{height:4rem}.lg\:h-2{height:.5rem}.lg\:h-2\.5{height:.625rem}.lg\:h-2\/3{height:66.666667%}.lg\:h-2\/4{height:50%}.lg\:h-2\/5{height:40%}.lg\:h-2\/6{height:33.333333%}.lg\:h-20{height:5rem}.lg\:h-24{height:6rem}.lg\:h-28{height:7rem}.lg\:h-3{height:.75rem}.lg\:h-3\.5{height:.875rem}.lg\:h-3\/4{height:75%}.lg\:h-3\/5{height:60%}.lg\:h-3\/6{height:50%}.lg\:h-32{height:8rem}.lg\:h-36{height:9rem}.lg\:h-4{height:1rem}.lg\:h-4\/5{height:80%}.lg\:h-4\/6{height:66.666667%}.lg\:h-40{height:10rem}.lg\:h-44{height:11rem}.lg\:h-48{height:12rem}.lg\:h-5{height:1.25rem}.lg\:h-5\/6{height:83.333333%}.lg\:h-52{height:13rem}.lg\:h-56{height:14rem}.lg\:h-6{height:1.5rem}.lg\:h-60{height:15rem}.lg\:h-64{height:16rem}.lg\:h-7{height:1.75rem}.lg\:h-72{height:18rem}.lg\:h-8{height:2rem}.lg\:h-80{height:20rem}.lg\:h-9{height:2.25rem}.lg\:h-96{height:24rem}.lg\:max-h-0{max-height:0px}.lg\:max-h-0\.5{max-height:.125rem}.lg\:max-h-1{max-height:.25rem}.lg\:max-h-1\.5{max-height:.375rem}.lg\:max-h-10{max-height:2.5rem}.lg\:max-h-11{max-height:2.75rem}.lg\:max-h-12{max-height:3rem}.lg\:max-h-14{max-height:3.5rem}.lg\:max-h-16{max-height:4rem}.lg\:max-h-2{max-height:.5rem}.lg\:max-h-2\.5{max-height:.625rem}.lg\:max-h-20{max-height:5rem}.lg\:max-h-24{max-height:6rem}.lg\:max-h-28{max-height:7rem}.lg\:max-h-3{max-height:.75rem}.lg\:max-h-3\.5{max-height:.875rem}.lg\:max-h-32{max-height:8rem}.lg\:max-h-36{max-height:9rem}.lg\:max-h-4{max-height:1rem}.lg\:max-h-40{max-height:10rem}.lg\:max-h-44{max-height:11rem}.lg\:max-h-48{max-height:12rem}.lg\:max-h-5{max-height:1.25rem}.lg\:max-h-52{max-height:13rem}.lg\:max-h-56{max-height:14rem}.lg\:max-h-6{max-height:1.5rem}.lg\:max-h-60{max-height:15rem}.lg\:max-h-64{max-height:16rem}.lg\:max-h-7{max-height:1.75rem}.lg\:max-h-72{max-height:18rem}.lg\:max-h-8{max-height:2rem}.lg\:max-h-80{max-height:20rem}.lg\:max-h-9{max-height:2.25rem}.lg\:max-h-96{max-height:24rem}.lg\:min-h-0{min-height:0px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:lg\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:lg\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:lg\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:lg\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:lg\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:lg\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:lg\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:lg\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:lg\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:lg\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:lg\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:lg\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:lg\:col-span-full){grid-column:1 / -1}html :where(.default\:lg\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:lg\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:lg\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:lg\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:lg\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:lg\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:lg\:row-span-full){grid-row:1 / -1}html :where(.default\:lg\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-10{grid-column:span 10 / span 10}.xl\:col-span-11{grid-column:span 11 / span 11}.xl\:col-span-12{grid-column:span 12 / span 12}.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-5{grid-column:span 5 / span 5}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-7{grid-column:span 7 / span 7}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-span-full{grid-column:1 / -1}.xl\:row-span-1{grid-row:span 1 / span 1}.xl\:row-span-2{grid-row:span 2 / span 2}.xl\:row-span-3{grid-row:span 3 / span 3}.xl\:row-span-4{grid-row:span 4 / span 4}.xl\:row-span-5{grid-row:span 5 / span 5}.xl\:row-span-6{grid-row:span 6 / span 6}.xl\:row-span-full{grid-row:1 / -1}.xl\:h-0{height:0px}.xl\:h-0\.5{height:.125rem}.xl\:h-1{height:.25rem}.xl\:h-1\.5{height:.375rem}.xl\:h-1\/2{height:50%}.xl\:h-1\/3{height:33.333333%}.xl\:h-1\/4{height:25%}.xl\:h-1\/5{height:20%}.xl\:h-1\/6{height:16.666667%}.xl\:h-10{height:2.5rem}.xl\:h-11{height:2.75rem}.xl\:h-12{height:3rem}.xl\:h-128{height:32rem}.xl\:h-14{height:3.5rem}.xl\:h-16{height:4rem}.xl\:h-2{height:.5rem}.xl\:h-2\.5{height:.625rem}.xl\:h-2\/3{height:66.666667%}.xl\:h-2\/4{height:50%}.xl\:h-2\/5{height:40%}.xl\:h-2\/6{height:33.333333%}.xl\:h-20{height:5rem}.xl\:h-24{height:6rem}.xl\:h-28{height:7rem}.xl\:h-3{height:.75rem}.xl\:h-3\.5{height:.875rem}.xl\:h-3\/4{height:75%}.xl\:h-3\/5{height:60%}.xl\:h-3\/6{height:50%}.xl\:h-32{height:8rem}.xl\:h-36{height:9rem}.xl\:h-4{height:1rem}.xl\:h-4\/5{height:80%}.xl\:h-4\/6{height:66.666667%}.xl\:h-40{height:10rem}.xl\:h-44{height:11rem}.xl\:h-48{height:12rem}.xl\:h-5{height:1.25rem}.xl\:h-5\/6{height:83.333333%}.xl\:h-52{height:13rem}.xl\:h-56{height:14rem}.xl\:h-6{height:1.5rem}.xl\:h-60{height:15rem}.xl\:h-64{height:16rem}.xl\:h-7{height:1.75rem}.xl\:h-72{height:18rem}.xl\:h-8{height:2rem}.xl\:h-80{height:20rem}.xl\:h-9{height:2.25rem}.xl\:h-96{height:24rem}.xl\:max-h-0{max-height:0px}.xl\:max-h-0\.5{max-height:.125rem}.xl\:max-h-1{max-height:.25rem}.xl\:max-h-1\.5{max-height:.375rem}.xl\:max-h-10{max-height:2.5rem}.xl\:max-h-11{max-height:2.75rem}.xl\:max-h-12{max-height:3rem}.xl\:max-h-14{max-height:3.5rem}.xl\:max-h-16{max-height:4rem}.xl\:max-h-2{max-height:.5rem}.xl\:max-h-2\.5{max-height:.625rem}.xl\:max-h-20{max-height:5rem}.xl\:max-h-24{max-height:6rem}.xl\:max-h-28{max-height:7rem}.xl\:max-h-3{max-height:.75rem}.xl\:max-h-3\.5{max-height:.875rem}.xl\:max-h-32{max-height:8rem}.xl\:max-h-36{max-height:9rem}.xl\:max-h-4{max-height:1rem}.xl\:max-h-40{max-height:10rem}.xl\:max-h-44{max-height:11rem}.xl\:max-h-48{max-height:12rem}.xl\:max-h-5{max-height:1.25rem}.xl\:max-h-52{max-height:13rem}.xl\:max-h-56{max-height:14rem}.xl\:max-h-6{max-height:1.5rem}.xl\:max-h-60{max-height:15rem}.xl\:max-h-64{max-height:16rem}.xl\:max-h-7{max-height:1.75rem}.xl\:max-h-72{max-height:18rem}.xl\:max-h-8{max-height:2rem}.xl\:max-h-80{max-height:20rem}.xl\:max-h-9{max-height:2.25rem}.xl\:max-h-96{max-height:24rem}.xl\:min-h-0{min-height:0px}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:pr-12{padding-right:3rem}}@media (min-width: 1536px){.\32xl\:col-span-1{grid-column:span 1 / span 1}.\32xl\:col-span-10{grid-column:span 10 / span 10}.\32xl\:col-span-11{grid-column:span 11 / span 11}.\32xl\:col-span-12{grid-column:span 12 / span 12}.\32xl\:col-span-2{grid-column:span 2 / span 2}.\32xl\:col-span-3{grid-column:span 3 / span 3}.\32xl\:col-span-4{grid-column:span 4 / span 4}.\32xl\:col-span-5{grid-column:span 5 / span 5}.\32xl\:col-span-6{grid-column:span 6 / span 6}.\32xl\:col-span-7{grid-column:span 7 / span 7}.\32xl\:col-span-8{grid-column:span 8 / span 8}.\32xl\:col-span-9{grid-column:span 9 / span 9}.\32xl\:col-span-full{grid-column:1 / -1}.\32xl\:row-span-1{grid-row:span 1 / span 1}.\32xl\:row-span-2{grid-row:span 2 / span 2}.\32xl\:row-span-3{grid-row:span 3 / span 3}.\32xl\:row-span-4{grid-row:span 4 / span 4}.\32xl\:row-span-5{grid-row:span 5 / span 5}.\32xl\:row-span-6{grid-row:span 6 / span 6}.\32xl\:row-span-full{grid-row:1 / -1}.\32xl\:h-0{height:0px}.\32xl\:h-0\.5{height:.125rem}.\32xl\:h-1{height:.25rem}.\32xl\:h-1\.5{height:.375rem}.\32xl\:h-1\/2{height:50%}.\32xl\:h-1\/3{height:33.333333%}.\32xl\:h-1\/4{height:25%}.\32xl\:h-1\/5{height:20%}.\32xl\:h-1\/6{height:16.666667%}.\32xl\:h-10{height:2.5rem}.\32xl\:h-11{height:2.75rem}.\32xl\:h-12{height:3rem}.\32xl\:h-128{height:32rem}.\32xl\:h-14{height:3.5rem}.\32xl\:h-16{height:4rem}.\32xl\:h-2{height:.5rem}.\32xl\:h-2\.5{height:.625rem}.\32xl\:h-2\/3{height:66.666667%}.\32xl\:h-2\/4{height:50%}.\32xl\:h-2\/5{height:40%}.\32xl\:h-2\/6{height:33.333333%}.\32xl\:h-20{height:5rem}.\32xl\:h-24{height:6rem}.\32xl\:h-28{height:7rem}.\32xl\:h-3{height:.75rem}.\32xl\:h-3\.5{height:.875rem}.\32xl\:h-3\/4{height:75%}.\32xl\:h-3\/5{height:60%}.\32xl\:h-3\/6{height:50%}.\32xl\:h-32{height:8rem}.\32xl\:h-36{height:9rem}.\32xl\:h-4{height:1rem}.\32xl\:h-4\/5{height:80%}.\32xl\:h-4\/6{height:66.666667%}.\32xl\:h-40{height:10rem}.\32xl\:h-44{height:11rem}.\32xl\:h-48{height:12rem}.\32xl\:h-5{height:1.25rem}.\32xl\:h-5\/6{height:83.333333%}.\32xl\:h-52{height:13rem}.\32xl\:h-56{height:14rem}.\32xl\:h-6{height:1.5rem}.\32xl\:h-60{height:15rem}.\32xl\:h-64{height:16rem}.\32xl\:h-7{height:1.75rem}.\32xl\:h-72{height:18rem}.\32xl\:h-8{height:2rem}.\32xl\:h-80{height:20rem}.\32xl\:h-9{height:2.25rem}.\32xl\:h-96{height:24rem}.\32xl\:max-h-0{max-height:0px}.\32xl\:max-h-0\.5{max-height:.125rem}.\32xl\:max-h-1{max-height:.25rem}.\32xl\:max-h-1\.5{max-height:.375rem}.\32xl\:max-h-10{max-height:2.5rem}.\32xl\:max-h-11{max-height:2.75rem}.\32xl\:max-h-12{max-height:3rem}.\32xl\:max-h-14{max-height:3.5rem}.\32xl\:max-h-16{max-height:4rem}.\32xl\:max-h-2{max-height:.5rem}.\32xl\:max-h-2\.5{max-height:.625rem}.\32xl\:max-h-20{max-height:5rem}.\32xl\:max-h-24{max-height:6rem}.\32xl\:max-h-28{max-height:7rem}.\32xl\:max-h-3{max-height:.75rem}.\32xl\:max-h-3\.5{max-height:.875rem}.\32xl\:max-h-32{max-height:8rem}.\32xl\:max-h-36{max-height:9rem}.\32xl\:max-h-4{max-height:1rem}.\32xl\:max-h-40{max-height:10rem}.\32xl\:max-h-44{max-height:11rem}.\32xl\:max-h-48{max-height:12rem}.\32xl\:max-h-5{max-height:1.25rem}.\32xl\:max-h-52{max-height:13rem}.\32xl\:max-h-56{max-height:14rem}.\32xl\:max-h-6{max-height:1.5rem}.\32xl\:max-h-60{max-height:15rem}.\32xl\:max-h-64{max-height:16rem}.\32xl\:max-h-7{max-height:1.75rem}.\32xl\:max-h-72{max-height:18rem}.\32xl\:max-h-8{max-height:2rem}.\32xl\:max-h-80{max-height:20rem}.\32xl\:max-h-9{max-height:2.25rem}.\32xl\:max-h-96{max-height:24rem}.\32xl\:min-h-0{min-height:0px}.\32xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.\32xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.\32xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.\32xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.\32xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\32xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\32xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.\32xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.\32xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}.\[\&\:nth-child\(1n\+15\)\]\:border-t:nth-child(n+15){border-top-width:1px}.\[\&\>svg\]\:h-6>svg{height:1.5rem}.\[\&\>svg\]\:w-6>svg{width:1.5rem}.\[\&\>svg\]\:flex-shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:stroke-gray-400>svg{stroke:#9ca3af}:is(.dark .\[\&\>svg\]\:dark\:stroke-gray-600)>svg{stroke:#4b5563} diff --git a/resources/views/livewire/queues.blade.php b/resources/views/livewire/queues.blade.php index fb05f995..b7f194b7 100644 --- a/resources/views/livewire/queues.blade.php +++ b/resources/views/livewire/queues.blade.php @@ -166,7 +166,7 @@ class="h-12" } }" > - +
From b719c5cabac2c943f02ba00bab5bc5fa28196b19 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Wed, 11 Oct 2023 14:24:33 +1000 Subject: [PATCH 16/22] wip --- resources/views/livewire/queues.blade.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/views/livewire/queues.blade.php b/resources/views/livewire/queues.blade.php index b7f194b7..a2979ecc 100644 --- a/resources/views/livewire/queues.blade.php +++ b/resources/views/livewire/queues.blade.php @@ -49,9 +49,10 @@ class="min-h-full flex flex-col" @foreach ($queues as $queue => $readings)

- {{ Str::after($queue, ':') }} @if ($showConnection) - ({{ Str::before($queue, ':') }}) + {{ $queue }} + @else + {{ Str::after($queue, ':') }} @endif

@php $latest = $readings->last() @endphp From 2a1773d9f60fd320ca5414c84b42be9e2d613dfa Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Wed, 11 Oct 2023 18:00:41 +1000 Subject: [PATCH 17/22] wip --- .../2023_06_07_000001_create_pulse_tables.php | 5 +- dist/pulse.css | 2 +- resources/views/livewire/queues.blade.php | 46 +++++++++++-- src/Pulse.php | 10 ++- src/Queries/Queues.php | 25 ++++++- src/Queries/SlowJobs.php | 5 +- src/Recorders/Jobs.php | 66 ++++++++++--------- 7 files changed, 112 insertions(+), 47 deletions(-) diff --git a/database/migrations/2023_06_07_000001_create_pulse_tables.php b/database/migrations/2023_06_07_000001_create_pulse_tables.php index c425088e..7e37c8f4 100644 --- a/database/migrations/2023_06_07_000001_create_pulse_tables.php +++ b/database/migrations/2023_06_07_000001_create_pulse_tables.php @@ -68,13 +68,14 @@ public function up(): void $table->string('user_id')->nullable(); $table->string('job'); $table->uuid('job_uuid'); + $table->unsignedInteger('attempt')->nullable(); $table->string('connection'); $table->string('queue'); $table->datetime('processing_at')->nullable(); + $table->datetime('released_at')->nullable(); $table->datetime('processed_at')->nullable(); $table->datetime('failed_at')->nullable(); - $table->unsignedInteger('slow')->default(0); - $table->unsignedInteger('slowest')->nullable(); + $table->unsignedInteger('duration')->nullable(); // TODO: verify this update index. Needs to find job quickly. $table->index(['job_uuid']); diff --git a/dist/pulse.css b/dist/pulse.css index f731ec2d..cbbc7b9b 100644 --- a/dist/pulse.css +++ b/dist/pulse.css @@ -1 +1 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;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-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 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:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--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)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--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: rgb(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: rgb(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}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-left-px{left:-1px}.-top-2{top:-.5rem}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.col-span-1{grid-column:span 1 / span 1}.col-span-10{grid-column:span 10 / span 10}.col-span-11{grid-column:span 11 / span 11}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-5{grid-column:span 5 / span 5}.col-span-6{grid-column:span 6 / span 6}.col-span-7{grid-column:span 7 / span 7}.col-span-8{grid-column:span 8 / span 8}.col-span-9{grid-column:span 9 / span 9}.col-span-full{grid-column:1 / -1}.row-span-1{grid-row:span 1 / span 1}.row-span-2{grid-row:span 2 / span 2}.row-span-3{grid-row:span 3 / span 3}.row-span-4{grid-row:span 4 / span 4}.row-span-5{grid-row:span 5 / span 5}.row-span-6{grid-row:span 6 / span 6}.row-span-full{grid-row:1 / -1}.mx-auto{margin-left:auto;margin-right:auto}.mx-px{margin-left:1px;margin-right:1px}.mb-3{margin-bottom:.75rem}.mb-px{margin-bottom:1px}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-1\/3{height:33.333333%}.h-1\/4{height:25%}.h-1\/5{height:20%}.h-1\/6{height:16.666667%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-128{height:32rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/3{height:66.666667%}.h-2\/4{height:50%}.h-2\/5{height:40%}.h-2\/6{height:33.333333%}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-3\/4{height:75%}.h-3\/5{height:60%}.h-3\/6{height:50%}.h-32{height:8rem}.h-36{height:9rem}.h-4{height:1rem}.h-4\/5{height:80%}.h-4\/6{height:66.666667%}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\/6{height:83.333333%}.h-52{height:13rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[30px\]{height:30px}.h-\[52px\]{height:52px}.max-h-0{max-height:0px}.max-h-0\.5{max-height:.125rem}.max-h-1{max-height:.25rem}.max-h-1\.5{max-height:.375rem}.max-h-10{max-height:2.5rem}.max-h-11{max-height:2.75rem}.max-h-12{max-height:3rem}.max-h-14{max-height:3.5rem}.max-h-16{max-height:4rem}.max-h-2{max-height:.5rem}.max-h-2\.5{max-height:.625rem}.max-h-20{max-height:5rem}.max-h-24{max-height:6rem}.max-h-28{max-height:7rem}.max-h-3{max-height:.75rem}.max-h-3\.5{max-height:.875rem}.max-h-32{max-height:8rem}.max-h-36{max-height:9rem}.max-h-4{max-height:1rem}.max-h-40{max-height:10rem}.max-h-44{max-height:11rem}.max-h-48{max-height:12rem}.max-h-5{max-height:1.25rem}.max-h-52{max-height:13rem}.max-h-56{max-height:14rem}.max-h-6{max-height:1.5rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-7{max-height:1.75rem}.max-h-72{max-height:18rem}.max-h-8{max-height:2rem}.max-h-80{max-height:20rem}.max-h-9{max-height:2.25rem}.max-h-96{max-height:24rem}.min-h-0{min-height:0px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\/12{width:8.333333%}.w-1\/2{width:50%}.w-14{width:3.5rem}.w-2\/12{width:16.666667%}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/12{width:25%}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-\[42rem\]{min-width:42rem}.max-w-\[1px\]{max-width:1px}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-\[10000\]{flex-grow:10000}.basis-0{flex-basis:0px}.basis-56{flex-basis:14rem}.basis-full{flex-basis:100%}.origin-bottom{transform-origin:bottom}.origin-top-right{transform-origin:top right}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-\[max-content\,minmax\(max-content\,1fr\)\,max-content\,minmax\(0\,2fr\)\,max-content\,minmax\(0\,2fr\)\,minmax\(max-content\,1fr\)\]{grid-template-columns:max-content minmax(max-content,1fr) max-content minmax(0,2fr) max-content minmax(0,2fr) minmax(max-content,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity))}.bg-\[\#9333ea\]{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity))}.bg-\[\#e11d48\]{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity))}.bg-\[rgba\(147\,51\,234\,0\.5\)\]{background-color:#9333ea80}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-500{stroke:#6b7280}.stroke-red-500{stroke:#ef4444}.\!p-0{padding:0!important}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-12{padding-bottom:3rem}.pb-px{padding-bottom:1px}.pl-3{padding-left:.75rem}.pr-8{padding-right:2rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-25{opacity:.25}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 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)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-gray-900\/5{--tw-ring-color: rgb(17 24 39 / .05)}.\@container{container-type:inline-size}.\@container\/scroll-wrapper{container-type:inline-size;container-name:scroll-wrapper}.\[scrollbar-color\:theme\(colors\.gray\.500\)_transparent\]{scrollbar-color:#6b7280 transparent}.\[scrollbar-width\:thin\]{scrollbar-width:thin}[x-cloak]{display:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:right-\[calc\(-1\*var\(--triangle-size\)\)\]:after{content:var(--tw-content);right:calc(-1 * var(--triangle-size))}.after\:top-\[calc\(50\%-var\(--triangle-size\)\)\]:after{content:var(--tw-content);top:calc(50% - var(--triangle-size))}.after\:border-b-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-bottom-width:var(--triangle-size)}.after\:border-l-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-left-width:var(--triangle-size)}.after\:border-t-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-top-width:var(--triangle-size)}.after\:border-transparent:after{content:var(--tw-content);border-color:transparent}.after\:border-l-purple-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-left-color:rgb(168 85 247 / var(--tw-border-opacity))}.after\:\[--triangle-size\:4px\]:after{content:var(--tw-content);--triangle-size: 4px}.first\:h-0:first-child{height:0px}.first\:rounded-l-md:first-child{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.first\:pl-3:first-child{padding-left:.75rem}.last\:rounded-r-md:last-child{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.last\:pr-3:last-child{padding-right:.75rem}.focus-within\:ring:focus-within{--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.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(0px + 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)}@container (min-width: 24rem){.\@sm\:block{display:block}.\@sm\:px-3{padding-left:.75rem;padding-right:.75rem}}@container (min-width: 28rem){.\@md\:mb-6{margin-bottom:1.5rem}}@container (min-width: 32rem){.\@lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 48rem){.\@3xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 72rem){.\@6xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}html :where(.default\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:col-span-full){grid-column:1 / -1}html :where(.default\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:row-span-full){grid-row:1 / -1}html :where(.default\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:gap-6){gap:1.5rem}:is(.dark .dark\:block){display:block}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-blue-700){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-500){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-900){--tw-border-opacity: 1;border-color:rgb(17 24 39 / var(--tw-border-opacity))}:is(.dark .dark\:border-purple-700){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity))}:is(.dark .dark\:border-red-700){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity))}:is(.dark .dark\:bg-blue-900){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800\/50){background-color:#1f293780}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-950){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-900){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-900){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}:is(.dark .dark\:from-gray-900){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}:is(.dark .dark\:to-gray-800){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}:is(.dark .dark\:stroke-gray-400){stroke:#9ca3af}:is(.dark .dark\:stroke-gray-700){stroke:#374151}:is(.dark .dark\:text-blue-300){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-100){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-600){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}:is(.dark .dark\:text-purple-300){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity))}:is(.dark .dark\:text-red-300){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity))}:is(.dark .dark\:ring-gray-100\/10){--tw-ring-color: rgb(243 244 246 / .1)}:is(.dark .dark\:hover\:bg-gray-700:hover){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-800:hover){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-gray-500:hover){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:text-gray-500:focus){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:col-span-10{grid-column:span 10 / span 10}.sm\:col-span-11{grid-column:span 11 / span 11}.sm\:col-span-12{grid-column:span 12 / span 12}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-5{grid-column:span 5 / span 5}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:col-span-7{grid-column:span 7 / span 7}.sm\:col-span-8{grid-column:span 8 / span 8}.sm\:col-span-9{grid-column:span 9 / span 9}.sm\:col-span-full{grid-column:1 / -1}.sm\:row-span-1{grid-row:span 1 / span 1}.sm\:row-span-2{grid-row:span 2 / span 2}.sm\:row-span-3{grid-row:span 3 / span 3}.sm\:row-span-4{grid-row:span 4 / span 4}.sm\:row-span-5{grid-row:span 5 / span 5}.sm\:row-span-6{grid-row:span 6 / span 6}.sm\:row-span-full{grid-row:1 / -1}.sm\:h-0{height:0px}.sm\:h-0\.5{height:.125rem}.sm\:h-1{height:.25rem}.sm\:h-1\.5{height:.375rem}.sm\:h-1\/2{height:50%}.sm\:h-1\/3{height:33.333333%}.sm\:h-1\/4{height:25%}.sm\:h-1\/5{height:20%}.sm\:h-1\/6{height:16.666667%}.sm\:h-10{height:2.5rem}.sm\:h-11{height:2.75rem}.sm\:h-12{height:3rem}.sm\:h-128{height:32rem}.sm\:h-14{height:3.5rem}.sm\:h-16{height:4rem}.sm\:h-2{height:.5rem}.sm\:h-2\.5{height:.625rem}.sm\:h-2\/3{height:66.666667%}.sm\:h-2\/4{height:50%}.sm\:h-2\/5{height:40%}.sm\:h-2\/6{height:33.333333%}.sm\:h-20{height:5rem}.sm\:h-24{height:6rem}.sm\:h-28{height:7rem}.sm\:h-3{height:.75rem}.sm\:h-3\.5{height:.875rem}.sm\:h-3\/4{height:75%}.sm\:h-3\/5{height:60%}.sm\:h-3\/6{height:50%}.sm\:h-32{height:8rem}.sm\:h-36{height:9rem}.sm\:h-4{height:1rem}.sm\:h-4\/5{height:80%}.sm\:h-4\/6{height:66.666667%}.sm\:h-40{height:10rem}.sm\:h-44{height:11rem}.sm\:h-48{height:12rem}.sm\:h-5{height:1.25rem}.sm\:h-5\/6{height:83.333333%}.sm\:h-52{height:13rem}.sm\:h-56{height:14rem}.sm\:h-6{height:1.5rem}.sm\:h-60{height:15rem}.sm\:h-64{height:16rem}.sm\:h-7{height:1.75rem}.sm\:h-72{height:18rem}.sm\:h-8{height:2rem}.sm\:h-80{height:20rem}.sm\:h-9{height:2.25rem}.sm\:h-96{height:24rem}.sm\:max-h-0{max-height:0px}.sm\:max-h-0\.5{max-height:.125rem}.sm\:max-h-1{max-height:.25rem}.sm\:max-h-1\.5{max-height:.375rem}.sm\:max-h-10{max-height:2.5rem}.sm\:max-h-11{max-height:2.75rem}.sm\:max-h-12{max-height:3rem}.sm\:max-h-14{max-height:3.5rem}.sm\:max-h-16{max-height:4rem}.sm\:max-h-2{max-height:.5rem}.sm\:max-h-2\.5{max-height:.625rem}.sm\:max-h-20{max-height:5rem}.sm\:max-h-24{max-height:6rem}.sm\:max-h-28{max-height:7rem}.sm\:max-h-3{max-height:.75rem}.sm\:max-h-3\.5{max-height:.875rem}.sm\:max-h-32{max-height:8rem}.sm\:max-h-36{max-height:9rem}.sm\:max-h-4{max-height:1rem}.sm\:max-h-40{max-height:10rem}.sm\:max-h-44{max-height:11rem}.sm\:max-h-48{max-height:12rem}.sm\:max-h-5{max-height:1.25rem}.sm\:max-h-52{max-height:13rem}.sm\:max-h-56{max-height:14rem}.sm\:max-h-6{max-height:1.5rem}.sm\:max-h-60{max-height:15rem}.sm\:max-h-64{max-height:16rem}.sm\:max-h-7{max-height:1.75rem}.sm\:max-h-72{max-height:18rem}.sm\:max-h-8{max-height:2rem}.sm\:max-h-80{max-height:20rem}.sm\:max-h-9{max-height:2.25rem}.sm\:max-h-96{max-height:24rem}.sm\:min-h-0{min-height:0px}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:p-6{padding:1.5rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-10{grid-column:span 10 / span 10}.md\:col-span-11{grid-column:span 11 / span 11}.md\:col-span-12{grid-column:span 12 / span 12}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-3{grid-column:span 3 / span 3}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-span-7{grid-column:span 7 / span 7}.md\:col-span-8{grid-column:span 8 / span 8}.md\:col-span-9{grid-column:span 9 / span 9}.md\:col-span-full{grid-column:1 / -1}.md\:row-span-1{grid-row:span 1 / span 1}.md\:row-span-2{grid-row:span 2 / span 2}.md\:row-span-3{grid-row:span 3 / span 3}.md\:row-span-4{grid-row:span 4 / span 4}.md\:row-span-5{grid-row:span 5 / span 5}.md\:row-span-6{grid-row:span 6 / span 6}.md\:row-span-full{grid-row:1 / -1}.md\:h-0{height:0px}.md\:h-0\.5{height:.125rem}.md\:h-1{height:.25rem}.md\:h-1\.5{height:.375rem}.md\:h-1\/2{height:50%}.md\:h-1\/3{height:33.333333%}.md\:h-1\/4{height:25%}.md\:h-1\/5{height:20%}.md\:h-1\/6{height:16.666667%}.md\:h-10{height:2.5rem}.md\:h-11{height:2.75rem}.md\:h-12{height:3rem}.md\:h-128{height:32rem}.md\:h-14{height:3.5rem}.md\:h-16{height:4rem}.md\:h-2{height:.5rem}.md\:h-2\.5{height:.625rem}.md\:h-2\/3{height:66.666667%}.md\:h-2\/4{height:50%}.md\:h-2\/5{height:40%}.md\:h-2\/6{height:33.333333%}.md\:h-20{height:5rem}.md\:h-24{height:6rem}.md\:h-28{height:7rem}.md\:h-3{height:.75rem}.md\:h-3\.5{height:.875rem}.md\:h-3\/4{height:75%}.md\:h-3\/5{height:60%}.md\:h-3\/6{height:50%}.md\:h-32{height:8rem}.md\:h-36{height:9rem}.md\:h-4{height:1rem}.md\:h-4\/5{height:80%}.md\:h-4\/6{height:66.666667%}.md\:h-40{height:10rem}.md\:h-44{height:11rem}.md\:h-48{height:12rem}.md\:h-5{height:1.25rem}.md\:h-5\/6{height:83.333333%}.md\:h-52{height:13rem}.md\:h-56{height:14rem}.md\:h-6{height:1.5rem}.md\:h-60{height:15rem}.md\:h-64{height:16rem}.md\:h-7{height:1.75rem}.md\:h-72{height:18rem}.md\:h-8{height:2rem}.md\:h-80{height:20rem}.md\:h-9{height:2.25rem}.md\:h-96{height:24rem}.md\:max-h-0{max-height:0px}.md\:max-h-0\.5{max-height:.125rem}.md\:max-h-1{max-height:.25rem}.md\:max-h-1\.5{max-height:.375rem}.md\:max-h-10{max-height:2.5rem}.md\:max-h-11{max-height:2.75rem}.md\:max-h-12{max-height:3rem}.md\:max-h-14{max-height:3.5rem}.md\:max-h-16{max-height:4rem}.md\:max-h-2{max-height:.5rem}.md\:max-h-2\.5{max-height:.625rem}.md\:max-h-20{max-height:5rem}.md\:max-h-24{max-height:6rem}.md\:max-h-28{max-height:7rem}.md\:max-h-3{max-height:.75rem}.md\:max-h-3\.5{max-height:.875rem}.md\:max-h-32{max-height:8rem}.md\:max-h-36{max-height:9rem}.md\:max-h-4{max-height:1rem}.md\:max-h-40{max-height:10rem}.md\:max-h-44{max-height:11rem}.md\:max-h-48{max-height:12rem}.md\:max-h-5{max-height:1.25rem}.md\:max-h-52{max-height:13rem}.md\:max-h-56{max-height:14rem}.md\:max-h-6{max-height:1.5rem}.md\:max-h-60{max-height:15rem}.md\:max-h-64{max-height:16rem}.md\:max-h-7{max-height:1.75rem}.md\:max-h-72{max-height:18rem}.md\:max-h-8{max-height:2rem}.md\:max-h-80{max-height:20rem}.md\:max-h-9{max-height:2.25rem}.md\:max-h-96{max-height:24rem}.md\:min-h-0{min-height:0px}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-10{grid-column:span 10 / span 10}.lg\:col-span-11{grid-column:span 11 / span 11}.lg\:col-span-12{grid-column:span 12 / span 12}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-5{grid-column:span 5 / span 5}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-span-9{grid-column:span 9 / span 9}.lg\:col-span-full{grid-column:1 / -1}.lg\:row-span-1{grid-row:span 1 / span 1}.lg\:row-span-2{grid-row:span 2 / span 2}.lg\:row-span-3{grid-row:span 3 / span 3}.lg\:row-span-4{grid-row:span 4 / span 4}.lg\:row-span-5{grid-row:span 5 / span 5}.lg\:row-span-6{grid-row:span 6 / span 6}.lg\:row-span-full{grid-row:1 / -1}.lg\:h-0{height:0px}.lg\:h-0\.5{height:.125rem}.lg\:h-1{height:.25rem}.lg\:h-1\.5{height:.375rem}.lg\:h-1\/2{height:50%}.lg\:h-1\/3{height:33.333333%}.lg\:h-1\/4{height:25%}.lg\:h-1\/5{height:20%}.lg\:h-1\/6{height:16.666667%}.lg\:h-10{height:2.5rem}.lg\:h-11{height:2.75rem}.lg\:h-12{height:3rem}.lg\:h-128{height:32rem}.lg\:h-14{height:3.5rem}.lg\:h-16{height:4rem}.lg\:h-2{height:.5rem}.lg\:h-2\.5{height:.625rem}.lg\:h-2\/3{height:66.666667%}.lg\:h-2\/4{height:50%}.lg\:h-2\/5{height:40%}.lg\:h-2\/6{height:33.333333%}.lg\:h-20{height:5rem}.lg\:h-24{height:6rem}.lg\:h-28{height:7rem}.lg\:h-3{height:.75rem}.lg\:h-3\.5{height:.875rem}.lg\:h-3\/4{height:75%}.lg\:h-3\/5{height:60%}.lg\:h-3\/6{height:50%}.lg\:h-32{height:8rem}.lg\:h-36{height:9rem}.lg\:h-4{height:1rem}.lg\:h-4\/5{height:80%}.lg\:h-4\/6{height:66.666667%}.lg\:h-40{height:10rem}.lg\:h-44{height:11rem}.lg\:h-48{height:12rem}.lg\:h-5{height:1.25rem}.lg\:h-5\/6{height:83.333333%}.lg\:h-52{height:13rem}.lg\:h-56{height:14rem}.lg\:h-6{height:1.5rem}.lg\:h-60{height:15rem}.lg\:h-64{height:16rem}.lg\:h-7{height:1.75rem}.lg\:h-72{height:18rem}.lg\:h-8{height:2rem}.lg\:h-80{height:20rem}.lg\:h-9{height:2.25rem}.lg\:h-96{height:24rem}.lg\:max-h-0{max-height:0px}.lg\:max-h-0\.5{max-height:.125rem}.lg\:max-h-1{max-height:.25rem}.lg\:max-h-1\.5{max-height:.375rem}.lg\:max-h-10{max-height:2.5rem}.lg\:max-h-11{max-height:2.75rem}.lg\:max-h-12{max-height:3rem}.lg\:max-h-14{max-height:3.5rem}.lg\:max-h-16{max-height:4rem}.lg\:max-h-2{max-height:.5rem}.lg\:max-h-2\.5{max-height:.625rem}.lg\:max-h-20{max-height:5rem}.lg\:max-h-24{max-height:6rem}.lg\:max-h-28{max-height:7rem}.lg\:max-h-3{max-height:.75rem}.lg\:max-h-3\.5{max-height:.875rem}.lg\:max-h-32{max-height:8rem}.lg\:max-h-36{max-height:9rem}.lg\:max-h-4{max-height:1rem}.lg\:max-h-40{max-height:10rem}.lg\:max-h-44{max-height:11rem}.lg\:max-h-48{max-height:12rem}.lg\:max-h-5{max-height:1.25rem}.lg\:max-h-52{max-height:13rem}.lg\:max-h-56{max-height:14rem}.lg\:max-h-6{max-height:1.5rem}.lg\:max-h-60{max-height:15rem}.lg\:max-h-64{max-height:16rem}.lg\:max-h-7{max-height:1.75rem}.lg\:max-h-72{max-height:18rem}.lg\:max-h-8{max-height:2rem}.lg\:max-h-80{max-height:20rem}.lg\:max-h-9{max-height:2.25rem}.lg\:max-h-96{max-height:24rem}.lg\:min-h-0{min-height:0px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:lg\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:lg\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:lg\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:lg\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:lg\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:lg\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:lg\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:lg\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:lg\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:lg\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:lg\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:lg\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:lg\:col-span-full){grid-column:1 / -1}html :where(.default\:lg\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:lg\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:lg\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:lg\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:lg\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:lg\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:lg\:row-span-full){grid-row:1 / -1}html :where(.default\:lg\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-10{grid-column:span 10 / span 10}.xl\:col-span-11{grid-column:span 11 / span 11}.xl\:col-span-12{grid-column:span 12 / span 12}.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-5{grid-column:span 5 / span 5}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-7{grid-column:span 7 / span 7}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-span-full{grid-column:1 / -1}.xl\:row-span-1{grid-row:span 1 / span 1}.xl\:row-span-2{grid-row:span 2 / span 2}.xl\:row-span-3{grid-row:span 3 / span 3}.xl\:row-span-4{grid-row:span 4 / span 4}.xl\:row-span-5{grid-row:span 5 / span 5}.xl\:row-span-6{grid-row:span 6 / span 6}.xl\:row-span-full{grid-row:1 / -1}.xl\:h-0{height:0px}.xl\:h-0\.5{height:.125rem}.xl\:h-1{height:.25rem}.xl\:h-1\.5{height:.375rem}.xl\:h-1\/2{height:50%}.xl\:h-1\/3{height:33.333333%}.xl\:h-1\/4{height:25%}.xl\:h-1\/5{height:20%}.xl\:h-1\/6{height:16.666667%}.xl\:h-10{height:2.5rem}.xl\:h-11{height:2.75rem}.xl\:h-12{height:3rem}.xl\:h-128{height:32rem}.xl\:h-14{height:3.5rem}.xl\:h-16{height:4rem}.xl\:h-2{height:.5rem}.xl\:h-2\.5{height:.625rem}.xl\:h-2\/3{height:66.666667%}.xl\:h-2\/4{height:50%}.xl\:h-2\/5{height:40%}.xl\:h-2\/6{height:33.333333%}.xl\:h-20{height:5rem}.xl\:h-24{height:6rem}.xl\:h-28{height:7rem}.xl\:h-3{height:.75rem}.xl\:h-3\.5{height:.875rem}.xl\:h-3\/4{height:75%}.xl\:h-3\/5{height:60%}.xl\:h-3\/6{height:50%}.xl\:h-32{height:8rem}.xl\:h-36{height:9rem}.xl\:h-4{height:1rem}.xl\:h-4\/5{height:80%}.xl\:h-4\/6{height:66.666667%}.xl\:h-40{height:10rem}.xl\:h-44{height:11rem}.xl\:h-48{height:12rem}.xl\:h-5{height:1.25rem}.xl\:h-5\/6{height:83.333333%}.xl\:h-52{height:13rem}.xl\:h-56{height:14rem}.xl\:h-6{height:1.5rem}.xl\:h-60{height:15rem}.xl\:h-64{height:16rem}.xl\:h-7{height:1.75rem}.xl\:h-72{height:18rem}.xl\:h-8{height:2rem}.xl\:h-80{height:20rem}.xl\:h-9{height:2.25rem}.xl\:h-96{height:24rem}.xl\:max-h-0{max-height:0px}.xl\:max-h-0\.5{max-height:.125rem}.xl\:max-h-1{max-height:.25rem}.xl\:max-h-1\.5{max-height:.375rem}.xl\:max-h-10{max-height:2.5rem}.xl\:max-h-11{max-height:2.75rem}.xl\:max-h-12{max-height:3rem}.xl\:max-h-14{max-height:3.5rem}.xl\:max-h-16{max-height:4rem}.xl\:max-h-2{max-height:.5rem}.xl\:max-h-2\.5{max-height:.625rem}.xl\:max-h-20{max-height:5rem}.xl\:max-h-24{max-height:6rem}.xl\:max-h-28{max-height:7rem}.xl\:max-h-3{max-height:.75rem}.xl\:max-h-3\.5{max-height:.875rem}.xl\:max-h-32{max-height:8rem}.xl\:max-h-36{max-height:9rem}.xl\:max-h-4{max-height:1rem}.xl\:max-h-40{max-height:10rem}.xl\:max-h-44{max-height:11rem}.xl\:max-h-48{max-height:12rem}.xl\:max-h-5{max-height:1.25rem}.xl\:max-h-52{max-height:13rem}.xl\:max-h-56{max-height:14rem}.xl\:max-h-6{max-height:1.5rem}.xl\:max-h-60{max-height:15rem}.xl\:max-h-64{max-height:16rem}.xl\:max-h-7{max-height:1.75rem}.xl\:max-h-72{max-height:18rem}.xl\:max-h-8{max-height:2rem}.xl\:max-h-80{max-height:20rem}.xl\:max-h-9{max-height:2.25rem}.xl\:max-h-96{max-height:24rem}.xl\:min-h-0{min-height:0px}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:pr-12{padding-right:3rem}}@media (min-width: 1536px){.\32xl\:col-span-1{grid-column:span 1 / span 1}.\32xl\:col-span-10{grid-column:span 10 / span 10}.\32xl\:col-span-11{grid-column:span 11 / span 11}.\32xl\:col-span-12{grid-column:span 12 / span 12}.\32xl\:col-span-2{grid-column:span 2 / span 2}.\32xl\:col-span-3{grid-column:span 3 / span 3}.\32xl\:col-span-4{grid-column:span 4 / span 4}.\32xl\:col-span-5{grid-column:span 5 / span 5}.\32xl\:col-span-6{grid-column:span 6 / span 6}.\32xl\:col-span-7{grid-column:span 7 / span 7}.\32xl\:col-span-8{grid-column:span 8 / span 8}.\32xl\:col-span-9{grid-column:span 9 / span 9}.\32xl\:col-span-full{grid-column:1 / -1}.\32xl\:row-span-1{grid-row:span 1 / span 1}.\32xl\:row-span-2{grid-row:span 2 / span 2}.\32xl\:row-span-3{grid-row:span 3 / span 3}.\32xl\:row-span-4{grid-row:span 4 / span 4}.\32xl\:row-span-5{grid-row:span 5 / span 5}.\32xl\:row-span-6{grid-row:span 6 / span 6}.\32xl\:row-span-full{grid-row:1 / -1}.\32xl\:h-0{height:0px}.\32xl\:h-0\.5{height:.125rem}.\32xl\:h-1{height:.25rem}.\32xl\:h-1\.5{height:.375rem}.\32xl\:h-1\/2{height:50%}.\32xl\:h-1\/3{height:33.333333%}.\32xl\:h-1\/4{height:25%}.\32xl\:h-1\/5{height:20%}.\32xl\:h-1\/6{height:16.666667%}.\32xl\:h-10{height:2.5rem}.\32xl\:h-11{height:2.75rem}.\32xl\:h-12{height:3rem}.\32xl\:h-128{height:32rem}.\32xl\:h-14{height:3.5rem}.\32xl\:h-16{height:4rem}.\32xl\:h-2{height:.5rem}.\32xl\:h-2\.5{height:.625rem}.\32xl\:h-2\/3{height:66.666667%}.\32xl\:h-2\/4{height:50%}.\32xl\:h-2\/5{height:40%}.\32xl\:h-2\/6{height:33.333333%}.\32xl\:h-20{height:5rem}.\32xl\:h-24{height:6rem}.\32xl\:h-28{height:7rem}.\32xl\:h-3{height:.75rem}.\32xl\:h-3\.5{height:.875rem}.\32xl\:h-3\/4{height:75%}.\32xl\:h-3\/5{height:60%}.\32xl\:h-3\/6{height:50%}.\32xl\:h-32{height:8rem}.\32xl\:h-36{height:9rem}.\32xl\:h-4{height:1rem}.\32xl\:h-4\/5{height:80%}.\32xl\:h-4\/6{height:66.666667%}.\32xl\:h-40{height:10rem}.\32xl\:h-44{height:11rem}.\32xl\:h-48{height:12rem}.\32xl\:h-5{height:1.25rem}.\32xl\:h-5\/6{height:83.333333%}.\32xl\:h-52{height:13rem}.\32xl\:h-56{height:14rem}.\32xl\:h-6{height:1.5rem}.\32xl\:h-60{height:15rem}.\32xl\:h-64{height:16rem}.\32xl\:h-7{height:1.75rem}.\32xl\:h-72{height:18rem}.\32xl\:h-8{height:2rem}.\32xl\:h-80{height:20rem}.\32xl\:h-9{height:2.25rem}.\32xl\:h-96{height:24rem}.\32xl\:max-h-0{max-height:0px}.\32xl\:max-h-0\.5{max-height:.125rem}.\32xl\:max-h-1{max-height:.25rem}.\32xl\:max-h-1\.5{max-height:.375rem}.\32xl\:max-h-10{max-height:2.5rem}.\32xl\:max-h-11{max-height:2.75rem}.\32xl\:max-h-12{max-height:3rem}.\32xl\:max-h-14{max-height:3.5rem}.\32xl\:max-h-16{max-height:4rem}.\32xl\:max-h-2{max-height:.5rem}.\32xl\:max-h-2\.5{max-height:.625rem}.\32xl\:max-h-20{max-height:5rem}.\32xl\:max-h-24{max-height:6rem}.\32xl\:max-h-28{max-height:7rem}.\32xl\:max-h-3{max-height:.75rem}.\32xl\:max-h-3\.5{max-height:.875rem}.\32xl\:max-h-32{max-height:8rem}.\32xl\:max-h-36{max-height:9rem}.\32xl\:max-h-4{max-height:1rem}.\32xl\:max-h-40{max-height:10rem}.\32xl\:max-h-44{max-height:11rem}.\32xl\:max-h-48{max-height:12rem}.\32xl\:max-h-5{max-height:1.25rem}.\32xl\:max-h-52{max-height:13rem}.\32xl\:max-h-56{max-height:14rem}.\32xl\:max-h-6{max-height:1.5rem}.\32xl\:max-h-60{max-height:15rem}.\32xl\:max-h-64{max-height:16rem}.\32xl\:max-h-7{max-height:1.75rem}.\32xl\:max-h-72{max-height:18rem}.\32xl\:max-h-8{max-height:2rem}.\32xl\:max-h-80{max-height:20rem}.\32xl\:max-h-9{max-height:2.25rem}.\32xl\:max-h-96{max-height:24rem}.\32xl\:min-h-0{min-height:0px}.\32xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.\32xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.\32xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.\32xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.\32xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\32xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\32xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.\32xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.\32xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}.\[\&\:nth-child\(1n\+15\)\]\:border-t:nth-child(n+15){border-top-width:1px}.\[\&\>svg\]\:h-6>svg{height:1.5rem}.\[\&\>svg\]\:w-6>svg{width:1.5rem}.\[\&\>svg\]\:flex-shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:stroke-gray-400>svg{stroke:#9ca3af}:is(.dark .\[\&\>svg\]\:dark\:stroke-gray-600)>svg{stroke:#4b5563} +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;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-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 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:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--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)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--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: rgb(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: rgb(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}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-left-px{left:-1px}.-top-2{top:-.5rem}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.col-span-1{grid-column:span 1 / span 1}.col-span-10{grid-column:span 10 / span 10}.col-span-11{grid-column:span 11 / span 11}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-5{grid-column:span 5 / span 5}.col-span-6{grid-column:span 6 / span 6}.col-span-7{grid-column:span 7 / span 7}.col-span-8{grid-column:span 8 / span 8}.col-span-9{grid-column:span 9 / span 9}.col-span-full{grid-column:1 / -1}.row-span-1{grid-row:span 1 / span 1}.row-span-2{grid-row:span 2 / span 2}.row-span-3{grid-row:span 3 / span 3}.row-span-4{grid-row:span 4 / span 4}.row-span-5{grid-row:span 5 / span 5}.row-span-6{grid-row:span 6 / span 6}.row-span-full{grid-row:1 / -1}.mx-auto{margin-left:auto;margin-right:auto}.mx-px{margin-left:1px;margin-right:1px}.mb-3{margin-bottom:.75rem}.mb-px{margin-bottom:1px}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-1\/3{height:33.333333%}.h-1\/4{height:25%}.h-1\/5{height:20%}.h-1\/6{height:16.666667%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-128{height:32rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/3{height:66.666667%}.h-2\/4{height:50%}.h-2\/5{height:40%}.h-2\/6{height:33.333333%}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-3\/4{height:75%}.h-3\/5{height:60%}.h-3\/6{height:50%}.h-32{height:8rem}.h-36{height:9rem}.h-4{height:1rem}.h-4\/5{height:80%}.h-4\/6{height:66.666667%}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\/6{height:83.333333%}.h-52{height:13rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[30px\]{height:30px}.h-\[52px\]{height:52px}.max-h-0{max-height:0px}.max-h-0\.5{max-height:.125rem}.max-h-1{max-height:.25rem}.max-h-1\.5{max-height:.375rem}.max-h-10{max-height:2.5rem}.max-h-11{max-height:2.75rem}.max-h-12{max-height:3rem}.max-h-14{max-height:3.5rem}.max-h-16{max-height:4rem}.max-h-2{max-height:.5rem}.max-h-2\.5{max-height:.625rem}.max-h-20{max-height:5rem}.max-h-24{max-height:6rem}.max-h-28{max-height:7rem}.max-h-3{max-height:.75rem}.max-h-3\.5{max-height:.875rem}.max-h-32{max-height:8rem}.max-h-36{max-height:9rem}.max-h-4{max-height:1rem}.max-h-40{max-height:10rem}.max-h-44{max-height:11rem}.max-h-48{max-height:12rem}.max-h-5{max-height:1.25rem}.max-h-52{max-height:13rem}.max-h-56{max-height:14rem}.max-h-6{max-height:1.5rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-7{max-height:1.75rem}.max-h-72{max-height:18rem}.max-h-8{max-height:2rem}.max-h-80{max-height:20rem}.max-h-9{max-height:2.25rem}.max-h-96{max-height:24rem}.min-h-0{min-height:0px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\/12{width:8.333333%}.w-1\/2{width:50%}.w-14{width:3.5rem}.w-2\/12{width:16.666667%}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/12{width:25%}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-\[42rem\]{min-width:42rem}.max-w-\[1px\]{max-width:1px}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.flex-grow-\[10000\]{flex-grow:10000}.basis-0{flex-basis:0px}.basis-56{flex-basis:14rem}.basis-full{flex-basis:100%}.origin-bottom{transform-origin:bottom}.origin-top-right{transform-origin:top right}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-\[max-content\,minmax\(max-content\,1fr\)\,max-content\,minmax\(0\,2fr\)\,max-content\,minmax\(0\,2fr\)\,minmax\(max-content\,1fr\)\]{grid-template-columns:max-content minmax(max-content,1fr) max-content minmax(0,2fr) max-content minmax(0,2fr) minmax(max-content,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity))}.bg-\[\#9333ea\]{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity))}.bg-\[\#e11d48\]{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity))}.bg-\[\#eab308\]{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity))}.bg-\[rgba\(107\,114\,128\,0\.5\)\]{background-color:#6b728080}.bg-\[rgba\(147\,51\,234\,0\.5\)\]{background-color:#9333ea80}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.stroke-gray-300{stroke:#d1d5db}.stroke-gray-500{stroke:#6b7280}.stroke-red-500{stroke:#ef4444}.\!p-0{padding:0!important}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-12{padding-bottom:3rem}.pb-px{padding-bottom:1px}.pl-3{padding-left:.75rem}.pr-8{padding-right:2rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Figtree,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.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-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-orange-200{--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-25{opacity:.25}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 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)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-gray-900\/5{--tw-ring-color: rgb(17 24 39 / .05)}.\@container{container-type:inline-size}.\@container\/scroll-wrapper{container-type:inline-size;container-name:scroll-wrapper}.\[scrollbar-color\:theme\(colors\.gray\.500\)_transparent\]{scrollbar-color:#6b7280 transparent}.\[scrollbar-width\:thin\]{scrollbar-width:thin}[x-cloak]{display:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:right-\[calc\(-1\*var\(--triangle-size\)\)\]:after{content:var(--tw-content);right:calc(-1 * var(--triangle-size))}.after\:top-\[calc\(50\%-var\(--triangle-size\)\)\]:after{content:var(--tw-content);top:calc(50% - var(--triangle-size))}.after\:border-b-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-bottom-width:var(--triangle-size)}.after\:border-l-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-left-width:var(--triangle-size)}.after\:border-t-\[length\:var\(--triangle-size\)\]:after{content:var(--tw-content);border-top-width:var(--triangle-size)}.after\:border-transparent:after{content:var(--tw-content);border-color:transparent}.after\:border-l-purple-500:after{content:var(--tw-content);--tw-border-opacity: 1;border-left-color:rgb(168 85 247 / var(--tw-border-opacity))}.after\:\[--triangle-size\:4px\]:after{content:var(--tw-content);--triangle-size: 4px}.first\:h-0:first-child{height:0px}.first\:rounded-l-md:first-child{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.first\:pl-3:first-child{padding-left:.75rem}.last\:rounded-r-md:last-child{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.last\:pr-3:last-child{padding-right:.75rem}.focus-within\:ring:focus-within{--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.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(0px + 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)}@container (min-width: 24rem){.\@sm\:block{display:block}.\@sm\:px-3{padding-left:.75rem;padding-right:.75rem}}@container (min-width: 28rem){.\@md\:mb-6{margin-bottom:1.5rem}}@container (min-width: 32rem){.\@lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 48rem){.\@3xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 72rem){.\@6xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}html :where(.default\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:col-span-full){grid-column:1 / -1}html :where(.default\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:row-span-full){grid-row:1 / -1}html :where(.default\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:gap-6){gap:1.5rem}:is(.dark .dark\:block){display:block}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-blue-700){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-500){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-700){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}:is(.dark .dark\:border-gray-900){--tw-border-opacity: 1;border-color:rgb(17 24 39 / var(--tw-border-opacity))}:is(.dark .dark\:border-purple-700){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity))}:is(.dark .dark\:border-red-700){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity))}:is(.dark .dark\:bg-blue-900){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-700){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-800\/50){background-color:#1f293780}:is(.dark .dark\:bg-gray-900){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-gray-950){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-purple-900){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-red-900){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}:is(.dark .dark\:from-gray-900){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}:is(.dark .dark\:to-gray-800){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}:is(.dark .dark\:stroke-gray-400){stroke:#9ca3af}:is(.dark .dark\:stroke-gray-700){stroke:#374151}:is(.dark .dark\:text-blue-300){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-100){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-600){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}:is(.dark .dark\:text-purple-300){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity))}:is(.dark .dark\:text-red-300){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity))}:is(.dark .dark\:ring-gray-100\/10){--tw-ring-color: rgb(243 244 246 / .1)}:is(.dark .dark\:hover\:bg-gray-700:hover){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-gray-800:hover){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:text-gray-500:hover){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:text-gray-500:focus){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:col-span-10{grid-column:span 10 / span 10}.sm\:col-span-11{grid-column:span 11 / span 11}.sm\:col-span-12{grid-column:span 12 / span 12}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-5{grid-column:span 5 / span 5}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:col-span-7{grid-column:span 7 / span 7}.sm\:col-span-8{grid-column:span 8 / span 8}.sm\:col-span-9{grid-column:span 9 / span 9}.sm\:col-span-full{grid-column:1 / -1}.sm\:row-span-1{grid-row:span 1 / span 1}.sm\:row-span-2{grid-row:span 2 / span 2}.sm\:row-span-3{grid-row:span 3 / span 3}.sm\:row-span-4{grid-row:span 4 / span 4}.sm\:row-span-5{grid-row:span 5 / span 5}.sm\:row-span-6{grid-row:span 6 / span 6}.sm\:row-span-full{grid-row:1 / -1}.sm\:h-0{height:0px}.sm\:h-0\.5{height:.125rem}.sm\:h-1{height:.25rem}.sm\:h-1\.5{height:.375rem}.sm\:h-1\/2{height:50%}.sm\:h-1\/3{height:33.333333%}.sm\:h-1\/4{height:25%}.sm\:h-1\/5{height:20%}.sm\:h-1\/6{height:16.666667%}.sm\:h-10{height:2.5rem}.sm\:h-11{height:2.75rem}.sm\:h-12{height:3rem}.sm\:h-128{height:32rem}.sm\:h-14{height:3.5rem}.sm\:h-16{height:4rem}.sm\:h-2{height:.5rem}.sm\:h-2\.5{height:.625rem}.sm\:h-2\/3{height:66.666667%}.sm\:h-2\/4{height:50%}.sm\:h-2\/5{height:40%}.sm\:h-2\/6{height:33.333333%}.sm\:h-20{height:5rem}.sm\:h-24{height:6rem}.sm\:h-28{height:7rem}.sm\:h-3{height:.75rem}.sm\:h-3\.5{height:.875rem}.sm\:h-3\/4{height:75%}.sm\:h-3\/5{height:60%}.sm\:h-3\/6{height:50%}.sm\:h-32{height:8rem}.sm\:h-36{height:9rem}.sm\:h-4{height:1rem}.sm\:h-4\/5{height:80%}.sm\:h-4\/6{height:66.666667%}.sm\:h-40{height:10rem}.sm\:h-44{height:11rem}.sm\:h-48{height:12rem}.sm\:h-5{height:1.25rem}.sm\:h-5\/6{height:83.333333%}.sm\:h-52{height:13rem}.sm\:h-56{height:14rem}.sm\:h-6{height:1.5rem}.sm\:h-60{height:15rem}.sm\:h-64{height:16rem}.sm\:h-7{height:1.75rem}.sm\:h-72{height:18rem}.sm\:h-8{height:2rem}.sm\:h-80{height:20rem}.sm\:h-9{height:2.25rem}.sm\:h-96{height:24rem}.sm\:max-h-0{max-height:0px}.sm\:max-h-0\.5{max-height:.125rem}.sm\:max-h-1{max-height:.25rem}.sm\:max-h-1\.5{max-height:.375rem}.sm\:max-h-10{max-height:2.5rem}.sm\:max-h-11{max-height:2.75rem}.sm\:max-h-12{max-height:3rem}.sm\:max-h-14{max-height:3.5rem}.sm\:max-h-16{max-height:4rem}.sm\:max-h-2{max-height:.5rem}.sm\:max-h-2\.5{max-height:.625rem}.sm\:max-h-20{max-height:5rem}.sm\:max-h-24{max-height:6rem}.sm\:max-h-28{max-height:7rem}.sm\:max-h-3{max-height:.75rem}.sm\:max-h-3\.5{max-height:.875rem}.sm\:max-h-32{max-height:8rem}.sm\:max-h-36{max-height:9rem}.sm\:max-h-4{max-height:1rem}.sm\:max-h-40{max-height:10rem}.sm\:max-h-44{max-height:11rem}.sm\:max-h-48{max-height:12rem}.sm\:max-h-5{max-height:1.25rem}.sm\:max-h-52{max-height:13rem}.sm\:max-h-56{max-height:14rem}.sm\:max-h-6{max-height:1.5rem}.sm\:max-h-60{max-height:15rem}.sm\:max-h-64{max-height:16rem}.sm\:max-h-7{max-height:1.75rem}.sm\:max-h-72{max-height:18rem}.sm\:max-h-8{max-height:2rem}.sm\:max-h-80{max-height:20rem}.sm\:max-h-9{max-height:2.25rem}.sm\:max-h-96{max-height:24rem}.sm\:min-h-0{min-height:0px}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:p-6{padding:1.5rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-10{grid-column:span 10 / span 10}.md\:col-span-11{grid-column:span 11 / span 11}.md\:col-span-12{grid-column:span 12 / span 12}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-3{grid-column:span 3 / span 3}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-span-7{grid-column:span 7 / span 7}.md\:col-span-8{grid-column:span 8 / span 8}.md\:col-span-9{grid-column:span 9 / span 9}.md\:col-span-full{grid-column:1 / -1}.md\:row-span-1{grid-row:span 1 / span 1}.md\:row-span-2{grid-row:span 2 / span 2}.md\:row-span-3{grid-row:span 3 / span 3}.md\:row-span-4{grid-row:span 4 / span 4}.md\:row-span-5{grid-row:span 5 / span 5}.md\:row-span-6{grid-row:span 6 / span 6}.md\:row-span-full{grid-row:1 / -1}.md\:h-0{height:0px}.md\:h-0\.5{height:.125rem}.md\:h-1{height:.25rem}.md\:h-1\.5{height:.375rem}.md\:h-1\/2{height:50%}.md\:h-1\/3{height:33.333333%}.md\:h-1\/4{height:25%}.md\:h-1\/5{height:20%}.md\:h-1\/6{height:16.666667%}.md\:h-10{height:2.5rem}.md\:h-11{height:2.75rem}.md\:h-12{height:3rem}.md\:h-128{height:32rem}.md\:h-14{height:3.5rem}.md\:h-16{height:4rem}.md\:h-2{height:.5rem}.md\:h-2\.5{height:.625rem}.md\:h-2\/3{height:66.666667%}.md\:h-2\/4{height:50%}.md\:h-2\/5{height:40%}.md\:h-2\/6{height:33.333333%}.md\:h-20{height:5rem}.md\:h-24{height:6rem}.md\:h-28{height:7rem}.md\:h-3{height:.75rem}.md\:h-3\.5{height:.875rem}.md\:h-3\/4{height:75%}.md\:h-3\/5{height:60%}.md\:h-3\/6{height:50%}.md\:h-32{height:8rem}.md\:h-36{height:9rem}.md\:h-4{height:1rem}.md\:h-4\/5{height:80%}.md\:h-4\/6{height:66.666667%}.md\:h-40{height:10rem}.md\:h-44{height:11rem}.md\:h-48{height:12rem}.md\:h-5{height:1.25rem}.md\:h-5\/6{height:83.333333%}.md\:h-52{height:13rem}.md\:h-56{height:14rem}.md\:h-6{height:1.5rem}.md\:h-60{height:15rem}.md\:h-64{height:16rem}.md\:h-7{height:1.75rem}.md\:h-72{height:18rem}.md\:h-8{height:2rem}.md\:h-80{height:20rem}.md\:h-9{height:2.25rem}.md\:h-96{height:24rem}.md\:max-h-0{max-height:0px}.md\:max-h-0\.5{max-height:.125rem}.md\:max-h-1{max-height:.25rem}.md\:max-h-1\.5{max-height:.375rem}.md\:max-h-10{max-height:2.5rem}.md\:max-h-11{max-height:2.75rem}.md\:max-h-12{max-height:3rem}.md\:max-h-14{max-height:3.5rem}.md\:max-h-16{max-height:4rem}.md\:max-h-2{max-height:.5rem}.md\:max-h-2\.5{max-height:.625rem}.md\:max-h-20{max-height:5rem}.md\:max-h-24{max-height:6rem}.md\:max-h-28{max-height:7rem}.md\:max-h-3{max-height:.75rem}.md\:max-h-3\.5{max-height:.875rem}.md\:max-h-32{max-height:8rem}.md\:max-h-36{max-height:9rem}.md\:max-h-4{max-height:1rem}.md\:max-h-40{max-height:10rem}.md\:max-h-44{max-height:11rem}.md\:max-h-48{max-height:12rem}.md\:max-h-5{max-height:1.25rem}.md\:max-h-52{max-height:13rem}.md\:max-h-56{max-height:14rem}.md\:max-h-6{max-height:1.5rem}.md\:max-h-60{max-height:15rem}.md\:max-h-64{max-height:16rem}.md\:max-h-7{max-height:1.75rem}.md\:max-h-72{max-height:18rem}.md\:max-h-8{max-height:2rem}.md\:max-h-80{max-height:20rem}.md\:max-h-9{max-height:2.25rem}.md\:max-h-96{max-height:24rem}.md\:min-h-0{min-height:0px}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-10{grid-column:span 10 / span 10}.lg\:col-span-11{grid-column:span 11 / span 11}.lg\:col-span-12{grid-column:span 12 / span 12}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-4{grid-column:span 4 / span 4}.lg\:col-span-5{grid-column:span 5 / span 5}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-span-9{grid-column:span 9 / span 9}.lg\:col-span-full{grid-column:1 / -1}.lg\:row-span-1{grid-row:span 1 / span 1}.lg\:row-span-2{grid-row:span 2 / span 2}.lg\:row-span-3{grid-row:span 3 / span 3}.lg\:row-span-4{grid-row:span 4 / span 4}.lg\:row-span-5{grid-row:span 5 / span 5}.lg\:row-span-6{grid-row:span 6 / span 6}.lg\:row-span-full{grid-row:1 / -1}.lg\:h-0{height:0px}.lg\:h-0\.5{height:.125rem}.lg\:h-1{height:.25rem}.lg\:h-1\.5{height:.375rem}.lg\:h-1\/2{height:50%}.lg\:h-1\/3{height:33.333333%}.lg\:h-1\/4{height:25%}.lg\:h-1\/5{height:20%}.lg\:h-1\/6{height:16.666667%}.lg\:h-10{height:2.5rem}.lg\:h-11{height:2.75rem}.lg\:h-12{height:3rem}.lg\:h-128{height:32rem}.lg\:h-14{height:3.5rem}.lg\:h-16{height:4rem}.lg\:h-2{height:.5rem}.lg\:h-2\.5{height:.625rem}.lg\:h-2\/3{height:66.666667%}.lg\:h-2\/4{height:50%}.lg\:h-2\/5{height:40%}.lg\:h-2\/6{height:33.333333%}.lg\:h-20{height:5rem}.lg\:h-24{height:6rem}.lg\:h-28{height:7rem}.lg\:h-3{height:.75rem}.lg\:h-3\.5{height:.875rem}.lg\:h-3\/4{height:75%}.lg\:h-3\/5{height:60%}.lg\:h-3\/6{height:50%}.lg\:h-32{height:8rem}.lg\:h-36{height:9rem}.lg\:h-4{height:1rem}.lg\:h-4\/5{height:80%}.lg\:h-4\/6{height:66.666667%}.lg\:h-40{height:10rem}.lg\:h-44{height:11rem}.lg\:h-48{height:12rem}.lg\:h-5{height:1.25rem}.lg\:h-5\/6{height:83.333333%}.lg\:h-52{height:13rem}.lg\:h-56{height:14rem}.lg\:h-6{height:1.5rem}.lg\:h-60{height:15rem}.lg\:h-64{height:16rem}.lg\:h-7{height:1.75rem}.lg\:h-72{height:18rem}.lg\:h-8{height:2rem}.lg\:h-80{height:20rem}.lg\:h-9{height:2.25rem}.lg\:h-96{height:24rem}.lg\:max-h-0{max-height:0px}.lg\:max-h-0\.5{max-height:.125rem}.lg\:max-h-1{max-height:.25rem}.lg\:max-h-1\.5{max-height:.375rem}.lg\:max-h-10{max-height:2.5rem}.lg\:max-h-11{max-height:2.75rem}.lg\:max-h-12{max-height:3rem}.lg\:max-h-14{max-height:3.5rem}.lg\:max-h-16{max-height:4rem}.lg\:max-h-2{max-height:.5rem}.lg\:max-h-2\.5{max-height:.625rem}.lg\:max-h-20{max-height:5rem}.lg\:max-h-24{max-height:6rem}.lg\:max-h-28{max-height:7rem}.lg\:max-h-3{max-height:.75rem}.lg\:max-h-3\.5{max-height:.875rem}.lg\:max-h-32{max-height:8rem}.lg\:max-h-36{max-height:9rem}.lg\:max-h-4{max-height:1rem}.lg\:max-h-40{max-height:10rem}.lg\:max-h-44{max-height:11rem}.lg\:max-h-48{max-height:12rem}.lg\:max-h-5{max-height:1.25rem}.lg\:max-h-52{max-height:13rem}.lg\:max-h-56{max-height:14rem}.lg\:max-h-6{max-height:1.5rem}.lg\:max-h-60{max-height:15rem}.lg\:max-h-64{max-height:16rem}.lg\:max-h-7{max-height:1.75rem}.lg\:max-h-72{max-height:18rem}.lg\:max-h-8{max-height:2rem}.lg\:max-h-80{max-height:20rem}.lg\:max-h-9{max-height:2.25rem}.lg\:max-h-96{max-height:24rem}.lg\:min-h-0{min-height:0px}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}html :where(.default\:lg\:col-span-1){grid-column:span 1 / span 1}html :where(.default\:lg\:col-span-10){grid-column:span 10 / span 10}html :where(.default\:lg\:col-span-11){grid-column:span 11 / span 11}html :where(.default\:lg\:col-span-12){grid-column:span 12 / span 12}html :where(.default\:lg\:col-span-2){grid-column:span 2 / span 2}html :where(.default\:lg\:col-span-3){grid-column:span 3 / span 3}html :where(.default\:lg\:col-span-4){grid-column:span 4 / span 4}html :where(.default\:lg\:col-span-5){grid-column:span 5 / span 5}html :where(.default\:lg\:col-span-6){grid-column:span 6 / span 6}html :where(.default\:lg\:col-span-7){grid-column:span 7 / span 7}html :where(.default\:lg\:col-span-8){grid-column:span 8 / span 8}html :where(.default\:lg\:col-span-9){grid-column:span 9 / span 9}html :where(.default\:lg\:col-span-full){grid-column:1 / -1}html :where(.default\:lg\:row-span-1){grid-row:span 1 / span 1}html :where(.default\:lg\:row-span-2){grid-row:span 2 / span 2}html :where(.default\:lg\:row-span-3){grid-row:span 3 / span 3}html :where(.default\:lg\:row-span-4){grid-row:span 4 / span 4}html :where(.default\:lg\:row-span-5){grid-row:span 5 / span 5}html :where(.default\:lg\:row-span-6){grid-row:span 6 / span 6}html :where(.default\:lg\:row-span-full){grid-row:1 / -1}html :where(.default\:lg\:grid-cols-1){grid-template-columns:repeat(1,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-10){grid-template-columns:repeat(10,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-11){grid-template-columns:repeat(11,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-12){grid-template-columns:repeat(12,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-2){grid-template-columns:repeat(2,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-3){grid-template-columns:repeat(3,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-4){grid-template-columns:repeat(4,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-5){grid-template-columns:repeat(5,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-6){grid-template-columns:repeat(6,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-7){grid-template-columns:repeat(7,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-8){grid-template-columns:repeat(8,minmax(0,1fr))}html :where(.default\:lg\:grid-cols-9){grid-template-columns:repeat(9,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-10{grid-column:span 10 / span 10}.xl\:col-span-11{grid-column:span 11 / span 11}.xl\:col-span-12{grid-column:span 12 / span 12}.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-5{grid-column:span 5 / span 5}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-7{grid-column:span 7 / span 7}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-span-full{grid-column:1 / -1}.xl\:row-span-1{grid-row:span 1 / span 1}.xl\:row-span-2{grid-row:span 2 / span 2}.xl\:row-span-3{grid-row:span 3 / span 3}.xl\:row-span-4{grid-row:span 4 / span 4}.xl\:row-span-5{grid-row:span 5 / span 5}.xl\:row-span-6{grid-row:span 6 / span 6}.xl\:row-span-full{grid-row:1 / -1}.xl\:h-0{height:0px}.xl\:h-0\.5{height:.125rem}.xl\:h-1{height:.25rem}.xl\:h-1\.5{height:.375rem}.xl\:h-1\/2{height:50%}.xl\:h-1\/3{height:33.333333%}.xl\:h-1\/4{height:25%}.xl\:h-1\/5{height:20%}.xl\:h-1\/6{height:16.666667%}.xl\:h-10{height:2.5rem}.xl\:h-11{height:2.75rem}.xl\:h-12{height:3rem}.xl\:h-128{height:32rem}.xl\:h-14{height:3.5rem}.xl\:h-16{height:4rem}.xl\:h-2{height:.5rem}.xl\:h-2\.5{height:.625rem}.xl\:h-2\/3{height:66.666667%}.xl\:h-2\/4{height:50%}.xl\:h-2\/5{height:40%}.xl\:h-2\/6{height:33.333333%}.xl\:h-20{height:5rem}.xl\:h-24{height:6rem}.xl\:h-28{height:7rem}.xl\:h-3{height:.75rem}.xl\:h-3\.5{height:.875rem}.xl\:h-3\/4{height:75%}.xl\:h-3\/5{height:60%}.xl\:h-3\/6{height:50%}.xl\:h-32{height:8rem}.xl\:h-36{height:9rem}.xl\:h-4{height:1rem}.xl\:h-4\/5{height:80%}.xl\:h-4\/6{height:66.666667%}.xl\:h-40{height:10rem}.xl\:h-44{height:11rem}.xl\:h-48{height:12rem}.xl\:h-5{height:1.25rem}.xl\:h-5\/6{height:83.333333%}.xl\:h-52{height:13rem}.xl\:h-56{height:14rem}.xl\:h-6{height:1.5rem}.xl\:h-60{height:15rem}.xl\:h-64{height:16rem}.xl\:h-7{height:1.75rem}.xl\:h-72{height:18rem}.xl\:h-8{height:2rem}.xl\:h-80{height:20rem}.xl\:h-9{height:2.25rem}.xl\:h-96{height:24rem}.xl\:max-h-0{max-height:0px}.xl\:max-h-0\.5{max-height:.125rem}.xl\:max-h-1{max-height:.25rem}.xl\:max-h-1\.5{max-height:.375rem}.xl\:max-h-10{max-height:2.5rem}.xl\:max-h-11{max-height:2.75rem}.xl\:max-h-12{max-height:3rem}.xl\:max-h-14{max-height:3.5rem}.xl\:max-h-16{max-height:4rem}.xl\:max-h-2{max-height:.5rem}.xl\:max-h-2\.5{max-height:.625rem}.xl\:max-h-20{max-height:5rem}.xl\:max-h-24{max-height:6rem}.xl\:max-h-28{max-height:7rem}.xl\:max-h-3{max-height:.75rem}.xl\:max-h-3\.5{max-height:.875rem}.xl\:max-h-32{max-height:8rem}.xl\:max-h-36{max-height:9rem}.xl\:max-h-4{max-height:1rem}.xl\:max-h-40{max-height:10rem}.xl\:max-h-44{max-height:11rem}.xl\:max-h-48{max-height:12rem}.xl\:max-h-5{max-height:1.25rem}.xl\:max-h-52{max-height:13rem}.xl\:max-h-56{max-height:14rem}.xl\:max-h-6{max-height:1.5rem}.xl\:max-h-60{max-height:15rem}.xl\:max-h-64{max-height:16rem}.xl\:max-h-7{max-height:1.75rem}.xl\:max-h-72{max-height:18rem}.xl\:max-h-8{max-height:2rem}.xl\:max-h-80{max-height:20rem}.xl\:max-h-9{max-height:2.25rem}.xl\:max-h-96{max-height:24rem}.xl\:min-h-0{min-height:0px}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:pr-12{padding-right:3rem}}@media (min-width: 1536px){.\32xl\:col-span-1{grid-column:span 1 / span 1}.\32xl\:col-span-10{grid-column:span 10 / span 10}.\32xl\:col-span-11{grid-column:span 11 / span 11}.\32xl\:col-span-12{grid-column:span 12 / span 12}.\32xl\:col-span-2{grid-column:span 2 / span 2}.\32xl\:col-span-3{grid-column:span 3 / span 3}.\32xl\:col-span-4{grid-column:span 4 / span 4}.\32xl\:col-span-5{grid-column:span 5 / span 5}.\32xl\:col-span-6{grid-column:span 6 / span 6}.\32xl\:col-span-7{grid-column:span 7 / span 7}.\32xl\:col-span-8{grid-column:span 8 / span 8}.\32xl\:col-span-9{grid-column:span 9 / span 9}.\32xl\:col-span-full{grid-column:1 / -1}.\32xl\:row-span-1{grid-row:span 1 / span 1}.\32xl\:row-span-2{grid-row:span 2 / span 2}.\32xl\:row-span-3{grid-row:span 3 / span 3}.\32xl\:row-span-4{grid-row:span 4 / span 4}.\32xl\:row-span-5{grid-row:span 5 / span 5}.\32xl\:row-span-6{grid-row:span 6 / span 6}.\32xl\:row-span-full{grid-row:1 / -1}.\32xl\:h-0{height:0px}.\32xl\:h-0\.5{height:.125rem}.\32xl\:h-1{height:.25rem}.\32xl\:h-1\.5{height:.375rem}.\32xl\:h-1\/2{height:50%}.\32xl\:h-1\/3{height:33.333333%}.\32xl\:h-1\/4{height:25%}.\32xl\:h-1\/5{height:20%}.\32xl\:h-1\/6{height:16.666667%}.\32xl\:h-10{height:2.5rem}.\32xl\:h-11{height:2.75rem}.\32xl\:h-12{height:3rem}.\32xl\:h-128{height:32rem}.\32xl\:h-14{height:3.5rem}.\32xl\:h-16{height:4rem}.\32xl\:h-2{height:.5rem}.\32xl\:h-2\.5{height:.625rem}.\32xl\:h-2\/3{height:66.666667%}.\32xl\:h-2\/4{height:50%}.\32xl\:h-2\/5{height:40%}.\32xl\:h-2\/6{height:33.333333%}.\32xl\:h-20{height:5rem}.\32xl\:h-24{height:6rem}.\32xl\:h-28{height:7rem}.\32xl\:h-3{height:.75rem}.\32xl\:h-3\.5{height:.875rem}.\32xl\:h-3\/4{height:75%}.\32xl\:h-3\/5{height:60%}.\32xl\:h-3\/6{height:50%}.\32xl\:h-32{height:8rem}.\32xl\:h-36{height:9rem}.\32xl\:h-4{height:1rem}.\32xl\:h-4\/5{height:80%}.\32xl\:h-4\/6{height:66.666667%}.\32xl\:h-40{height:10rem}.\32xl\:h-44{height:11rem}.\32xl\:h-48{height:12rem}.\32xl\:h-5{height:1.25rem}.\32xl\:h-5\/6{height:83.333333%}.\32xl\:h-52{height:13rem}.\32xl\:h-56{height:14rem}.\32xl\:h-6{height:1.5rem}.\32xl\:h-60{height:15rem}.\32xl\:h-64{height:16rem}.\32xl\:h-7{height:1.75rem}.\32xl\:h-72{height:18rem}.\32xl\:h-8{height:2rem}.\32xl\:h-80{height:20rem}.\32xl\:h-9{height:2.25rem}.\32xl\:h-96{height:24rem}.\32xl\:max-h-0{max-height:0px}.\32xl\:max-h-0\.5{max-height:.125rem}.\32xl\:max-h-1{max-height:.25rem}.\32xl\:max-h-1\.5{max-height:.375rem}.\32xl\:max-h-10{max-height:2.5rem}.\32xl\:max-h-11{max-height:2.75rem}.\32xl\:max-h-12{max-height:3rem}.\32xl\:max-h-14{max-height:3.5rem}.\32xl\:max-h-16{max-height:4rem}.\32xl\:max-h-2{max-height:.5rem}.\32xl\:max-h-2\.5{max-height:.625rem}.\32xl\:max-h-20{max-height:5rem}.\32xl\:max-h-24{max-height:6rem}.\32xl\:max-h-28{max-height:7rem}.\32xl\:max-h-3{max-height:.75rem}.\32xl\:max-h-3\.5{max-height:.875rem}.\32xl\:max-h-32{max-height:8rem}.\32xl\:max-h-36{max-height:9rem}.\32xl\:max-h-4{max-height:1rem}.\32xl\:max-h-40{max-height:10rem}.\32xl\:max-h-44{max-height:11rem}.\32xl\:max-h-48{max-height:12rem}.\32xl\:max-h-5{max-height:1.25rem}.\32xl\:max-h-52{max-height:13rem}.\32xl\:max-h-56{max-height:14rem}.\32xl\:max-h-6{max-height:1.5rem}.\32xl\:max-h-60{max-height:15rem}.\32xl\:max-h-64{max-height:16rem}.\32xl\:max-h-7{max-height:1.75rem}.\32xl\:max-h-72{max-height:18rem}.\32xl\:max-h-8{max-height:2rem}.\32xl\:max-h-80{max-height:20rem}.\32xl\:max-h-9{max-height:2.25rem}.\32xl\:max-h-96{max-height:24rem}.\32xl\:min-h-0{min-height:0px}.\32xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.\32xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.\32xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.\32xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.\32xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\32xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\32xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.\32xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.\32xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}}.\[\&\:nth-child\(1n\+15\)\]\:border-t:nth-child(n+15){border-top-width:1px}.\[\&\>svg\]\:h-6>svg{height:1.5rem}.\[\&\>svg\]\:w-6>svg{width:1.5rem}.\[\&\>svg\]\:flex-shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:stroke-gray-400>svg{stroke:#9ca3af}:is(.dark .\[\&\>svg\]\:dark\:stroke-gray-600)>svg{stroke:#4b5563} diff --git a/resources/views/livewire/queues.blade.php b/resources/views/livewire/queues.blade.php index a2979ecc..e0a531cb 100644 --- a/resources/views/livewire/queues.blade.php +++ b/resources/views/livewire/queues.blade.php @@ -10,15 +10,23 @@
-
+
Queued
-
+
+ Processing +
+
+
+ Released +
+
+
Processed
-
+
Failed
@@ -59,6 +67,8 @@ class="min-h-full flex flex-col" @php $highest = $readings->map(fn ($reading) => max( $reading->queued, + $reading->processing, + $reading->released, $reading->processed, $reading->failed, ))->max() @@ -69,7 +79,7 @@ class="min-h-full flex flex-col"
pluck('queued')), @@ -89,6 +99,26 @@ class="h-12" tension: 0.2, spanGaps: false, }, + { + label: 'Processing', + borderColor: 'rgba(147,51,234,0.5)', + borderWidth: 2, + borderCapStyle: 'round', + data: @js(collect($readings)->pluck('processing')), + pointStyle: false, + tension: 0.2, + spanGaps: false, + }, + { + label: 'Released', + borderColor: '#eab308', + borderWidth: 2, + borderCapStyle: 'round', + data: @js(collect($readings)->pluck('released')), + pointStyle: false, + tension: 0.2, + spanGaps: false, + }, { label: 'Processed', borderColor: '#9333ea', @@ -160,8 +190,10 @@ class="h-12" chart.data.labels = queues['{{ $queue }}'].map(reading => reading.date) chart.data.datasets[0].data = queues['{{ $queue }}'].map(reading => reading.queued) - chart.data.datasets[1].data = queues['{{ $queue }}'].map(reading => reading.processed) - chart.data.datasets[2].data = queues['{{ $queue }}'].map(reading => reading.failed) + chart.data.datasets[1].data = queues['{{ $queue }}'].map(reading => reading.processing) + chart.data.datasets[2].data = queues['{{ $queue }}'].map(reading => reading.released) + chart.data.datasets[3].data = queues['{{ $queue }}'].map(reading => reading.processed) + chart.data.datasets[4].data = queues['{{ $queue }}'].map(reading => reading.failed) chart.update() }) } diff --git a/src/Pulse.php b/src/Pulse.php index 0a0debbc..d20ec19f 100644 --- a/src/Pulse.php +++ b/src/Pulse.php @@ -143,10 +143,16 @@ public function register(array $recorders): self /** * Record the given entry. */ - public function record(Entry|Update $entry): self + public function record(Entry|Update|array $entries): self { + if (! is_array($entries)) { + $entries = [$entries]; + } + if ($this->shouldRecord) { - $this->entries[] = $entry; + foreach ($entries as $entry) { + $this->entries[] = $entry; + } } return $this; diff --git a/src/Queries/Queues.php b/src/Queries/Queues.php index ddd945cc..99efcbf7 100644 --- a/src/Queries/Queues.php +++ b/src/Queries/Queues.php @@ -50,8 +50,9 @@ public function __invoke(Interval $interval): Collection 'date' => $currentBucket->subSeconds($i * $secondsPerPeriod)->format('Y-m-d H:i'), 'queued' => 0, 'processing' => 0, - 'failed' => 0, + 'released' => 0, 'processed' => 0, + 'failed' => 0, ]) ->reverse() ->keyBy('date'); @@ -60,6 +61,7 @@ public function __invoke(Interval $interval): Collection ->select('bucket', 'connection', 'queue') ->selectRaw('COUNT(`queued_at`) AS `queued`') ->selectRaw('COUNT(`processing_at`) AS `processing`') + ->selectRaw('COUNT(`released_at`) AS `released`') ->selectRaw('COUNT(`processed_at`) AS `processed`') ->selectRaw('COUNT(`failed_at`) AS `failed`') ->fromSub( @@ -69,6 +71,7 @@ public function __invoke(Interval $interval): Collection ->select('connection', 'queue') ->selectRaw('`date` AS `queued_at`') ->selectRaw('NULL AS `processing_at`') + ->selectRaw('NULL AS `released_at`') ->selectRaw('NULL AS `processed_at`') ->selectRaw('NULL AS `failed_at`') // Divide the data into buckets. @@ -81,6 +84,7 @@ public function __invoke(Interval $interval): Collection ->select('connection', 'queue') ->selectRaw('NULL AS `queued_at`') ->addSelect('processing_at') + ->selectRaw('NULL AS `released_at`') ->selectRaw('NULL AS `processed_at`') ->selectRaw('NULL AS `failed_at`') // Divide the data into buckets. @@ -88,12 +92,27 @@ public function __invoke(Interval $interval): Collection ->where('processing_at', '>=', $now->ceilSeconds($interval->totalSeconds / $maxDataPoints)->subSeconds((int) $interval->totalSeconds)) ->whereNotNull('processing_at') ) + // Released + ->union(fn (Builder $query) => $query + ->from('pulse_jobs') + ->select('connection', 'queue') + ->selectRaw('NULL AS `queued_at`') + ->selectRaw('NULL AS `processing_at`') + ->addSelect('released_at') + ->selectRaw('NULL AS `processed_at`') + ->selectRaw('NULL AS `failed_at`') + // Divide the data into buckets. + ->selectRaw('FLOOR(UNIX_TIMESTAMP(CONVERT_TZ(`released_at`, ?, @@session.time_zone)) / ?) AS `bucket`', [$now->format('P'), $secondsPerPeriod]) + ->where('released_at', '>=', $now->ceilSeconds($interval->totalSeconds / $maxDataPoints)->subSeconds((int) $interval->totalSeconds)) + ->whereNotNull('released_at') + ) // Processed ->union(fn (Builder $query) => $query ->from('pulse_jobs') ->select('connection', 'queue') ->selectRaw('NULL AS `queued_at`') ->selectRaw('NULL AS `processing_at`') + ->selectRaw('NULL AS `released_at`') ->addSelect('processed_at') ->selectRaw('NULL AS `failed_at`') // Divide the data into buckets. @@ -107,6 +126,7 @@ public function __invoke(Interval $interval): Collection ->select('connection', 'queue') ->selectRaw('NULL AS `queued_at`') ->selectRaw('NULL AS `processing_at`') + ->selectRaw('NULL AS `released_at`') ->selectRaw('NULL AS `processed_at`') ->addSelect('failed_at') // Divide the data into buckets. @@ -130,7 +150,8 @@ public function __invoke(Interval $interval): Collection return [$date => (object) [ 'date' => $date, 'queued' => $reading->queued, - 'processing' => $reading->queued, + 'processing' => $reading->processing, + 'released' => $reading->released, 'processed' => $reading->processed, 'failed' => $reading->failed, ]]; diff --git a/src/Queries/SlowJobs.php b/src/Queries/SlowJobs.php index 3c352cf6..b123576c 100644 --- a/src/Queries/SlowJobs.php +++ b/src/Queries/SlowJobs.php @@ -7,6 +7,7 @@ use Illuminate\Config\Repository; use Illuminate\Database\DatabaseManager; use Illuminate\Support\Collection; +use Laravel\Pulse\Recorders\Jobs; /** * @internal @@ -35,10 +36,10 @@ public function __invoke(Interval $interval): Collection $now = new CarbonImmutable; return $this->connection()->table('pulse_jobs') - ->selectRaw('`job`, SUM(slow) as count, MAX(slowest) as slowest') + ->selectRaw('`job`, COUNT(*) AS count, MAX(duration) AS slowest') // TODO: processed_at or failed_at ->where('date', '>', $now->subSeconds((int) $interval->totalSeconds)->toDateTimeString()) - ->where('slow', '>', 0) + ->where('duration', '>=', $this->config->get('pulse.recorders.'.Jobs::class.'.threshold')) ->groupBy('job') ->orderByDesc('slowest') ->get(); diff --git a/src/Recorders/Jobs.php b/src/Recorders/Jobs.php index 01f3ba61..d4b4aadf 100644 --- a/src/Recorders/Jobs.php +++ b/src/Recorders/Jobs.php @@ -54,7 +54,7 @@ public function __construct( /** * Record the job. */ - public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProcessing|JobQueued $event): Entry|Update|null + public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProcessing|JobQueued $event): Entry|Update|array|null { if ($event->connectionName === 'sync') { return null; @@ -65,9 +65,7 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce if ($event instanceof JobQueued) { return new Entry($this->table, [ 'date' => $now->toDateTimeString(), - 'job' => is_string($event->job) - ? $event->job - : $event->job::class, + 'job' => $event->job::class, 'job_uuid' => $event->payload()['uuid'], 'connection' => $event->connectionName, 'queue' => $event->job->queue ?? 'default', @@ -75,40 +73,48 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce ]); } - // TODO: Store an entry per-retry? - if ($event instanceof JobProcessing) { $this->lastJobStartedProcessingAt = $now; - // TODO: Add update here? - return null; - } + // TODO: Allow this to be ingested immediately? - $duration = $this->lastJobStartedProcessingAt->diffInMilliseconds($now); - $processingAt = $this->lastJobStartedProcessingAt?->toDateTimeString(); - $slow = $duration >= $this->config->get('pulse.slow_job_threshold') ? 1 : 0; - - if ($event instanceof JobReleasedAfterException) { - return tap(new Update( + return new Update( $this->table, - ['job_uuid' => (string) $event->job->uuid()], - fn (array $attributes) => [ - 'processing_at' => $attributes['processing_at'] ?? $processingAt, - 'slowest' => max($attributes['slowest'] ?? 0, $duration), - 'slow' => $attributes['slow'] + $slow, + ['job_uuid' => (string) $event->job->uuid(), 'attempt' => null], + [ + 'attempt' => $event->job->attempts(), + 'processing_at' => $this->lastJobStartedProcessingAt->toDateTimeString(), ], - ), fn () => $this->lastJobStartedProcessingAt = null); + ); + } + + if ($event instanceof JobReleasedAfterException) { + return tap([ + new Update( + $this->table, + ['job_uuid' => $event->job->uuid(), 'attempt' => $event->job->attempts()], + [ + 'released_at' => $now->toDateTimeString(), + 'duration' => $this->lastJobStartedProcessingAt->diffInMilliseconds($now), + ], + ), + new Entry($this->table, [ + 'date' => $now->toDateTimeString(), + 'job' => $event->job::class, + 'job_uuid' => $event->job->uuid(), + 'connection' => $event->connectionName, + 'queue' => $event->job->queue ?? 'default', + ]), + ], fn () => $this->lastJobStartedProcessingAt = null); } if ($event instanceof JobProcessed) { return tap(new Update( $this->table, - ['job_uuid' => (string) $event->job->uuid()], - fn (array $attributes) => [ - 'processing_at' => $attributes['processing_at'] ?? $processingAt, + ['job_uuid' => (string) $event->job->uuid(), 'attempt' => $event->job->attempts()], + [ 'processed_at' => $now->toDateTimeString(), - 'slowest' => max($attributes['slowest'] ?? 0, $duration), - 'slow' => $attributes['slow'] + $slow, + 'duration' => $this->lastJobStartedProcessingAt->diffInMilliseconds($now), ], ), fn () => $this->lastJobStartedProcessingAt = null); } @@ -116,12 +122,10 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce if ($event instanceof JobFailed) { return tap(new Update( $this->table, - ['job_uuid' => (string) $event->job->uuid()], - fn (array $attributes) => [ - 'processing_at' => $attributes['processing_at'] ?? $processingAt, + ['job_uuid' => (string) $event->job->uuid(), 'attempt' => $event->job->attempts()], + [ 'failed_at' => $now->toDateTimeString(), - 'slowest' => max($attributes['slowest'] ?? 0, $duration), - 'slow' => $attributes['slow'] + $slow, + 'duration' => $this->lastJobStartedProcessingAt->diffInMilliseconds($now), ], ), fn () => $this->lastJobStartedProcessingAt = null); } From 40160852437ee0cc2c14732b8203796b70cb476f Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Fri, 13 Oct 2023 12:31:36 +1000 Subject: [PATCH 18/22] wip --- .../2023_06_07_000001_create_pulse_tables.php | 2 +- src/Recorders/Jobs.php | 9 +- tests/Feature/JobsTest.php | 226 +++++++----------- 3 files changed, 96 insertions(+), 141 deletions(-) diff --git a/database/migrations/2023_06_07_000001_create_pulse_tables.php b/database/migrations/2023_06_07_000001_create_pulse_tables.php index 7e37c8f4..95bf026d 100644 --- a/database/migrations/2023_06_07_000001_create_pulse_tables.php +++ b/database/migrations/2023_06_07_000001_create_pulse_tables.php @@ -68,7 +68,7 @@ public function up(): void $table->string('user_id')->nullable(); $table->string('job'); $table->uuid('job_uuid'); - $table->unsignedInteger('attempt')->nullable(); + $table->unsignedInteger('attempt'); $table->string('connection'); $table->string('queue'); $table->datetime('processing_at')->nullable(); diff --git a/src/Recorders/Jobs.php b/src/Recorders/Jobs.php index d4b4aadf..5b9062cb 100644 --- a/src/Recorders/Jobs.php +++ b/src/Recorders/Jobs.php @@ -65,8 +65,9 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce if ($event instanceof JobQueued) { return new Entry($this->table, [ 'date' => $now->toDateTimeString(), - 'job' => $event->job::class, + 'job' => is_string($event->job) ? $event->job : $event->job::class, 'job_uuid' => $event->payload()['uuid'], + 'attempt' => 1, 'connection' => $event->connectionName, 'queue' => $event->job->queue ?? 'default', 'user_id' => $this->pulse->authenticatedUserIdResolver(), @@ -80,9 +81,8 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce return new Update( $this->table, - ['job_uuid' => (string) $event->job->uuid(), 'attempt' => null], + ['job_uuid' => (string) $event->job->uuid(), 'attempt' => $event->job->attempts()], [ - 'attempt' => $event->job->attempts(), 'processing_at' => $this->lastJobStartedProcessingAt->toDateTimeString(), ], ); @@ -100,8 +100,9 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce ), new Entry($this->table, [ 'date' => $now->toDateTimeString(), - 'job' => $event->job::class, + 'job' => $event->job->resolveName(), 'job_uuid' => $event->job->uuid(), + 'attempt' => $event->job->attempts() + 1, 'connection' => $event->connectionName, 'queue' => $event->job->queue ?? 'default', ]), diff --git a/tests/Feature/JobsTest.php b/tests/Feature/JobsTest.php index 786ae917..25a167a5 100644 --- a/tests/Feature/JobsTest.php +++ b/tests/Feature/JobsTest.php @@ -31,15 +31,16 @@ expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', 'processing_at' => null, + 'released_at' => null, 'processed_at' => null, 'failed_at' => null, 'user_id' => null, 'job' => 'MyJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 1, 'connection' => 'database', 'queue' => 'default', - 'slow' => 0, - 'slowest' => null, + 'duration' => null, ]); }); @@ -59,15 +60,16 @@ expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', 'processing_at' => null, + 'released_at' => null, 'processed_at' => null, 'failed_at' => null, 'user_id' => null, 'job' => 'Illuminate\Queue\CallQueuedClosure', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 1, 'connection' => 'database', 'queue' => 'default', - 'slow' => 0, - 'slowest' => null, + 'duration' => null, ]); }); @@ -85,15 +87,16 @@ expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', 'processing_at' => null, + 'released_at' => null, 'processed_at' => null, 'failed_at' => null, 'user_id' => null, 'job' => 'MyJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 1, 'connection' => 'database', 'queue' => 'default', - 'slow' => 0, - 'slowest' => null, + 'duration' => null, ]); }); @@ -115,15 +118,16 @@ expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', 'processing_at' => null, + 'released_at' => null, 'processed_at' => null, 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 1, 'connection' => 'database', 'queue' => 'default', - 'slow' => 0, - 'slowest' => null, + 'duration' => null, ]); /* @@ -134,146 +138,74 @@ Artisan::call('queue:work', ['--max-jobs' => 1, '--stop-when-empty' => true]); expect(Queue::size())->toBe(1); - $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); - expect($jobs)->toHaveCount(1); - expect((array) $jobs[0])->toEqual([ - 'date' => '2000-01-02 03:04:05', - 'processing_at' => '2000-01-02 03:04:10', - 'processed_at' => null, - 'failed_at' => null, - 'user_id' => null, - 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', - 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', - 'connection' => 'database', - 'queue' => 'default', - 'slow' => 1, - 'slowest' => 11, - ]); - - /* - * Work the job for the second time. - */ - - Carbon::setTestNow('2000-01-02 03:04:15'); - Artisan::call('queue:work', ['--max-jobs' => 1, '--stop-when-empty' => true]); - expect(Queue::size())->toBe(1); - - $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); - expect($jobs)->toHaveCount(1); + $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->orderBy('date')->get()); + expect($jobs)->toHaveCount(2); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', 'processing_at' => '2000-01-02 03:04:10', + 'released_at' => '2000-01-02 03:04:10', 'processed_at' => null, 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 1, 'connection' => 'database', 'queue' => 'default', - 'slow' => 2, - 'slowest' => 22, + 'duration' => 11, ]); - - /* - * Work the job for the third time. - */ - - Carbon::setTestNow('2000-01-02 03:04:20'); - Artisan::call('queue:work', ['--max-jobs' => 1, '--stop-when-empty' => true]); - expect(Queue::size())->toBe(0); - - $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); - expect($jobs)->toHaveCount(1); - expect((array) $jobs[0])->toEqual([ - 'date' => '2000-01-02 03:04:05', - 'processing_at' => '2000-01-02 03:04:10', - 'processed_at' => null, - 'failed_at' => '2000-01-02 03:04:20', - 'user_id' => null, - 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', - 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', - 'connection' => 'database', - 'queue' => 'default', - 'slow' => 3, - 'slowest' => 33, - ]); -}); - -it('only remembers the slowest duration', function () { - Config::set('queue.default', 'database'); - Config::set('pulse.recorders.'.Jobs::class.'.threshold', 0); - Str::createUuidsUsingSequence(['e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd']); - - /* - * Dispatch the job. - */ - Carbon::setTestNow('2000-01-02 03:04:05'); - Bus::dispatchToQueue(new MyJobWithMultipleAttemptsThatGetQuicker); - Pulse::store(app(Ingest::class)); - - expect(Queue::size())->toBe(1); - $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); - expect($jobs)->toHaveCount(1); - expect((array) $jobs[0])->toEqual([ - 'date' => '2000-01-02 03:04:05', + expect((array) $jobs[1])->toEqual([ + 'date' => '2000-01-02 03:04:10', 'processing_at' => null, + 'released_at' => null, 'processed_at' => null, 'failed_at' => null, 'user_id' => null, - 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', + 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 2, 'connection' => 'database', 'queue' => 'default', - 'slow' => 0, - 'slowest' => null, + 'duration' => null, ]); /* - * Work the job for the first time. + * Work the job for the second time. */ - Carbon::setTestNow('2000-01-02 03:04:10'); + Carbon::setTestNow('2000-01-02 03:04:15'); Artisan::call('queue:work', ['--max-jobs' => 1, '--stop-when-empty' => true]); expect(Queue::size())->toBe(1); - $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); - expect($jobs)->toHaveCount(1); - expect((array) $jobs[0])->toEqual([ - 'date' => '2000-01-02 03:04:05', - 'processing_at' => '2000-01-02 03:04:10', + $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->orderBy('date')->get()); + expect($jobs)->toHaveCount(3); + expect((array) $jobs[1])->toEqual([ + 'date' => '2000-01-02 03:04:10', + 'processing_at' => '2000-01-02 03:04:15', + 'released_at' => '2000-01-02 03:04:15', 'processed_at' => null, 'failed_at' => null, 'user_id' => null, - 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', + 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 2, 'connection' => 'database', 'queue' => 'default', - 'slow' => 1, - 'slowest' => 99, + 'duration' => 22, ]); - - /* - * Work the job for the second time. - */ - - Carbon::setTestNow('2000-01-02 03:04:15'); - Artisan::call('queue:work', ['--max-jobs' => 1, '--stop-when-empty' => true]); - expect(Queue::size())->toBe(1); - - $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); - expect($jobs)->toHaveCount(1); - expect((array) $jobs[0])->toEqual([ - 'date' => '2000-01-02 03:04:05', - 'processing_at' => '2000-01-02 03:04:10', + expect((array) $jobs[2])->toEqual([ + 'date' => '2000-01-02 03:04:15', + 'processing_at' => null, + 'released_at' => null, 'processed_at' => null, 'failed_at' => null, 'user_id' => null, - 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', + 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 3, 'connection' => 'database', 'queue' => 'default', - 'slow' => 2, - 'slowest' => 99, + 'duration' => null, ]); /* @@ -284,20 +216,21 @@ Artisan::call('queue:work', ['--max-jobs' => 1, '--stop-when-empty' => true]); expect(Queue::size())->toBe(0); - $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); - expect($jobs)->toHaveCount(1); - expect((array) $jobs[0])->toEqual([ - 'date' => '2000-01-02 03:04:05', - 'processing_at' => '2000-01-02 03:04:10', + $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->orderBy('date')->get()); + expect($jobs)->toHaveCount(3); + expect((array) $jobs[2])->toEqual([ + 'date' => '2000-01-02 03:04:15', + 'processing_at' => '2000-01-02 03:04:20', + 'released_at' => null, 'processed_at' => null, 'failed_at' => '2000-01-02 03:04:20', 'user_id' => null, - 'job' => 'MyJobWithMultipleAttemptsThatGetQuicker', + 'job' => 'MyJobWithMultipleAttemptsThatAlwaysThrows', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 3, 'connection' => 'database', 'queue' => 'default', - 'slow' => 3, - 'slowest' => 99, + 'duration' => 33, ]); }); @@ -319,15 +252,16 @@ expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', 'processing_at' => null, + 'released_at' => null, 'processed_at' => null, 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobThatPassesOnTheSecondAttempt', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 1, 'connection' => 'database', 'queue' => 'default', - 'slow' => 0, - 'slowest' => null, + 'duration' => null, ]); /* @@ -339,19 +273,34 @@ expect(Queue::size())->toBe(1); $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); - expect($jobs)->toHaveCount(1); + expect($jobs)->toHaveCount(2); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', 'processing_at' => '2000-01-02 03:04:10', + 'released_at' => '2000-01-02 03:04:10', 'processed_at' => null, 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobThatPassesOnTheSecondAttempt', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 1, 'connection' => 'database', 'queue' => 'default', - 'slow' => 1, - 'slowest' => 99, + 'duration' => 99, + ]); + expect((array) $jobs[1])->toEqual([ + 'date' => '2000-01-02 03:04:10', + 'processing_at' => null, + 'released_at' => null, + 'processed_at' => null, + 'failed_at' => null, + 'user_id' => null, + 'job' => 'MyJobThatPassesOnTheSecondAttempt', + 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 2, + 'connection' => 'database', + 'queue' => 'default', + 'duration' => null, ]); /* @@ -363,19 +312,20 @@ expect(Queue::size())->toBe(0); $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); - expect($jobs)->toHaveCount(1); - expect((array) $jobs[0])->toEqual([ - 'date' => '2000-01-02 03:04:05', - 'processing_at' => '2000-01-02 03:04:10', + expect($jobs)->toHaveCount(2); + expect((array) $jobs[1])->toEqual([ + 'date' => '2000-01-02 03:04:10', + 'processing_at' => '2000-01-02 03:04:15', + 'released_at' => null, 'processed_at' => '2000-01-02 03:04:15', 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobThatPassesOnTheSecondAttempt', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 2, 'connection' => 'database', 'queue' => 'default', - 'slow' => 2, - 'slowest' => 99, + 'duration' => 98, ]); }); @@ -397,15 +347,16 @@ expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', 'processing_at' => null, + 'released_at' => null, 'processed_at' => null, 'failed_at' => null, 'user_id' => null, 'job' => 'MySlowJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 1, 'connection' => 'database', 'queue' => 'default', - 'slow' => 0, - 'slowest' => null, + 'duration' => null, ]); /* @@ -421,15 +372,16 @@ expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', 'processing_at' => '2000-01-02 03:04:10', + 'released_at' => null, 'processed_at' => '2000-01-02 03:04:10', 'failed_at' => null, 'user_id' => null, 'job' => 'MySlowJob', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 1, 'connection' => 'database', 'queue' => 'default', - 'slow' => 1, - 'slowest' => 100, + 'duration' => 100, ]); }); @@ -451,15 +403,16 @@ expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', 'processing_at' => null, + 'released_at' => null, 'processed_at' => null, 'failed_at' => null, 'user_id' => null, 'job' => 'MyJobThatManuallyFails', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 1, 'connection' => 'database', 'queue' => 'default', - 'slow' => 0, - 'slowest' => null, + 'duration' => null, ]); /* @@ -475,15 +428,16 @@ expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', 'processing_at' => '2000-01-02 03:04:10', + 'released_at' => null, 'processed_at' => null, 'failed_at' => '2000-01-02 03:04:10', 'user_id' => null, 'job' => 'MyJobThatManuallyFails', 'job_uuid' => 'e2cb5fa7-6c2e-4bc5-82c9-45e79c3e8fdd', + 'attempt' => 1, 'connection' => 'database', 'queue' => 'default', - 'slow' => 1, - 'slowest' => 100, + 'duration' => 100, ]); }); From d3613b91007b63a5f1dca742139481d68113972b Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Fri, 13 Oct 2023 13:06:27 +1000 Subject: [PATCH 19/22] wip --- resources/views/livewire/queues.blade.php | 28 ++++++++++++++--------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/resources/views/livewire/queues.blade.php b/resources/views/livewire/queues.blade.php index e0a531cb..f8efbb97 100644 --- a/resources/views/livewire/queues.blade.php +++ b/resources/views/livewire/queues.blade.php @@ -8,25 +8,25 @@ -
+
-
+
Queued
-
+
Processing
-
- Released +
+ Processed
-
- Processed +
+ Released
-
+
Failed
@@ -98,6 +98,7 @@ class="h-14" pointStyle: false, tension: 0.2, spanGaps: false, + order: 4, }, { label: 'Processing', @@ -108,6 +109,7 @@ class="h-14" pointStyle: false, tension: 0.2, spanGaps: false, + order: 3, }, { label: 'Released', @@ -118,6 +120,7 @@ class="h-14" pointStyle: false, tension: 0.2, spanGaps: false, + order: 2, }, { label: 'Processed', @@ -128,6 +131,7 @@ class="h-14" pointStyle: false, tension: 0.2, spanGaps: false, + order: 1, }, { label: 'Failed', @@ -138,6 +142,7 @@ class="h-14" pointStyle: false, tension: 0.2, spanGaps: false, + order: 0, }, ], }, @@ -167,10 +172,11 @@ class="h-14" }, tooltip: { callbacks: { - title: () => '', - label: (context) => `${context.label} - ${context.dataset.label}: ${context.formattedValue}` + beforeBody: (context) => context + .map(item => `${item.dataset.label}: ${item.formattedValue}`) + .join(', '), + label: () => null, }, - displayColors: false, }, }, }, From fa5f9fd5c0caeedd320ed5c37a2d8efe73673759 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Fri, 13 Oct 2023 13:31:12 +1000 Subject: [PATCH 20/22] wip --- phpstan-baseline.neon | 2 +- src/Pulse.php | 2 ++ src/Recorders/Jobs.php | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index d5eee2a1..895efa05 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -67,7 +67,7 @@ parameters: - message: "#^Cannot call method diffInMilliseconds\\(\\) on Carbon\\\\CarbonImmutable\\|null\\.$#" - count: 1 + count: 3 path: src/Recorders/Jobs.php - diff --git a/src/Pulse.php b/src/Pulse.php index d20ec19f..fa5e15ff 100644 --- a/src/Pulse.php +++ b/src/Pulse.php @@ -142,6 +142,8 @@ public function register(array $recorders): self /** * Record the given entry. + * + * @param \Laravel\Pulse\Entry|\Laravel\Pulse\Update|list<\Laravel\Pulse\Entry|\Laravel\Pulse\Update> $entries */ public function record(Entry|Update|array $entries): self { diff --git a/src/Recorders/Jobs.php b/src/Recorders/Jobs.php index 5b9062cb..861025c1 100644 --- a/src/Recorders/Jobs.php +++ b/src/Recorders/Jobs.php @@ -53,6 +53,8 @@ public function __construct( /** * Record the job. + * + * @return \Laravel\Pulse\Entry|\Laravel\Pulse\Update|list<\Laravel\Pulse\Entry|\Laravel\Pulse\Update>|null */ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProcessing|JobQueued $event): Entry|Update|array|null { From e98e13cb884cad087bc980fdfeb9a9ac4f65d861 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Fri, 13 Oct 2023 14:33:41 +1000 Subject: [PATCH 21/22] wip --- src/Pulse.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/Pulse.php b/src/Pulse.php index fa5e15ff..0a0debbc 100644 --- a/src/Pulse.php +++ b/src/Pulse.php @@ -142,19 +142,11 @@ public function register(array $recorders): self /** * Record the given entry. - * - * @param \Laravel\Pulse\Entry|\Laravel\Pulse\Update|list<\Laravel\Pulse\Entry|\Laravel\Pulse\Update> $entries */ - public function record(Entry|Update|array $entries): self + public function record(Entry|Update $entry): self { - if (! is_array($entries)) { - $entries = [$entries]; - } - if ($this->shouldRecord) { - foreach ($entries as $entry) { - $this->entries[] = $entry; - } + $this->entries[] = $entry; } return $this; From a25bb6153606ba549f67f74361177eefb76b6ad9 Mon Sep 17 00:00:00 2001 From: Jess Archer Date: Fri, 13 Oct 2023 14:56:44 +1000 Subject: [PATCH 22/22] wip --- .../2023_06_07_000001_create_pulse_tables.php | 1 + src/Queries/SlowJobs.php | 1 - src/Recorders/Jobs.php | 6 ++++ tests/Feature/JobsTest.php | 31 ++++++++++++++----- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/database/migrations/2023_06_07_000001_create_pulse_tables.php b/database/migrations/2023_06_07_000001_create_pulse_tables.php index 95bf026d..2d673e9f 100644 --- a/database/migrations/2023_06_07_000001_create_pulse_tables.php +++ b/database/migrations/2023_06_07_000001_create_pulse_tables.php @@ -71,6 +71,7 @@ public function up(): void $table->unsignedInteger('attempt'); $table->string('connection'); $table->string('queue'); + $table->datetime('queued_at'); $table->datetime('processing_at')->nullable(); $table->datetime('released_at')->nullable(); $table->datetime('processed_at')->nullable(); diff --git a/src/Queries/SlowJobs.php b/src/Queries/SlowJobs.php index b123576c..aa7c14ab 100644 --- a/src/Queries/SlowJobs.php +++ b/src/Queries/SlowJobs.php @@ -37,7 +37,6 @@ public function __invoke(Interval $interval): Collection return $this->connection()->table('pulse_jobs') ->selectRaw('`job`, COUNT(*) AS count, MAX(duration) AS slowest') - // TODO: processed_at or failed_at ->where('date', '>', $now->subSeconds((int) $interval->totalSeconds)->toDateTimeString()) ->where('duration', '>=', $this->config->get('pulse.recorders.'.Jobs::class.'.threshold')) ->groupBy('job') diff --git a/src/Recorders/Jobs.php b/src/Recorders/Jobs.php index 861025c1..81903374 100644 --- a/src/Recorders/Jobs.php +++ b/src/Recorders/Jobs.php @@ -67,6 +67,7 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce if ($event instanceof JobQueued) { return new Entry($this->table, [ 'date' => $now->toDateTimeString(), + 'queued_at' => $now->toDateTimeString(), 'job' => is_string($event->job) ? $event->job : $event->job::class, 'job_uuid' => $event->payload()['uuid'], 'attempt' => 1, @@ -85,6 +86,7 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce $this->table, ['job_uuid' => (string) $event->job->uuid(), 'attempt' => $event->job->attempts()], [ + 'date' => $this->lastJobStartedProcessingAt->toDateTimeString(), 'processing_at' => $this->lastJobStartedProcessingAt->toDateTimeString(), ], ); @@ -96,12 +98,14 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce $this->table, ['job_uuid' => $event->job->uuid(), 'attempt' => $event->job->attempts()], [ + 'date' => $now->toDateTimeString(), 'released_at' => $now->toDateTimeString(), 'duration' => $this->lastJobStartedProcessingAt->diffInMilliseconds($now), ], ), new Entry($this->table, [ 'date' => $now->toDateTimeString(), + 'queued_at' => $now->toDateTimeString(), 'job' => $event->job->resolveName(), 'job_uuid' => $event->job->uuid(), 'attempt' => $event->job->attempts() + 1, @@ -116,6 +120,7 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce $this->table, ['job_uuid' => (string) $event->job->uuid(), 'attempt' => $event->job->attempts()], [ + 'date' => $now->toDateTimeString(), 'processed_at' => $now->toDateTimeString(), 'duration' => $this->lastJobStartedProcessingAt->diffInMilliseconds($now), ], @@ -127,6 +132,7 @@ public function record(JobReleasedAfterException|JobFailed|JobProcessed|JobProce $this->table, ['job_uuid' => (string) $event->job->uuid(), 'attempt' => $event->job->attempts()], [ + 'date' => $now->toDateTimeString(), 'failed_at' => $now->toDateTimeString(), 'duration' => $this->lastJobStartedProcessingAt->diffInMilliseconds($now), ], diff --git a/tests/Feature/JobsTest.php b/tests/Feature/JobsTest.php index 25a167a5..85faee62 100644 --- a/tests/Feature/JobsTest.php +++ b/tests/Feature/JobsTest.php @@ -30,6 +30,7 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'queued_at' => '2000-01-02 03:04:05', 'processing_at' => null, 'released_at' => null, 'processed_at' => null, @@ -59,6 +60,7 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'queued_at' => '2000-01-02 03:04:05', 'processing_at' => null, 'released_at' => null, 'processed_at' => null, @@ -86,6 +88,7 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'queued_at' => '2000-01-02 03:04:05', 'processing_at' => null, 'released_at' => null, 'processed_at' => null, @@ -117,6 +120,7 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'queued_at' => '2000-01-02 03:04:05', 'processing_at' => null, 'released_at' => null, 'processed_at' => null, @@ -141,7 +145,8 @@ $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->orderBy('date')->get()); expect($jobs)->toHaveCount(2); expect((array) $jobs[0])->toEqual([ - 'date' => '2000-01-02 03:04:05', + 'date' => '2000-01-02 03:04:10', + 'queued_at' => '2000-01-02 03:04:05', 'processing_at' => '2000-01-02 03:04:10', 'released_at' => '2000-01-02 03:04:10', 'processed_at' => null, @@ -156,6 +161,7 @@ ]); expect((array) $jobs[1])->toEqual([ 'date' => '2000-01-02 03:04:10', + 'queued_at' => '2000-01-02 03:04:10', 'processing_at' => null, 'released_at' => null, 'processed_at' => null, @@ -180,7 +186,8 @@ $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->orderBy('date')->get()); expect($jobs)->toHaveCount(3); expect((array) $jobs[1])->toEqual([ - 'date' => '2000-01-02 03:04:10', + 'date' => '2000-01-02 03:04:15', + 'queued_at' => '2000-01-02 03:04:10', 'processing_at' => '2000-01-02 03:04:15', 'released_at' => '2000-01-02 03:04:15', 'processed_at' => null, @@ -195,6 +202,7 @@ ]); expect((array) $jobs[2])->toEqual([ 'date' => '2000-01-02 03:04:15', + 'queued_at' => '2000-01-02 03:04:15', 'processing_at' => null, 'released_at' => null, 'processed_at' => null, @@ -219,7 +227,8 @@ $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->orderBy('date')->get()); expect($jobs)->toHaveCount(3); expect((array) $jobs[2])->toEqual([ - 'date' => '2000-01-02 03:04:15', + 'date' => '2000-01-02 03:04:20', + 'queued_at' => '2000-01-02 03:04:15', 'processing_at' => '2000-01-02 03:04:20', 'released_at' => null, 'processed_at' => null, @@ -251,6 +260,7 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'queued_at' => '2000-01-02 03:04:05', 'processing_at' => null, 'released_at' => null, 'processed_at' => null, @@ -275,7 +285,8 @@ $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); expect($jobs)->toHaveCount(2); expect((array) $jobs[0])->toEqual([ - 'date' => '2000-01-02 03:04:05', + 'date' => '2000-01-02 03:04:10', + 'queued_at' => '2000-01-02 03:04:05', 'processing_at' => '2000-01-02 03:04:10', 'released_at' => '2000-01-02 03:04:10', 'processed_at' => null, @@ -290,6 +301,7 @@ ]); expect((array) $jobs[1])->toEqual([ 'date' => '2000-01-02 03:04:10', + 'queued_at' => '2000-01-02 03:04:10', 'processing_at' => null, 'released_at' => null, 'processed_at' => null, @@ -314,7 +326,8 @@ $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); expect($jobs)->toHaveCount(2); expect((array) $jobs[1])->toEqual([ - 'date' => '2000-01-02 03:04:10', + 'date' => '2000-01-02 03:04:15', + 'queued_at' => '2000-01-02 03:04:10', 'processing_at' => '2000-01-02 03:04:15', 'released_at' => null, 'processed_at' => '2000-01-02 03:04:15', @@ -346,6 +359,7 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'queued_at' => '2000-01-02 03:04:05', 'processing_at' => null, 'released_at' => null, 'processed_at' => null, @@ -370,7 +384,8 @@ $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ - 'date' => '2000-01-02 03:04:05', + 'date' => '2000-01-02 03:04:10', + 'queued_at' => '2000-01-02 03:04:05', 'processing_at' => '2000-01-02 03:04:10', 'released_at' => null, 'processed_at' => '2000-01-02 03:04:10', @@ -402,6 +417,7 @@ expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ 'date' => '2000-01-02 03:04:05', + 'queued_at' => '2000-01-02 03:04:05', 'processing_at' => null, 'released_at' => null, 'processed_at' => null, @@ -426,7 +442,8 @@ $jobs = Pulse::ignore(fn () => DB::table('pulse_jobs')->get()); expect($jobs)->toHaveCount(1); expect((array) $jobs[0])->toEqual([ - 'date' => '2000-01-02 03:04:05', + 'date' => '2000-01-02 03:04:10', + 'queued_at' => '2000-01-02 03:04:05', 'processing_at' => '2000-01-02 03:04:10', 'released_at' => null, 'processed_at' => null,