From 39781fa17747c8aac6f006751339bc5977790784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20N=C3=A9meth?= Date: Wed, 18 Feb 2026 21:52:56 +0100 Subject: [PATCH 1/3] ## [1.2.0] - 2026-02-18 - AI provider configuration page for supervisors to manage API credentials, model selection, and generation parameters - AI usage log for supervisors showing request history, token consumption, and estimated costs - Secure credential storage and connection testing for AI service integration --- CHANGELOG.md | 50 +--- app/Filament/Pages/AiSettings.php | 273 ++++++++++++++++++ app/Filament/Resources/AiLogResource.php | 273 ++++++++++++++++++ .../AiLogResource/Pages/ListAiLogs.php | 19 ++ app/Models/AiLog.php | 112 +++++++ app/Models/AiSetting.php | 134 +++++++++ app/Providers/AppServiceProvider.php | 12 +- app/Services/Ai/AiProviderInterface.php | 35 +++ app/Services/Ai/AiProxyService.php | 189 ++++++++++++ app/Services/Ai/AiResponse.php | 143 +++++++++ .../Ai/Providers/AnthropicProvider.php | 170 +++++++++++ app/Services/Ai/Providers/OpenAiProvider.php | 153 ++++++++++ config/ai.php | 103 +++++++ config/ai_prompts.php | 84 ++++++ ..._02_18_000001_create_ai_settings_table.php | 37 +++ ...2026_02_18_000002_create_ai_logs_table.php | 44 +++ database/seeders/AiSettingSeeder.php | 84 ++++++ database/seeders/DatabaseSeeder.php | 1 + .../filament/pages/ai-settings.blade.php | 5 + 19 files changed, 1881 insertions(+), 40 deletions(-) create mode 100644 app/Filament/Pages/AiSettings.php create mode 100644 app/Filament/Resources/AiLogResource.php create mode 100644 app/Filament/Resources/AiLogResource/Pages/ListAiLogs.php create mode 100644 app/Models/AiLog.php create mode 100644 app/Models/AiSetting.php create mode 100644 app/Services/Ai/AiProviderInterface.php create mode 100644 app/Services/Ai/AiProxyService.php create mode 100644 app/Services/Ai/AiResponse.php create mode 100644 app/Services/Ai/Providers/AnthropicProvider.php create mode 100644 app/Services/Ai/Providers/OpenAiProvider.php create mode 100644 config/ai.php create mode 100644 config/ai_prompts.php create mode 100644 database/migrations/2026_02_18_000001_create_ai_settings_table.php create mode 100644 database/migrations/2026_02_18_000002_create_ai_logs_table.php create mode 100644 database/seeders/AiSettingSeeder.php create mode 100644 resources/views/filament/pages/ai-settings.blade.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 39b7571..4c3971c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,47 +2,19 @@ All notable changes to this project will be documented in this file. -## [1.1.0] - 2025-12-24 +## [1.2.0] - 2026-02-18 ### Added -- Public changelog page at /changelog displaying CHANGELOG.md with homepage design -- ChangelogController for parsing and displaying changelog entries -- config/app_config.php for centralized version management -- Changelog navigation link in main site header -- Version badge showing current version and release date -- Color-coded changelog sections (Added, Changed, Fixed, Removed) -- Card-based changelog design with card suit symbols +- AI provider configuration page for supervisors to manage API credentials, model selection, and generation parameters +- AI usage log for supervisors showing request history, token consumption, and estimated costs +- Secure credential storage and connection testing for AI service integration -### Changed -- Email templates now use Laravel mail layout with Cards Forge custom theme -- Email Templates and Scheduled Emails moved to System Settings navigation group -- Preview modal now displays emails with actual site header and footer styling -- Renamed "Run Now" to "Force Run" action with enhanced feedback showing sent/skipped counts -- Force Run action now explicitly shows scheduled time being bypassed in confirmation modal +## [1.1.0] - 2025-12-24 ### Added -- Custom Email Template System for managing email templates with Markdown support -- EmailTemplate model and database table for storing reusable email templates -- EmailTemplateResource in Filament admin panel (supervisor-only access) -- Markdown editor with live preview functionality for email content -- Variable injection system supporting {{ variable }} placeholders in subject and body -- TemplateEmail mailable class for sending template-based emails with custom HTML layout -- Preview modal for templates showing rendered content -- Available variables cheat sheet in template form -- Custom HTML email template with responsive design and inline CSS -- Feature documentation in dps/features/custom-email-templates.md -- Advanced Scheduled Email Dispatcher for automated email campaigns -- ScheduledEmail model with cron expression scheduling and multi-source data support -- EmailDispatchLog model for deduplication tracking -- Cron expression validation with human-friendly display -- Dynamic recipient targeting (all users, specific roles, individual selection) -- Order status filtering with configurable look-back windows -- ScheduledEmailResource with reactive UI based on data source -- ProcessScheduledEmails command for email dispatch with deduplication -- Automatic scheduling via Laravel task scheduler (runs every minute) -- Force Run action with detailed execution feedback (sent/skipped counts) -- Bulk Force Run action to execute multiple campaigns simultaneously -- Clear Dispatch Logs header action for resetting deduplication during testing -- Comprehensive execution statistics tracking -- Enhanced testing capabilities with immediate execution bypassing schedules -- Feature documentation in dps/features/advanced-scheduled-email-dispatcher.md +- Custom email template system with variable injection and live preview for supervisors +- Scheduled email dispatcher with flexible recipient targeting and automated delivery +- Public changelog page accessible from the site navigation + +### Changed +- Email notifications updated to use the Cards Forge branded layout diff --git a/app/Filament/Pages/AiSettings.php b/app/Filament/Pages/AiSettings.php new file mode 100644 index 0000000..1f3a724 --- /dev/null +++ b/app/Filament/Pages/AiSettings.php @@ -0,0 +1,273 @@ +check() && auth()->user()->isSupervisor(); + } + + /** + * Load current settings into the form. + */ + public function mount(): void + { + $this->form->fill([ + 'ai_provider' => AiSetting::get('ai_provider', 'openai'), + 'ai_api_key' => AiSetting::get('ai_api_key', ''), + 'ai_model' => AiSetting::get('ai_model', 'gpt-4o'), + 'ai_max_tokens' => AiSetting::get('ai_max_tokens', 2048), + 'ai_temperature' => AiSetting::get('ai_temperature', 0.7), + 'ai_system_prompt' => AiSetting::get('ai_system_prompt', config('ai_prompts.card_generation.system', '')), + ]); + } + + /** + * Define the settings form. + */ + public function form(Form $form): Form + { + return $form + ->schema([ + Section::make('Provider Configuration') + ->description('Configure the AI service provider and authentication.') + ->icon('heroicon-o-cloud') + ->schema([ + Select::make('ai_provider') + ->label('AI Provider') + ->options([ + 'openai' => 'OpenAI', + 'anthropic' => 'Anthropic (Claude)', + ]) + ->required() + ->live() + ->afterStateUpdated(function ($state, $set) { + // Reset model when provider changes + $defaultModels = [ + 'openai' => 'gpt-4o', + 'anthropic' => 'claude-sonnet-4-6', + ]; + $set('ai_model', $defaultModels[$state] ?? 'gpt-4o'); + }), + + TextInput::make('ai_api_key') + ->label('API Key') + ->password() + ->revealable() + ->placeholder('sk-... or sk-ant-...') + ->helperText('Stored encrypted in the database. Leave blank to keep existing key.') + ->maxLength(500), + + Select::make('ai_model') + ->label('Model') + ->options(function ($get) { + $provider = $get('ai_provider') ?? 'openai'; + return config("ai.providers.{$provider}.models", []); + }) + ->required() + ->searchable(), + ]) + ->columns(2), + + Section::make('Generation Parameters') + ->description('Control the behavior of AI-generated responses.') + ->icon('heroicon-o-adjustments-horizontal') + ->schema([ + TextInput::make('ai_max_tokens') + ->label('Max Tokens') + ->numeric() + ->minValue(100) + ->maxValue(8192) + ->default(2048) + ->helperText('Maximum number of tokens in the AI response (100-8192).'), + + TextInput::make('ai_temperature') + ->label('Temperature') + ->numeric() + ->minValue(0) + ->maxValue(2) + ->step(0.1) + ->default(0.7) + ->helperText('Controls randomness: 0 = deterministic, 2 = very random. Recommended: 0.7'), + ]) + ->columns(2), + + Section::make('System Prompt') + ->description('The default system prompt for card generation. Defines the AI\'s role and output format.') + ->icon('heroicon-o-document-text') + ->schema([ + Textarea::make('ai_system_prompt') + ->label('Card Generation System Prompt') + ->rows(15) + ->helperText('This prompt is sent with every card generation request. It defines the AI\'s domain knowledge and required JSON output format.') + ->columnSpanFull(), + ]), + ]) + ->statePath('data'); + } + + /** + * Save the settings to the database. + */ + public function save(): void + { + $data = $this->form->getState(); + + // Only update API key if a new one was provided + if (!empty($data['ai_api_key'])) { + $this->saveEncryptedSetting('ai_api_key', $data['ai_api_key']); + } + + $this->saveSetting('ai_provider', $data['ai_provider'], 'text', 'provider', 'AI Provider', 1); + $this->saveSetting('ai_model', $data['ai_model'], 'text', 'provider', 'AI Model', 2); + $this->saveSetting('ai_max_tokens', $data['ai_max_tokens'], 'number', 'parameters', 'Max Tokens', 1); + $this->saveSetting('ai_temperature', $data['ai_temperature'], 'number', 'parameters', 'Temperature', 2); + $this->saveSetting('ai_system_prompt', $data['ai_system_prompt'], 'textarea', 'prompts', 'System Prompt', 1); + + Notification::make() + ->title('Settings saved successfully.') + ->success() + ->send(); + } + + /** + * Test the current AI provider connection. + */ + public function testConnection(): void + { + // Save current form state first before testing + $data = $this->form->getState(); + if (!empty($data['ai_api_key'])) { + $this->saveEncryptedSetting('ai_api_key', $data['ai_api_key']); + } + $this->saveSetting('ai_provider', $data['ai_provider'], 'text', 'provider', 'AI Provider', 1); + $this->saveSetting('ai_model', $data['ai_model'], 'text', 'provider', 'AI Model', 2); + + try { + $service = new AiProxyService(); + $result = $service->testConnection(); + + if ($result['success']) { + Notification::make() + ->title('Connection successful!') + ->body('The AI provider responded correctly.') + ->success() + ->send(); + } elseif ($result['status'] === 'rate_limited') { + Notification::make() + ->title('API key is valid (rate limited)') + ->body($result['message']) + ->warning() + ->send(); + } else { + Notification::make() + ->title('Connection failed') + ->body($result['message']) + ->danger() + ->send(); + } + } catch (\Exception $e) { + Notification::make() + ->title('Connection error') + ->body($e->getMessage()) + ->danger() + ->send(); + } + } + + /** + * Get the header actions (Save + Test Connection buttons). + */ + protected function getHeaderActions(): array + { + return [ + Action::make('testConnection') + ->label('Test Connection') + ->icon('heroicon-o-signal') + ->color('gray') + ->action('testConnection'), + + Action::make('save') + ->label('Save Settings') + ->icon('heroicon-o-check') + ->color('primary') + ->action('save'), + ]; + } + + /** + * Save a plain-text setting. + */ + private function saveSetting(string $key, mixed $value, string $type, string $group, string $label, int $order): void + { + AiSetting::updateOrCreate( + ['key' => $key], + [ + 'value' => $value, + 'type' => $type, + 'group' => $group, + 'label' => $label, + 'order' => $order, + ] + ); + } + + /** + * Save an encrypted setting. + */ + private function saveEncryptedSetting(string $key, string $value): void + { + $existing = AiSetting::where('key', $key)->first(); + + if ($existing) { + // Directly update encrypted value using the mutator + $existing->type = 'encrypted'; + $existing->value = $value; + $existing->save(); + } else { + AiSetting::create([ + 'key' => $key, + 'value' => $value, + 'type' => 'encrypted', + 'group' => 'provider', + 'label' => 'API Key', + 'order' => 3, + ]); + } + } +} diff --git a/app/Filament/Resources/AiLogResource.php b/app/Filament/Resources/AiLogResource.php new file mode 100644 index 0000000..9ab37c2 --- /dev/null +++ b/app/Filament/Resources/AiLogResource.php @@ -0,0 +1,273 @@ +check() && auth()->user()->isSupervisor(); + } + + public static function canCreate(): bool + { + return false; + } + + public static function canEdit($record): bool + { + return false; + } + + public static function canDelete($record): bool + { + return false; + } + + /** + * Navigation badge showing total log count. + */ + public static function getNavigationBadge(): ?string + { + return static::getModel()::count(); + } + + public static function form(Form $form): Form + { + return $form->schema([]); + } + + public static function infolist(Infolist $infolist): Infolist + { + return $infolist + ->schema([ + Section::make('Request Details') + ->schema([ + TextEntry::make('user.name') + ->label('User') + ->default('System'), + TextEntry::make('provider') + ->label('Provider') + ->badge() + ->color(fn (string $state): string => match ($state) { + 'openai' => 'success', + 'anthropic' => 'info', + default => 'gray', + }), + TextEntry::make('model') + ->label('Model'), + TextEntry::make('status') + ->label('Status') + ->badge() + ->color(fn (string $state): string => match ($state) { + 'success' => 'success', + 'error' => 'danger', + 'rate_limited' => 'warning', + default => 'gray', + }), + TextEntry::make('created_at') + ->label('Timestamp') + ->dateTime(), + ]) + ->columns(3), + + Section::make('Token Usage & Performance') + ->schema([ + TextEntry::make('prompt_tokens') + ->label('Prompt Tokens') + ->numeric(), + TextEntry::make('completion_tokens') + ->label('Completion Tokens') + ->numeric(), + TextEntry::make('total_tokens') + ->label('Total Tokens') + ->numeric(), + TextEntry::make('duration_ms') + ->label('Duration (ms)') + ->numeric(), + TextEntry::make('cost_estimate') + ->label('Est. Cost (USD)') + ->money('USD') + ->default('N/A'), + ]) + ->columns(3), + + Section::make('Prompts') + ->schema([ + TextEntry::make('system_prompt') + ->label('System Prompt') + ->prose() + ->columnSpanFull(), + TextEntry::make('user_prompt') + ->label('User Prompt') + ->prose() + ->columnSpanFull(), + ]), + + Section::make('Response') + ->schema([ + TextEntry::make('response') + ->label('AI Response') + ->prose() + ->columnSpanFull() + ->default('No response (error occurred)'), + TextEntry::make('error_message') + ->label('Error Message') + ->visible(fn ($record) => !empty($record->error_message)) + ->color('danger') + ->columnSpanFull(), + ]), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + Tables\Columns\TextColumn::make('id') + ->label('#') + ->sortable(), + + Tables\Columns\TextColumn::make('user.name') + ->label('User') + ->searchable() + ->sortable() + ->default('System'), + + Tables\Columns\TextColumn::make('provider') + ->label('Provider') + ->badge() + ->color(fn (string $state): string => match ($state) { + 'openai' => 'success', + 'anthropic' => 'info', + default => 'gray', + }) + ->sortable(), + + Tables\Columns\TextColumn::make('model') + ->label('Model') + ->searchable() + ->sortable(), + + Tables\Columns\TextColumn::make('status') + ->label('Status') + ->badge() + ->color(fn (string $state): string => match ($state) { + 'success' => 'success', + 'error' => 'danger', + 'rate_limited' => 'warning', + default => 'gray', + }) + ->sortable(), + + Tables\Columns\TextColumn::make('total_tokens') + ->label('Tokens') + ->numeric() + ->sortable(), + + Tables\Columns\TextColumn::make('cost_estimate') + ->label('Est. Cost') + ->money('USD') + ->sortable() + ->default('—'), + + Tables\Columns\TextColumn::make('duration_ms') + ->label('Duration') + ->formatStateUsing(fn ($state) => $state < 1000 ? "{$state}ms" : round($state / 1000, 2) . 's') + ->sortable(), + + Tables\Columns\TextColumn::make('created_at') + ->label('Date & Time') + ->dateTime() + ->sortable(), + ]) + ->filters([ + Tables\Filters\SelectFilter::make('status') + ->options([ + 'success' => 'Success', + 'error' => 'Error', + 'rate_limited' => 'Rate Limited', + ]), + + Tables\Filters\SelectFilter::make('provider') + ->options([ + 'openai' => 'OpenAI', + 'anthropic' => 'Anthropic', + ]), + + Tables\Filters\SelectFilter::make('user') + ->relationship('user', 'name') + ->label('User'), + + Tables\Filters\Filter::make('created_at') + ->form([ + Forms\Components\DatePicker::make('created_from') + ->label('From'), + Forms\Components\DatePicker::make('created_until') + ->label('Until'), + ]) + ->query(function (Builder $query, array $data): Builder { + return $query + ->when( + $data['created_from'], + fn (Builder $query, $date): Builder => $query->whereDate('created_at', '>=', $date), + ) + ->when( + $data['created_until'], + fn (Builder $query, $date): Builder => $query->whereDate('created_at', '<=', $date), + ); + }), + ]) + ->actions([ + Tables\Actions\ViewAction::make() + ->slideOver() + ->modalWidth('4xl'), + ]) + ->defaultSort('created_at', 'desc') + ->poll('60s'); + } + + public static function getRelations(): array + { + return []; + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListAiLogs::route('/'), + ]; + } +} diff --git a/app/Filament/Resources/AiLogResource/Pages/ListAiLogs.php b/app/Filament/Resources/AiLogResource/Pages/ListAiLogs.php new file mode 100644 index 0000000..519da42 --- /dev/null +++ b/app/Filament/Resources/AiLogResource/Pages/ListAiLogs.php @@ -0,0 +1,19 @@ + 'integer', + 'completion_tokens' => 'integer', + 'total_tokens' => 'integer', + 'duration_ms' => 'integer', + 'cost_estimate' => 'decimal:6', + 'metadata' => 'array', + ]; + + /** + * Relationship: belongs to a user + */ + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + /** + * Scope: successful requests + */ + public function scopeSuccessful(Builder $query): Builder + { + return $query->where('status', 'success'); + } + + /** + * Scope: failed requests + */ + public function scopeFailed(Builder $query): Builder + { + return $query->where('status', 'error'); + } + + /** + * Scope: rate-limited requests + */ + public function scopeRateLimited(Builder $query): Builder + { + return $query->where('status', 'rate_limited'); + } + + /** + * Scope: filter by provider + */ + public function scopeByProvider(Builder $query, string $provider): Builder + { + return $query->where('provider', $provider); + } + + /** + * Scope: filter by model + */ + public function scopeByModel(Builder $query, string $model): Builder + { + return $query->where('model', $model); + } + + /** + * Accessor: duration in seconds formatted + */ + public function getDurationFormattedAttribute(): string + { + if ($this->duration_ms < 1000) { + return $this->duration_ms . 'ms'; + } + + return round($this->duration_ms / 1000, 2) . 's'; + } + + /** + * Accessor: status color for Filament badge + */ + public function getStatusColorAttribute(): string + { + return match ($this->status) { + 'success' => 'success', + 'error' => 'danger', + 'rate_limited' => 'warning', + default => 'gray', + }; + } +} diff --git a/app/Models/AiSetting.php b/app/Models/AiSetting.php new file mode 100644 index 0000000..dcde3b5 --- /dev/null +++ b/app/Models/AiSetting.php @@ -0,0 +1,134 @@ + 'integer', + ]; + + /** + * Get the value attribute, handling type-specific conversions + */ + public function getValueAttribute($value): mixed + { + if (empty($value)) { + return $value; + } + + $type = $this->attributes['type'] ?? 'text'; + + if ($type === 'encrypted') { + try { + return Crypt::decryptString($value); + } catch (\Exception) { + return $value; + } + } + + if ($type === 'number') { + return is_numeric($value) ? (float) $value : $value; + } + + return $value; + } + + /** + * Set the value attribute, handling encryption + */ + public function setValueAttribute($value): void + { + $type = $this->attributes['type'] ?? 'text'; + + if ($type === 'encrypted' && !empty($value)) { + $this->attributes['value'] = Crypt::encryptString($value); + } else { + $this->attributes['value'] = $value; + } + } + + /** + * Boot the model + */ + protected static function booted(): void + { + static::saved(function () { + Cache::forget('ai_settings'); + }); + + static::deleted(function () { + Cache::forget('ai_settings'); + }); + } + + /** + * Get a setting value by key (reads raw, non-decrypted value from cache) + */ + public static function get(string $key, mixed $default = null): mixed + { + $instance = static::where('key', $key)->first(); + + if (!$instance) { + return $default; + } + + // Use the model accessor which handles decryption + return $instance->value ?? $default; + } + + /** + * Set a setting value + */ + public static function set(string $key, mixed $value): void + { + $existing = static::where('key', $key)->first(); + + if ($existing) { + // Update using the mutator + $existing->value = $value; + $existing->save(); + } else { + static::create(['key' => $key, 'value' => $value]); + } + + Cache::forget('ai_settings'); + } + + /** + * Get all settings as key-value array (raw values, not decrypted) + */ + public static function getAllGrouped(): array + { + return static::orderBy('group') + ->orderBy('order') + ->get() + ->groupBy('group') + ->toArray(); + } + + /** + * Check if a setting exists + */ + public static function has(string $key): bool + { + return static::where('key', $key)->exists(); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 1ba1d6b..436eb16 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -4,6 +4,8 @@ use App\Models\PhysicalCard; use App\Observers\PhysicalCardObserver; +use App\Services\Ai\AiProxyService; +use App\Services\Ai\AiProviderInterface; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider @@ -13,7 +15,15 @@ class AppServiceProvider extends ServiceProvider */ public function register(): void { - // + // Register the AI Proxy Service as a singleton + $this->app->singleton(AiProxyService::class, function ($app) { + return new AiProxyService(); + }); + + // Bind the interface to the resolved provider via the proxy service + $this->app->bind(AiProviderInterface::class, function ($app) { + return $app->make(AiProxyService::class)->getProvider(); + }); } /** diff --git a/app/Services/Ai/AiProviderInterface.php b/app/Services/Ai/AiProviderInterface.php new file mode 100644 index 0000000..0d3f53f --- /dev/null +++ b/app/Services/Ai/AiProviderInterface.php @@ -0,0 +1,35 @@ + key-value: model_id => model_label + */ + public function getAvailableModels(): array; + + /** + * Get the provider identifier string. + */ + public function getProviderName(): string; +} diff --git a/app/Services/Ai/AiProxyService.php b/app/Services/Ai/AiProxyService.php new file mode 100644 index 0000000..c76bad2 --- /dev/null +++ b/app/Services/Ai/AiProxyService.php @@ -0,0 +1,189 @@ +retryAttempts = (int) config('ai.retry_attempts', 3); + $this->retryDelayMs = (int) config('ai.retry_delay_ms', 1000); + $this->provider = $this->resolveProvider(); + } + + /** + * Send a chat request through the configured AI provider. + * Handles retry logic, logging, and error normalization. + */ + public function chat(string $systemPrompt, string $userPrompt, array $options = []): AiResponse + { + $attempt = 0; + $lastResponse = null; + + while ($attempt < $this->retryAttempts) { + $attempt++; + + $response = $this->provider->chat($systemPrompt, $userPrompt, $options); + $lastResponse = $response; + + // Log the request + $this->logRequest($systemPrompt, $userPrompt, $response); + + if ($response->isSuccess) { + return $response; + } + + // Retry on rate limit with exponential backoff + if ($response->status === 'rate_limited' && $attempt < $this->retryAttempts) { + $delay = $this->retryDelayMs * (2 ** ($attempt - 1)); // exponential: 1s, 2s, 4s + Log::warning("AI rate limited, retrying in {$delay}ms (attempt {$attempt}/{$this->retryAttempts})"); + usleep($delay * 1000); + continue; + } + + // Don't retry on other errors + break; + } + + return $lastResponse; + } + + /** + * Test the current provider's connection. + * Returns a result array with 'success' bool and 'message' string. + * + * @return array{success: bool, message: string, status: string} + */ + public function testConnection(): array + { + $testPrompts = config('ai_prompts.connection_test'); + + $response = $this->chat( + systemPrompt: $testPrompts['system'], + userPrompt: $testPrompts['user'], + options: ['max_tokens' => 50, 'json_mode' => false], + ); + + if ($response->isSuccess) { + return ['success' => true, 'message' => 'Connection successful.', 'status' => 'success']; + } + + if ($response->status === 'rate_limited') { + return ['success' => false, 'message' => 'API key is valid but rate limit reached. Try again in a moment.', 'status' => 'rate_limited']; + } + + return ['success' => false, 'message' => $response->errorMessage ?? 'Unknown error.', 'status' => 'error']; + } + + /** + * Get the current provider instance. + */ + public function getProvider(): AiProviderInterface + { + return $this->provider; + } + + /** + * Get available models for the current provider. + */ + public function getAvailableModels(): array + { + return $this->provider->getAvailableModels(); + } + + /** + * Resolve the AI provider from settings or config. + */ + private function resolveProvider(): AiProviderInterface + { + $providerName = AiSetting::get('ai_provider') ?? config('ai.default_provider', 'openai'); + $apiKey = AiSetting::get('ai_api_key') ?? ''; + $model = AiSetting::get('ai_model') ?? null; + $maxTokens = (int) (AiSetting::get('ai_max_tokens') ?? config('ai.default_max_tokens', 2048)); + $temperature = (float) (AiSetting::get('ai_temperature') ?? config('ai.default_temperature', 0.7)); + + return match ($providerName) { + 'anthropic' => new AnthropicProvider( + apiKey: $apiKey, + model: $model ?? config('ai.providers.anthropic.default_model', 'claude-sonnet-4-6'), + maxTokens: $maxTokens, + temperature: $temperature, + ), + default => new OpenAiProvider( + apiKey: $apiKey, + model: $model ?? config('ai.providers.openai.default_model', 'gpt-4o'), + maxTokens: $maxTokens, + temperature: $temperature, + ), + }; + } + + /** + * Log the AI request to the database. + */ + private function logRequest(string $systemPrompt, string $userPrompt, AiResponse $response): void + { + if (!config('ai.log_requests', true)) { + return; + } + + try { + $costEstimate = $this->calculateCost( + provider: $response->provider, + model: $response->model, + promptTokens: $response->promptTokens, + completionTokens: $response->completionTokens, + ); + + AiLog::create([ + 'user_id' => Auth::id(), + 'provider' => $response->provider, + 'model' => $response->model, + 'prompt_tokens' => $response->promptTokens, + 'completion_tokens' => $response->completionTokens, + 'total_tokens' => $response->totalTokens, + 'system_prompt' => $systemPrompt, + 'user_prompt' => $userPrompt, + 'response' => $response->isSuccess ? $response->content : null, + 'status' => $response->status, + 'error_message' => $response->errorMessage, + 'duration_ms' => $response->durationMs, + 'cost_estimate' => $costEstimate, + ]); + } catch (\Exception $e) { + Log::error('Failed to log AI request', ['error' => $e->getMessage()]); + } + } + + /** + * Calculate estimated cost based on token usage. + */ + private function calculateCost(string $provider, string $model, int $promptTokens, int $completionTokens): ?float + { + $inputCosts = config("ai.providers.{$provider}.cost_per_1k_input", []); + $outputCosts = config("ai.providers.{$provider}.cost_per_1k_output", []); + + if (!isset($inputCosts[$model]) || !isset($outputCosts[$model])) { + return null; + } + + $inputCost = ($promptTokens / 1000) * $inputCosts[$model]; + $outputCost = ($completionTokens / 1000) * $outputCosts[$model]; + + return round($inputCost + $outputCost, 6); + } +} diff --git a/app/Services/Ai/AiResponse.php b/app/Services/Ai/AiResponse.php new file mode 100644 index 0000000..60fdc61 --- /dev/null +++ b/app/Services/Ai/AiResponse.php @@ -0,0 +1,143 @@ + $this->content, + 'prompt_tokens' => $this->promptTokens, + 'completion_tokens' => $this->completionTokens, + 'total_tokens' => $this->totalTokens, + 'model' => $this->model, + 'provider' => $this->provider, + 'duration_ms' => $this->durationMs, + 'is_success' => $this->isSuccess, + 'error_message' => $this->errorMessage, + 'status' => $this->status, + ]; + } + + /** + * Parse content as JSON and return as array. + * Returns null if content is not valid JSON. + */ + public function toJsonArray(): ?array + { + if (empty($this->content)) { + return null; + } + + $decoded = json_decode($this->content, true); + + if (json_last_error() !== JSON_ERROR_NONE) { + return null; + } + + return $decoded; + } + + /** + * Parse content as card data (for card generation responses). + * Returns structured card data or null if parsing fails. + */ + public function toCardData(): ?array + { + $data = $this->toJsonArray(); + + if (!$data) { + return null; + } + + // Validate expected card fields + $required = ['name', 'description', 'rarity']; + foreach ($required as $field) { + if (!isset($data[$field])) { + return null; + } + } + + return $data; + } + + /** + * Get a masked/truncated version of content for display + */ + public function getContentPreview(int $length = 200): string + { + if (strlen($this->content) <= $length) { + return $this->content; + } + + return substr($this->content, 0, $length) . '...'; + } +} diff --git a/app/Services/Ai/Providers/AnthropicProvider.php b/app/Services/Ai/Providers/AnthropicProvider.php new file mode 100644 index 0000000..9d7a944 --- /dev/null +++ b/app/Services/Ai/Providers/AnthropicProvider.php @@ -0,0 +1,170 @@ +apiKey = $apiKey; + $this->model = $model; + $this->baseUrl = config('ai.providers.anthropic.base_url', 'https://api.anthropic.com/v1'); + $this->maxTokens = $maxTokens; + $this->temperature = $temperature; + $this->timeoutSeconds = config('ai.timeout_seconds', 60); + } + + /** + * Send a chat message to Anthropic Claude + */ + public function chat(string $systemPrompt, string $userPrompt, array $options = []): AiResponse + { + $startTime = microtime(true); + $model = $options['model'] ?? $this->model; + $maxTokens = $options['max_tokens'] ?? $this->maxTokens; + $temperature = $options['temperature'] ?? $this->temperature; + $jsonMode = $options['json_mode'] ?? true; + + // Anthropic uses system prompt at top level, not in messages array + // For JSON mode, append instruction to system prompt + $finalSystemPrompt = $systemPrompt; + if ($jsonMode) { + $finalSystemPrompt .= "\n\nIMPORTANT: Your response must be ONLY a valid JSON object. No markdown, no code blocks, no explanations outside the JSON."; + } + + $payload = [ + 'model' => $model, + 'max_tokens' => $maxTokens, + 'temperature' => $temperature, + 'system' => $finalSystemPrompt, + 'messages' => [ + ['role' => 'user', 'content' => $userPrompt], + ], + ]; + + try { + $client = HttpClient::create(); + $response = $client->request('POST', $this->baseUrl . '/messages', [ + 'headers' => [ + 'x-api-key' => $this->apiKey, + 'anthropic-version' => self::API_VERSION, + 'Content-Type' => 'application/json', + ], + 'json' => $payload, + 'timeout' => $this->timeoutSeconds, + ]); + + $statusCode = $response->getStatusCode(); + $durationMs = (int) ((microtime(true) - $startTime) * 1000); + + if ($statusCode === 429) { + return AiResponse::error( + errorMessage: 'Rate limit exceeded. Please try again later.', + model: $model, + provider: $this->getProviderName(), + durationMs: $durationMs, + status: 'rate_limited', + ); + } + + if ($statusCode !== 200) { + $body = $response->toArray(throw: false); + $errorMsg = $body['error']['message'] ?? "HTTP {$statusCode} error"; + + return AiResponse::error( + errorMessage: $errorMsg, + model: $model, + provider: $this->getProviderName(), + durationMs: $durationMs, + ); + } + + $body = $response->toArray(); + + // Anthropic response structure differs from OpenAI + $content = ''; + if (isset($body['content']) && is_array($body['content'])) { + foreach ($body['content'] as $block) { + if ($block['type'] === 'text') { + $content .= $block['text']; + } + } + } + + $usage = $body['usage'] ?? []; + + return AiResponse::success( + content: trim($content), + promptTokens: $usage['input_tokens'] ?? 0, + completionTokens: $usage['output_tokens'] ?? 0, + model: $model, + provider: $this->getProviderName(), + durationMs: $durationMs, + ); + + } catch (\Exception $e) { + $durationMs = (int) ((microtime(true) - $startTime) * 1000); + Log::error('Anthropic API error', ['error' => $e->getMessage()]); + + return AiResponse::error( + errorMessage: $e->getMessage(), + model: $model, + provider: $this->getProviderName(), + durationMs: $durationMs, + ); + } + } + + /** + * Test the connection with a minimal request + */ + public function testConnection(): bool + { + $testPrompts = config('ai_prompts.connection_test'); + $response = $this->chat( + systemPrompt: $testPrompts['system'], + userPrompt: $testPrompts['user'], + options: ['max_tokens' => 50, 'json_mode' => false], + ); + + return $response->isSuccess; + } + + /** + * Get available models + */ + public function getAvailableModels(): array + { + return config('ai.providers.anthropic.models', []); + } + + /** + * Get provider name + */ + public function getProviderName(): string + { + return 'anthropic'; + } +} diff --git a/app/Services/Ai/Providers/OpenAiProvider.php b/app/Services/Ai/Providers/OpenAiProvider.php new file mode 100644 index 0000000..9e80d1b --- /dev/null +++ b/app/Services/Ai/Providers/OpenAiProvider.php @@ -0,0 +1,153 @@ +apiKey = $apiKey; + $this->model = $model; + $this->baseUrl = config('ai.providers.openai.base_url', 'https://api.openai.com/v1'); + $this->maxTokens = $maxTokens; + $this->temperature = $temperature; + $this->timeoutSeconds = config('ai.timeout_seconds', 60); + } + + /** + * Send a chat message to OpenAI + */ + public function chat(string $systemPrompt, string $userPrompt, array $options = []): AiResponse + { + $startTime = microtime(true); + $model = $options['model'] ?? $this->model; + $maxTokens = $options['max_tokens'] ?? $this->maxTokens; + $temperature = $options['temperature'] ?? $this->temperature; + $jsonMode = $options['json_mode'] ?? true; + + $payload = [ + 'model' => $model, + 'messages' => [ + ['role' => 'system', 'content' => $systemPrompt], + ['role' => 'user', 'content' => $userPrompt], + ], + 'max_tokens' => $maxTokens, + 'temperature' => $temperature, + ]; + + if ($jsonMode) { + $payload['response_format'] = ['type' => 'json_object']; + } + + try { + $client = HttpClient::create(); + $response = $client->request('POST', $this->baseUrl . '/chat/completions', [ + 'headers' => [ + 'Authorization' => 'Bearer ' . $this->apiKey, + 'Content-Type' => 'application/json', + ], + 'json' => $payload, + 'timeout' => $this->timeoutSeconds, + ]); + + $statusCode = $response->getStatusCode(); + $durationMs = (int) ((microtime(true) - $startTime) * 1000); + + if ($statusCode === 429) { + return AiResponse::error( + errorMessage: 'Rate limit exceeded. Please try again later.', + model: $model, + provider: $this->getProviderName(), + durationMs: $durationMs, + status: 'rate_limited', + ); + } + + if ($statusCode !== 200) { + $body = $response->toArray(throw: false); + $errorMsg = $body['error']['message'] ?? "HTTP {$statusCode} error"; + + return AiResponse::error( + errorMessage: $errorMsg, + model: $model, + provider: $this->getProviderName(), + durationMs: $durationMs, + ); + } + + $body = $response->toArray(); + $content = $body['choices'][0]['message']['content'] ?? ''; + $usage = $body['usage'] ?? []; + + return AiResponse::success( + content: $content, + promptTokens: $usage['prompt_tokens'] ?? 0, + completionTokens: $usage['completion_tokens'] ?? 0, + model: $model, + provider: $this->getProviderName(), + durationMs: $durationMs, + ); + + } catch (\Exception $e) { + $durationMs = (int) ((microtime(true) - $startTime) * 1000); + Log::error('OpenAI API error', ['error' => $e->getMessage()]); + + return AiResponse::error( + errorMessage: $e->getMessage(), + model: $model, + provider: $this->getProviderName(), + durationMs: $durationMs, + ); + } + } + + /** + * Test the connection with a minimal request + */ + public function testConnection(): bool + { + $testPrompts = config('ai_prompts.connection_test'); + $response = $this->chat( + systemPrompt: $testPrompts['system'], + userPrompt: $testPrompts['user'], + options: ['max_tokens' => 50, 'json_mode' => false], + ); + + return $response->isSuccess; + } + + /** + * Get available models + */ + public function getAvailableModels(): array + { + return config('ai.providers.openai.models', []); + } + + /** + * Get provider name + */ + public function getProviderName(): string + { + return 'openai'; + } +} diff --git a/config/ai.php b/config/ai.php new file mode 100644 index 0000000..0251611 --- /dev/null +++ b/config/ai.php @@ -0,0 +1,103 @@ + AI Management > AI Settings + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Default AI Provider + |-------------------------------------------------------------------------- + | + | The default AI provider to use. Can be overridden via AiSetting model. + | Supported: "openai", "anthropic" + | + */ + 'default_provider' => env('AI_PROVIDER', 'openai'), + + /* + |-------------------------------------------------------------------------- + | Request Settings + |-------------------------------------------------------------------------- + */ + 'retry_attempts' => env('AI_RETRY_ATTEMPTS', 3), + 'retry_delay_ms' => env('AI_RETRY_DELAY_MS', 1000), + 'timeout_seconds' => env('AI_TIMEOUT_SECONDS', 60), + + /* + |-------------------------------------------------------------------------- + | Default Parameters + |-------------------------------------------------------------------------- + */ + 'default_max_tokens' => env('AI_MAX_TOKENS', 2048), + 'default_temperature' => env('AI_TEMPERATURE', 0.7), + + /* + |-------------------------------------------------------------------------- + | Providers Configuration + |-------------------------------------------------------------------------- + */ + 'providers' => [ + + 'openai' => [ + 'api_key_env' => 'OPENAI_API_KEY', + 'base_url' => 'https://api.openai.com/v1', + 'default_model' => 'gpt-4o', + 'models' => [ + 'gpt-4o' => 'GPT-4o', + 'gpt-4o-mini' => 'GPT-4o Mini', + 'gpt-4-turbo' => 'GPT-4 Turbo', + 'gpt-3.5-turbo' => 'GPT-3.5 Turbo', + ], + // Cost per 1k tokens in USD (approximate) + 'cost_per_1k_input' => [ + 'gpt-4o' => 0.0025, + 'gpt-4o-mini' => 0.00015, + 'gpt-4-turbo' => 0.01, + 'gpt-3.5-turbo' => 0.0005, + ], + 'cost_per_1k_output' => [ + 'gpt-4o' => 0.01, + 'gpt-4o-mini' => 0.0006, + 'gpt-4-turbo' => 0.03, + 'gpt-3.5-turbo' => 0.0015, + ], + ], + + 'anthropic' => [ + 'api_key_env' => 'ANTHROPIC_API_KEY', + 'base_url' => 'https://api.anthropic.com/v1', + 'default_model' => 'claude-opus-4-6', + 'models' => [ + 'claude-opus-4-6' => 'Claude Opus 4.6', + 'claude-sonnet-4-6' => 'Claude Sonnet 4.6', + 'claude-haiku-4-5-20251001' => 'Claude Haiku 4.5', + ], + // Cost per 1k tokens in USD (approximate) + 'cost_per_1k_input' => [ + 'claude-opus-4-6' => 0.015, + 'claude-sonnet-4-6' => 0.003, + 'claude-haiku-4-5-20251001' => 0.00025, + ], + 'cost_per_1k_output' => [ + 'claude-opus-4-6' => 0.075, + 'claude-sonnet-4-6' => 0.015, + 'claude-haiku-4-5-20251001' => 0.00125, + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Logging + |-------------------------------------------------------------------------- + */ + 'log_requests' => env('AI_LOG_REQUESTS', true), + 'log_cleanup_days' => env('AI_LOG_CLEANUP_DAYS', 30), + +]; diff --git a/config/ai_prompts.php b/config/ai_prompts.php new file mode 100644 index 0000000..09f92f1 --- /dev/null +++ b/config/ai_prompts.php @@ -0,0 +1,84 @@ + [ + 'version' => '1.0.0', + + 'system' => <<<'PROMPT' +Te egy senior TCG (Trading Card Game) tervező és matematikai egyensúly-szakértő vagy. A feladatod új elemek tervezése a Cards Forge ökoszisztémába. Ismered a kártyajátékok mechanikáit (pl. Magic: The Gathering, Hearthstone), de szigorúan a megadott kártyatípusok keretein belül maradsz. + +## Cards Forge Domain Knowledge + +**Game**: A fő keretrendszer, amely meghatározza a világot és az alapszabályokat. +**Card Type**: Meghatározza a kártya szerepét (pl. Spell, Creature, Artifact). +**Hexas**: Hatlapú mezők, amelyek a játéktér topológiáját és speciális területi hatásokat kezelik. +**Figures**: Fizikai egységek a játéktéren, amelyek pozícióval és mozgási statisztikával rendelkeznek. + +## Generálási Szabályok + +**Konzisztencia**: Ha a játék "Dark Fantasy" stílusú, ne generálj "Sci-fi" képességeket. +**Egyensúly**: Az értékek (Power, Toughness, Mana Cost) legyenek arányosak. Egy alacsony költségű kártya ne legyen túl erős. +**Nyelv**: Mindig a kért nyelven válaszolj (alapértelmezett: Magyar). +**Stílus**: A "Lore Text" legyen hangulatos, rövid és dőlt betűs stílusú. + +## Kötelező JSON Kimenet + +A válaszod kizárólag egy valid JSON objektum lehet, markdown kódblokkok nélkül, az alábbi struktúrában: + +{ + "name": "Kártya neve", + "description": "Képesség leírása szakmai nyelven", + "lore_text": "Rövid hangulati szöveg", + "stats": { + "cost": 0, + "power": 0, + "toughness": 0, + "movement": 0 + }, + "rarity": "Common/Uncommon/Rare/Legendary", + "ai_logic_note": "Rövid magyarázat a tervezői döntésről (csak adminnak)" +} +PROMPT, + + // User prompt template - replace placeholders at runtime + 'user_template' => <<<'TEMPLATE' +Generálj egy új kártyát a következő paraméterekkel: + +**Játék**: {game_name} +**Típus**: {card_type} +**Cél**: {generation_goal} +**Stílus/Téma**: {game_style} +{existing_cards_context} +TEMPLATE, + ], + + /* + |-------------------------------------------------------------------------- + | Connection Test Prompt + |-------------------------------------------------------------------------- + | + | Minimal prompt used to verify API connection is working + | + */ + 'connection_test' => [ + 'system' => 'You are a helpful assistant. Respond only with valid JSON.', + 'user' => 'Respond with exactly this JSON: {"status": "ok", "message": "Connection successful"}', + ], + +]; diff --git a/database/migrations/2026_02_18_000001_create_ai_settings_table.php b/database/migrations/2026_02_18_000001_create_ai_settings_table.php new file mode 100644 index 0000000..901028f --- /dev/null +++ b/database/migrations/2026_02_18_000001_create_ai_settings_table.php @@ -0,0 +1,37 @@ +id(); + $table->string('key')->unique(); + $table->text('value')->nullable(); + $table->string('type')->default('text'); // text, encrypted, number, select, textarea + $table->string('group')->default('general'); // general, provider, parameters, prompts + $table->string('label'); + $table->text('description')->nullable(); + $table->integer('order')->default(0); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('ai_settings'); + } +}; diff --git a/database/migrations/2026_02_18_000002_create_ai_logs_table.php b/database/migrations/2026_02_18_000002_create_ai_logs_table.php new file mode 100644 index 0000000..b9d61ae --- /dev/null +++ b/database/migrations/2026_02_18_000002_create_ai_logs_table.php @@ -0,0 +1,44 @@ +id(); + $table->foreignId('user_id')->nullable()->constrained()->nullOnDelete(); + $table->string('provider')->default('openai'); // openai, anthropic + $table->string('model'); + $table->integer('prompt_tokens')->default(0); + $table->integer('completion_tokens')->default(0); + $table->integer('total_tokens')->default(0); + $table->text('system_prompt')->nullable(); + $table->text('user_prompt'); + $table->text('response')->nullable(); + $table->string('status')->default('success'); // success, error, rate_limited + $table->text('error_message')->nullable(); + $table->integer('duration_ms')->default(0); + $table->decimal('cost_estimate', 10, 6)->nullable(); + $table->json('metadata')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('ai_logs'); + } +}; diff --git a/database/seeders/AiSettingSeeder.php b/database/seeders/AiSettingSeeder.php new file mode 100644 index 0000000..ba07377 --- /dev/null +++ b/database/seeders/AiSettingSeeder.php @@ -0,0 +1,84 @@ + 'ai_provider', + 'value' => 'openai', + 'type' => 'text', + 'group' => 'provider', + 'label' => 'AI Provider', + 'description' => 'The AI service provider to use (openai or anthropic).', + 'order' => 1, + ], + [ + 'key' => 'ai_model', + 'value' => 'gpt-4o', + 'type' => 'text', + 'group' => 'provider', + 'label' => 'AI Model', + 'description' => 'The model to use for AI requests.', + 'order' => 2, + ], + [ + 'key' => 'ai_api_key', + 'value' => '', + 'type' => 'encrypted', + 'group' => 'provider', + 'label' => 'API Key', + 'description' => 'The API key for the configured AI provider. Stored encrypted.', + 'order' => 3, + ], + [ + 'key' => 'ai_max_tokens', + 'value' => '2048', + 'type' => 'number', + 'group' => 'parameters', + 'label' => 'Max Tokens', + 'description' => 'Maximum number of tokens in the AI response.', + 'order' => 1, + ], + [ + 'key' => 'ai_temperature', + 'value' => '0.7', + 'type' => 'number', + 'group' => 'parameters', + 'label' => 'Temperature', + 'description' => 'Controls randomness of AI output (0.0 - 2.0).', + 'order' => 2, + ], + [ + 'key' => 'ai_system_prompt', + 'value' => config('ai_prompts.card_generation.system', ''), + 'type' => 'textarea', + 'group' => 'prompts', + 'label' => 'Card Generation System Prompt', + 'description' => 'The system prompt sent with every card generation AI request.', + 'order' => 1, + ], + ]; + + foreach ($defaults as $setting) { + AiSetting::updateOrCreate( + ['key' => $setting['key']], + $setting + ); + } + + $this->command->info('AI settings seeded successfully.'); + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index e4114a2..1781e81 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -17,6 +17,7 @@ public function run(): void $this->call([ SystemUserSeeder::class, WebsiteSettingSeeder::class, + AiSettingSeeder::class, ]); // User::factory(10)->create(); diff --git a/resources/views/filament/pages/ai-settings.blade.php b/resources/views/filament/pages/ai-settings.blade.php new file mode 100644 index 0000000..d45ede8 --- /dev/null +++ b/resources/views/filament/pages/ai-settings.blade.php @@ -0,0 +1,5 @@ + + + {{ $this->form }} + + From 1f11c23d8cee65dfbf9a49859c4751894f0d123a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20N=C3=A9meth?= Date: Wed, 18 Feb 2026 22:22:32 +0100 Subject: [PATCH 2/3] ## [1.3.0] - 2026-02-18 - AI Card Suggestion module for supervisors: generate card data from game context, re-roll card abilities with tone selection, deck synergy analytics report, and one-click card swap suggestions --- CHANGELOG.md | 5 + app/Exceptions/AiSuggestionException.php | 16 ++ .../CardResource/Pages/CreateCard.php | 67 ++++++ .../Resources/CardResource/Pages/EditCard.php | 116 ++++++++++ .../Resources/DeckResource/Pages/EditDeck.php | 101 +++++++++ .../Resources/DeckResource/Pages/ViewDeck.php | 34 +++ app/Services/Ai/AbilityRerollService.php | 70 +++++++ app/Services/Ai/CardSuggestionService.php | 70 +++++++ app/Services/Ai/CardSwapService.php | 111 ++++++++++ app/Services/Ai/DeckAnalyticsService.php | 91 ++++++++ config/ai.php | 7 + config/ai_prompts.php | 198 ++++++++++++++++++ public/build/assets/app-C1D18bxO.css | 1 + public/build/assets/app-cHkKdsAV.css | 1 - public/build/manifest.json | 2 +- .../modals/deck-analytics-error.blade.php | 9 + .../filament/modals/deck-analytics.blade.php | 102 +++++++++ .../views/filament/modals/deck-swap.blade.php | 39 ++++ 18 files changed, 1038 insertions(+), 2 deletions(-) create mode 100644 app/Exceptions/AiSuggestionException.php create mode 100644 app/Services/Ai/AbilityRerollService.php create mode 100644 app/Services/Ai/CardSuggestionService.php create mode 100644 app/Services/Ai/CardSwapService.php create mode 100644 app/Services/Ai/DeckAnalyticsService.php create mode 100644 public/build/assets/app-C1D18bxO.css delete mode 100644 public/build/assets/app-cHkKdsAV.css create mode 100644 resources/views/filament/modals/deck-analytics-error.blade.php create mode 100644 resources/views/filament/modals/deck-analytics.blade.php create mode 100644 resources/views/filament/modals/deck-swap.blade.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c3971c..ec7ba85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ All notable changes to this project will be documented in this file. +## [1.3.0] - 2026-02-18 + +### Added +- AI Card Suggestion module for supervisors: generate card data from game context, re-roll card abilities with tone selection, deck synergy analytics report, and one-click card swap suggestions + ## [1.2.0] - 2026-02-18 ### Added diff --git a/app/Exceptions/AiSuggestionException.php b/app/Exceptions/AiSuggestionException.php new file mode 100644 index 0000000..514ef28 --- /dev/null +++ b/app/Exceptions/AiSuggestionException.php @@ -0,0 +1,16 @@ +id(); return $data; } + + protected function getHeaderActions(): array + { + return [ + Actions\Action::make('aiSuggest') + ->label('AI Suggest') + ->icon('heroicon-o-sparkles') + ->color('warning') + ->visible(fn () => auth()->user()?->supervisor === true) + ->form([ + Forms\Components\Select::make('game_id') + ->label('Game') + ->options(fn () => Game::where('creator_id', auth()->id())->pluck('name', 'id')) + ->required() + ->searchable() + ->default(fn () => $this->form->getState()['game_id'] ?? null), + Forms\Components\Select::make('type_id') + ->label('Card Type') + ->options(fn () => CardType::where('user_id', auth()->id())->pluck('name', 'id')) + ->required() + ->searchable() + ->default(fn () => $this->form->getState()['type_id'] ?? null), + Forms\Components\TextInput::make('generation_goal') + ->label('Generation Goal') + ->placeholder('e.g. Aggressive creature with low cost') + ->maxLength(255), + ]) + ->action(function (array $data) { + try { + $result = app(CardSuggestionService::class)->suggest( + gameId: (int) $data['game_id'], + cardTypeId: (int) $data['type_id'], + goal: $data['generation_goal'] ?? '' + ); + + $this->form->fill([ + 'game_id' => $data['game_id'], + 'type_id' => $data['type_id'], + 'name' => $result['name'] ?? '', + 'card_text' => $result['card_text'] ?? ($result['lore_text'] ?? ''), + 'card_data' => $result['card_data'] ?? [], + ]); + + Notification::make() + ->success() + ->title('AI Suggestion Applied') + ->body('Review the generated fields and save when ready.') + ->send(); + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + } + }), + ]; + } } diff --git a/app/Filament/Resources/CardResource/Pages/EditCard.php b/app/Filament/Resources/CardResource/Pages/EditCard.php index 169cf22..14d9788 100644 --- a/app/Filament/Resources/CardResource/Pages/EditCard.php +++ b/app/Filament/Resources/CardResource/Pages/EditCard.php @@ -1,9 +1,19 @@ label('AI Suggest') + ->icon('heroicon-o-sparkles') + ->color('warning') + ->visible(fn () => auth()->user()?->supervisor === true) + ->form([ + Forms\Components\Select::make('game_id') + ->label('Game') + ->options(fn () => Game::where('creator_id', auth()->id())->pluck('name', 'id')) + ->required() + ->searchable() + ->default(fn () => $this->form->getState()['game_id'] ?? null), + Forms\Components\Select::make('type_id') + ->label('Card Type') + ->options(fn () => CardType::where('user_id', auth()->id())->pluck('name', 'id')) + ->required() + ->searchable() + ->default(fn () => $this->form->getState()['type_id'] ?? null), + Forms\Components\TextInput::make('generation_goal') + ->label('Generation Goal') + ->placeholder('e.g. Aggressive creature with low cost') + ->maxLength(255), + ]) + ->action(function (array $data) { + try { + $result = app(CardSuggestionService::class)->suggest( + gameId: (int) $data['game_id'], + cardTypeId: (int) $data['type_id'], + goal: $data['generation_goal'] ?? '' + ); + + $this->form->fill([ + 'game_id' => $data['game_id'], + 'type_id' => $data['type_id'], + 'name' => $result['name'] ?? '', + 'card_text' => $result['card_text'] ?? ($result['lore_text'] ?? ''), + 'card_data' => $result['card_data'] ?? [], + ]); + + Notification::make() + ->success() + ->title('AI Suggestion Applied') + ->body('Review the generated fields and save when ready.') + ->send(); + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + } + }), + + Actions\Action::make('rerollAbility') + ->label('Re-roll Ability') + ->icon('heroicon-o-arrow-path') + ->color('info') + ->visible(fn () => auth()->user()?->supervisor === true) + ->form([ + Forms\Components\Select::make('tone') + ->label('Tone') + ->options([ + 'Aggressive' => 'Aggressive', + 'Defensive' => 'Defensive', + 'Support' => 'Support', + 'Balanced' => 'Balanced', + ]) + ->required() + ->default('Balanced'), + ]) + ->action(function (array $data) { + try { + $result = app(AbilityRerollService::class)->reroll( + cardId: $this->record->id, + tone: $data['tone'] + ); + + $currentState = $this->form->getState(); + + $this->form->fill(array_merge($currentState, [ + 'card_text' => $result['card_text'] ?? $currentState['card_text'], + 'card_data' => $result['card_data'] ?? $currentState['card_data'], + ])); + + if ($result['_truncated'] ?? false) { + Notification::make() + ->warning() + ->title('Ability Re-rolled (Truncated)') + ->body('The generated text exceeded the max length and was truncated.') + ->send(); + } else { + Notification::make() + ->success() + ->title('Ability Re-rolled') + ->body('Card ability updated. Save to persist the changes.') + ->send(); + } + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + } + }), + Actions\DeleteAction::make(), ]; } diff --git a/app/Filament/Resources/DeckResource/Pages/EditDeck.php b/app/Filament/Resources/DeckResource/Pages/EditDeck.php index f515c95..00787c6 100644 --- a/app/Filament/Resources/DeckResource/Pages/EditDeck.php +++ b/app/Filament/Resources/DeckResource/Pages/EditDeck.php @@ -1,9 +1,18 @@ label('AI Analytics') + ->icon('heroicon-o-chart-bar') + ->color('success') + ->visible(fn () => auth()->user()?->supervisor === true) + ->slideOver() + ->modalHeading('Deck Synergy Analysis') + ->modalSubmitAction(false) + ->modalCancelActionLabel('Close') + ->modalContent(function () { + try { + $report = app(DeckAnalyticsService::class)->analyze($this->record->id); + return view('filament.modals.deck-analytics', ['report' => $report]); + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + return view('filament.modals.deck-analytics-error', ['error' => $e->getMessage()]); + } + }), + + Actions\Action::make('aiSwapSuggest') + ->label('AI Card Swap') + ->icon('heroicon-o-arrows-right-left') + ->color('warning') + ->visible(fn () => auth()->user()?->supervisor === true) + ->slideOver() + ->modalHeading('AI Card Swap Suggestions') + ->modalSubmitAction(false) + ->modalCancelActionLabel('Close') + ->modalContent(function () { + try { + $suggestions = app(CardSwapService::class)->suggest($this->record->id); + return view('filament.modals.deck-swap', [ + 'suggestions' => $suggestions, + 'deckId' => $this->record->id, + ]); + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + return view('filament.modals.deck-analytics-error', ['error' => $e->getMessage()]); + } + }), + Actions\DeleteAction::make(), ]; } + + /** + * Livewire listener for applying a card swap from the modal view. + */ + public function applyCardSwap(int $removeId, int $replaceWithId): void + { + $deck = $this->record; + $deckData = $deck->deck_data ?? []; + + // Remove old card + $deckData = array_values(array_filter($deckData, fn($item) => (int)($item['card_id'] ?? 0) !== $removeId)); + + // Add new card with quantity 1 if not present + $found = false; + foreach ($deckData as &$item) { + if ((int)($item['card_id'] ?? 0) === $replaceWithId) { + $item['quantity'] = ($item['quantity'] ?? 1) + 1; + $found = true; + break; + } + } + unset($item); + + if (!$found) { + $deckData[] = ['card_id' => $replaceWithId, 'quantity' => 1]; + } + + $deck->deck_data = $deckData; + $deck->save(); + + $removedCard = Card::find($removeId); + $addedCard = Card::find($replaceWithId); + + $this->form->fill(array_merge($this->form->getState(), [ + 'deck_data' => $deckData, + ])); + + Notification::make() + ->success() + ->title('Card Swapped') + ->body("Replaced \"{$removedCard?->name}\" with \"{$addedCard?->name}\".") + ->send(); + } } diff --git a/app/Filament/Resources/DeckResource/Pages/ViewDeck.php b/app/Filament/Resources/DeckResource/Pages/ViewDeck.php index a973ebf..9a09010 100644 --- a/app/Filament/Resources/DeckResource/Pages/ViewDeck.php +++ b/app/Filament/Resources/DeckResource/Pages/ViewDeck.php @@ -6,7 +6,11 @@ namespace App\Filament\Resources\DeckResource\Pages; +use App\Exceptions\AiSuggestionException; use App\Filament\Resources\DeckResource; +use App\Services\Ai\DeckAnalyticsService; +use Filament\Actions; +use Filament\Notifications\Notification; use Filament\Resources\Pages\ViewRecord; class ViewDeck extends ViewRecord @@ -14,4 +18,34 @@ class ViewDeck extends ViewRecord protected static string $resource = DeckResource::class; protected static ?string $title = 'View Deck'; + + protected function getHeaderActions(): array + { + return [ + Actions\EditAction::make(), + + Actions\Action::make('aiAnalytics') + ->label('AI Analytics') + ->icon('heroicon-o-chart-bar') + ->color('success') + ->visible(fn () => auth()->user()?->supervisor === true) + ->slideOver() + ->modalHeading('Deck Synergy Analysis') + ->modalSubmitAction(false) + ->modalCancelActionLabel('Close') + ->modalContent(function () { + try { + $report = app(DeckAnalyticsService::class)->analyze($this->record->id); + return view('filament.modals.deck-analytics', ['report' => $report]); + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + return view('filament.modals.deck-analytics-error', ['error' => $e->getMessage()]); + } + }), + ]; + } } diff --git a/app/Services/Ai/AbilityRerollService.php b/app/Services/Ai/AbilityRerollService.php new file mode 100644 index 0000000..78e9f7e --- /dev/null +++ b/app/Services/Ai/AbilityRerollService.php @@ -0,0 +1,70 @@ +card_data ?? []) + ->map(fn($f) => "- {$f['fieldname']}: {$f['fieldvalue']}") + ->join("\n"); + + $userPrompt = str_replace( + ['{card_name}', '{current_description}', '{tone}', '{max_length}', '{current_card_data}'], + [$card->name, $card->card_text ?? '(nincs leírás)', $tone, $maxLength, $currentCardData ?: '(nincs statisztika)'], + config('ai_prompts.ability_reroll.user_template') + ); + + // Inject max_length into system prompt + $systemPrompt = str_replace('{max_length}', $maxLength, config('ai_prompts.ability_reroll.system')); + + $response = $this->ai->chat( + systemPrompt: $systemPrompt, + userPrompt: $userPrompt, + options: ['json_mode' => true] + ); + + if (!$response->isSuccess) { + throw new AiSuggestionException($response->errorMessage ?? 'AI request failed.'); + } + + $data = $response->toJsonArray(); + + if (!$data || !isset($data['card_text'], $data['card_data'])) { + throw new AiSuggestionException('AI returned an invalid ability structure.'); + } + + // Truncate if over limit + $truncated = false; + if (strlen($data['card_text']) > $maxLength) { + $data['card_text'] = substr($data['card_text'], 0, $maxLength); + $truncated = true; + } + + $data['_truncated'] = $truncated; + + return $data; + } +} diff --git a/app/Services/Ai/CardSuggestionService.php b/app/Services/Ai/CardSuggestionService.php new file mode 100644 index 0000000..205a5f2 --- /dev/null +++ b/app/Services/Ai/CardSuggestionService.php @@ -0,0 +1,70 @@ +where('type_id', $cardTypeId) + ->latest() + ->limit(5) + ->get(['name', 'card_text', 'card_data']); + + $existingCardsContext = ''; + if ($existingCards->isNotEmpty()) { + $lines = $existingCards->map(function ($card) { + $fields = collect($card->card_data ?? [])->map(fn($f) => "{$f['fieldname']}: {$f['fieldvalue']}")->join(', '); + return "- {$card->name}: {$card->card_text}" . ($fields ? " [{$fields}]" : ''); + })->join("\n"); + $existingCardsContext = "\n**Meglévő kártyák ebben a típusban (stílushoz)**:\n{$lines}"; + } + + $userPrompt = str_replace( + ['{game_name}', '{card_type_name}', '{generation_goal}', '{existing_cards_context}'], + [$game->name, $cardType->name, $goal ?: 'Kiegyensúlyozott, általános kártya', $existingCardsContext], + config('ai_prompts.card_suggestion.user_template') + ); + + $response = $this->ai->chat( + systemPrompt: config('ai_prompts.card_suggestion.system'), + userPrompt: $userPrompt, + options: ['json_mode' => true] + ); + + if (!$response->isSuccess) { + throw new AiSuggestionException($response->errorMessage ?? 'AI request failed.'); + } + + $data = $response->toJsonArray(); + + if (!$data || !isset($data['name'], $data['card_text'], $data['card_data'])) { + throw new AiSuggestionException('AI returned an invalid card structure.'); + } + + return $data; + } +} diff --git a/app/Services/Ai/CardSwapService.php b/app/Services/Ai/CardSwapService.php new file mode 100644 index 0000000..0b7d1ba --- /dev/null +++ b/app/Services/Ai/CardSwapService.php @@ -0,0 +1,111 @@ +find($deckId); + + if (!$deck) { + throw new AiSuggestionException('Deck not found.'); + } + + $deckData = $deck->deck_data ?? []; + + if (empty($deckData)) { + throw new AiSuggestionException('The deck has no cards.'); + } + + $cardIds = collect($deckData)->pluck('card_id')->filter()->unique()->values()->toArray(); + $deckCards = Card::whereIn('id', $cardIds)->get(['id', 'name', 'card_text', 'card_data']); + + // Load alternative cards from same game + $alternatives = Card::where('game_id', $deck->game_id) + ->whereNotIn('id', $cardIds) + ->get(['id', 'name', 'card_text', 'card_data']); + + if ($alternatives->isEmpty()) { + throw new AiSuggestionException('No alternative cards available in this game for swapping.'); + } + + $deckList = collect($deckData)->map(function ($item) use ($deckCards) { + $card = $deckCards->firstWhere('id', $item['card_id']); + if (!$card) return null; + $qty = $item['quantity'] ?? 1; + $fields = collect($card->card_data ?? [])->map(fn($f) => "{$f['fieldname']}: {$f['fieldvalue']}")->join(', '); + return "- [{$qty}x] {$card->name}: {$card->card_text}" . ($fields ? " [{$fields}]" : ''); + })->filter()->join("\n"); + + $alternativePool = $alternatives->map(function ($card) { + $fields = collect($card->card_data ?? [])->map(fn($f) => "{$f['fieldname']}: {$f['fieldvalue']}")->join(', '); + return "- {$card->name}: {$card->card_text}" . ($fields ? " [{$fields}]" : ''); + })->join("\n"); + + $userPrompt = str_replace( + ['{deck_list}', '{alternative_pool}'], + [$deckList, $alternativePool], + config('ai_prompts.card_swap.user_template') + ); + + $response = $this->ai->chat( + systemPrompt: config('ai_prompts.card_swap.system'), + userPrompt: $userPrompt, + options: ['json_mode' => true] + ); + + if (!$response->isSuccess) { + throw new AiSuggestionException($response->errorMessage ?? 'AI request failed.'); + } + + $raw = $response->toJsonArray(); + + if (!is_array($raw) || empty($raw)) { + throw new AiSuggestionException('AI returned no swap suggestions.'); + } + + // Enrich each suggestion with card IDs for UI use + $suggestions = []; + foreach ($raw as $item) { + if (!isset($item['remove_name'], $item['replace_with_name'], $item['reason'])) { + continue; + } + + $removeCard = $deckCards->first(fn($c) => strcasecmp($c->name, $item['remove_name']) === 0); + $replaceCard = $alternatives->first(fn($c) => strcasecmp($c->name, $item['replace_with_name']) === 0); + + if (!$removeCard || !$replaceCard) { + continue; // skip invalid suggestions + } + + $suggestions[] = [ + 'remove_id' => $removeCard->id, + 'remove_name' => $removeCard->name, + 'replace_with_id' => $replaceCard->id, + 'replace_with_name'=> $replaceCard->name, + 'reason' => $item['reason'], + ]; + } + + if (empty($suggestions)) { + throw new AiSuggestionException('AI suggestions could not be matched to existing cards.'); + } + + return $suggestions; + } +} diff --git a/app/Services/Ai/DeckAnalyticsService.php b/app/Services/Ai/DeckAnalyticsService.php new file mode 100644 index 0000000..654e61a --- /dev/null +++ b/app/Services/Ai/DeckAnalyticsService.php @@ -0,0 +1,91 @@ +find($deckId); + + if (!$deck) { + throw new AiSuggestionException('Deck not found.'); + } + + $deckData = $deck->deck_data ?? []; + + if (empty($deckData)) { + throw new AiSuggestionException('The deck has no cards to analyze.'); + } + + // Resolve all card IDs in the deck + $cardIds = collect($deckData)->pluck('card_id')->filter()->unique()->values()->toArray(); + $cards = Card::whereIn('id', $cardIds)->get(['id', 'name', 'card_text', 'card_data']); + + if ($cards->isEmpty()) { + throw new AiSuggestionException('No valid cards found in the deck.'); + } + + // Build deck list string + $deckList = collect($deckData)->map(function ($item) use ($cards) { + $card = $cards->firstWhere('id', $item['card_id']); + if (!$card) return null; + $qty = $item['quantity'] ?? 1; + $fields = collect($card->card_data ?? [])->map(fn($f) => "{$f['fieldname']}: {$f['fieldvalue']}")->join(', '); + return "- [{$qty}x] {$card->name}: {$card->card_text}" . ($fields ? " [{$fields}]" : ''); + })->filter()->join("\n"); + + // Load top-10 alternatives from same game, not in deck + $alternatives = Card::where('game_id', $deck->game_id) + ->whereNotIn('id', $cardIds) + ->get(['id', 'name', 'card_text', 'card_data']) + ->sortByDesc(fn($c) => count($c->card_data ?? [])) + ->take(10); + + $alternativePool = $alternatives->map(function ($card) { + $fields = collect($card->card_data ?? [])->map(fn($f) => "{$f['fieldname']}: {$f['fieldvalue']}")->join(', '); + return "- {$card->name}: {$card->card_text}" . ($fields ? " [{$fields}]" : ''); + })->join("\n") ?: '(Nincs elérhető alternatív kártya)'; + + // Game rules summary + $gameRules = "Játék neve: {$deck->game->name}"; + + $userPrompt = str_replace( + ['{game_rules}', '{deck_list}', '{alternative_pool}'], + [$gameRules, $deckList, $alternativePool], + config('ai_prompts.deck_analytics.user_template') + ); + + $response = $this->ai->chat( + systemPrompt: config('ai_prompts.deck_analytics.system'), + userPrompt: $userPrompt, + options: ['json_mode' => true] + ); + + if (!$response->isSuccess) { + throw new AiSuggestionException($response->errorMessage ?? 'AI request failed.'); + } + + $data = $response->toJsonArray(); + + if (!$data || !isset($data['overall_score'], $data['synergy_report'])) { + throw new AiSuggestionException('AI returned an invalid analytics structure.'); + } + + return $data; + } +} diff --git a/config/ai.php b/config/ai.php index 0251611..7a8f9c0 100644 --- a/config/ai.php +++ b/config/ai.php @@ -92,6 +92,13 @@ ], + /* + |-------------------------------------------------------------------------- + | Card Suggestion Settings + |-------------------------------------------------------------------------- + */ + 'ability_max_length' => env('AI_ABILITY_MAX_LENGTH', 500), + /* |-------------------------------------------------------------------------- | Logging diff --git a/config/ai_prompts.php b/config/ai_prompts.php index 09f92f1..a44a45b 100644 --- a/config/ai_prompts.php +++ b/config/ai_prompts.php @@ -68,6 +68,204 @@ TEMPLATE, ], + /* + |-------------------------------------------------------------------------- + | Card Suggestion Prompt + |-------------------------------------------------------------------------- + | + | Used by CardSuggestionService to generate a full card from game context. + | + */ + 'card_suggestion' => [ + 'version' => '1.0.0', + + 'system' => <<<'PROMPT' +Te egy senior TCG (Trading Card Game) tervező és matematikai egyensúly-szakértő vagy. A feladatod új kártyák generálása a Cards Forge ökoszisztémába a megadott játék és kártyatípus paraméterek alapján. + +## Generálási Szabályok + +**Konzisztencia**: Tartsd meg a játék stílusát és témáját. +**Egyensúly**: Az értékek (cost, power, toughness) legyenek arányosak. Alacsony cost = közepes statisztikák. +**Stílus**: A "lore_text" legyen rövid, hangulatos, max 120 karakter. +**card_data**: Minden statisztika [{fieldname, fieldvalue}] formátumban, max 8 mező. + +## Kötelező JSON Kimenet + +A válaszod kizárólag egy valid JSON objektum lehet, markdown blokkok nélkül: + +{ + "name": "Kártya neve", + "card_text": "Képesség leírása, max 300 karakter", + "lore_text": "Rövid hangulati szöveg, max 120 karakter", + "rarity": "Common|Uncommon|Rare|Legendary", + "card_data": [ + {"fieldname": "Cost", "fieldvalue": "3"}, + {"fieldname": "Power", "fieldvalue": "4"}, + {"fieldname": "Toughness", "fieldvalue": "2"} + ], + "ai_logic_note": "Rövid tervezői megjegyzés" +} +PROMPT, + + 'user_template' => <<<'TEMPLATE' +Generálj egy új kártyát a következő paraméterekkel: + +**Játék**: {game_name} +**Kártya típus**: {card_type_name} +**Cél / Generálási irány**: {generation_goal} +{existing_cards_context} +TEMPLATE, + ], + + /* + |-------------------------------------------------------------------------- + | Ability Re-roll Prompt + |-------------------------------------------------------------------------- + | + | Used by AbilityRerollService to regenerate card_text and card_data with tone. + | + */ + 'ability_reroll' => [ + 'version' => '1.0.0', + + 'system' => <<<'PROMPT' +Te egy TCG képesség-tervező vagy. A feladatod egy meglévő kártya képességeinek újragenerálása a megadott hangnem (Tone) alapján, az eredeti kártya kontextusának megtartásával. + +## Szabályok + +**Tone**: Strictly follow the requested tone — Aggressive means attack/damage focus, Defensive means protection/shield focus, Support means buff/heal others, Balanced means mixed. +**Hossz**: A "card_text" max {max_length} karakter lehet. +**card_data**: Tartsd meg a meglévő fieldname-eket, de módosíthatod a fieldvalue-kat. + +## Kötelező JSON Kimenet + +A válaszod kizárólag valid JSON lehet: + +{ + "card_text": "Újragenerált képesség leírás", + "card_data": [ + {"fieldname": "fieldname1", "fieldvalue": "new_value"} + ], + "ai_logic_note": "Miért ezeket az értékeket választottam" +} +PROMPT, + + 'user_template' => <<<'TEMPLATE' +Generáld újra a következő kártya képességeit: + +**Kártya neve**: {card_name} +**Jelenlegi leírás**: {current_description} +**Kért hangnem (Tone)**: {tone} +**Max szöveg hossz**: {max_length} karakter + +**Jelenlegi statisztikák**: +{current_card_data} +TEMPLATE, + ], + + /* + |-------------------------------------------------------------------------- + | Deck Analytics Prompt + |-------------------------------------------------------------------------- + | + | Used by DeckAnalyticsService for full deck synergy analysis. + | + */ + 'deck_analytics' => [ + 'version' => '1.0.0', + + 'system' => <<<'PROMPT' +Te egy Master TCG Strategist és Data Analyst vagy. Specialitásod a pakli-optimalizálás, a meta-elemzés és a matematikai valószínűségszámítás. Feladatod a Cards Forge rendszerben létrehozott paklik mélyelemzése, a szinergiák feltárása és a gyenge pontok azonosítása. + +## Elemzési Szempontok + +- **Szinergia Index**: Milyen mértékben támogatják egymást a kártyák képességei? Vannak-e "dead card"-ok? +- **Erőforrás Görbe (Cost Curve)**: Mennyire egyenletes a pakli költségeloszlása? +- **Taktikai Diverzitás**: Rendelkezik-e a pakli válaszokkal különböző fenyegetésekre? +- **Mobilitás**: Ha figurákat tartalmaz, mennyire hatékony a mozgásuk? + +## Kötelező JSON Kimenet + +A válaszod kizárólag valid JSON lehet, az alábbi struktúrában: + +{ + "overall_score": 75, + "archetype": "Control", + "synergy_report": { + "rating": "Medium", + "key_combos": ["Kártya A + Kártya B: indoklás"], + "anti_synergies": ["Kártya C rontja Kártya D esélyeit, mert..."] + }, + "curve_analysis": "Szöveges értékelés a költségekről", + "weaknesses": ["Kevés az alacsony költségű védekező egység."], + "optimization_suggestions": [ + { + "remove": "Kártya neve", + "replace_with": "Alternatív kártya neve", + "reason": "Indoklás" + } + ], + "win_rate_prediction": "65%" +} +PROMPT, + + 'user_template' => <<<'TEMPLATE' +Elemezd a következő paklit: + +**Játék szabályai**: {game_rules} + +**Pakli tartalma**: +{deck_list} + +**Elérhető alternatív kártyák (top 10)**: +{alternative_pool} +TEMPLATE, + ], + + /* + |-------------------------------------------------------------------------- + | Card Swap Prompt + |-------------------------------------------------------------------------- + | + | Used by CardSwapService for targeted card swap suggestions. + | + */ + 'card_swap' => [ + 'version' => '1.0.0', + + 'system' => <<<'PROMPT' +Te egy TCG pakli-optimalizáló vagy. Feladatod konkrét kártyacsere-javaslatokat tenni egy paklihoz az elérhető alternatívák alapján. + +## Szabályok + +- Csak az "Elérhető alternatív kártyák" listájából javasolj cserekártyákat. +- Minden javaslathoz adj konkrét indoklást. +- Maximum 5 javaslatot adj. + +## Kötelező JSON Kimenet + +A válaszod kizárólag valid JSON tömb lehet: + +[ + { + "remove_name": "Kiveendő kártya neve", + "replace_with_name": "Behelyezendő kártya neve", + "reason": "Miért jobb ez a csere" + } +] +PROMPT, + + 'user_template' => <<<'TEMPLATE' +Javasolj kártyacseréket a következő paklihoz: + +**Pakli tartalma**: +{deck_list} + +**Elérhető alternatív kártyák**: +{alternative_pool} +TEMPLATE, + ], + /* |-------------------------------------------------------------------------- | Connection Test Prompt diff --git a/public/build/assets/app-C1D18bxO.css b/public/build/assets/app-C1D18bxO.css new file mode 100644 index 0000000..f23cd3b --- /dev/null +++ b/public/build/assets/app-C1D18bxO.css @@ -0,0 +1 @@ +/*! tailwindcss v4.1.13 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:"Instrument Sans",ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-600:oklch(51.1% .262 276.966);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--leading-loose:2;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-4{inset:calc(var(--spacing)*4)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.start-0{inset-inline-start:calc(var(--spacing)*0)}.start-full{inset-inline-start:100%}.end-0{inset-inline-end:calc(var(--spacing)*0)}.end-4{inset-inline-end:calc(var(--spacing)*4)}.end-6{inset-inline-end:calc(var(--spacing)*6)}.-top-1\/2{top:-50%}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-3{top:calc(var(--spacing)*3)}.top-4{top:calc(var(--spacing)*4)}.top-6{top:calc(var(--spacing)*6)}.top-10{top:calc(var(--spacing)*10)}.top-20{top:calc(var(--spacing)*20)}.top-24{top:calc(var(--spacing)*24)}.right-0{right:calc(var(--spacing)*0)}.right-1\.5{right:calc(var(--spacing)*1.5)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-10{right:calc(var(--spacing)*10)}.right-20{right:calc(var(--spacing)*20)}.-bottom-1\/2{bottom:-50%}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1\/2{bottom:50%}.bottom-10{bottom:calc(var(--spacing)*10)}.bottom-20{bottom:calc(var(--spacing)*20)}.left-1\.5{left:calc(var(--spacing)*1.5)}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-10{left:calc(var(--spacing)*10)}.left-20{left:calc(var(--spacing)*20)}.left-full{left:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.col-\[--col-span-default\]{grid-column:--col-span-default}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:--col-start-default}.row-start-2{grid-row-start:2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-m-0\.5{margin:calc(var(--spacing)*-.5)}.-m-1{margin:calc(var(--spacing)*-1)}.-m-1\.5{margin:calc(var(--spacing)*-1.5)}.-m-2{margin:calc(var(--spacing)*-2)}.-m-2\.5{margin:calc(var(--spacing)*-2.5)}.-m-3{margin:calc(var(--spacing)*-3)}.-m-3\.5{margin:calc(var(--spacing)*-3.5)}.-mx-2{margin-inline:calc(var(--spacing)*-2)}.-mx-4{margin-inline:calc(var(--spacing)*-4)}.-mx-6{margin-inline:calc(var(--spacing)*-6)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-auto{margin-inline:auto}.-my-1{margin-block:calc(var(--spacing)*-1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-4{margin-block:calc(var(--spacing)*4)}.my-16{margin-block:calc(var(--spacing)*16)}.my-auto{margin-block:auto}.-ms-0\.5{margin-inline-start:calc(var(--spacing)*-.5)}.-ms-1{margin-inline-start:calc(var(--spacing)*-1)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-6{margin-inline-start:calc(var(--spacing)*6)}.ms-auto{margin-inline-start:auto}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1{margin-inline-end:calc(var(--spacing)*1)}.me-4{margin-inline-end:calc(var(--spacing)*4)}.me-6{margin-inline-end:calc(var(--spacing)*6)}.-mt-6{margin-top:calc(var(--spacing)*-6)}.-mt-7{margin-top:calc(var(--spacing)*-7)}.-mt-px{margin-top:-1px}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-20{margin-top:calc(var(--spacing)*20)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.-mb-4{margin-bottom:calc(var(--spacing)*-4)}.-mb-6{margin-bottom:calc(var(--spacing)*-6)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-px{margin-left:-1px}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-\[--line-clamp\]{-webkit-line-clamp:--line-clamp;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.aspect-\[3\/4\]{aspect-ratio:3/4}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-32{height:calc(var(--spacing)*32)}.h-\[100dvh\]{height:100dvh}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:calc(var(--spacing)*96)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/2{width:50%}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.w-screen{width:100vw}.\!max-w-2xl{max-width:var(--container-2xl)!important}.\!max-w-3xl{max-width:var(--container-3xl)!important}.\!max-w-4xl{max-width:var(--container-4xl)!important}.\!max-w-5xl{max-width:var(--container-5xl)!important}.\!max-w-6xl{max-width:var(--container-6xl)!important}.\!max-w-7xl{max-width:var(--container-7xl)!important}.\!max-w-\[14rem\]{max-width:14rem!important}.\!max-w-lg{max-width:var(--container-lg)!important}.\!max-w-md{max-width:var(--container-md)!important}.\!max-w-sm{max-width:var(--container-sm)!important}.\!max-w-xl{max-width:var(--container-xl)!important}.\!max-w-xs{max-width:var(--container-xs)!important}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-fit{max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-max{max-width:max-content}.max-w-md{max-width:var(--container-md)}.max-w-min{max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:var(--breakpoint-2xl)}.max-w-screen-lg{max-width:var(--breakpoint-lg)}.max-w-screen-md{max-width:var(--breakpoint-md)}.max-w-screen-sm{max-width:var(--breakpoint-sm)}.max-w-screen-xl{max-width:var(--breakpoint-xl)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-48{min-width:calc(var(--spacing)*48)}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\/4{--tw-translate-x: -25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-12{--tw-translate-x:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-12{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-3\/4{--tw-translate-y: -75% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-12{--tw-translate-y:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-12{--tw-translate-y:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.-rotate-180{rotate:-180deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)!important}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{columns:--cols-default}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:--cols-default}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\,minmax\(theme\(spacing\.7\)\,1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\,minmax\(0\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-center{justify-items:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-2{column-gap:calc(var(--spacing)*2)}.gap-x-2\.5{column-gap:calc(var(--spacing)*2.5)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-x-5{column-gap:calc(var(--spacing)*5)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.-space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-3)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-4)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-5)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-6)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-7>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-7)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-7)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-8)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.gap-y-3{row-gap:calc(var(--spacing)*3)}.gap-y-4{row-gap:calc(var(--spacing)*4)}.gap-y-6{row-gap:calc(var(--spacing)*6)}.gap-y-7{row-gap:calc(var(--spacing)*7)}.gap-y-8{row-gap:calc(var(--spacing)*8)}.gap-y-px{row-gap:1px}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-100>:not(:last-child)){border-color:var(--color-gray-100)}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-center{justify-self:center}.justify-self-end{justify-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-clip{overflow-x:clip}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-b-xl{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-x-\[0\.5px\]{border-inline-style:var(--tw-border-style);border-inline-width:.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.\!border-t-0{border-top-style:var(--tw-border-style)!important;border-top-width:0!important}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-none{--tw-border-style:none;border-style:none}.border-blue-200{border-color:var(--color-blue-200)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-400{border-color:var(--color-gray-400)}.border-gray-600{border-color:var(--color-gray-600)}.border-red-200{border-color:var(--color-red-200)}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-700\/50{border-color:#31415880}@supports (color:color-mix(in lab,red,red)){.border-slate-700\/50{border-color:color-mix(in oklab,var(--color-slate-700)50%,transparent)}}.border-transparent{border-color:#0000}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-600{background-color:var(--color-amber-600)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500\/75{background-color:#6a7282bf}@supports (color:color-mix(in lab,red,red)){.bg-gray-500\/75{background-color:color-mix(in oklab,var(--color-gray-500)75%,transparent)}}.bg-gray-900\/90{background-color:#101828e6}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/90{background-color:color-mix(in oklab,var(--color-gray-900)90%,transparent)}}.bg-gray-950\/50{background-color:#03071280}@supports (color:color-mix(in lab,red,red)){.bg-gray-950\/50{background-color:color-mix(in oklab,var(--color-gray-950)50%,transparent)}}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-600{background-color:var(--color-green-600)}.bg-green-600\/80{background-color:#00a544cc}@supports (color:color-mix(in lab,red,red)){.bg-green-600\/80{background-color:color-mix(in oklab,var(--color-green-600)80%,transparent)}}.bg-green-600\/90{background-color:#00a544e6}@supports (color:color-mix(in lab,red,red)){.bg-green-600\/90{background-color:color-mix(in oklab,var(--color-green-600)90%,transparent)}}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-600{background-color:var(--color-purple-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-slate-600{background-color:var(--color-slate-600)}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800\/30{background-color:#1d293d4d}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/30{background-color:color-mix(in oklab,var(--color-slate-800)30%,transparent)}}.bg-slate-800\/50{background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/50{background-color:color-mix(in oklab,var(--color-slate-800)50%,transparent)}}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/50{background-color:#0f172b80}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/50{background-color:color-mix(in oklab,var(--color-slate-900)50%,transparent)}}.bg-slate-900\/80{background-color:#0f172bcc}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/80{background-color:color-mix(in oklab,var(--color-slate-900)80%,transparent)}}.bg-slate-900\/90{background-color:#0f172be6}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/90{background-color:color-mix(in oklab,var(--color-slate-900)90%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/0{background-color:#0000}@supports (color:color-mix(in lab,red,red)){.bg-white\/0{background-color:color-mix(in oklab,var(--color-white)0%,transparent)}}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.\!bg-none{background-image:none!important}.from-amber-500{--tw-gradient-from:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-500{--tw-gradient-from:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-600{--tw-gradient-from:var(--color-red-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-600{--tw-gradient-from:var(--color-slate-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-700\/50{--tw-gradient-from:#31415880}@supports (color:color-mix(in lab,red,red)){.from-slate-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-slate-700)50%,transparent)}}.from-slate-700\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-900{--tw-gradient-from:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-slate-800{--tw-gradient-via:var(--color-slate-800);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-amber-500{--tw-gradient-to:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-amber-700{--tw-gradient-to:var(--color-amber-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-orange-600{--tw-gradient-to:var(--color-orange-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-800{--tw-gradient-to:var(--color-red-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-800{--tw-gradient-to:var(--color-slate-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-800\/50{--tw-gradient-to:#1d293d80}@supports (color:color-mix(in lab,red,red)){.to-slate-800\/50{--tw-gradient-to:color-mix(in oklab,var(--color-slate-800)50%,transparent)}}.to-slate-800\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-900{--tw-gradient-to:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-cover{background-size:cover}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-center{background-position:50%}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-center{object-position:center}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\.5{padding-inline:calc(var(--spacing)*3.5)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.py-20{padding-block:calc(var(--spacing)*20)}.ps-0{padding-inline-start:calc(var(--spacing)*0)}.ps-1{padding-inline-start:calc(var(--spacing)*1)}.ps-2{padding-inline-start:calc(var(--spacing)*2)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-4{padding-inline-start:calc(var(--spacing)*4)}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pe-0{padding-inline-end:calc(var(--spacing)*0)}.pe-1{padding-inline-end:calc(var(--spacing)*1)}.pe-2{padding-inline-end:calc(var(--spacing)*2)}.pe-3{padding-inline-end:calc(var(--spacing)*3)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pe-6{padding-inline-end:calc(var(--spacing)*6)}.pe-8{padding-inline-end:calc(var(--spacing)*8)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pl-6{padding-left:calc(var(--spacing)*6)}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-800{color:var(--color-amber-800)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-100{color:var(--color-gray-100)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-700\/50{color:#36415380}@supports (color:color-mix(in lab,red,red)){.text-gray-700\/50{color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-gray-950{color:var(--color-gray-950)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-800{color:var(--color-green-800)}.text-orange-500{color:var(--color-orange-500)}.text-purple-500{color:var(--color-purple-500)}.text-purple-800{color:var(--color-purple-800)}.text-red-100{color:var(--color-red-100)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.placeholder-slate-400::placeholder{color:var(--color-slate-400)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-gray-100{--tw-ring-color:var(--color-gray-100)}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-600\/10{--tw-ring-color:#4a55651a}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)10%,transparent)}}.ring-gray-950\/5{--tw-ring-color:#0307120d}@supports (color:color-mix(in lab,red,red)){.ring-gray-950\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)5%,transparent)}}.ring-gray-950\/10{--tw-ring-color:#0307121a}@supports (color:color-mix(in lab,red,red)){.ring-gray-950\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)10%,transparent)}}.ring-white{--tw-ring-color:var(--color-white)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-100{transition-delay:.1s}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.\[program\:cards-api-queue-worker\]{program:cards-api-queue-worker}.ring-inset{--tw-ring-inset:inset}.group-first\/item\:rounded-s-lg:is(:where(.group\/item):first-child *){border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.group-last\/item\:rounded-e-lg:is(:where(.group\/item):last-child *){border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}@media (hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-red-400:is(:where(.group):hover *){color:var(--color-red-400)}.group-hover\:opacity-90:is(:where(.group):hover *){opacity:.9}.group-hover\/button\:text-gray-500:is(:where(.group\/button):hover *){color:var(--color-gray-500)}.group-hover\/item\:underline:is(:where(.group\/item):hover *),.group-hover\/link\:underline:is(:where(.group\/link):hover *){text-decoration-line:underline}}.group-focus-visible\:text-gray-500:is(:where(.group):focus-visible *){color:var(--color-gray-500)}.group-focus-visible\/item\:underline:is(:where(.group\/item):focus-visible *),.group-focus-visible\/link\:underline:is(:where(.group\/link):focus-visible *){text-decoration-line:underline}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.before\:start-0:before{content:var(--tw-content);inset-inline-start:calc(var(--spacing)*0)}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0\.5:before{content:var(--tw-content);width:calc(var(--spacing)*.5)}.first\:border-s-0:first-child{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\:border-e-0:last-child{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.first-of-type\:ps-1:first-of-type{padding-inline-start:calc(var(--spacing)*1)}.last-of-type\:pe-1:last-of-type{padding-inline-end:calc(var(--spacing)*1)}.checked\:ring-0:checked{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:transform:hover{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.hover\:border-red-500:hover{border-color:var(--color-red-500)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-400\/10:hover{background-color:#99a1af1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-400\/10:hover{background-color:color-mix(in oklab,var(--color-gray-400)10%,transparent)}}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-slate-600:hover{background-color:var(--color-slate-600)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-700\/75:hover{color:#364153bf}@supports (color:color-mix(in lab,red,red)){.hover\:text-gray-700\/75:hover{color:color-mix(in oklab,var(--color-gray-700)75%,transparent)}}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-slate-200:hover{color:var(--color-slate-200)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-red-500:focus{border-color:var(--color-red-500)}.focus\:ring:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:bg-gray-50:focus-visible{background-color:var(--color-gray-50)}.focus-visible\:bg-gray-100:focus-visible{background-color:var(--color-gray-100)}.focus-visible\:text-gray-500:focus-visible{color:var(--color-gray-500)}.focus-visible\:text-gray-700\/75:focus-visible{color:#364153bf}@supports (color:color-mix(in lab,red,red)){.focus-visible\:text-gray-700\/75:focus-visible{color:color-mix(in oklab,var(--color-gray-700)75%,transparent)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:#99a1af66}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)40%,transparent)}}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{background-color:var(--color-gray-50)}.disabled\:text-gray-50:disabled{color:var(--color-gray-50)}.disabled\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:oklch(55.1% .027 264.364)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:oklch(70.7% .022 261.325)}.disabled\:checked\:bg-gray-400:disabled:checked{background-color:var(--color-gray-400)}.disabled\:checked\:text-gray-400:disabled:checked{color:var(--color-gray-400)}@media (min-width:40rem){.sm\:col-\[--col-span-sm\]{grid-column:--col-span-sm}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:--col-start-sm}.sm\:-mx-6{margin-inline:calc(var(--spacing)*-6)}.sm\:mt-7{margin-top:calc(var(--spacing)*7)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:inline-grid{display:inline-grid}.sm\:table-cell{display:table-cell}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:flex-1{flex:1}.sm\:columns-\[--cols-sm\]{columns:--cols-sm}.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-\[--cols-sm\]{grid-template-columns:--cols-sm}.sm\:grid-cols-\[repeat\(auto-fit\,minmax\(0\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-start{justify-content:flex-start}.sm\:gap-x-4{column-gap:calc(var(--spacing)*4)}.sm\:rounded-xl{border-radius:var(--radius-xl)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-12{padding-inline:calc(var(--spacing)*12)}.sm\:py-1\.5{padding-block:calc(var(--spacing)*1.5)}.sm\:ps-3{padding-inline-start:calc(var(--spacing)*3)}.sm\:ps-6{padding-inline-start:calc(var(--spacing)*6)}.sm\:pe-3{padding-inline-end:calc(var(--spacing)*3)}.sm\:pe-6{padding-inline-end:calc(var(--spacing)*6)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.sm\:text-left{text-align:left}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:calc(var(--spacing)*3)}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:calc(var(--spacing)*3)}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}@media (min-width:48rem){.md\:bottom-4{bottom:calc(var(--spacing)*4)}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:--col-span-md}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:--col-start-md}.md\:block{display:block}.md\:hidden{display:none}.md\:inline{display:inline}.md\:inline-grid{display:inline-grid}.md\:table-cell{display:table-cell}.md\:columns-\[--cols-md\]{columns:--cols-md}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:--cols-md}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:items-start{align-items:flex-start}.md\:justify-end{justify-content:flex-end}.md\:rounded-xl{border-radius:var(--radius-xl)}.md\:px-6{padding-inline:calc(var(--spacing)*6)}.md\:ps-3{padding-inline-start:calc(var(--spacing)*3)}.md\:pe-6{padding-inline-end:calc(var(--spacing)*6)}.md\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media (min-width:64rem){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:--col-span-lg}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-start-\[--col-start-lg\]{grid-column-start:--col-start-lg}.lg\:mb-0{margin-bottom:calc(var(--spacing)*0)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-grid{display:inline-grid}.lg\:table-cell{display:table-cell}.lg\:-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.lg\:translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.lg\:columns-\[--cols-lg\]{columns:--cols-lg}.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-\[--cols-lg\]{grid-template-columns:--cols-lg}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:items-end{align-items:flex-end}.lg\:items-start{align-items:flex-start}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:bg-transparent{background-color:#0000}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pe-8{padding-inline-end:calc(var(--spacing)*8)}.lg\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}}@media (min-width:80rem){.xl\:col-\[--col-span-xl\]{grid-column:--col-span-xl}.xl\:col-start-\[--col-start-xl\]{grid-column-start:--col-start-xl}.xl\:hidden{display:none}.xl\:inline-grid{display:inline-grid}.xl\:table-cell{display:table-cell}.xl\:columns-\[--cols-xl\]{columns:--cols-xl}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:--cols-xl}.xl\:flex-row{flex-direction:row}.xl\:items-center{align-items:center}.xl\:items-end{align-items:flex-end}.xl\:items-start{align-items:flex-start}}@media (min-width:96rem){.\32xl\:col-\[--col-span-2xl\]{grid-column:--col-span-2xl}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:--col-start-2xl}.\32xl\:hidden{display:none}.\32xl\:inline-grid{display:inline-grid}.\32xl\:table-cell{display:table-cell}.\32xl\:columns-\[--cols-2xl\]{columns:--cols-2xl}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:--cols-2xl}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-center{align-items:center}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-start{align-items:flex-start}}.ltr\:hidden:where(:dir(ltr),[dir=ltr],[dir=ltr] *),.rtl\:hidden:where(:dir(rtl),[dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:-translate-x-5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-5);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:-translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-1\/2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-1\/4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x: 25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}@media (min-width:64rem){.rtl\:lg\:-translate-x-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:lg\:translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}}@media (prefers-color-scheme:dark){.dark\:flex{display:flex}.dark\:hidden{display:none}:where(.dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}:where(.dark\:divide-white\/5>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){:where(.dark\:divide-white\/5>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:where(.dark\:divide-white\/10>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){:where(.dark\:divide-white\/10>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-600{border-color:var(--color-gray-600)}.dark\:border-gray-700{border-color:var(--color-gray-700)}.dark\:border-gray-800{border-color:var(--color-gray-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/5{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:border-t-white\/10{border-top-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-t-white\/10{border-top-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:bg-amber-900\/30{background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/30{background-color:color-mix(in oklab,var(--color-amber-900)30%,transparent)}}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark\:bg-gray-400\/10{background-color:#99a1af1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-400\/10{background-color:color-mix(in oklab,var(--color-gray-400)10%,transparent)}}.dark\:bg-gray-500{background-color:var(--color-gray-500)}.dark\:bg-gray-500\/20{background-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-500\/20{background-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/75{background-color:#101828bf}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-900\/75{background-color:color-mix(in oklab,var(--color-gray-900)75%,transparent)}}.dark\:bg-gray-950{background-color:var(--color-gray-950)}.dark\:bg-gray-950\/75{background-color:#030712bf}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-950\/75{background-color:color-mix(in oklab,var(--color-gray-950)75%,transparent)}}.dark\:bg-green-900{background-color:var(--color-green-900)}.dark\:bg-green-900\/30{background-color:#0d542b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-green-900\/30{background-color:color-mix(in oklab,var(--color-green-900)30%,transparent)}}.dark\:bg-purple-900{background-color:var(--color-purple-900)}.dark\:bg-red-900{background-color:var(--color-red-900)}.dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark\:bg-transparent{background-color:#0000}.dark\:bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark\:text-amber-400{color:var(--color-amber-400)}.dark\:text-blue-100{color:var(--color-blue-100)}.dark\:text-blue-200{color:var(--color-blue-200)}.dark\:text-blue-300{color:var(--color-blue-300)}.dark\:text-blue-400{color:var(--color-blue-400)}.dark\:text-gray-100{color:var(--color-gray-100)}.dark\:text-gray-200{color:var(--color-gray-200)}.dark\:text-gray-300{color:var(--color-gray-300)}.dark\:text-gray-300\/50{color:#d1d5dc80}@supports (color:color-mix(in lab,red,red)){.dark\:text-gray-300\/50{color:color-mix(in oklab,var(--color-gray-300)50%,transparent)}}.dark\:text-gray-400{color:var(--color-gray-400)}.dark\:text-gray-500{color:var(--color-gray-500)}.dark\:text-gray-600{color:var(--color-gray-600)}.dark\:text-gray-700{color:var(--color-gray-700)}.dark\:text-gray-800{color:var(--color-gray-800)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-red-100{color:var(--color-red-100)}.dark\:text-red-200{color:var(--color-red-200)}.dark\:text-red-300{color:var(--color-red-300)}.dark\:text-red-400{color:var(--color-red-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-yellow-200{color:var(--color-yellow-200)}.dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark\:ring-gray-700{--tw-ring-color:var(--color-gray-700)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-gray-900{--tw-ring-color:var(--color-gray-900)}.dark\:ring-white\/10{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:ring-white\/10{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:ring-white\/20{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:ring-white\/20{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}@media (hover:hover){.dark\:group-hover\:text-gray-400:is(:where(.group):hover *),.dark\:group-hover\/button\:text-gray-400:is(:where(.group\/button):hover *){color:var(--color-gray-400)}}.dark\:group-focus-visible\:text-gray-400:is(:where(.group):focus-visible *){color:var(--color-gray-400)}.dark\:placeholder\:text-gray-500::placeholder{color:var(--color-gray-500)}@media (hover:hover){.dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark\:hover\:text-gray-200:hover{color:var(--color-gray-200)}.dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark\:hover\:text-gray-300\/75:hover{color:#d1d5dcbf}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:text-gray-300\/75:hover{color:color-mix(in oklab,var(--color-gray-300)75%,transparent)}}.dark\:hover\:text-gray-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:ring-white\/20:hover{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:ring-white\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}}.dark\:focus\:border-blue-700:focus{border-color:var(--color-blue-700)}.dark\:focus\:border-blue-800:focus{border-color:var(--color-blue-800)}.dark\:focus-visible\:bg-white\/5:focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:bg-white\/5:focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:focus-visible\:text-gray-300\/75:focus-visible{color:#d1d5dcbf}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:text-gray-300\/75:focus-visible{color:color-mix(in oklab,var(--color-gray-300)75%,transparent)}}.dark\:focus-visible\:text-gray-400:focus-visible{color:var(--color-gray-400)}.dark\:focus-visible\:ring-offset-gray-900:focus-visible{--tw-ring-offset-color:var(--color-gray-900)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}.dark\:disabled\:bg-transparent:disabled{background-color:#0000}.dark\:disabled\:text-gray-400:disabled{color:var(--color-gray-400)}.dark\:disabled\:ring-white\/10:disabled{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:disabled\:ring-white\/10:disabled{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled{-webkit-text-fill-color:oklch(70.7% .022 261.325)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled::placeholder{-webkit-text-fill-color:oklch(55.1% .027 264.364)}.dark\:disabled\:checked\:bg-gray-600:disabled:checked{background-color:var(--color-gray-600)}@media (min-width:64rem){.dark\:lg\:bg-transparent{background-color:#0000}}}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:calc(var(--spacing)*0)}.\[\&_optgroup\]\:bg-white optgroup{background-color:var(--color-white)}@media (prefers-color-scheme:dark){.\[\&_optgroup\]\:dark\:bg-gray-900 optgroup{background-color:var(--color-gray-900)}}.\[\&_option\]\:bg-white option{background-color:var(--color-white)}@media (prefers-color-scheme:dark){.\[\&_option\]\:dark\:bg-gray-900 option{background-color:var(--color-gray-900)}}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:not(:has(.fi-ac-action:focus)):focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of.fi-btn)){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,oklch(92.8% .006 264.531));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (prefers-color-scheme:dark){.dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of.fi-btn)){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,oklab(100% 0 5.96046e-8/.2));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of.fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of.fi-btn){border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of.fi-btn){border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:calc(var(--spacing)*.5)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:calc(var(--spacing)*0)}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{color:var(--color-white)}@media (hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[\@media\(hover\:hover\)\]\:duration-75{--tw-duration:75ms;transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-gray-400{background-color:var(--color-gray-400)}input:checked+.\[input\:checked\+\&\]\:text-white{color:var(--color-white)}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){input:checked+.\[input\:checked\+\&\]\:hover\:bg-gray-300:hover{background-color:var(--color-gray-300)}}@media (prefers-color-scheme:dark){input:checked+.dark\:\[input\:checked\+\&\]\:bg-gray-600{background-color:var(--color-gray-600)}@media (hover:hover){input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}}}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:#0307121a}@supports (color:color-mix(in lab,red,red)){input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)10%,transparent)}}@media (prefers-color-scheme:dark){input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}}}.card-hover{transition:all .3s}.card-hover:hover{transform:translateY(-4px);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.card-flip{perspective:1000px}.card-flip-inner{transform-style:preserve-3d;width:100%;height:100%;transition:transform .6s;position:relative}.card-flip:hover .card-flip-inner{transform:rotateY(180deg)}.card-flip .card-front,.card-flip .card-back{backface-visibility:hidden;width:100%;height:100%;position:absolute}.card-flip .card-back{transform:rotateY(180deg)}.gradient-bg{background:linear-gradient(135deg,#1e293b,#334155,#475569)}.card-glow{box-shadow:0 0 20px #ef44444d}.pulse-glow{animation:2s infinite pulse-glow}@keyframes pulse-glow{0%,to{box-shadow:0 0 20px #ef44444d}50%{box-shadow:0 0 30px #ef444480}}@media (max-width:640px){h1{font-size:2.5rem}h2{font-size:1.875rem}p{font-size:1rem}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/public/build/assets/app-cHkKdsAV.css b/public/build/assets/app-cHkKdsAV.css deleted file mode 100644 index 76c007f..0000000 --- a/public/build/assets/app-cHkKdsAV.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.1.13 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:"Instrument Sans",ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-900:oklch(37.8% .077 168.94);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-600:oklch(51.1% .262 276.966);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-900:oklch(41% .159 10.272);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-neutral-950:oklch(14.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--leading-loose:2;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-4{inset:calc(var(--spacing)*4)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.start-0{inset-inline-start:calc(var(--spacing)*0)}.start-full{inset-inline-start:100%}.end-0{inset-inline-end:calc(var(--spacing)*0)}.end-4{inset-inline-end:calc(var(--spacing)*4)}.end-6{inset-inline-end:calc(var(--spacing)*6)}.-top-1{top:calc(var(--spacing)*-1)}.-top-1\/2{top:-50%}.-top-2{top:calc(var(--spacing)*-2)}.-top-3{top:calc(var(--spacing)*-3)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-3{top:calc(var(--spacing)*3)}.top-4{top:calc(var(--spacing)*4)}.top-6{top:calc(var(--spacing)*6)}.top-10{top:calc(var(--spacing)*10)}.top-20{top:calc(var(--spacing)*20)}.top-24{top:calc(var(--spacing)*24)}.top-\[-1px\]{top:-1px}.right-0{right:calc(var(--spacing)*0)}.right-1\.5{right:calc(var(--spacing)*1.5)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-10{right:calc(var(--spacing)*10)}.right-20{right:calc(var(--spacing)*20)}.-bottom-1\/2{bottom:-50%}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1\/2{bottom:50%}.bottom-10{bottom:calc(var(--spacing)*10)}.bottom-20{bottom:calc(var(--spacing)*20)}.left-0{left:calc(var(--spacing)*0)}.left-1\.5{left:calc(var(--spacing)*1.5)}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-10{left:calc(var(--spacing)*10)}.left-20{left:calc(var(--spacing)*20)}.left-full{left:100%}.isolate{isolation:isolate}.-z-10{z-index:-10}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.col-\[--col-span-default\]{grid-column:--col-span-default}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:--col-start-default}.row-start-2{grid-row-start:2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-m-0\.5{margin:calc(var(--spacing)*-.5)}.-m-1{margin:calc(var(--spacing)*-1)}.-m-1\.5{margin:calc(var(--spacing)*-1.5)}.-m-2{margin:calc(var(--spacing)*-2)}.-m-2\.5{margin:calc(var(--spacing)*-2.5)}.-m-3{margin:calc(var(--spacing)*-3)}.-m-3\.5{margin:calc(var(--spacing)*-3.5)}.-mx-2{margin-inline:calc(var(--spacing)*-2)}.-mx-4{margin-inline:calc(var(--spacing)*-4)}.-mx-6{margin-inline:calc(var(--spacing)*-6)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-auto{margin-inline:auto}.-my-1{margin-block:calc(var(--spacing)*-1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-4{margin-block:calc(var(--spacing)*4)}.my-16{margin-block:calc(var(--spacing)*16)}.my-auto{margin-block:auto}.-ms-0\.5{margin-inline-start:calc(var(--spacing)*-.5)}.-ms-1{margin-inline-start:calc(var(--spacing)*-1)}.-ms-2{margin-inline-start:calc(var(--spacing)*-2)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-6{margin-inline-start:calc(var(--spacing)*6)}.ms-auto{margin-inline-start:auto}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1{margin-inline-end:calc(var(--spacing)*1)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-4{margin-inline-end:calc(var(--spacing)*4)}.me-6{margin-inline-end:calc(var(--spacing)*6)}.\!mt-0{margin-top:calc(var(--spacing)*0)!important}.-mt-3{margin-top:calc(var(--spacing)*-3)}.-mt-4{margin-top:calc(var(--spacing)*-4)}.-mt-5{margin-top:calc(var(--spacing)*-5)}.-mt-6{margin-top:calc(var(--spacing)*-6)}.-mt-7{margin-top:calc(var(--spacing)*-7)}.-mt-px{margin-top:-1px}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-20{margin-top:calc(var(--spacing)*20)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-6{margin-right:calc(var(--spacing)*6)}.-mb-4{margin-bottom:calc(var(--spacing)*-4)}.-mb-6{margin-bottom:calc(var(--spacing)*-6)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-px{margin-left:-1px}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-\[--line-clamp\]{-webkit-line-clamp:--line-clamp;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.aspect-\[3\/4\]{aspect-ratio:3/4}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-32{height:calc(var(--spacing)*32)}.h-96{height:calc(var(--spacing)*96)}.h-\[18px\]{height:18px}.h-\[56px\]{height:56px}.h-\[100dvh\]{height:100dvh}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:calc(var(--spacing)*96)}.min-h-\[theme\(spacing\.48\)\]{min-height:12rem}.min-h-dvh{min-height:100dvh}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/2{width:50%}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-72{width:calc(var(--spacing)*72)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[18px\]{width:18px}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.w-screen{width:100vw}.\!max-w-2xl{max-width:var(--container-2xl)!important}.\!max-w-3xl{max-width:var(--container-3xl)!important}.\!max-w-4xl{max-width:var(--container-4xl)!important}.\!max-w-5xl{max-width:var(--container-5xl)!important}.\!max-w-6xl{max-width:var(--container-6xl)!important}.\!max-w-7xl{max-width:var(--container-7xl)!important}.\!max-w-\[14rem\]{max-width:14rem!important}.\!max-w-lg{max-width:var(--container-lg)!important}.\!max-w-md{max-width:var(--container-md)!important}.\!max-w-sm{max-width:var(--container-sm)!important}.\!max-w-xl{max-width:var(--container-xl)!important}.\!max-w-xs{max-width:var(--container-xs)!important}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-fit{max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-max{max-width:max-content}.max-w-md{max-width:var(--container-md)}.max-w-min{max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:var(--breakpoint-2xl)}.max-w-screen-lg{max-width:var(--breakpoint-lg)}.max-w-screen-md{max-width:var(--breakpoint-md)}.max-w-screen-sm{max-width:var(--breakpoint-sm)}.max-w-screen-xl{max-width:var(--breakpoint-xl)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-6{min-width:calc(var(--spacing)*6)}.min-w-48{min-width:calc(var(--spacing)*48)}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.min-w-\[theme\(spacing\.8\)\]{min-width:2rem}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\/4{--tw-translate-x: -25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-12{--tw-translate-x:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-12{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-3\/4{--tw-translate-y: -75% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-12{--tw-translate-y:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-12{--tw-translate-y:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.-rotate-180{rotate:-180deg}.rotate-180{rotate:180deg}.\[transform\:translateZ\(0\)\]{transform:translateZ(0)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)!important}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-not-allowed\!{cursor:not-allowed!important}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.scroll-mt-9{scroll-margin-top:calc(var(--spacing)*9)}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{columns:--cols-default}.break-inside-avoid{break-inside:avoid}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:--cols-default}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\,minmax\(theme\(spacing\.7\)\,1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\,minmax\(0\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-center{justify-items:center}.justify-items-start{justify-items:start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-12{gap:calc(var(--spacing)*12)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-1\.5{column-gap:calc(var(--spacing)*1.5)}.gap-x-2{column-gap:calc(var(--spacing)*2)}.gap-x-2\.5{column-gap:calc(var(--spacing)*2.5)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-x-5{column-gap:calc(var(--spacing)*5)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.-space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-3)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-4)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-5)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-6)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-7>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-7)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-7)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-8)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-1\.5{row-gap:calc(var(--spacing)*1.5)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.gap-y-3{row-gap:calc(var(--spacing)*3)}.gap-y-4{row-gap:calc(var(--spacing)*4)}.gap-y-6{row-gap:calc(var(--spacing)*6)}.gap-y-7{row-gap:calc(var(--spacing)*7)}.gap-y-8{row-gap:calc(var(--spacing)*8)}.gap-y-px{row-gap:1px}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-100>:not(:last-child)){border-color:var(--color-gray-100)}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-neutral-200>:not(:last-child)){border-color:var(--color-neutral-200)}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-center{justify-self:center}.justify-self-end{justify-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-clip{overflow-x:clip}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-b-xl{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-x-\[0\.5px\]{border-inline-style:var(--tw-border-style);border-inline-width:.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.\!border-t-0{border-top-style:var(--tw-border-style)!important;border-top-width:0!important}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.\!border-none{--tw-border-style:none!important;border-style:none!important}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-blue-200{border-color:var(--color-blue-200)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-400{border-color:var(--color-gray-400)}.border-gray-600{border-color:var(--color-gray-600)}.border-neutral-100{border-color:var(--color-neutral-100)}.border-neutral-200{border-color:var(--color-neutral-200)}.border-neutral-300{border-color:var(--color-neutral-300)}.border-red-200{border-color:var(--color-red-200)}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-700\/50{border-color:#31415880}@supports (color:color-mix(in lab,red,red)){.border-slate-700\/50{border-color:color-mix(in oklab,var(--color-slate-700)50%,transparent)}}.border-transparent{border-color:#0000}.border-t-gray-200{border-top-color:var(--color-gray-200)}.\!bg-gray-50{background-color:var(--color-gray-50)!important}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-200{background-color:var(--color-amber-200)}.bg-amber-600{background-color:var(--color-amber-600)}.bg-black\/8{background-color:#00000014}@supports (color:color-mix(in lab,red,red)){.bg-black\/8{background-color:color-mix(in oklab,var(--color-black)8%,transparent)}}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-700{background-color:var(--color-blue-700)}.bg-emerald-200{background-color:var(--color-emerald-200)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500\/75{background-color:#6a7282bf}@supports (color:color-mix(in lab,red,red)){.bg-gray-500\/75{background-color:color-mix(in oklab,var(--color-gray-500)75%,transparent)}}.bg-gray-900\/90{background-color:#101828e6}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/90{background-color:color-mix(in oklab,var(--color-gray-900)90%,transparent)}}.bg-gray-950\/50{background-color:#03071280}@supports (color:color-mix(in lab,red,red)){.bg-gray-950\/50{background-color:color-mix(in oklab,var(--color-gray-950)50%,transparent)}}.bg-green-100{background-color:var(--color-green-100)}.bg-green-600{background-color:var(--color-green-600)}.bg-green-600\/80{background-color:#00a544cc}@supports (color:color-mix(in lab,red,red)){.bg-green-600\/80{background-color:color-mix(in oklab,var(--color-green-600)80%,transparent)}}.bg-green-600\/90{background-color:#00a544e6}@supports (color:color-mix(in lab,red,red)){.bg-green-600\/90{background-color:color-mix(in oklab,var(--color-green-600)90%,transparent)}}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-neutral-600{background-color:var(--color-neutral-600)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-600{background-color:var(--color-purple-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-rose-200{background-color:var(--color-rose-200)}.bg-rose-200\!{background-color:var(--color-rose-200)!important}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-600{background-color:var(--color-rose-600)}.bg-slate-600{background-color:var(--color-slate-600)}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800\/30{background-color:#1d293d4d}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/30{background-color:color-mix(in oklab,var(--color-slate-800)30%,transparent)}}.bg-slate-800\/50{background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/50{background-color:color-mix(in oklab,var(--color-slate-800)50%,transparent)}}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/50{background-color:#0f172b80}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/50{background-color:color-mix(in oklab,var(--color-slate-900)50%,transparent)}}.bg-slate-900\/80{background-color:#0f172bcc}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/80{background-color:color-mix(in oklab,var(--color-slate-900)80%,transparent)}}.bg-slate-900\/90{background-color:#0f172be6}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/90{background-color:color-mix(in oklab,var(--color-slate-900)90%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/0{background-color:#0000}@supports (color:color-mix(in lab,red,red)){.bg-white\/0{background-color:color-mix(in oklab,var(--color-white)0%,transparent)}}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.bg-white\/\[2\%\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[2\%\]{background-color:color-mix(in oklab,var(--color-white)2%,transparent)}}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.\!bg-none{background-image:none!important}.from-amber-500{--tw-gradient-from:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-500{--tw-gradient-from:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-600{--tw-gradient-from:var(--color-red-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-600{--tw-gradient-from:var(--color-slate-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-900{--tw-gradient-from:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-slate-800{--tw-gradient-via:var(--color-slate-800);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-amber-500{--tw-gradient-to:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-amber-700{--tw-gradient-to:var(--color-amber-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-orange-600{--tw-gradient-to:var(--color-orange-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-800{--tw-gradient-to:var(--color-red-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-800{--tw-gradient-to:var(--color-slate-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-900{--tw-gradient-to:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-cover{background-size:cover}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-center{background-position:50%}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-center{object-position:center}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\.5{padding-inline:calc(var(--spacing)*3.5)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-\[6px\]{padding-inline:6px}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.py-20{padding-block:calc(var(--spacing)*20)}.ps-0{padding-inline-start:calc(var(--spacing)*0)}.ps-1{padding-inline-start:calc(var(--spacing)*1)}.ps-2{padding-inline-start:calc(var(--spacing)*2)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-4{padding-inline-start:calc(var(--spacing)*4)}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pe-0{padding-inline-end:calc(var(--spacing)*0)}.pe-1{padding-inline-end:calc(var(--spacing)*1)}.pe-2{padding-inline-end:calc(var(--spacing)*2)}.pe-3{padding-inline-end:calc(var(--spacing)*3)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pe-6{padding-inline-end:calc(var(--spacing)*6)}.pe-8{padding-inline-end:calc(var(--spacing)*8)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-14{padding-top:calc(var(--spacing)*14)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-6{padding-left:calc(var(--spacing)*6)}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-xs\/none{font-size:var(--text-xs);line-height:1}.text-\[10px\]{font-size:10px}.text-\[13px\]{font-size:13px}.leading-3{--tw-leading:calc(var(--spacing)*3);line-height:calc(var(--spacing)*3)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-500{color:var(--color-amber-500)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-100{color:var(--color-gray-100)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-700\/50{color:#36415380}@supports (color:color-mix(in lab,red,red)){.text-gray-700\/50{color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-gray-950{color:var(--color-gray-950)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-800{color:var(--color-green-800)}.text-neutral-100{color:var(--color-neutral-100)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-500\!{color:var(--color-neutral-500)!important}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-800{color:var(--color-neutral-800)}.text-neutral-900{color:var(--color-neutral-900)}.text-neutral-950{color:var(--color-neutral-950)}.text-orange-500{color:var(--color-orange-500)}.text-purple-500{color:var(--color-purple-500)}.text-purple-800{color:var(--color-purple-800)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-rose-900{color:var(--color-rose-900)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.decoration-neutral-400{-webkit-text-decoration-color:var(--color-neutral-400);text-decoration-color:var(--color-neutral-400)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.placeholder-slate-400::placeholder{color:var(--color-slate-400)}.scheme-light-dark{color-scheme:light dark}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-gray-100{--tw-ring-color:var(--color-gray-100)}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-600\/10{--tw-ring-color:#4a55651a}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)10%,transparent)}}.ring-gray-900\/10{--tw-ring-color:#1018281a}@supports (color:color-mix(in lab,red,red)){.ring-gray-900\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}}.ring-gray-950\/5{--tw-ring-color:#0307120d}@supports (color:color-mix(in lab,red,red)){.ring-gray-950\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)5%,transparent)}}.ring-gray-950\/10{--tw-ring-color:#0307121a}@supports (color:color-mix(in lab,red,red)){.ring-gray-950\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)10%,transparent)}}.ring-white{--tw-ring-color:var(--color-white)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-100{transition-delay:.1s}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\[program\:cards-api-queue-worker\]{program:cards-api-queue-worker}.ring-inset{--tw-ring-inset:inset}.group-first\/item\:rounded-s-lg:is(:where(.group\/item):first-child *){border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.group-last\/item\:rounded-e-lg:is(:where(.group\/item):last-child *){border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}@media (hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:text-blue-500:is(:where(.group):hover *){color:var(--color-blue-500)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-700:is(:where(.group):hover *){color:var(--color-gray-700)}.group-hover\:text-red-400:is(:where(.group):hover *){color:var(--color-red-400)}.group-hover\:opacity-90:is(:where(.group):hover *){opacity:.9}.group-hover\/button\:text-gray-500:is(:where(.group\/button):hover *){color:var(--color-gray-500)}.group-hover\/item\:underline:is(:where(.group\/item):hover *),.group-hover\/link\:underline:is(:where(.group\/link):hover *){text-decoration-line:underline}}.group-focus-visible\:text-gray-500:is(:where(.group):focus-visible *){color:var(--color-gray-500)}.group-focus-visible\:text-gray-700:is(:where(.group):focus-visible *){color:var(--color-gray-700)}.group-focus-visible\/item\:underline:is(:where(.group\/item):focus-visible *),.group-focus-visible\/link\:underline:is(:where(.group\/link):focus-visible *){text-decoration-line:underline}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.before\:start-0:before{content:var(--tw-content);inset-inline-start:calc(var(--spacing)*0)}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0\.5:before{content:var(--tw-content);width:calc(var(--spacing)*.5)}.first\:border-s-0:first-child{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.last\:border-e-0:last-child{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.odd\:bg-white\/2:nth-child(odd){background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.odd\:bg-white\/2:nth-child(odd){background-color:color-mix(in oklab,var(--color-white)2%,transparent)}}.even\:bg-white:nth-child(2n){background-color:var(--color-white)}.first-of-type\:ps-1:first-of-type{padding-inline-start:calc(var(--spacing)*1)}.last-of-type\:pe-1:last-of-type{padding-inline-end:calc(var(--spacing)*1)}.checked\:ring-0:checked{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:bg-gray-50:focus-within{background-color:var(--color-gray-50)}@media (hover:hover){.hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:transform:hover{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.hover\:border-red-500:hover{border-color:var(--color-red-500)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-400\/10:hover{background-color:#99a1af1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-400\/10:hover{background-color:color-mix(in oklab,var(--color-gray-400)10%,transparent)}}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-neutral-100:hover{background-color:var(--color-neutral-100)}.hover\:bg-neutral-200:hover{background-color:var(--color-neutral-200)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-slate-600:hover{background-color:var(--color-slate-600)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-white\/50:hover{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/50:hover{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-700\/75:hover{color:#364153bf}@supports (color:color-mix(in lab,red,red)){.hover\:text-gray-700\/75:hover{color:color-mix(in oklab,var(--color-gray-700)75%,transparent)}}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-slate-200:hover{color:var(--color-slate-200)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-red-500:focus{border-color:var(--color-red-500)}.focus\:ring:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:bg-gray-50:focus-visible{background-color:var(--color-gray-50)}.focus-visible\:bg-gray-100:focus-visible{background-color:var(--color-gray-100)}.focus-visible\:text-gray-500:focus-visible{color:var(--color-gray-500)}.focus-visible\:text-gray-700\/75:focus-visible{color:#364153bf}@supports (color:color-mix(in lab,red,red)){.focus-visible\:text-gray-700\/75:focus-visible{color:color-mix(in oklab,var(--color-gray-700)75%,transparent)}}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:#99a1af66}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)40%,transparent)}}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{background-color:var(--color-gray-50)}.disabled\:text-gray-50:disabled{color:var(--color-gray-50)}.disabled\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:oklch(55.1% .027 264.364)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:oklch(70.7% .022 261.325)}.disabled\:checked\:bg-gray-400:disabled:checked{background-color:var(--color-gray-400)}.disabled\:checked\:text-gray-400:disabled:checked{color:var(--color-gray-400)}@media (min-width:40rem){.sm\:relative{position:relative}.sm\:inset-x-auto{inset-inline:auto}.sm\:end-0{inset-inline-end:calc(var(--spacing)*0)}.sm\:col-\[--col-span-sm\]{grid-column:--col-span-sm}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:--col-start-sm}.sm\:-mx-6{margin-inline:calc(var(--spacing)*-6)}.sm\:-my-2{margin-block:calc(var(--spacing)*-2)}.sm\:ms-auto{margin-inline-start:auto}.sm\:mt-7{margin-top:calc(var(--spacing)*7)}.sm\:mb-16{margin-bottom:calc(var(--spacing)*16)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:inline-grid{display:inline-grid}.sm\:table-cell{display:table-cell}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:w-screen{width:100vw}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-1{flex:1}.sm\:columns-\[--cols-sm\]{columns:--cols-sm}.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-\[--cols-sm\]{grid-template-columns:--cols-sm}.sm\:grid-cols-\[repeat\(auto-fit\,minmax\(0\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-start{justify-content:flex-start}.sm\:gap-1{gap:calc(var(--spacing)*1)}.sm\:gap-3{gap:calc(var(--spacing)*3)}.sm\:gap-x-4{column-gap:calc(var(--spacing)*4)}.sm\:rounded-xl{border-radius:var(--radius-xl)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-14{padding:calc(var(--spacing)*14)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-12{padding-inline:calc(var(--spacing)*12)}.sm\:py-0{padding-block:calc(var(--spacing)*0)}.sm\:py-1\.5{padding-block:calc(var(--spacing)*1.5)}.sm\:ps-3{padding-inline-start:calc(var(--spacing)*3)}.sm\:ps-6{padding-inline-start:calc(var(--spacing)*6)}.sm\:pe-3{padding-inline-end:calc(var(--spacing)*3)}.sm\:pe-6{padding-inline-end:calc(var(--spacing)*6)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pb-0{padding-bottom:calc(var(--spacing)*0)}.sm\:text-left{text-align:left}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:calc(var(--spacing)*3)}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:calc(var(--spacing)*3)}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}@media (min-width:48rem){.md\:bottom-4{bottom:calc(var(--spacing)*4)}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:--col-span-md}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:--col-start-md}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:inline{display:inline}.md\:inline-grid{display:inline-grid}.md\:table-cell{display:table-cell}.md\:w-max{width:max-content}.md\:max-w-60{max-width:calc(var(--spacing)*60)}.md\:columns-\[--cols-md\]{columns:--cols-md}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:--cols-md}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:items-start{align-items:flex-start}.md\:justify-end{justify-content:flex-end}.md\:gap-1{gap:calc(var(--spacing)*1)}.md\:gap-3{gap:calc(var(--spacing)*3)}:where(.md\:divide-y-0>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.md\:overflow-x-auto{overflow-x:auto}.md\:rounded-xl{border-radius:var(--radius-xl)}.md\:p-20{padding:calc(var(--spacing)*20)}.md\:px-6{padding-inline:calc(var(--spacing)*6)}.md\:ps-3{padding-inline-start:calc(var(--spacing)*3)}.md\:pe-6{padding-inline-end:calc(var(--spacing)*6)}.md\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media (min-width:64rem){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:--col-span-lg}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-start-\[--col-start-lg\]{grid-column-start:--col-start-lg}.lg\:mb-0{margin-bottom:calc(var(--spacing)*0)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-grid{display:inline-grid}.lg\:table-cell{display:table-cell}.lg\:h-full{height:100%}.lg\:max-w-xs{max-width:var(--container-xs)}.lg\:-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.lg\:translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.lg\:columns-\[--cols-lg\]{columns:--cols-lg}.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-\[--cols-lg\]{grid-template-columns:--cols-lg}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:items-end{align-items:flex-end}.lg\:items-start{align-items:flex-start}.lg\:gap-1{gap:calc(var(--spacing)*1)}.lg\:gap-3{gap:calc(var(--spacing)*3)}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:bg-transparent{background-color:#0000}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pe-8{padding-inline-end:calc(var(--spacing)*8)}.lg\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}}@media (min-width:80rem){.xl\:col-\[--col-span-xl\]{grid-column:--col-span-xl}.xl\:col-start-\[--col-start-xl\]{grid-column-start:--col-start-xl}.xl\:block{display:block}.xl\:hidden{display:none}.xl\:inline-grid{display:inline-grid}.xl\:table-cell{display:table-cell}.xl\:columns-\[--cols-xl\]{columns:--cols-xl}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:--cols-xl}.xl\:flex-row{flex-direction:row}.xl\:items-center{align-items:center}.xl\:items-end{align-items:flex-end}.xl\:items-start{align-items:flex-start}.xl\:gap-1{gap:calc(var(--spacing)*1)}.xl\:gap-3{gap:calc(var(--spacing)*3)}}@media (min-width:96rem){.\32xl\:col-\[--col-span-2xl\]{grid-column:--col-span-2xl}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:--col-start-2xl}.\32xl\:block{display:block}.\32xl\:hidden{display:none}.\32xl\:inline-grid{display:inline-grid}.\32xl\:table-cell{display:table-cell}.\32xl\:columns-\[--cols-2xl\]{columns:--cols-2xl}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:--cols-2xl}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-center{align-items:center}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-start{align-items:flex-start}.\32xl\:gap-1{gap:calc(var(--spacing)*1)}.\32xl\:gap-3{gap:calc(var(--spacing)*3)}}.ltr\:hidden:where(:dir(ltr),[dir=ltr],[dir=ltr] *),.rtl\:hidden:where(:dir(rtl),[dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:-translate-x-5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-5);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:-translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-1\/2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-1\/4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x: 25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:divide-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-divide-x-reverse:1}@media (min-width:64rem){.rtl\:lg\:-translate-x-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:lg\:translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}}@media (prefers-color-scheme:dark){.dark\:flex{display:flex}.dark\:hidden{display:none}:where(.dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}:where(.dark\:divide-white\/5>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){:where(.dark\:divide-white\/5>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:where(.dark\:divide-white\/10>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){:where(.dark\:divide-white\/10>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-none{--tw-border-style:none;border-style:none}.dark\:border-amber-500{border-color:var(--color-amber-500)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-600{border-color:var(--color-blue-600)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-emerald-500{border-color:var(--color-emerald-500)}.dark\:border-emerald-600{border-color:var(--color-emerald-600)}.dark\:border-gray-600{border-color:var(--color-gray-600)}.dark\:border-gray-700{border-color:var(--color-gray-700)}.dark\:border-neutral-500{border-color:var(--color-neutral-500)}.dark\:border-neutral-700{border-color:var(--color-neutral-700)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-rose-500{border-color:var(--color-rose-500)}.dark\:border-rose-900{border-color:var(--color-rose-900)}.dark\:border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/5{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:border-white\/8{border-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/8{border-color:color-mix(in oklab,var(--color-white)8%,transparent)}}.dark\:border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.dark\:border-white\/\[9\%\]{border-color:#ffffff17}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/\[9\%\]{border-color:color-mix(in oklab,var(--color-white)9%,transparent)}}.dark\:border-t-white\/10{border-top-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-t-white\/10{border-top-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:\!bg-gray-700{background-color:var(--color-gray-700)!important}.dark\:bg-\[\#1a1a1a\]{background-color:#1a1a1a}.dark\:bg-amber-600{background-color:var(--color-amber-600)}.dark\:bg-amber-900\/30{background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/30{background-color:color-mix(in oklab,var(--color-amber-900)30%,transparent)}}.dark\:bg-amber-950{background-color:var(--color-amber-950)}.dark\:bg-blue-700{background-color:var(--color-blue-700)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-emerald-600{background-color:var(--color-emerald-600)}.dark\:bg-emerald-900\/70{background-color:#004e3bb3}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-900\/70{background-color:color-mix(in oklab,var(--color-emerald-900)70%,transparent)}}.dark\:bg-gray-400\/10{background-color:#99a1af1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-400\/10{background-color:color-mix(in oklab,var(--color-gray-400)10%,transparent)}}.dark\:bg-gray-500{background-color:var(--color-gray-500)}.dark\:bg-gray-500\/20{background-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-500\/20{background-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/30{background-color:#1018284d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-900\/30{background-color:color-mix(in oklab,var(--color-gray-900)30%,transparent)}}.dark\:bg-gray-900\/75{background-color:#101828bf}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-900\/75{background-color:color-mix(in oklab,var(--color-gray-900)75%,transparent)}}.dark\:bg-gray-950{background-color:var(--color-gray-950)}.dark\:bg-gray-950\/75{background-color:#030712bf}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-950\/75{background-color:color-mix(in oklab,var(--color-gray-950)75%,transparent)}}.dark\:bg-green-900{background-color:var(--color-green-900)}.dark\:bg-green-900\/30{background-color:#0d542b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-green-900\/30{background-color:color-mix(in oklab,var(--color-green-900)30%,transparent)}}.dark\:bg-neutral-400{background-color:var(--color-neutral-400)}.dark\:bg-neutral-600{background-color:var(--color-neutral-600)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-neutral-800{background-color:var(--color-neutral-800)}.dark\:bg-neutral-900{background-color:var(--color-neutral-900)}.dark\:bg-purple-900{background-color:var(--color-purple-900)}.dark\:bg-red-900{background-color:var(--color-red-900)}.dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark\:bg-rose-600{background-color:var(--color-rose-600)}.dark\:bg-rose-900\!{background-color:var(--color-rose-900)!important}.dark\:bg-rose-950{background-color:var(--color-rose-950)}.dark\:bg-transparent{background-color:#0000}.dark\:bg-white{background-color:var(--color-white)}.dark\:bg-white\/1{background-color:#ffffff03}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/1{background-color:color-mix(in oklab,var(--color-white)1%,transparent)}}.dark\:bg-white\/3{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/3{background-color:color-mix(in oklab,var(--color-white)3%,transparent)}}.dark\:bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:bg-white\/\[2\%\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/\[2\%\]{background-color:color-mix(in oklab,var(--color-white)2%,transparent)}}.dark\:bg-white\/\[3\%\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/\[3\%\]{background-color:color-mix(in oklab,var(--color-white)3%,transparent)}}.dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark\:text-amber-300{color:var(--color-amber-300)}.dark\:text-amber-400{color:var(--color-amber-400)}.dark\:text-blue-100{color:var(--color-blue-100)}.dark\:text-blue-200{color:var(--color-blue-200)}.dark\:text-blue-300{color:var(--color-blue-300)}.dark\:text-blue-400{color:var(--color-blue-400)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-500{color:var(--color-emerald-500)}.dark\:text-gray-100{color:var(--color-gray-100)}.dark\:text-gray-200{color:var(--color-gray-200)}.dark\:text-gray-300{color:var(--color-gray-300)}.dark\:text-gray-300\/50{color:#d1d5dc80}@supports (color:color-mix(in lab,red,red)){.dark\:text-gray-300\/50{color:color-mix(in oklab,var(--color-gray-300)50%,transparent)}}.dark\:text-gray-400{color:var(--color-gray-400)}.dark\:text-gray-500{color:var(--color-gray-500)}.dark\:text-gray-600{color:var(--color-gray-600)}.dark\:text-gray-700{color:var(--color-gray-700)}.dark\:text-gray-800{color:var(--color-gray-800)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-neutral-100{color:var(--color-neutral-100)}.dark\:text-neutral-200{color:var(--color-neutral-200)}.dark\:text-neutral-300{color:var(--color-neutral-300)}.dark\:text-neutral-400{color:var(--color-neutral-400)}.dark\:text-neutral-500{color:var(--color-neutral-500)}.dark\:text-neutral-600{color:var(--color-neutral-600)}.dark\:text-neutral-600\!{color:var(--color-neutral-600)!important}.dark\:text-neutral-900{color:var(--color-neutral-900)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-red-100{color:var(--color-red-100)}.dark\:text-red-200{color:var(--color-red-200)}.dark\:text-red-300{color:var(--color-red-300)}.dark\:text-red-400{color:var(--color-red-400)}.dark\:text-rose-100{color:var(--color-rose-100)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\!{color:var(--color-white)!important}.dark\:text-white\/5{color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:text-white\/5{color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:text-yellow-200{color:var(--color-yellow-200)}.dark\:ring-gray-50\/10{--tw-ring-color:#f9fafb1a}@supports (color:color-mix(in lab,red,red)){.dark\:ring-gray-50\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-50)10%,transparent)}}.dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark\:ring-gray-700{--tw-ring-color:var(--color-gray-700)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-gray-900{--tw-ring-color:var(--color-gray-900)}.dark\:ring-white\/10{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:ring-white\/10{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:ring-white\/20{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:ring-white\/20{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}@media (hover:hover){.dark\:group-hover\:text-gray-200:is(:where(.group):hover *){color:var(--color-gray-200)}.dark\:group-hover\:text-gray-400:is(:where(.group):hover *){color:var(--color-gray-400)}}}@media (hover:hover){@media (prefers-color-scheme:dark){.group-hover\:dark\:text-emerald-500:is(:where(.group):hover *){color:var(--color-emerald-500)}}}@media (prefers-color-scheme:dark){@media (hover:hover){.dark\:group-hover\/button\:text-gray-400:is(:where(.group\/button):hover *){color:var(--color-gray-400)}}.dark\:group-focus-visible\:text-gray-200:is(:where(.group):focus-visible *){color:var(--color-gray-200)}.dark\:group-focus-visible\:text-gray-400:is(:where(.group):focus-visible *){color:var(--color-gray-400)}.dark\:placeholder\:text-gray-500::placeholder{color:var(--color-gray-500)}.odd\:dark\:bg-white\/4:nth-child(odd){background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.odd\:dark\:bg-white\/4:nth-child(odd){background-color:color-mix(in oklab,var(--color-white)4%,transparent)}}.even\:dark\:bg-white\/2:nth-child(2n){background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.even\:dark\:bg-white\/2:nth-child(2n){background-color:color-mix(in oklab,var(--color-white)2%,transparent)}}.dark\:focus-within\:bg-white\/5:focus-within{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:focus-within\:bg-white\/5:focus-within{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-white\/2:hover{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/2:hover{background-color:color-mix(in oklab,var(--color-white)2%,transparent)}}.dark\:hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}}}@media (hover:hover){@media (prefers-color-scheme:dark){.hover\:dark\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.hover\:dark\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}}@media (prefers-color-scheme:dark){@media (hover:hover){.dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark\:hover\:text-gray-200:hover{color:var(--color-gray-200)}.dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark\:hover\:text-gray-300\/75:hover{color:#d1d5dcbf}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:text-gray-300\/75:hover{color:color-mix(in oklab,var(--color-gray-300)75%,transparent)}}.dark\:hover\:text-gray-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-white:hover{color:var(--color-white)}}}@media (hover:hover){@media (prefers-color-scheme:dark){.hover\:dark\:text-white:hover{color:var(--color-white)}}}@media (prefers-color-scheme:dark){@media (hover:hover){.dark\:hover\:ring-white\/20:hover{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:ring-white\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}}.dark\:focus\:border-blue-700:focus{border-color:var(--color-blue-700)}.dark\:focus\:border-blue-800:focus{border-color:var(--color-blue-800)}.dark\:focus-visible\:bg-white\/5:focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:bg-white\/5:focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:focus-visible\:text-gray-300\/75:focus-visible{color:#d1d5dcbf}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:text-gray-300\/75:focus-visible{color:color-mix(in oklab,var(--color-gray-300)75%,transparent)}}.dark\:focus-visible\:text-gray-400:focus-visible{color:var(--color-gray-400)}.dark\:focus-visible\:ring-offset-gray-900:focus-visible{--tw-ring-offset-color:var(--color-gray-900)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}.dark\:disabled\:bg-transparent:disabled{background-color:#0000}.dark\:disabled\:text-gray-400:disabled{color:var(--color-gray-400)}.dark\:disabled\:ring-white\/10:disabled{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:disabled\:ring-white\/10:disabled{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled{-webkit-text-fill-color:oklch(70.7% .022 261.325)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled::placeholder{-webkit-text-fill-color:oklch(55.1% .027 264.364)}.dark\:disabled\:checked\:bg-gray-600:disabled:checked{background-color:var(--color-gray-600)}@media (min-width:64rem){.dark\:lg\:bg-transparent{background-color:#0000}}}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:calc(var(--spacing)*0)}.\[\&_\.fi-badge-delete-button\]\:hidden .fi-badge-delete-button{display:none}.\[\&_\.filepond--root\]\:font-sans .filepond--root{font-family:var(--font-sans)}.\[\&_optgroup\]\:bg-white optgroup{background-color:var(--color-white)}@media (prefers-color-scheme:dark){.\[\&_optgroup\]\:dark\:bg-gray-900 optgroup{background-color:var(--color-gray-900)}}.\[\&_option\]\:bg-white option{background-color:var(--color-white)}@media (prefers-color-scheme:dark){.\[\&_option\]\:dark\:bg-gray-900 option{background-color:var(--color-gray-900)}}.\[\&_svg\]\:size-2\.5 svg{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.\[\&_svg\]\:\!text-white svg{color:var(--color-white)!important}@media (hover:hover){.hover\:\[\&_svg\]\:stroke-emerald-500:hover svg{stroke:var(--color-emerald-500)}}@media (prefers-color-scheme:dark){.dark\:\[\&_svg\]\:\!text-white svg{color:var(--color-white)!important}}.\[\&\.trix-active\]\:bg-gray-50.trix-active{background-color:var(--color-gray-50)}@media (prefers-color-scheme:dark){.dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:not(:has(.fi-ac-action:focus)):focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of.fi-btn)){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,oklch(92.8% .006 264.531));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (prefers-color-scheme:dark){.dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of.fi-btn)){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,oklab(100% 0 5.96046e-8/.2));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of.fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of.fi-btn){border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of.fi-btn){border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:calc(var(--spacing)*.5)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:calc(var(--spacing)*0)}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{color:var(--color-white)}@media (hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[\@media\(hover\:hover\)\]\:duration-75{--tw-duration:75ms;transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-gray-400{background-color:var(--color-gray-400)}input:checked+.\[input\:checked\+\&\]\:text-white{color:var(--color-white)}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){input:checked+.\[input\:checked\+\&\]\:hover\:bg-gray-300:hover{background-color:var(--color-gray-300)}}@media (prefers-color-scheme:dark){input:checked+.dark\:\[input\:checked\+\&\]\:bg-gray-600{background-color:var(--color-gray-600)}@media (hover:hover){input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}}}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:#0307121a}@supports (color:color-mix(in lab,red,red)){input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)10%,transparent)}}@media (prefers-color-scheme:dark){input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}}}.card-hover{transition:all .3s}.card-hover:hover{transform:translateY(-4px);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.card-flip{perspective:1000px}.card-flip-inner{transform-style:preserve-3d;width:100%;height:100%;transition:transform .6s;position:relative}.card-flip:hover .card-flip-inner{transform:rotateY(180deg)}.card-flip .card-front,.card-flip .card-back{backface-visibility:hidden;width:100%;height:100%;position:absolute}.card-flip .card-back{transform:rotateY(180deg)}.gradient-bg{background:linear-gradient(135deg,#1e293b,#334155,#475569)}.card-glow{box-shadow:0 0 20px #ef44444d}.pulse-glow{animation:2s infinite pulse-glow}@keyframes pulse-glow{0%,to{box-shadow:0 0 20px #ef44444d}50%{box-shadow:0 0 30px #ef444480}}@media (max-width:640px){h1{font-size:2.5rem}h2{font-size:1.875rem}p{font-size:1rem}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/public/build/manifest.json b/public/build/manifest.json index 124be24..0bdabd3 100644 --- a/public/build/manifest.json +++ b/public/build/manifest.json @@ -1,6 +1,6 @@ { "resources/css/app.css": { - "file": "assets/app-cHkKdsAV.css", + "file": "assets/app-C1D18bxO.css", "src": "resources/css/app.css", "isEntry": true }, diff --git a/resources/views/filament/modals/deck-analytics-error.blade.php b/resources/views/filament/modals/deck-analytics-error.blade.php new file mode 100644 index 0000000..c97eb26 --- /dev/null +++ b/resources/views/filament/modals/deck-analytics-error.blade.php @@ -0,0 +1,9 @@ +
+
+ +
+

AI Analysis Failed

+

{{ $error }}

+
+
+
diff --git a/resources/views/filament/modals/deck-analytics.blade.php b/resources/views/filament/modals/deck-analytics.blade.php new file mode 100644 index 0000000..0e528f6 --- /dev/null +++ b/resources/views/filament/modals/deck-analytics.blade.php @@ -0,0 +1,102 @@ +
+ + {{-- Score + Archetype --}} +
+
+
{{ $report['overall_score'] ?? '—' }}
+
Overall Score / 100
+
+
+ + {{ $report['archetype'] ?? 'Unknown' }} + +
Archetype
+
+
+ + Synergy: {{ $report['synergy_report']['rating'] ?? '—' }} + +
+
+ + {{-- Win Rate --}} + @if(!empty($report['win_rate_prediction'])) +
+ Estimated Win Rate: {{ $report['win_rate_prediction'] }} +
+ @endif + + {{-- Curve Analysis --}} + @if(!empty($report['curve_analysis'])) +
+

Cost Curve Analysis

+

{{ $report['curve_analysis'] }}

+
+ @endif + + {{-- Key Combos --}} + @if(!empty($report['synergy_report']['key_combos'])) +
+

Key Combos

+
    + @foreach($report['synergy_report']['key_combos'] as $combo) +
  • + + {{ $combo }} +
  • + @endforeach +
+
+ @endif + + {{-- Anti-Synergies --}} + @if(!empty($report['synergy_report']['anti_synergies'])) +
+

Anti-Synergies

+
    + @foreach($report['synergy_report']['anti_synergies'] as $item) +
  • + + {{ $item }} +
  • + @endforeach +
+
+ @endif + + {{-- Weaknesses --}} + @if(!empty($report['weaknesses'])) +
+

Weaknesses

+
    + @foreach($report['weaknesses'] as $weakness) +
  • + + {{ $weakness }} +
  • + @endforeach +
+
+ @endif + + {{-- Optimization Suggestions --}} + @if(!empty($report['optimization_suggestions'])) +
+

Optimization Suggestions

+
+ @foreach($report['optimization_suggestions'] as $suggestion) +
+
+ Remove: {{ $suggestion['remove'] ?? '—' }} + + Add: {{ $suggestion['replace_with'] ?? '—' }} +
+

{{ $suggestion['reason'] ?? '' }}

+
+ @endforeach +
+
+ @endif + +
diff --git a/resources/views/filament/modals/deck-swap.blade.php b/resources/views/filament/modals/deck-swap.blade.php new file mode 100644 index 0000000..4f6244b --- /dev/null +++ b/resources/views/filament/modals/deck-swap.blade.php @@ -0,0 +1,39 @@ +
+ +

+ AI-suggested card swaps based on your deck composition. Click Apply on any row to execute the swap immediately. +

+ + @foreach($suggestions as $index => $swap) +
+
+
+
Remove
+
{{ $swap['remove_name'] }}
+
+
+
+
Add
+
{{ $swap['replace_with_name'] }}
+
+
+ +
+
+

+ {{ $swap['reason'] }} +

+
+ @endforeach + +
From ff8dd90f76456f6c266ce7f8c3d2c1f930e4b7e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20N=C3=A9meth?= Date: Wed, 18 Feb 2026 22:22:32 +0100 Subject: [PATCH 3/3] ## [1.3.0] - 2026-02-18 - AI Card Suggestion module for supervisors: generate card data from game context, re-roll card abilities with tone selection, deck synergy analytics report, and one-click card swap suggestions --- CHANGELOG.md | 5 + app/Exceptions/AiSuggestionException.php | 16 ++ .../CardResource/Pages/CreateCard.php | 67 ++++++ .../Resources/CardResource/Pages/EditCard.php | 116 ++++++++++ .../Resources/DeckResource/Pages/EditDeck.php | 101 +++++++++ .../Resources/DeckResource/Pages/ViewDeck.php | 34 +++ app/Services/Ai/AbilityRerollService.php | 70 +++++++ app/Services/Ai/CardSuggestionService.php | 70 +++++++ app/Services/Ai/CardSwapService.php | 111 ++++++++++ app/Services/Ai/DeckAnalyticsService.php | 91 ++++++++ config/ai.php | 7 + config/ai_prompts.php | 198 ++++++++++++++++++ public/build/assets/app-C1D18bxO.css | 1 + public/build/assets/app-cHkKdsAV.css | 1 - public/build/manifest.json | 2 +- .../modals/deck-analytics-error.blade.php | 9 + .../filament/modals/deck-analytics.blade.php | 102 +++++++++ .../views/filament/modals/deck-swap.blade.php | 39 ++++ 18 files changed, 1038 insertions(+), 2 deletions(-) create mode 100644 app/Exceptions/AiSuggestionException.php create mode 100644 app/Services/Ai/AbilityRerollService.php create mode 100644 app/Services/Ai/CardSuggestionService.php create mode 100644 app/Services/Ai/CardSwapService.php create mode 100644 app/Services/Ai/DeckAnalyticsService.php create mode 100644 public/build/assets/app-C1D18bxO.css delete mode 100644 public/build/assets/app-cHkKdsAV.css create mode 100644 resources/views/filament/modals/deck-analytics-error.blade.php create mode 100644 resources/views/filament/modals/deck-analytics.blade.php create mode 100644 resources/views/filament/modals/deck-swap.blade.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c3971c..ec7ba85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ All notable changes to this project will be documented in this file. +## [1.3.0] - 2026-02-18 + +### Added +- AI Card Suggestion module for supervisors: generate card data from game context, re-roll card abilities with tone selection, deck synergy analytics report, and one-click card swap suggestions + ## [1.2.0] - 2026-02-18 ### Added diff --git a/app/Exceptions/AiSuggestionException.php b/app/Exceptions/AiSuggestionException.php new file mode 100644 index 0000000..514ef28 --- /dev/null +++ b/app/Exceptions/AiSuggestionException.php @@ -0,0 +1,16 @@ +id(); return $data; } + + protected function getHeaderActions(): array + { + return [ + Actions\Action::make('aiSuggest') + ->label('AI Suggest') + ->icon('heroicon-o-sparkles') + ->color('warning') + ->visible(fn () => auth()->user()?->supervisor === true) + ->form([ + Forms\Components\Select::make('game_id') + ->label('Game') + ->options(fn () => Game::where('creator_id', auth()->id())->pluck('name', 'id')) + ->required() + ->searchable() + ->default(fn () => $this->form->getState()['game_id'] ?? null), + Forms\Components\Select::make('type_id') + ->label('Card Type') + ->options(fn () => CardType::where('user_id', auth()->id())->pluck('name', 'id')) + ->required() + ->searchable() + ->default(fn () => $this->form->getState()['type_id'] ?? null), + Forms\Components\TextInput::make('generation_goal') + ->label('Generation Goal') + ->placeholder('e.g. Aggressive creature with low cost') + ->maxLength(255), + ]) + ->action(function (array $data) { + try { + $result = app(CardSuggestionService::class)->suggest( + gameId: (int) $data['game_id'], + cardTypeId: (int) $data['type_id'], + goal: $data['generation_goal'] ?? '' + ); + + $this->form->fill([ + 'game_id' => $data['game_id'], + 'type_id' => $data['type_id'], + 'name' => $result['name'] ?? '', + 'card_text' => $result['card_text'] ?? ($result['lore_text'] ?? ''), + 'card_data' => $result['card_data'] ?? [], + ]); + + Notification::make() + ->success() + ->title('AI Suggestion Applied') + ->body('Review the generated fields and save when ready.') + ->send(); + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + } + }), + ]; + } } diff --git a/app/Filament/Resources/CardResource/Pages/EditCard.php b/app/Filament/Resources/CardResource/Pages/EditCard.php index 169cf22..14d9788 100644 --- a/app/Filament/Resources/CardResource/Pages/EditCard.php +++ b/app/Filament/Resources/CardResource/Pages/EditCard.php @@ -1,9 +1,19 @@ label('AI Suggest') + ->icon('heroicon-o-sparkles') + ->color('warning') + ->visible(fn () => auth()->user()?->supervisor === true) + ->form([ + Forms\Components\Select::make('game_id') + ->label('Game') + ->options(fn () => Game::where('creator_id', auth()->id())->pluck('name', 'id')) + ->required() + ->searchable() + ->default(fn () => $this->form->getState()['game_id'] ?? null), + Forms\Components\Select::make('type_id') + ->label('Card Type') + ->options(fn () => CardType::where('user_id', auth()->id())->pluck('name', 'id')) + ->required() + ->searchable() + ->default(fn () => $this->form->getState()['type_id'] ?? null), + Forms\Components\TextInput::make('generation_goal') + ->label('Generation Goal') + ->placeholder('e.g. Aggressive creature with low cost') + ->maxLength(255), + ]) + ->action(function (array $data) { + try { + $result = app(CardSuggestionService::class)->suggest( + gameId: (int) $data['game_id'], + cardTypeId: (int) $data['type_id'], + goal: $data['generation_goal'] ?? '' + ); + + $this->form->fill([ + 'game_id' => $data['game_id'], + 'type_id' => $data['type_id'], + 'name' => $result['name'] ?? '', + 'card_text' => $result['card_text'] ?? ($result['lore_text'] ?? ''), + 'card_data' => $result['card_data'] ?? [], + ]); + + Notification::make() + ->success() + ->title('AI Suggestion Applied') + ->body('Review the generated fields and save when ready.') + ->send(); + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + } + }), + + Actions\Action::make('rerollAbility') + ->label('Re-roll Ability') + ->icon('heroicon-o-arrow-path') + ->color('info') + ->visible(fn () => auth()->user()?->supervisor === true) + ->form([ + Forms\Components\Select::make('tone') + ->label('Tone') + ->options([ + 'Aggressive' => 'Aggressive', + 'Defensive' => 'Defensive', + 'Support' => 'Support', + 'Balanced' => 'Balanced', + ]) + ->required() + ->default('Balanced'), + ]) + ->action(function (array $data) { + try { + $result = app(AbilityRerollService::class)->reroll( + cardId: $this->record->id, + tone: $data['tone'] + ); + + $currentState = $this->form->getState(); + + $this->form->fill(array_merge($currentState, [ + 'card_text' => $result['card_text'] ?? $currentState['card_text'], + 'card_data' => $result['card_data'] ?? $currentState['card_data'], + ])); + + if ($result['_truncated'] ?? false) { + Notification::make() + ->warning() + ->title('Ability Re-rolled (Truncated)') + ->body('The generated text exceeded the max length and was truncated.') + ->send(); + } else { + Notification::make() + ->success() + ->title('Ability Re-rolled') + ->body('Card ability updated. Save to persist the changes.') + ->send(); + } + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + } + }), + Actions\DeleteAction::make(), ]; } diff --git a/app/Filament/Resources/DeckResource/Pages/EditDeck.php b/app/Filament/Resources/DeckResource/Pages/EditDeck.php index f515c95..00787c6 100644 --- a/app/Filament/Resources/DeckResource/Pages/EditDeck.php +++ b/app/Filament/Resources/DeckResource/Pages/EditDeck.php @@ -1,9 +1,18 @@ label('AI Analytics') + ->icon('heroicon-o-chart-bar') + ->color('success') + ->visible(fn () => auth()->user()?->supervisor === true) + ->slideOver() + ->modalHeading('Deck Synergy Analysis') + ->modalSubmitAction(false) + ->modalCancelActionLabel('Close') + ->modalContent(function () { + try { + $report = app(DeckAnalyticsService::class)->analyze($this->record->id); + return view('filament.modals.deck-analytics', ['report' => $report]); + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + return view('filament.modals.deck-analytics-error', ['error' => $e->getMessage()]); + } + }), + + Actions\Action::make('aiSwapSuggest') + ->label('AI Card Swap') + ->icon('heroicon-o-arrows-right-left') + ->color('warning') + ->visible(fn () => auth()->user()?->supervisor === true) + ->slideOver() + ->modalHeading('AI Card Swap Suggestions') + ->modalSubmitAction(false) + ->modalCancelActionLabel('Close') + ->modalContent(function () { + try { + $suggestions = app(CardSwapService::class)->suggest($this->record->id); + return view('filament.modals.deck-swap', [ + 'suggestions' => $suggestions, + 'deckId' => $this->record->id, + ]); + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + return view('filament.modals.deck-analytics-error', ['error' => $e->getMessage()]); + } + }), + Actions\DeleteAction::make(), ]; } + + /** + * Livewire listener for applying a card swap from the modal view. + */ + public function applyCardSwap(int $removeId, int $replaceWithId): void + { + $deck = $this->record; + $deckData = $deck->deck_data ?? []; + + // Remove old card + $deckData = array_values(array_filter($deckData, fn($item) => (int)($item['card_id'] ?? 0) !== $removeId)); + + // Add new card with quantity 1 if not present + $found = false; + foreach ($deckData as &$item) { + if ((int)($item['card_id'] ?? 0) === $replaceWithId) { + $item['quantity'] = ($item['quantity'] ?? 1) + 1; + $found = true; + break; + } + } + unset($item); + + if (!$found) { + $deckData[] = ['card_id' => $replaceWithId, 'quantity' => 1]; + } + + $deck->deck_data = $deckData; + $deck->save(); + + $removedCard = Card::find($removeId); + $addedCard = Card::find($replaceWithId); + + $this->form->fill(array_merge($this->form->getState(), [ + 'deck_data' => $deckData, + ])); + + Notification::make() + ->success() + ->title('Card Swapped') + ->body("Replaced \"{$removedCard?->name}\" with \"{$addedCard?->name}\".") + ->send(); + } } diff --git a/app/Filament/Resources/DeckResource/Pages/ViewDeck.php b/app/Filament/Resources/DeckResource/Pages/ViewDeck.php index a973ebf..9a09010 100644 --- a/app/Filament/Resources/DeckResource/Pages/ViewDeck.php +++ b/app/Filament/Resources/DeckResource/Pages/ViewDeck.php @@ -6,7 +6,11 @@ namespace App\Filament\Resources\DeckResource\Pages; +use App\Exceptions\AiSuggestionException; use App\Filament\Resources\DeckResource; +use App\Services\Ai\DeckAnalyticsService; +use Filament\Actions; +use Filament\Notifications\Notification; use Filament\Resources\Pages\ViewRecord; class ViewDeck extends ViewRecord @@ -14,4 +18,34 @@ class ViewDeck extends ViewRecord protected static string $resource = DeckResource::class; protected static ?string $title = 'View Deck'; + + protected function getHeaderActions(): array + { + return [ + Actions\EditAction::make(), + + Actions\Action::make('aiAnalytics') + ->label('AI Analytics') + ->icon('heroicon-o-chart-bar') + ->color('success') + ->visible(fn () => auth()->user()?->supervisor === true) + ->slideOver() + ->modalHeading('Deck Synergy Analysis') + ->modalSubmitAction(false) + ->modalCancelActionLabel('Close') + ->modalContent(function () { + try { + $report = app(DeckAnalyticsService::class)->analyze($this->record->id); + return view('filament.modals.deck-analytics', ['report' => $report]); + } catch (AiSuggestionException $e) { + Notification::make() + ->danger() + ->title('AI Error') + ->body($e->getMessage()) + ->send(); + return view('filament.modals.deck-analytics-error', ['error' => $e->getMessage()]); + } + }), + ]; + } } diff --git a/app/Services/Ai/AbilityRerollService.php b/app/Services/Ai/AbilityRerollService.php new file mode 100644 index 0000000..78e9f7e --- /dev/null +++ b/app/Services/Ai/AbilityRerollService.php @@ -0,0 +1,70 @@ +card_data ?? []) + ->map(fn($f) => "- {$f['fieldname']}: {$f['fieldvalue']}") + ->join("\n"); + + $userPrompt = str_replace( + ['{card_name}', '{current_description}', '{tone}', '{max_length}', '{current_card_data}'], + [$card->name, $card->card_text ?? '(nincs leírás)', $tone, $maxLength, $currentCardData ?: '(nincs statisztika)'], + config('ai_prompts.ability_reroll.user_template') + ); + + // Inject max_length into system prompt + $systemPrompt = str_replace('{max_length}', $maxLength, config('ai_prompts.ability_reroll.system')); + + $response = $this->ai->chat( + systemPrompt: $systemPrompt, + userPrompt: $userPrompt, + options: ['json_mode' => true] + ); + + if (!$response->isSuccess) { + throw new AiSuggestionException($response->errorMessage ?? 'AI request failed.'); + } + + $data = $response->toJsonArray(); + + if (!$data || !isset($data['card_text'], $data['card_data'])) { + throw new AiSuggestionException('AI returned an invalid ability structure.'); + } + + // Truncate if over limit + $truncated = false; + if (strlen($data['card_text']) > $maxLength) { + $data['card_text'] = substr($data['card_text'], 0, $maxLength); + $truncated = true; + } + + $data['_truncated'] = $truncated; + + return $data; + } +} diff --git a/app/Services/Ai/CardSuggestionService.php b/app/Services/Ai/CardSuggestionService.php new file mode 100644 index 0000000..205a5f2 --- /dev/null +++ b/app/Services/Ai/CardSuggestionService.php @@ -0,0 +1,70 @@ +where('type_id', $cardTypeId) + ->latest() + ->limit(5) + ->get(['name', 'card_text', 'card_data']); + + $existingCardsContext = ''; + if ($existingCards->isNotEmpty()) { + $lines = $existingCards->map(function ($card) { + $fields = collect($card->card_data ?? [])->map(fn($f) => "{$f['fieldname']}: {$f['fieldvalue']}")->join(', '); + return "- {$card->name}: {$card->card_text}" . ($fields ? " [{$fields}]" : ''); + })->join("\n"); + $existingCardsContext = "\n**Meglévő kártyák ebben a típusban (stílushoz)**:\n{$lines}"; + } + + $userPrompt = str_replace( + ['{game_name}', '{card_type_name}', '{generation_goal}', '{existing_cards_context}'], + [$game->name, $cardType->name, $goal ?: 'Kiegyensúlyozott, általános kártya', $existingCardsContext], + config('ai_prompts.card_suggestion.user_template') + ); + + $response = $this->ai->chat( + systemPrompt: config('ai_prompts.card_suggestion.system'), + userPrompt: $userPrompt, + options: ['json_mode' => true] + ); + + if (!$response->isSuccess) { + throw new AiSuggestionException($response->errorMessage ?? 'AI request failed.'); + } + + $data = $response->toJsonArray(); + + if (!$data || !isset($data['name'], $data['card_text'], $data['card_data'])) { + throw new AiSuggestionException('AI returned an invalid card structure.'); + } + + return $data; + } +} diff --git a/app/Services/Ai/CardSwapService.php b/app/Services/Ai/CardSwapService.php new file mode 100644 index 0000000..0b7d1ba --- /dev/null +++ b/app/Services/Ai/CardSwapService.php @@ -0,0 +1,111 @@ +find($deckId); + + if (!$deck) { + throw new AiSuggestionException('Deck not found.'); + } + + $deckData = $deck->deck_data ?? []; + + if (empty($deckData)) { + throw new AiSuggestionException('The deck has no cards.'); + } + + $cardIds = collect($deckData)->pluck('card_id')->filter()->unique()->values()->toArray(); + $deckCards = Card::whereIn('id', $cardIds)->get(['id', 'name', 'card_text', 'card_data']); + + // Load alternative cards from same game + $alternatives = Card::where('game_id', $deck->game_id) + ->whereNotIn('id', $cardIds) + ->get(['id', 'name', 'card_text', 'card_data']); + + if ($alternatives->isEmpty()) { + throw new AiSuggestionException('No alternative cards available in this game for swapping.'); + } + + $deckList = collect($deckData)->map(function ($item) use ($deckCards) { + $card = $deckCards->firstWhere('id', $item['card_id']); + if (!$card) return null; + $qty = $item['quantity'] ?? 1; + $fields = collect($card->card_data ?? [])->map(fn($f) => "{$f['fieldname']}: {$f['fieldvalue']}")->join(', '); + return "- [{$qty}x] {$card->name}: {$card->card_text}" . ($fields ? " [{$fields}]" : ''); + })->filter()->join("\n"); + + $alternativePool = $alternatives->map(function ($card) { + $fields = collect($card->card_data ?? [])->map(fn($f) => "{$f['fieldname']}: {$f['fieldvalue']}")->join(', '); + return "- {$card->name}: {$card->card_text}" . ($fields ? " [{$fields}]" : ''); + })->join("\n"); + + $userPrompt = str_replace( + ['{deck_list}', '{alternative_pool}'], + [$deckList, $alternativePool], + config('ai_prompts.card_swap.user_template') + ); + + $response = $this->ai->chat( + systemPrompt: config('ai_prompts.card_swap.system'), + userPrompt: $userPrompt, + options: ['json_mode' => true] + ); + + if (!$response->isSuccess) { + throw new AiSuggestionException($response->errorMessage ?? 'AI request failed.'); + } + + $raw = $response->toJsonArray(); + + if (!is_array($raw) || empty($raw)) { + throw new AiSuggestionException('AI returned no swap suggestions.'); + } + + // Enrich each suggestion with card IDs for UI use + $suggestions = []; + foreach ($raw as $item) { + if (!isset($item['remove_name'], $item['replace_with_name'], $item['reason'])) { + continue; + } + + $removeCard = $deckCards->first(fn($c) => strcasecmp($c->name, $item['remove_name']) === 0); + $replaceCard = $alternatives->first(fn($c) => strcasecmp($c->name, $item['replace_with_name']) === 0); + + if (!$removeCard || !$replaceCard) { + continue; // skip invalid suggestions + } + + $suggestions[] = [ + 'remove_id' => $removeCard->id, + 'remove_name' => $removeCard->name, + 'replace_with_id' => $replaceCard->id, + 'replace_with_name'=> $replaceCard->name, + 'reason' => $item['reason'], + ]; + } + + if (empty($suggestions)) { + throw new AiSuggestionException('AI suggestions could not be matched to existing cards.'); + } + + return $suggestions; + } +} diff --git a/app/Services/Ai/DeckAnalyticsService.php b/app/Services/Ai/DeckAnalyticsService.php new file mode 100644 index 0000000..654e61a --- /dev/null +++ b/app/Services/Ai/DeckAnalyticsService.php @@ -0,0 +1,91 @@ +find($deckId); + + if (!$deck) { + throw new AiSuggestionException('Deck not found.'); + } + + $deckData = $deck->deck_data ?? []; + + if (empty($deckData)) { + throw new AiSuggestionException('The deck has no cards to analyze.'); + } + + // Resolve all card IDs in the deck + $cardIds = collect($deckData)->pluck('card_id')->filter()->unique()->values()->toArray(); + $cards = Card::whereIn('id', $cardIds)->get(['id', 'name', 'card_text', 'card_data']); + + if ($cards->isEmpty()) { + throw new AiSuggestionException('No valid cards found in the deck.'); + } + + // Build deck list string + $deckList = collect($deckData)->map(function ($item) use ($cards) { + $card = $cards->firstWhere('id', $item['card_id']); + if (!$card) return null; + $qty = $item['quantity'] ?? 1; + $fields = collect($card->card_data ?? [])->map(fn($f) => "{$f['fieldname']}: {$f['fieldvalue']}")->join(', '); + return "- [{$qty}x] {$card->name}: {$card->card_text}" . ($fields ? " [{$fields}]" : ''); + })->filter()->join("\n"); + + // Load top-10 alternatives from same game, not in deck + $alternatives = Card::where('game_id', $deck->game_id) + ->whereNotIn('id', $cardIds) + ->get(['id', 'name', 'card_text', 'card_data']) + ->sortByDesc(fn($c) => count($c->card_data ?? [])) + ->take(10); + + $alternativePool = $alternatives->map(function ($card) { + $fields = collect($card->card_data ?? [])->map(fn($f) => "{$f['fieldname']}: {$f['fieldvalue']}")->join(', '); + return "- {$card->name}: {$card->card_text}" . ($fields ? " [{$fields}]" : ''); + })->join("\n") ?: '(Nincs elérhető alternatív kártya)'; + + // Game rules summary + $gameRules = "Játék neve: {$deck->game->name}"; + + $userPrompt = str_replace( + ['{game_rules}', '{deck_list}', '{alternative_pool}'], + [$gameRules, $deckList, $alternativePool], + config('ai_prompts.deck_analytics.user_template') + ); + + $response = $this->ai->chat( + systemPrompt: config('ai_prompts.deck_analytics.system'), + userPrompt: $userPrompt, + options: ['json_mode' => true] + ); + + if (!$response->isSuccess) { + throw new AiSuggestionException($response->errorMessage ?? 'AI request failed.'); + } + + $data = $response->toJsonArray(); + + if (!$data || !isset($data['overall_score'], $data['synergy_report'])) { + throw new AiSuggestionException('AI returned an invalid analytics structure.'); + } + + return $data; + } +} diff --git a/config/ai.php b/config/ai.php index 0251611..7a8f9c0 100644 --- a/config/ai.php +++ b/config/ai.php @@ -92,6 +92,13 @@ ], + /* + |-------------------------------------------------------------------------- + | Card Suggestion Settings + |-------------------------------------------------------------------------- + */ + 'ability_max_length' => env('AI_ABILITY_MAX_LENGTH', 500), + /* |-------------------------------------------------------------------------- | Logging diff --git a/config/ai_prompts.php b/config/ai_prompts.php index 09f92f1..a44a45b 100644 --- a/config/ai_prompts.php +++ b/config/ai_prompts.php @@ -68,6 +68,204 @@ TEMPLATE, ], + /* + |-------------------------------------------------------------------------- + | Card Suggestion Prompt + |-------------------------------------------------------------------------- + | + | Used by CardSuggestionService to generate a full card from game context. + | + */ + 'card_suggestion' => [ + 'version' => '1.0.0', + + 'system' => <<<'PROMPT' +Te egy senior TCG (Trading Card Game) tervező és matematikai egyensúly-szakértő vagy. A feladatod új kártyák generálása a Cards Forge ökoszisztémába a megadott játék és kártyatípus paraméterek alapján. + +## Generálási Szabályok + +**Konzisztencia**: Tartsd meg a játék stílusát és témáját. +**Egyensúly**: Az értékek (cost, power, toughness) legyenek arányosak. Alacsony cost = közepes statisztikák. +**Stílus**: A "lore_text" legyen rövid, hangulatos, max 120 karakter. +**card_data**: Minden statisztika [{fieldname, fieldvalue}] formátumban, max 8 mező. + +## Kötelező JSON Kimenet + +A válaszod kizárólag egy valid JSON objektum lehet, markdown blokkok nélkül: + +{ + "name": "Kártya neve", + "card_text": "Képesség leírása, max 300 karakter", + "lore_text": "Rövid hangulati szöveg, max 120 karakter", + "rarity": "Common|Uncommon|Rare|Legendary", + "card_data": [ + {"fieldname": "Cost", "fieldvalue": "3"}, + {"fieldname": "Power", "fieldvalue": "4"}, + {"fieldname": "Toughness", "fieldvalue": "2"} + ], + "ai_logic_note": "Rövid tervezői megjegyzés" +} +PROMPT, + + 'user_template' => <<<'TEMPLATE' +Generálj egy új kártyát a következő paraméterekkel: + +**Játék**: {game_name} +**Kártya típus**: {card_type_name} +**Cél / Generálási irány**: {generation_goal} +{existing_cards_context} +TEMPLATE, + ], + + /* + |-------------------------------------------------------------------------- + | Ability Re-roll Prompt + |-------------------------------------------------------------------------- + | + | Used by AbilityRerollService to regenerate card_text and card_data with tone. + | + */ + 'ability_reroll' => [ + 'version' => '1.0.0', + + 'system' => <<<'PROMPT' +Te egy TCG képesség-tervező vagy. A feladatod egy meglévő kártya képességeinek újragenerálása a megadott hangnem (Tone) alapján, az eredeti kártya kontextusának megtartásával. + +## Szabályok + +**Tone**: Strictly follow the requested tone — Aggressive means attack/damage focus, Defensive means protection/shield focus, Support means buff/heal others, Balanced means mixed. +**Hossz**: A "card_text" max {max_length} karakter lehet. +**card_data**: Tartsd meg a meglévő fieldname-eket, de módosíthatod a fieldvalue-kat. + +## Kötelező JSON Kimenet + +A válaszod kizárólag valid JSON lehet: + +{ + "card_text": "Újragenerált képesség leírás", + "card_data": [ + {"fieldname": "fieldname1", "fieldvalue": "new_value"} + ], + "ai_logic_note": "Miért ezeket az értékeket választottam" +} +PROMPT, + + 'user_template' => <<<'TEMPLATE' +Generáld újra a következő kártya képességeit: + +**Kártya neve**: {card_name} +**Jelenlegi leírás**: {current_description} +**Kért hangnem (Tone)**: {tone} +**Max szöveg hossz**: {max_length} karakter + +**Jelenlegi statisztikák**: +{current_card_data} +TEMPLATE, + ], + + /* + |-------------------------------------------------------------------------- + | Deck Analytics Prompt + |-------------------------------------------------------------------------- + | + | Used by DeckAnalyticsService for full deck synergy analysis. + | + */ + 'deck_analytics' => [ + 'version' => '1.0.0', + + 'system' => <<<'PROMPT' +Te egy Master TCG Strategist és Data Analyst vagy. Specialitásod a pakli-optimalizálás, a meta-elemzés és a matematikai valószínűségszámítás. Feladatod a Cards Forge rendszerben létrehozott paklik mélyelemzése, a szinergiák feltárása és a gyenge pontok azonosítása. + +## Elemzési Szempontok + +- **Szinergia Index**: Milyen mértékben támogatják egymást a kártyák képességei? Vannak-e "dead card"-ok? +- **Erőforrás Görbe (Cost Curve)**: Mennyire egyenletes a pakli költségeloszlása? +- **Taktikai Diverzitás**: Rendelkezik-e a pakli válaszokkal különböző fenyegetésekre? +- **Mobilitás**: Ha figurákat tartalmaz, mennyire hatékony a mozgásuk? + +## Kötelező JSON Kimenet + +A válaszod kizárólag valid JSON lehet, az alábbi struktúrában: + +{ + "overall_score": 75, + "archetype": "Control", + "synergy_report": { + "rating": "Medium", + "key_combos": ["Kártya A + Kártya B: indoklás"], + "anti_synergies": ["Kártya C rontja Kártya D esélyeit, mert..."] + }, + "curve_analysis": "Szöveges értékelés a költségekről", + "weaknesses": ["Kevés az alacsony költségű védekező egység."], + "optimization_suggestions": [ + { + "remove": "Kártya neve", + "replace_with": "Alternatív kártya neve", + "reason": "Indoklás" + } + ], + "win_rate_prediction": "65%" +} +PROMPT, + + 'user_template' => <<<'TEMPLATE' +Elemezd a következő paklit: + +**Játék szabályai**: {game_rules} + +**Pakli tartalma**: +{deck_list} + +**Elérhető alternatív kártyák (top 10)**: +{alternative_pool} +TEMPLATE, + ], + + /* + |-------------------------------------------------------------------------- + | Card Swap Prompt + |-------------------------------------------------------------------------- + | + | Used by CardSwapService for targeted card swap suggestions. + | + */ + 'card_swap' => [ + 'version' => '1.0.0', + + 'system' => <<<'PROMPT' +Te egy TCG pakli-optimalizáló vagy. Feladatod konkrét kártyacsere-javaslatokat tenni egy paklihoz az elérhető alternatívák alapján. + +## Szabályok + +- Csak az "Elérhető alternatív kártyák" listájából javasolj cserekártyákat. +- Minden javaslathoz adj konkrét indoklást. +- Maximum 5 javaslatot adj. + +## Kötelező JSON Kimenet + +A válaszod kizárólag valid JSON tömb lehet: + +[ + { + "remove_name": "Kiveendő kártya neve", + "replace_with_name": "Behelyezendő kártya neve", + "reason": "Miért jobb ez a csere" + } +] +PROMPT, + + 'user_template' => <<<'TEMPLATE' +Javasolj kártyacseréket a következő paklihoz: + +**Pakli tartalma**: +{deck_list} + +**Elérhető alternatív kártyák**: +{alternative_pool} +TEMPLATE, + ], + /* |-------------------------------------------------------------------------- | Connection Test Prompt diff --git a/public/build/assets/app-C1D18bxO.css b/public/build/assets/app-C1D18bxO.css new file mode 100644 index 0000000..f23cd3b --- /dev/null +++ b/public/build/assets/app-C1D18bxO.css @@ -0,0 +1 @@ +/*! tailwindcss v4.1.13 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:"Instrument Sans",ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-600:oklch(51.1% .262 276.966);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--leading-loose:2;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-4{inset:calc(var(--spacing)*4)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.start-0{inset-inline-start:calc(var(--spacing)*0)}.start-full{inset-inline-start:100%}.end-0{inset-inline-end:calc(var(--spacing)*0)}.end-4{inset-inline-end:calc(var(--spacing)*4)}.end-6{inset-inline-end:calc(var(--spacing)*6)}.-top-1\/2{top:-50%}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-3{top:calc(var(--spacing)*3)}.top-4{top:calc(var(--spacing)*4)}.top-6{top:calc(var(--spacing)*6)}.top-10{top:calc(var(--spacing)*10)}.top-20{top:calc(var(--spacing)*20)}.top-24{top:calc(var(--spacing)*24)}.right-0{right:calc(var(--spacing)*0)}.right-1\.5{right:calc(var(--spacing)*1.5)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-10{right:calc(var(--spacing)*10)}.right-20{right:calc(var(--spacing)*20)}.-bottom-1\/2{bottom:-50%}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1\/2{bottom:50%}.bottom-10{bottom:calc(var(--spacing)*10)}.bottom-20{bottom:calc(var(--spacing)*20)}.left-1\.5{left:calc(var(--spacing)*1.5)}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-10{left:calc(var(--spacing)*10)}.left-20{left:calc(var(--spacing)*20)}.left-full{left:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.col-\[--col-span-default\]{grid-column:--col-span-default}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:--col-start-default}.row-start-2{grid-row-start:2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-m-0\.5{margin:calc(var(--spacing)*-.5)}.-m-1{margin:calc(var(--spacing)*-1)}.-m-1\.5{margin:calc(var(--spacing)*-1.5)}.-m-2{margin:calc(var(--spacing)*-2)}.-m-2\.5{margin:calc(var(--spacing)*-2.5)}.-m-3{margin:calc(var(--spacing)*-3)}.-m-3\.5{margin:calc(var(--spacing)*-3.5)}.-mx-2{margin-inline:calc(var(--spacing)*-2)}.-mx-4{margin-inline:calc(var(--spacing)*-4)}.-mx-6{margin-inline:calc(var(--spacing)*-6)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-auto{margin-inline:auto}.-my-1{margin-block:calc(var(--spacing)*-1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-4{margin-block:calc(var(--spacing)*4)}.my-16{margin-block:calc(var(--spacing)*16)}.my-auto{margin-block:auto}.-ms-0\.5{margin-inline-start:calc(var(--spacing)*-.5)}.-ms-1{margin-inline-start:calc(var(--spacing)*-1)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-6{margin-inline-start:calc(var(--spacing)*6)}.ms-auto{margin-inline-start:auto}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1{margin-inline-end:calc(var(--spacing)*1)}.me-4{margin-inline-end:calc(var(--spacing)*4)}.me-6{margin-inline-end:calc(var(--spacing)*6)}.-mt-6{margin-top:calc(var(--spacing)*-6)}.-mt-7{margin-top:calc(var(--spacing)*-7)}.-mt-px{margin-top:-1px}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-20{margin-top:calc(var(--spacing)*20)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.-mb-4{margin-bottom:calc(var(--spacing)*-4)}.-mb-6{margin-bottom:calc(var(--spacing)*-6)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-px{margin-left:-1px}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-\[--line-clamp\]{-webkit-line-clamp:--line-clamp;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.aspect-\[3\/4\]{aspect-ratio:3/4}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-32{height:calc(var(--spacing)*32)}.h-\[100dvh\]{height:100dvh}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:calc(var(--spacing)*96)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/2{width:50%}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.w-screen{width:100vw}.\!max-w-2xl{max-width:var(--container-2xl)!important}.\!max-w-3xl{max-width:var(--container-3xl)!important}.\!max-w-4xl{max-width:var(--container-4xl)!important}.\!max-w-5xl{max-width:var(--container-5xl)!important}.\!max-w-6xl{max-width:var(--container-6xl)!important}.\!max-w-7xl{max-width:var(--container-7xl)!important}.\!max-w-\[14rem\]{max-width:14rem!important}.\!max-w-lg{max-width:var(--container-lg)!important}.\!max-w-md{max-width:var(--container-md)!important}.\!max-w-sm{max-width:var(--container-sm)!important}.\!max-w-xl{max-width:var(--container-xl)!important}.\!max-w-xs{max-width:var(--container-xs)!important}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-fit{max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-max{max-width:max-content}.max-w-md{max-width:var(--container-md)}.max-w-min{max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:var(--breakpoint-2xl)}.max-w-screen-lg{max-width:var(--breakpoint-lg)}.max-w-screen-md{max-width:var(--breakpoint-md)}.max-w-screen-sm{max-width:var(--breakpoint-sm)}.max-w-screen-xl{max-width:var(--breakpoint-xl)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-48{min-width:calc(var(--spacing)*48)}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\/4{--tw-translate-x: -25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-12{--tw-translate-x:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-12{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-3\/4{--tw-translate-y: -75% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-12{--tw-translate-y:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-12{--tw-translate-y:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.-rotate-180{rotate:-180deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)!important}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{columns:--cols-default}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:--cols-default}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\,minmax\(theme\(spacing\.7\)\,1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\,minmax\(0\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-center{justify-items:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-2{column-gap:calc(var(--spacing)*2)}.gap-x-2\.5{column-gap:calc(var(--spacing)*2.5)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-x-5{column-gap:calc(var(--spacing)*5)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.-space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-3)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-4)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-5)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-6)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-7>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-7)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-7)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-8)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.gap-y-3{row-gap:calc(var(--spacing)*3)}.gap-y-4{row-gap:calc(var(--spacing)*4)}.gap-y-6{row-gap:calc(var(--spacing)*6)}.gap-y-7{row-gap:calc(var(--spacing)*7)}.gap-y-8{row-gap:calc(var(--spacing)*8)}.gap-y-px{row-gap:1px}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-100>:not(:last-child)){border-color:var(--color-gray-100)}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-center{justify-self:center}.justify-self-end{justify-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-clip{overflow-x:clip}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-b-xl{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-x-\[0\.5px\]{border-inline-style:var(--tw-border-style);border-inline-width:.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.\!border-t-0{border-top-style:var(--tw-border-style)!important;border-top-width:0!important}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-none{--tw-border-style:none;border-style:none}.border-blue-200{border-color:var(--color-blue-200)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-400{border-color:var(--color-gray-400)}.border-gray-600{border-color:var(--color-gray-600)}.border-red-200{border-color:var(--color-red-200)}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-700\/50{border-color:#31415880}@supports (color:color-mix(in lab,red,red)){.border-slate-700\/50{border-color:color-mix(in oklab,var(--color-slate-700)50%,transparent)}}.border-transparent{border-color:#0000}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-600{background-color:var(--color-amber-600)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500\/75{background-color:#6a7282bf}@supports (color:color-mix(in lab,red,red)){.bg-gray-500\/75{background-color:color-mix(in oklab,var(--color-gray-500)75%,transparent)}}.bg-gray-900\/90{background-color:#101828e6}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/90{background-color:color-mix(in oklab,var(--color-gray-900)90%,transparent)}}.bg-gray-950\/50{background-color:#03071280}@supports (color:color-mix(in lab,red,red)){.bg-gray-950\/50{background-color:color-mix(in oklab,var(--color-gray-950)50%,transparent)}}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-600{background-color:var(--color-green-600)}.bg-green-600\/80{background-color:#00a544cc}@supports (color:color-mix(in lab,red,red)){.bg-green-600\/80{background-color:color-mix(in oklab,var(--color-green-600)80%,transparent)}}.bg-green-600\/90{background-color:#00a544e6}@supports (color:color-mix(in lab,red,red)){.bg-green-600\/90{background-color:color-mix(in oklab,var(--color-green-600)90%,transparent)}}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-600{background-color:var(--color-purple-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-slate-600{background-color:var(--color-slate-600)}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800\/30{background-color:#1d293d4d}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/30{background-color:color-mix(in oklab,var(--color-slate-800)30%,transparent)}}.bg-slate-800\/50{background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/50{background-color:color-mix(in oklab,var(--color-slate-800)50%,transparent)}}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/50{background-color:#0f172b80}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/50{background-color:color-mix(in oklab,var(--color-slate-900)50%,transparent)}}.bg-slate-900\/80{background-color:#0f172bcc}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/80{background-color:color-mix(in oklab,var(--color-slate-900)80%,transparent)}}.bg-slate-900\/90{background-color:#0f172be6}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/90{background-color:color-mix(in oklab,var(--color-slate-900)90%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/0{background-color:#0000}@supports (color:color-mix(in lab,red,red)){.bg-white\/0{background-color:color-mix(in oklab,var(--color-white)0%,transparent)}}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.\!bg-none{background-image:none!important}.from-amber-500{--tw-gradient-from:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-500{--tw-gradient-from:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-600{--tw-gradient-from:var(--color-red-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-600{--tw-gradient-from:var(--color-slate-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-700\/50{--tw-gradient-from:#31415880}@supports (color:color-mix(in lab,red,red)){.from-slate-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-slate-700)50%,transparent)}}.from-slate-700\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-900{--tw-gradient-from:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-slate-800{--tw-gradient-via:var(--color-slate-800);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-amber-500{--tw-gradient-to:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-amber-700{--tw-gradient-to:var(--color-amber-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-orange-600{--tw-gradient-to:var(--color-orange-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-800{--tw-gradient-to:var(--color-red-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-800{--tw-gradient-to:var(--color-slate-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-800\/50{--tw-gradient-to:#1d293d80}@supports (color:color-mix(in lab,red,red)){.to-slate-800\/50{--tw-gradient-to:color-mix(in oklab,var(--color-slate-800)50%,transparent)}}.to-slate-800\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-900{--tw-gradient-to:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-cover{background-size:cover}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-center{background-position:50%}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-center{object-position:center}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\.5{padding-inline:calc(var(--spacing)*3.5)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.py-20{padding-block:calc(var(--spacing)*20)}.ps-0{padding-inline-start:calc(var(--spacing)*0)}.ps-1{padding-inline-start:calc(var(--spacing)*1)}.ps-2{padding-inline-start:calc(var(--spacing)*2)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-4{padding-inline-start:calc(var(--spacing)*4)}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pe-0{padding-inline-end:calc(var(--spacing)*0)}.pe-1{padding-inline-end:calc(var(--spacing)*1)}.pe-2{padding-inline-end:calc(var(--spacing)*2)}.pe-3{padding-inline-end:calc(var(--spacing)*3)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pe-6{padding-inline-end:calc(var(--spacing)*6)}.pe-8{padding-inline-end:calc(var(--spacing)*8)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pl-6{padding-left:calc(var(--spacing)*6)}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-800{color:var(--color-amber-800)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-gray-100{color:var(--color-gray-100)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-700\/50{color:#36415380}@supports (color:color-mix(in lab,red,red)){.text-gray-700\/50{color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-gray-950{color:var(--color-gray-950)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-800{color:var(--color-green-800)}.text-orange-500{color:var(--color-orange-500)}.text-purple-500{color:var(--color-purple-500)}.text-purple-800{color:var(--color-purple-800)}.text-red-100{color:var(--color-red-100)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.placeholder-slate-400::placeholder{color:var(--color-slate-400)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-gray-100{--tw-ring-color:var(--color-gray-100)}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-600\/10{--tw-ring-color:#4a55651a}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)10%,transparent)}}.ring-gray-950\/5{--tw-ring-color:#0307120d}@supports (color:color-mix(in lab,red,red)){.ring-gray-950\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)5%,transparent)}}.ring-gray-950\/10{--tw-ring-color:#0307121a}@supports (color:color-mix(in lab,red,red)){.ring-gray-950\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)10%,transparent)}}.ring-white{--tw-ring-color:var(--color-white)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-100{transition-delay:.1s}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.\[program\:cards-api-queue-worker\]{program:cards-api-queue-worker}.ring-inset{--tw-ring-inset:inset}.group-first\/item\:rounded-s-lg:is(:where(.group\/item):first-child *){border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.group-last\/item\:rounded-e-lg:is(:where(.group\/item):last-child *){border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}@media (hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-red-400:is(:where(.group):hover *){color:var(--color-red-400)}.group-hover\:opacity-90:is(:where(.group):hover *){opacity:.9}.group-hover\/button\:text-gray-500:is(:where(.group\/button):hover *){color:var(--color-gray-500)}.group-hover\/item\:underline:is(:where(.group\/item):hover *),.group-hover\/link\:underline:is(:where(.group\/link):hover *){text-decoration-line:underline}}.group-focus-visible\:text-gray-500:is(:where(.group):focus-visible *){color:var(--color-gray-500)}.group-focus-visible\/item\:underline:is(:where(.group\/item):focus-visible *),.group-focus-visible\/link\:underline:is(:where(.group\/link):focus-visible *){text-decoration-line:underline}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.before\:start-0:before{content:var(--tw-content);inset-inline-start:calc(var(--spacing)*0)}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0\.5:before{content:var(--tw-content);width:calc(var(--spacing)*.5)}.first\:border-s-0:first-child{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\:border-e-0:last-child{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.first-of-type\:ps-1:first-of-type{padding-inline-start:calc(var(--spacing)*1)}.last-of-type\:pe-1:last-of-type{padding-inline-end:calc(var(--spacing)*1)}.checked\:ring-0:checked{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:transform:hover{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.hover\:border-red-500:hover{border-color:var(--color-red-500)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-400\/10:hover{background-color:#99a1af1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-400\/10:hover{background-color:color-mix(in oklab,var(--color-gray-400)10%,transparent)}}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-slate-600:hover{background-color:var(--color-slate-600)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-700\/75:hover{color:#364153bf}@supports (color:color-mix(in lab,red,red)){.hover\:text-gray-700\/75:hover{color:color-mix(in oklab,var(--color-gray-700)75%,transparent)}}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-slate-200:hover{color:var(--color-slate-200)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-red-500:focus{border-color:var(--color-red-500)}.focus\:ring:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:bg-gray-50:focus-visible{background-color:var(--color-gray-50)}.focus-visible\:bg-gray-100:focus-visible{background-color:var(--color-gray-100)}.focus-visible\:text-gray-500:focus-visible{color:var(--color-gray-500)}.focus-visible\:text-gray-700\/75:focus-visible{color:#364153bf}@supports (color:color-mix(in lab,red,red)){.focus-visible\:text-gray-700\/75:focus-visible{color:color-mix(in oklab,var(--color-gray-700)75%,transparent)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:#99a1af66}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)40%,transparent)}}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{background-color:var(--color-gray-50)}.disabled\:text-gray-50:disabled{color:var(--color-gray-50)}.disabled\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:oklch(55.1% .027 264.364)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:oklch(70.7% .022 261.325)}.disabled\:checked\:bg-gray-400:disabled:checked{background-color:var(--color-gray-400)}.disabled\:checked\:text-gray-400:disabled:checked{color:var(--color-gray-400)}@media (min-width:40rem){.sm\:col-\[--col-span-sm\]{grid-column:--col-span-sm}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:--col-start-sm}.sm\:-mx-6{margin-inline:calc(var(--spacing)*-6)}.sm\:mt-7{margin-top:calc(var(--spacing)*7)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:inline-grid{display:inline-grid}.sm\:table-cell{display:table-cell}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:flex-1{flex:1}.sm\:columns-\[--cols-sm\]{columns:--cols-sm}.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-\[--cols-sm\]{grid-template-columns:--cols-sm}.sm\:grid-cols-\[repeat\(auto-fit\,minmax\(0\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-start{justify-content:flex-start}.sm\:gap-x-4{column-gap:calc(var(--spacing)*4)}.sm\:rounded-xl{border-radius:var(--radius-xl)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-12{padding-inline:calc(var(--spacing)*12)}.sm\:py-1\.5{padding-block:calc(var(--spacing)*1.5)}.sm\:ps-3{padding-inline-start:calc(var(--spacing)*3)}.sm\:ps-6{padding-inline-start:calc(var(--spacing)*6)}.sm\:pe-3{padding-inline-end:calc(var(--spacing)*3)}.sm\:pe-6{padding-inline-end:calc(var(--spacing)*6)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.sm\:text-left{text-align:left}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:calc(var(--spacing)*3)}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:calc(var(--spacing)*3)}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}@media (min-width:48rem){.md\:bottom-4{bottom:calc(var(--spacing)*4)}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:--col-span-md}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:--col-start-md}.md\:block{display:block}.md\:hidden{display:none}.md\:inline{display:inline}.md\:inline-grid{display:inline-grid}.md\:table-cell{display:table-cell}.md\:columns-\[--cols-md\]{columns:--cols-md}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:--cols-md}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:items-start{align-items:flex-start}.md\:justify-end{justify-content:flex-end}.md\:rounded-xl{border-radius:var(--radius-xl)}.md\:px-6{padding-inline:calc(var(--spacing)*6)}.md\:ps-3{padding-inline-start:calc(var(--spacing)*3)}.md\:pe-6{padding-inline-end:calc(var(--spacing)*6)}.md\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media (min-width:64rem){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:--col-span-lg}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-start-\[--col-start-lg\]{grid-column-start:--col-start-lg}.lg\:mb-0{margin-bottom:calc(var(--spacing)*0)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-grid{display:inline-grid}.lg\:table-cell{display:table-cell}.lg\:-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.lg\:translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.lg\:columns-\[--cols-lg\]{columns:--cols-lg}.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-\[--cols-lg\]{grid-template-columns:--cols-lg}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:items-end{align-items:flex-end}.lg\:items-start{align-items:flex-start}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:bg-transparent{background-color:#0000}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pe-8{padding-inline-end:calc(var(--spacing)*8)}.lg\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}}@media (min-width:80rem){.xl\:col-\[--col-span-xl\]{grid-column:--col-span-xl}.xl\:col-start-\[--col-start-xl\]{grid-column-start:--col-start-xl}.xl\:hidden{display:none}.xl\:inline-grid{display:inline-grid}.xl\:table-cell{display:table-cell}.xl\:columns-\[--cols-xl\]{columns:--cols-xl}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:--cols-xl}.xl\:flex-row{flex-direction:row}.xl\:items-center{align-items:center}.xl\:items-end{align-items:flex-end}.xl\:items-start{align-items:flex-start}}@media (min-width:96rem){.\32xl\:col-\[--col-span-2xl\]{grid-column:--col-span-2xl}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:--col-start-2xl}.\32xl\:hidden{display:none}.\32xl\:inline-grid{display:inline-grid}.\32xl\:table-cell{display:table-cell}.\32xl\:columns-\[--cols-2xl\]{columns:--cols-2xl}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:--cols-2xl}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-center{align-items:center}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-start{align-items:flex-start}}.ltr\:hidden:where(:dir(ltr),[dir=ltr],[dir=ltr] *),.rtl\:hidden:where(:dir(rtl),[dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:-translate-x-5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-5);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:-translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-1\/2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-1\/4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x: 25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}@media (min-width:64rem){.rtl\:lg\:-translate-x-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:lg\:translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}}@media (prefers-color-scheme:dark){.dark\:flex{display:flex}.dark\:hidden{display:none}:where(.dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}:where(.dark\:divide-white\/5>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){:where(.dark\:divide-white\/5>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:where(.dark\:divide-white\/10>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){:where(.dark\:divide-white\/10>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-600{border-color:var(--color-gray-600)}.dark\:border-gray-700{border-color:var(--color-gray-700)}.dark\:border-gray-800{border-color:var(--color-gray-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/5{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:border-t-white\/10{border-top-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-t-white\/10{border-top-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:bg-amber-900\/30{background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/30{background-color:color-mix(in oklab,var(--color-amber-900)30%,transparent)}}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark\:bg-gray-400\/10{background-color:#99a1af1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-400\/10{background-color:color-mix(in oklab,var(--color-gray-400)10%,transparent)}}.dark\:bg-gray-500{background-color:var(--color-gray-500)}.dark\:bg-gray-500\/20{background-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-500\/20{background-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/75{background-color:#101828bf}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-900\/75{background-color:color-mix(in oklab,var(--color-gray-900)75%,transparent)}}.dark\:bg-gray-950{background-color:var(--color-gray-950)}.dark\:bg-gray-950\/75{background-color:#030712bf}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-950\/75{background-color:color-mix(in oklab,var(--color-gray-950)75%,transparent)}}.dark\:bg-green-900{background-color:var(--color-green-900)}.dark\:bg-green-900\/30{background-color:#0d542b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-green-900\/30{background-color:color-mix(in oklab,var(--color-green-900)30%,transparent)}}.dark\:bg-purple-900{background-color:var(--color-purple-900)}.dark\:bg-red-900{background-color:var(--color-red-900)}.dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark\:bg-transparent{background-color:#0000}.dark\:bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark\:text-amber-400{color:var(--color-amber-400)}.dark\:text-blue-100{color:var(--color-blue-100)}.dark\:text-blue-200{color:var(--color-blue-200)}.dark\:text-blue-300{color:var(--color-blue-300)}.dark\:text-blue-400{color:var(--color-blue-400)}.dark\:text-gray-100{color:var(--color-gray-100)}.dark\:text-gray-200{color:var(--color-gray-200)}.dark\:text-gray-300{color:var(--color-gray-300)}.dark\:text-gray-300\/50{color:#d1d5dc80}@supports (color:color-mix(in lab,red,red)){.dark\:text-gray-300\/50{color:color-mix(in oklab,var(--color-gray-300)50%,transparent)}}.dark\:text-gray-400{color:var(--color-gray-400)}.dark\:text-gray-500{color:var(--color-gray-500)}.dark\:text-gray-600{color:var(--color-gray-600)}.dark\:text-gray-700{color:var(--color-gray-700)}.dark\:text-gray-800{color:var(--color-gray-800)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-red-100{color:var(--color-red-100)}.dark\:text-red-200{color:var(--color-red-200)}.dark\:text-red-300{color:var(--color-red-300)}.dark\:text-red-400{color:var(--color-red-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-yellow-200{color:var(--color-yellow-200)}.dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark\:ring-gray-700{--tw-ring-color:var(--color-gray-700)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-gray-900{--tw-ring-color:var(--color-gray-900)}.dark\:ring-white\/10{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:ring-white\/10{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:ring-white\/20{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:ring-white\/20{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}@media (hover:hover){.dark\:group-hover\:text-gray-400:is(:where(.group):hover *),.dark\:group-hover\/button\:text-gray-400:is(:where(.group\/button):hover *){color:var(--color-gray-400)}}.dark\:group-focus-visible\:text-gray-400:is(:where(.group):focus-visible *){color:var(--color-gray-400)}.dark\:placeholder\:text-gray-500::placeholder{color:var(--color-gray-500)}@media (hover:hover){.dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark\:hover\:text-gray-200:hover{color:var(--color-gray-200)}.dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark\:hover\:text-gray-300\/75:hover{color:#d1d5dcbf}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:text-gray-300\/75:hover{color:color-mix(in oklab,var(--color-gray-300)75%,transparent)}}.dark\:hover\:text-gray-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:ring-white\/20:hover{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:ring-white\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}}.dark\:focus\:border-blue-700:focus{border-color:var(--color-blue-700)}.dark\:focus\:border-blue-800:focus{border-color:var(--color-blue-800)}.dark\:focus-visible\:bg-white\/5:focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:bg-white\/5:focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:focus-visible\:text-gray-300\/75:focus-visible{color:#d1d5dcbf}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:text-gray-300\/75:focus-visible{color:color-mix(in oklab,var(--color-gray-300)75%,transparent)}}.dark\:focus-visible\:text-gray-400:focus-visible{color:var(--color-gray-400)}.dark\:focus-visible\:ring-offset-gray-900:focus-visible{--tw-ring-offset-color:var(--color-gray-900)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}.dark\:disabled\:bg-transparent:disabled{background-color:#0000}.dark\:disabled\:text-gray-400:disabled{color:var(--color-gray-400)}.dark\:disabled\:ring-white\/10:disabled{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:disabled\:ring-white\/10:disabled{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled{-webkit-text-fill-color:oklch(70.7% .022 261.325)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled::placeholder{-webkit-text-fill-color:oklch(55.1% .027 264.364)}.dark\:disabled\:checked\:bg-gray-600:disabled:checked{background-color:var(--color-gray-600)}@media (min-width:64rem){.dark\:lg\:bg-transparent{background-color:#0000}}}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:calc(var(--spacing)*0)}.\[\&_optgroup\]\:bg-white optgroup{background-color:var(--color-white)}@media (prefers-color-scheme:dark){.\[\&_optgroup\]\:dark\:bg-gray-900 optgroup{background-color:var(--color-gray-900)}}.\[\&_option\]\:bg-white option{background-color:var(--color-white)}@media (prefers-color-scheme:dark){.\[\&_option\]\:dark\:bg-gray-900 option{background-color:var(--color-gray-900)}}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:not(:has(.fi-ac-action:focus)):focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of.fi-btn)){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,oklch(92.8% .006 264.531));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (prefers-color-scheme:dark){.dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of.fi-btn)){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,oklab(100% 0 5.96046e-8/.2));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of.fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of.fi-btn){border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of.fi-btn){border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:calc(var(--spacing)*.5)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:calc(var(--spacing)*0)}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{color:var(--color-white)}@media (hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[\@media\(hover\:hover\)\]\:duration-75{--tw-duration:75ms;transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-gray-400{background-color:var(--color-gray-400)}input:checked+.\[input\:checked\+\&\]\:text-white{color:var(--color-white)}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){input:checked+.\[input\:checked\+\&\]\:hover\:bg-gray-300:hover{background-color:var(--color-gray-300)}}@media (prefers-color-scheme:dark){input:checked+.dark\:\[input\:checked\+\&\]\:bg-gray-600{background-color:var(--color-gray-600)}@media (hover:hover){input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}}}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:#0307121a}@supports (color:color-mix(in lab,red,red)){input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)10%,transparent)}}@media (prefers-color-scheme:dark){input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}}}.card-hover{transition:all .3s}.card-hover:hover{transform:translateY(-4px);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.card-flip{perspective:1000px}.card-flip-inner{transform-style:preserve-3d;width:100%;height:100%;transition:transform .6s;position:relative}.card-flip:hover .card-flip-inner{transform:rotateY(180deg)}.card-flip .card-front,.card-flip .card-back{backface-visibility:hidden;width:100%;height:100%;position:absolute}.card-flip .card-back{transform:rotateY(180deg)}.gradient-bg{background:linear-gradient(135deg,#1e293b,#334155,#475569)}.card-glow{box-shadow:0 0 20px #ef44444d}.pulse-glow{animation:2s infinite pulse-glow}@keyframes pulse-glow{0%,to{box-shadow:0 0 20px #ef44444d}50%{box-shadow:0 0 30px #ef444480}}@media (max-width:640px){h1{font-size:2.5rem}h2{font-size:1.875rem}p{font-size:1rem}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/public/build/assets/app-cHkKdsAV.css b/public/build/assets/app-cHkKdsAV.css deleted file mode 100644 index 76c007f..0000000 --- a/public/build/assets/app-cHkKdsAV.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.1.13 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:"Instrument Sans",ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-900:oklch(37.8% .077 168.94);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-600:oklch(51.1% .262 276.966);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-900:oklch(41% .159 10.272);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-neutral-950:oklch(14.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--leading-loose:2;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-4{inset:calc(var(--spacing)*4)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.start-0{inset-inline-start:calc(var(--spacing)*0)}.start-full{inset-inline-start:100%}.end-0{inset-inline-end:calc(var(--spacing)*0)}.end-4{inset-inline-end:calc(var(--spacing)*4)}.end-6{inset-inline-end:calc(var(--spacing)*6)}.-top-1{top:calc(var(--spacing)*-1)}.-top-1\/2{top:-50%}.-top-2{top:calc(var(--spacing)*-2)}.-top-3{top:calc(var(--spacing)*-3)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-3{top:calc(var(--spacing)*3)}.top-4{top:calc(var(--spacing)*4)}.top-6{top:calc(var(--spacing)*6)}.top-10{top:calc(var(--spacing)*10)}.top-20{top:calc(var(--spacing)*20)}.top-24{top:calc(var(--spacing)*24)}.top-\[-1px\]{top:-1px}.right-0{right:calc(var(--spacing)*0)}.right-1\.5{right:calc(var(--spacing)*1.5)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-10{right:calc(var(--spacing)*10)}.right-20{right:calc(var(--spacing)*20)}.-bottom-1\/2{bottom:-50%}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1\/2{bottom:50%}.bottom-10{bottom:calc(var(--spacing)*10)}.bottom-20{bottom:calc(var(--spacing)*20)}.left-0{left:calc(var(--spacing)*0)}.left-1\.5{left:calc(var(--spacing)*1.5)}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-10{left:calc(var(--spacing)*10)}.left-20{left:calc(var(--spacing)*20)}.left-full{left:100%}.isolate{isolation:isolate}.-z-10{z-index:-10}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.col-\[--col-span-default\]{grid-column:--col-span-default}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:--col-start-default}.row-start-2{grid-row-start:2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-m-0\.5{margin:calc(var(--spacing)*-.5)}.-m-1{margin:calc(var(--spacing)*-1)}.-m-1\.5{margin:calc(var(--spacing)*-1.5)}.-m-2{margin:calc(var(--spacing)*-2)}.-m-2\.5{margin:calc(var(--spacing)*-2.5)}.-m-3{margin:calc(var(--spacing)*-3)}.-m-3\.5{margin:calc(var(--spacing)*-3.5)}.-mx-2{margin-inline:calc(var(--spacing)*-2)}.-mx-4{margin-inline:calc(var(--spacing)*-4)}.-mx-6{margin-inline:calc(var(--spacing)*-6)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-auto{margin-inline:auto}.-my-1{margin-block:calc(var(--spacing)*-1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-4{margin-block:calc(var(--spacing)*4)}.my-16{margin-block:calc(var(--spacing)*16)}.my-auto{margin-block:auto}.-ms-0\.5{margin-inline-start:calc(var(--spacing)*-.5)}.-ms-1{margin-inline-start:calc(var(--spacing)*-1)}.-ms-2{margin-inline-start:calc(var(--spacing)*-2)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-6{margin-inline-start:calc(var(--spacing)*6)}.ms-auto{margin-inline-start:auto}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1{margin-inline-end:calc(var(--spacing)*1)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-4{margin-inline-end:calc(var(--spacing)*4)}.me-6{margin-inline-end:calc(var(--spacing)*6)}.\!mt-0{margin-top:calc(var(--spacing)*0)!important}.-mt-3{margin-top:calc(var(--spacing)*-3)}.-mt-4{margin-top:calc(var(--spacing)*-4)}.-mt-5{margin-top:calc(var(--spacing)*-5)}.-mt-6{margin-top:calc(var(--spacing)*-6)}.-mt-7{margin-top:calc(var(--spacing)*-7)}.-mt-px{margin-top:-1px}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-20{margin-top:calc(var(--spacing)*20)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-6{margin-right:calc(var(--spacing)*6)}.-mb-4{margin-bottom:calc(var(--spacing)*-4)}.-mb-6{margin-bottom:calc(var(--spacing)*-6)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-px{margin-left:-1px}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-\[--line-clamp\]{-webkit-line-clamp:--line-clamp;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.aspect-\[3\/4\]{aspect-ratio:3/4}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-32{height:calc(var(--spacing)*32)}.h-96{height:calc(var(--spacing)*96)}.h-\[18px\]{height:18px}.h-\[56px\]{height:56px}.h-\[100dvh\]{height:100dvh}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:calc(var(--spacing)*96)}.min-h-\[theme\(spacing\.48\)\]{min-height:12rem}.min-h-dvh{min-height:100dvh}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/2{width:50%}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-72{width:calc(var(--spacing)*72)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[18px\]{width:18px}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.w-screen{width:100vw}.\!max-w-2xl{max-width:var(--container-2xl)!important}.\!max-w-3xl{max-width:var(--container-3xl)!important}.\!max-w-4xl{max-width:var(--container-4xl)!important}.\!max-w-5xl{max-width:var(--container-5xl)!important}.\!max-w-6xl{max-width:var(--container-6xl)!important}.\!max-w-7xl{max-width:var(--container-7xl)!important}.\!max-w-\[14rem\]{max-width:14rem!important}.\!max-w-lg{max-width:var(--container-lg)!important}.\!max-w-md{max-width:var(--container-md)!important}.\!max-w-sm{max-width:var(--container-sm)!important}.\!max-w-xl{max-width:var(--container-xl)!important}.\!max-w-xs{max-width:var(--container-xs)!important}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-fit{max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-max{max-width:max-content}.max-w-md{max-width:var(--container-md)}.max-w-min{max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:var(--breakpoint-2xl)}.max-w-screen-lg{max-width:var(--breakpoint-lg)}.max-w-screen-md{max-width:var(--breakpoint-md)}.max-w-screen-sm{max-width:var(--breakpoint-sm)}.max-w-screen-xl{max-width:var(--breakpoint-xl)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-6{min-width:calc(var(--spacing)*6)}.min-w-48{min-width:calc(var(--spacing)*48)}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.min-w-\[theme\(spacing\.8\)\]{min-width:2rem}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\/4{--tw-translate-x: -25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-12{--tw-translate-x:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-12{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-3\/4{--tw-translate-y: -75% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-12{--tw-translate-y:calc(var(--spacing)*-12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-12{--tw-translate-y:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.-rotate-180{rotate:-180deg}.rotate-180{rotate:180deg}.\[transform\:translateZ\(0\)\]{transform:translateZ(0)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)!important}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-not-allowed\!{cursor:not-allowed!important}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.scroll-mt-9{scroll-margin-top:calc(var(--spacing)*9)}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{columns:--cols-default}.break-inside-avoid{break-inside:avoid}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:--cols-default}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\,minmax\(theme\(spacing\.7\)\,1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\,minmax\(0\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-center{justify-items:center}.justify-items-start{justify-items:start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-12{gap:calc(var(--spacing)*12)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-1\.5{column-gap:calc(var(--spacing)*1.5)}.gap-x-2{column-gap:calc(var(--spacing)*2)}.gap-x-2\.5{column-gap:calc(var(--spacing)*2.5)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-x-5{column-gap:calc(var(--spacing)*5)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.-space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-3)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-4)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-5)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-6)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-7>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-7)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-7)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-8)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-1\.5{row-gap:calc(var(--spacing)*1.5)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.gap-y-3{row-gap:calc(var(--spacing)*3)}.gap-y-4{row-gap:calc(var(--spacing)*4)}.gap-y-6{row-gap:calc(var(--spacing)*6)}.gap-y-7{row-gap:calc(var(--spacing)*7)}.gap-y-8{row-gap:calc(var(--spacing)*8)}.gap-y-px{row-gap:1px}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-100>:not(:last-child)){border-color:var(--color-gray-100)}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-neutral-200>:not(:last-child)){border-color:var(--color-neutral-200)}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-center{justify-self:center}.justify-self-end{justify-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-clip{overflow-x:clip}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-b-xl{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-x-\[0\.5px\]{border-inline-style:var(--tw-border-style);border-inline-width:.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.\!border-t-0{border-top-style:var(--tw-border-style)!important;border-top-width:0!important}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.\!border-none{--tw-border-style:none!important;border-style:none!important}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-blue-200{border-color:var(--color-blue-200)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-400{border-color:var(--color-gray-400)}.border-gray-600{border-color:var(--color-gray-600)}.border-neutral-100{border-color:var(--color-neutral-100)}.border-neutral-200{border-color:var(--color-neutral-200)}.border-neutral-300{border-color:var(--color-neutral-300)}.border-red-200{border-color:var(--color-red-200)}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-700\/50{border-color:#31415880}@supports (color:color-mix(in lab,red,red)){.border-slate-700\/50{border-color:color-mix(in oklab,var(--color-slate-700)50%,transparent)}}.border-transparent{border-color:#0000}.border-t-gray-200{border-top-color:var(--color-gray-200)}.\!bg-gray-50{background-color:var(--color-gray-50)!important}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-200{background-color:var(--color-amber-200)}.bg-amber-600{background-color:var(--color-amber-600)}.bg-black\/8{background-color:#00000014}@supports (color:color-mix(in lab,red,red)){.bg-black\/8{background-color:color-mix(in oklab,var(--color-black)8%,transparent)}}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-700{background-color:var(--color-blue-700)}.bg-emerald-200{background-color:var(--color-emerald-200)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500\/75{background-color:#6a7282bf}@supports (color:color-mix(in lab,red,red)){.bg-gray-500\/75{background-color:color-mix(in oklab,var(--color-gray-500)75%,transparent)}}.bg-gray-900\/90{background-color:#101828e6}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/90{background-color:color-mix(in oklab,var(--color-gray-900)90%,transparent)}}.bg-gray-950\/50{background-color:#03071280}@supports (color:color-mix(in lab,red,red)){.bg-gray-950\/50{background-color:color-mix(in oklab,var(--color-gray-950)50%,transparent)}}.bg-green-100{background-color:var(--color-green-100)}.bg-green-600{background-color:var(--color-green-600)}.bg-green-600\/80{background-color:#00a544cc}@supports (color:color-mix(in lab,red,red)){.bg-green-600\/80{background-color:color-mix(in oklab,var(--color-green-600)80%,transparent)}}.bg-green-600\/90{background-color:#00a544e6}@supports (color:color-mix(in lab,red,red)){.bg-green-600\/90{background-color:color-mix(in oklab,var(--color-green-600)90%,transparent)}}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-neutral-600{background-color:var(--color-neutral-600)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-600{background-color:var(--color-purple-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-rose-200{background-color:var(--color-rose-200)}.bg-rose-200\!{background-color:var(--color-rose-200)!important}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-600{background-color:var(--color-rose-600)}.bg-slate-600{background-color:var(--color-slate-600)}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800\/30{background-color:#1d293d4d}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/30{background-color:color-mix(in oklab,var(--color-slate-800)30%,transparent)}}.bg-slate-800\/50{background-color:#1d293d80}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/50{background-color:color-mix(in oklab,var(--color-slate-800)50%,transparent)}}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/50{background-color:#0f172b80}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/50{background-color:color-mix(in oklab,var(--color-slate-900)50%,transparent)}}.bg-slate-900\/80{background-color:#0f172bcc}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/80{background-color:color-mix(in oklab,var(--color-slate-900)80%,transparent)}}.bg-slate-900\/90{background-color:#0f172be6}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/90{background-color:color-mix(in oklab,var(--color-slate-900)90%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/0{background-color:#0000}@supports (color:color-mix(in lab,red,red)){.bg-white\/0{background-color:color-mix(in oklab,var(--color-white)0%,transparent)}}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.bg-white\/\[2\%\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[2\%\]{background-color:color-mix(in oklab,var(--color-white)2%,transparent)}}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.\!bg-none{background-image:none!important}.from-amber-500{--tw-gradient-from:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-500{--tw-gradient-from:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-600{--tw-gradient-from:var(--color-red-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-600{--tw-gradient-from:var(--color-slate-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-900{--tw-gradient-from:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-slate-800{--tw-gradient-via:var(--color-slate-800);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-amber-500{--tw-gradient-to:var(--color-amber-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-amber-700{--tw-gradient-to:var(--color-amber-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-orange-600{--tw-gradient-to:var(--color-orange-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-800{--tw-gradient-to:var(--color-red-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-800{--tw-gradient-to:var(--color-slate-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-900{--tw-gradient-to:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-cover{background-size:cover}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-center{background-position:50%}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-center{object-position:center}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\.5{padding-inline:calc(var(--spacing)*3.5)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-\[6px\]{padding-inline:6px}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.py-20{padding-block:calc(var(--spacing)*20)}.ps-0{padding-inline-start:calc(var(--spacing)*0)}.ps-1{padding-inline-start:calc(var(--spacing)*1)}.ps-2{padding-inline-start:calc(var(--spacing)*2)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-4{padding-inline-start:calc(var(--spacing)*4)}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pe-0{padding-inline-end:calc(var(--spacing)*0)}.pe-1{padding-inline-end:calc(var(--spacing)*1)}.pe-2{padding-inline-end:calc(var(--spacing)*2)}.pe-3{padding-inline-end:calc(var(--spacing)*3)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pe-6{padding-inline-end:calc(var(--spacing)*6)}.pe-8{padding-inline-end:calc(var(--spacing)*8)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-14{padding-top:calc(var(--spacing)*14)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-6{padding-left:calc(var(--spacing)*6)}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-xs\/none{font-size:var(--text-xs);line-height:1}.text-\[10px\]{font-size:10px}.text-\[13px\]{font-size:13px}.leading-3{--tw-leading:calc(var(--spacing)*3);line-height:calc(var(--spacing)*3)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-500{color:var(--color-amber-500)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-100{color:var(--color-gray-100)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-700\/50{color:#36415380}@supports (color:color-mix(in lab,red,red)){.text-gray-700\/50{color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-gray-950{color:var(--color-gray-950)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-800{color:var(--color-green-800)}.text-neutral-100{color:var(--color-neutral-100)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-500\!{color:var(--color-neutral-500)!important}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-800{color:var(--color-neutral-800)}.text-neutral-900{color:var(--color-neutral-900)}.text-neutral-950{color:var(--color-neutral-950)}.text-orange-500{color:var(--color-orange-500)}.text-purple-500{color:var(--color-purple-500)}.text-purple-800{color:var(--color-purple-800)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-rose-900{color:var(--color-rose-900)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.decoration-neutral-400{-webkit-text-decoration-color:var(--color-neutral-400);text-decoration-color:var(--color-neutral-400)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.placeholder-slate-400::placeholder{color:var(--color-slate-400)}.scheme-light-dark{color-scheme:light dark}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-gray-100{--tw-ring-color:var(--color-gray-100)}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-600\/10{--tw-ring-color:#4a55651a}@supports (color:color-mix(in lab,red,red)){.ring-gray-600\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-600)10%,transparent)}}.ring-gray-900\/10{--tw-ring-color:#1018281a}@supports (color:color-mix(in lab,red,red)){.ring-gray-900\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}}.ring-gray-950\/5{--tw-ring-color:#0307120d}@supports (color:color-mix(in lab,red,red)){.ring-gray-950\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)5%,transparent)}}.ring-gray-950\/10{--tw-ring-color:#0307121a}@supports (color:color-mix(in lab,red,red)){.ring-gray-950\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)10%,transparent)}}.ring-white{--tw-ring-color:var(--color-white)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-100{transition-delay:.1s}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\[program\:cards-api-queue-worker\]{program:cards-api-queue-worker}.ring-inset{--tw-ring-inset:inset}.group-first\/item\:rounded-s-lg:is(:where(.group\/item):first-child *){border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.group-last\/item\:rounded-e-lg:is(:where(.group\/item):last-child *){border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}@media (hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:text-blue-500:is(:where(.group):hover *){color:var(--color-blue-500)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-700:is(:where(.group):hover *){color:var(--color-gray-700)}.group-hover\:text-red-400:is(:where(.group):hover *){color:var(--color-red-400)}.group-hover\:opacity-90:is(:where(.group):hover *){opacity:.9}.group-hover\/button\:text-gray-500:is(:where(.group\/button):hover *){color:var(--color-gray-500)}.group-hover\/item\:underline:is(:where(.group\/item):hover *),.group-hover\/link\:underline:is(:where(.group\/link):hover *){text-decoration-line:underline}}.group-focus-visible\:text-gray-500:is(:where(.group):focus-visible *){color:var(--color-gray-500)}.group-focus-visible\:text-gray-700:is(:where(.group):focus-visible *){color:var(--color-gray-700)}.group-focus-visible\/item\:underline:is(:where(.group\/item):focus-visible *),.group-focus-visible\/link\:underline:is(:where(.group\/link):focus-visible *){text-decoration-line:underline}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.before\:start-0:before{content:var(--tw-content);inset-inline-start:calc(var(--spacing)*0)}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0\.5:before{content:var(--tw-content);width:calc(var(--spacing)*.5)}.first\:border-s-0:first-child{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.last\:border-e-0:last-child{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.odd\:bg-white\/2:nth-child(odd){background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.odd\:bg-white\/2:nth-child(odd){background-color:color-mix(in oklab,var(--color-white)2%,transparent)}}.even\:bg-white:nth-child(2n){background-color:var(--color-white)}.first-of-type\:ps-1:first-of-type{padding-inline-start:calc(var(--spacing)*1)}.last-of-type\:pe-1:last-of-type{padding-inline-end:calc(var(--spacing)*1)}.checked\:ring-0:checked{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:bg-gray-50:focus-within{background-color:var(--color-gray-50)}@media (hover:hover){.hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:transform:hover{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.hover\:border-red-500:hover{border-color:var(--color-red-500)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-400\/10:hover{background-color:#99a1af1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-400\/10:hover{background-color:color-mix(in oklab,var(--color-gray-400)10%,transparent)}}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-neutral-100:hover{background-color:var(--color-neutral-100)}.hover\:bg-neutral-200:hover{background-color:var(--color-neutral-200)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-slate-600:hover{background-color:var(--color-slate-600)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-white\/50:hover{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/50:hover{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-700\/75:hover{color:#364153bf}@supports (color:color-mix(in lab,red,red)){.hover\:text-gray-700\/75:hover{color:color-mix(in oklab,var(--color-gray-700)75%,transparent)}}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-slate-200:hover{color:var(--color-slate-200)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-red-500:focus{border-color:var(--color-red-500)}.focus\:ring:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:bg-gray-50:focus-visible{background-color:var(--color-gray-50)}.focus-visible\:bg-gray-100:focus-visible{background-color:var(--color-gray-100)}.focus-visible\:text-gray-500:focus-visible{color:var(--color-gray-500)}.focus-visible\:text-gray-700\/75:focus-visible{color:#364153bf}@supports (color:color-mix(in lab,red,red)){.focus-visible\:text-gray-700\/75:focus-visible{color:color-mix(in oklab,var(--color-gray-700)75%,transparent)}}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:#99a1af66}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)40%,transparent)}}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{background-color:var(--color-gray-50)}.disabled\:text-gray-50:disabled{color:var(--color-gray-50)}.disabled\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:oklch(55.1% .027 264.364)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:oklch(70.7% .022 261.325)}.disabled\:checked\:bg-gray-400:disabled:checked{background-color:var(--color-gray-400)}.disabled\:checked\:text-gray-400:disabled:checked{color:var(--color-gray-400)}@media (min-width:40rem){.sm\:relative{position:relative}.sm\:inset-x-auto{inset-inline:auto}.sm\:end-0{inset-inline-end:calc(var(--spacing)*0)}.sm\:col-\[--col-span-sm\]{grid-column:--col-span-sm}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:--col-start-sm}.sm\:-mx-6{margin-inline:calc(var(--spacing)*-6)}.sm\:-my-2{margin-block:calc(var(--spacing)*-2)}.sm\:ms-auto{margin-inline-start:auto}.sm\:mt-7{margin-top:calc(var(--spacing)*7)}.sm\:mb-16{margin-bottom:calc(var(--spacing)*16)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:inline-grid{display:inline-grid}.sm\:table-cell{display:table-cell}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:w-screen{width:100vw}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-1{flex:1}.sm\:columns-\[--cols-sm\]{columns:--cols-sm}.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-\[--cols-sm\]{grid-template-columns:--cols-sm}.sm\:grid-cols-\[repeat\(auto-fit\,minmax\(0\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-start{justify-content:flex-start}.sm\:gap-1{gap:calc(var(--spacing)*1)}.sm\:gap-3{gap:calc(var(--spacing)*3)}.sm\:gap-x-4{column-gap:calc(var(--spacing)*4)}.sm\:rounded-xl{border-radius:var(--radius-xl)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-14{padding:calc(var(--spacing)*14)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-12{padding-inline:calc(var(--spacing)*12)}.sm\:py-0{padding-block:calc(var(--spacing)*0)}.sm\:py-1\.5{padding-block:calc(var(--spacing)*1.5)}.sm\:ps-3{padding-inline-start:calc(var(--spacing)*3)}.sm\:ps-6{padding-inline-start:calc(var(--spacing)*6)}.sm\:pe-3{padding-inline-end:calc(var(--spacing)*3)}.sm\:pe-6{padding-inline-end:calc(var(--spacing)*6)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pb-0{padding-bottom:calc(var(--spacing)*0)}.sm\:text-left{text-align:left}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:calc(var(--spacing)*3)}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:calc(var(--spacing)*6)}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:calc(var(--spacing)*3)}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:calc(var(--spacing)*6)}}@media (min-width:48rem){.md\:bottom-4{bottom:calc(var(--spacing)*4)}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:--col-span-md}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:--col-start-md}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:inline{display:inline}.md\:inline-grid{display:inline-grid}.md\:table-cell{display:table-cell}.md\:w-max{width:max-content}.md\:max-w-60{max-width:calc(var(--spacing)*60)}.md\:columns-\[--cols-md\]{columns:--cols-md}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:--cols-md}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:items-start{align-items:flex-start}.md\:justify-end{justify-content:flex-end}.md\:gap-1{gap:calc(var(--spacing)*1)}.md\:gap-3{gap:calc(var(--spacing)*3)}:where(.md\:divide-y-0>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}.md\:overflow-x-auto{overflow-x:auto}.md\:rounded-xl{border-radius:var(--radius-xl)}.md\:p-20{padding:calc(var(--spacing)*20)}.md\:px-6{padding-inline:calc(var(--spacing)*6)}.md\:ps-3{padding-inline-start:calc(var(--spacing)*3)}.md\:pe-6{padding-inline-end:calc(var(--spacing)*6)}.md\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media (min-width:64rem){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:--col-span-lg}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-start-\[--col-start-lg\]{grid-column-start:--col-start-lg}.lg\:mb-0{margin-bottom:calc(var(--spacing)*0)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-grid{display:inline-grid}.lg\:table-cell{display:table-cell}.lg\:h-full{height:100%}.lg\:max-w-xs{max-width:var(--container-xs)}.lg\:-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.lg\:translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.lg\:columns-\[--cols-lg\]{columns:--cols-lg}.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-\[--cols-lg\]{grid-template-columns:--cols-lg}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:items-end{align-items:flex-end}.lg\:items-start{align-items:flex-start}.lg\:gap-1{gap:calc(var(--spacing)*1)}.lg\:gap-3{gap:calc(var(--spacing)*3)}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:bg-transparent{background-color:#0000}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:pe-8{padding-inline-end:calc(var(--spacing)*8)}.lg\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}}@media (min-width:80rem){.xl\:col-\[--col-span-xl\]{grid-column:--col-span-xl}.xl\:col-start-\[--col-start-xl\]{grid-column-start:--col-start-xl}.xl\:block{display:block}.xl\:hidden{display:none}.xl\:inline-grid{display:inline-grid}.xl\:table-cell{display:table-cell}.xl\:columns-\[--cols-xl\]{columns:--cols-xl}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:--cols-xl}.xl\:flex-row{flex-direction:row}.xl\:items-center{align-items:center}.xl\:items-end{align-items:flex-end}.xl\:items-start{align-items:flex-start}.xl\:gap-1{gap:calc(var(--spacing)*1)}.xl\:gap-3{gap:calc(var(--spacing)*3)}}@media (min-width:96rem){.\32xl\:col-\[--col-span-2xl\]{grid-column:--col-span-2xl}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:--col-start-2xl}.\32xl\:block{display:block}.\32xl\:hidden{display:none}.\32xl\:inline-grid{display:inline-grid}.\32xl\:table-cell{display:table-cell}.\32xl\:columns-\[--cols-2xl\]{columns:--cols-2xl}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:--cols-2xl}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-center{align-items:center}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-start{align-items:flex-start}.\32xl\:gap-1{gap:calc(var(--spacing)*1)}.\32xl\:gap-3{gap:calc(var(--spacing)*3)}}.ltr\:hidden:where(:dir(ltr),[dir=ltr],[dir=ltr] *),.rtl\:hidden:where(:dir(rtl),[dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:-translate-x-5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*-5);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:-translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-1\/2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-1\/4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x: 25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:divide-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-divide-x-reverse:1}@media (min-width:64rem){.rtl\:lg\:-translate-x-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.rtl\:lg\:translate-x-full:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}}@media (prefers-color-scheme:dark){.dark\:flex{display:flex}.dark\:hidden{display:none}:where(.dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}:where(.dark\:divide-white\/5>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){:where(.dark\:divide-white\/5>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}:where(.dark\:divide-white\/10>:not(:last-child)){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){:where(.dark\:divide-white\/10>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-none{--tw-border-style:none;border-style:none}.dark\:border-amber-500{border-color:var(--color-amber-500)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-600{border-color:var(--color-blue-600)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-emerald-500{border-color:var(--color-emerald-500)}.dark\:border-emerald-600{border-color:var(--color-emerald-600)}.dark\:border-gray-600{border-color:var(--color-gray-600)}.dark\:border-gray-700{border-color:var(--color-gray-700)}.dark\:border-neutral-500{border-color:var(--color-neutral-500)}.dark\:border-neutral-700{border-color:var(--color-neutral-700)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-rose-500{border-color:var(--color-rose-500)}.dark\:border-rose-900{border-color:var(--color-rose-900)}.dark\:border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/5{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:border-white\/8{border-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/8{border-color:color-mix(in oklab,var(--color-white)8%,transparent)}}.dark\:border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.dark\:border-white\/\[9\%\]{border-color:#ffffff17}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/\[9\%\]{border-color:color-mix(in oklab,var(--color-white)9%,transparent)}}.dark\:border-t-white\/10{border-top-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-t-white\/10{border-top-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:\!bg-gray-700{background-color:var(--color-gray-700)!important}.dark\:bg-\[\#1a1a1a\]{background-color:#1a1a1a}.dark\:bg-amber-600{background-color:var(--color-amber-600)}.dark\:bg-amber-900\/30{background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/30{background-color:color-mix(in oklab,var(--color-amber-900)30%,transparent)}}.dark\:bg-amber-950{background-color:var(--color-amber-950)}.dark\:bg-blue-700{background-color:var(--color-blue-700)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-emerald-600{background-color:var(--color-emerald-600)}.dark\:bg-emerald-900\/70{background-color:#004e3bb3}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-900\/70{background-color:color-mix(in oklab,var(--color-emerald-900)70%,transparent)}}.dark\:bg-gray-400\/10{background-color:#99a1af1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-400\/10{background-color:color-mix(in oklab,var(--color-gray-400)10%,transparent)}}.dark\:bg-gray-500{background-color:var(--color-gray-500)}.dark\:bg-gray-500\/20{background-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-500\/20{background-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/30{background-color:#1018284d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-900\/30{background-color:color-mix(in oklab,var(--color-gray-900)30%,transparent)}}.dark\:bg-gray-900\/75{background-color:#101828bf}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-900\/75{background-color:color-mix(in oklab,var(--color-gray-900)75%,transparent)}}.dark\:bg-gray-950{background-color:var(--color-gray-950)}.dark\:bg-gray-950\/75{background-color:#030712bf}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-950\/75{background-color:color-mix(in oklab,var(--color-gray-950)75%,transparent)}}.dark\:bg-green-900{background-color:var(--color-green-900)}.dark\:bg-green-900\/30{background-color:#0d542b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-green-900\/30{background-color:color-mix(in oklab,var(--color-green-900)30%,transparent)}}.dark\:bg-neutral-400{background-color:var(--color-neutral-400)}.dark\:bg-neutral-600{background-color:var(--color-neutral-600)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-neutral-800{background-color:var(--color-neutral-800)}.dark\:bg-neutral-900{background-color:var(--color-neutral-900)}.dark\:bg-purple-900{background-color:var(--color-purple-900)}.dark\:bg-red-900{background-color:var(--color-red-900)}.dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark\:bg-rose-600{background-color:var(--color-rose-600)}.dark\:bg-rose-900\!{background-color:var(--color-rose-900)!important}.dark\:bg-rose-950{background-color:var(--color-rose-950)}.dark\:bg-transparent{background-color:#0000}.dark\:bg-white{background-color:var(--color-white)}.dark\:bg-white\/1{background-color:#ffffff03}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/1{background-color:color-mix(in oklab,var(--color-white)1%,transparent)}}.dark\:bg-white\/3{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/3{background-color:color-mix(in oklab,var(--color-white)3%,transparent)}}.dark\:bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:bg-white\/\[2\%\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/\[2\%\]{background-color:color-mix(in oklab,var(--color-white)2%,transparent)}}.dark\:bg-white\/\[3\%\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/\[3\%\]{background-color:color-mix(in oklab,var(--color-white)3%,transparent)}}.dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark\:text-amber-300{color:var(--color-amber-300)}.dark\:text-amber-400{color:var(--color-amber-400)}.dark\:text-blue-100{color:var(--color-blue-100)}.dark\:text-blue-200{color:var(--color-blue-200)}.dark\:text-blue-300{color:var(--color-blue-300)}.dark\:text-blue-400{color:var(--color-blue-400)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-500{color:var(--color-emerald-500)}.dark\:text-gray-100{color:var(--color-gray-100)}.dark\:text-gray-200{color:var(--color-gray-200)}.dark\:text-gray-300{color:var(--color-gray-300)}.dark\:text-gray-300\/50{color:#d1d5dc80}@supports (color:color-mix(in lab,red,red)){.dark\:text-gray-300\/50{color:color-mix(in oklab,var(--color-gray-300)50%,transparent)}}.dark\:text-gray-400{color:var(--color-gray-400)}.dark\:text-gray-500{color:var(--color-gray-500)}.dark\:text-gray-600{color:var(--color-gray-600)}.dark\:text-gray-700{color:var(--color-gray-700)}.dark\:text-gray-800{color:var(--color-gray-800)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-neutral-100{color:var(--color-neutral-100)}.dark\:text-neutral-200{color:var(--color-neutral-200)}.dark\:text-neutral-300{color:var(--color-neutral-300)}.dark\:text-neutral-400{color:var(--color-neutral-400)}.dark\:text-neutral-500{color:var(--color-neutral-500)}.dark\:text-neutral-600{color:var(--color-neutral-600)}.dark\:text-neutral-600\!{color:var(--color-neutral-600)!important}.dark\:text-neutral-900{color:var(--color-neutral-900)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-red-100{color:var(--color-red-100)}.dark\:text-red-200{color:var(--color-red-200)}.dark\:text-red-300{color:var(--color-red-300)}.dark\:text-red-400{color:var(--color-red-400)}.dark\:text-rose-100{color:var(--color-rose-100)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\!{color:var(--color-white)!important}.dark\:text-white\/5{color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:text-white\/5{color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:text-yellow-200{color:var(--color-yellow-200)}.dark\:ring-gray-50\/10{--tw-ring-color:#f9fafb1a}@supports (color:color-mix(in lab,red,red)){.dark\:ring-gray-50\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-50)10%,transparent)}}.dark\:ring-gray-400\/20{--tw-ring-color:#99a1af33}@supports (color:color-mix(in lab,red,red)){.dark\:ring-gray-400\/20{--tw-ring-color:color-mix(in oklab,var(--color-gray-400)20%,transparent)}}.dark\:ring-gray-700{--tw-ring-color:var(--color-gray-700)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-gray-900{--tw-ring-color:var(--color-gray-900)}.dark\:ring-white\/10{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:ring-white\/10{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:ring-white\/20{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:ring-white\/20{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}@media (hover:hover){.dark\:group-hover\:text-gray-200:is(:where(.group):hover *){color:var(--color-gray-200)}.dark\:group-hover\:text-gray-400:is(:where(.group):hover *){color:var(--color-gray-400)}}}@media (hover:hover){@media (prefers-color-scheme:dark){.group-hover\:dark\:text-emerald-500:is(:where(.group):hover *){color:var(--color-emerald-500)}}}@media (prefers-color-scheme:dark){@media (hover:hover){.dark\:group-hover\/button\:text-gray-400:is(:where(.group\/button):hover *){color:var(--color-gray-400)}}.dark\:group-focus-visible\:text-gray-200:is(:where(.group):focus-visible *){color:var(--color-gray-200)}.dark\:group-focus-visible\:text-gray-400:is(:where(.group):focus-visible *){color:var(--color-gray-400)}.dark\:placeholder\:text-gray-500::placeholder{color:var(--color-gray-500)}.odd\:dark\:bg-white\/4:nth-child(odd){background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.odd\:dark\:bg-white\/4:nth-child(odd){background-color:color-mix(in oklab,var(--color-white)4%,transparent)}}.even\:dark\:bg-white\/2:nth-child(2n){background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.even\:dark\:bg-white\/2:nth-child(2n){background-color:color-mix(in oklab,var(--color-white)2%,transparent)}}.dark\:focus-within\:bg-white\/5:focus-within{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:focus-within\:bg-white\/5:focus-within{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-white\/2:hover{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/2:hover{background-color:color-mix(in oklab,var(--color-white)2%,transparent)}}.dark\:hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}}}@media (hover:hover){@media (prefers-color-scheme:dark){.hover\:dark\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.hover\:dark\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}}@media (prefers-color-scheme:dark){@media (hover:hover){.dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark\:hover\:text-gray-200:hover{color:var(--color-gray-200)}.dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark\:hover\:text-gray-300\/75:hover{color:#d1d5dcbf}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:text-gray-300\/75:hover{color:color-mix(in oklab,var(--color-gray-300)75%,transparent)}}.dark\:hover\:text-gray-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-white:hover{color:var(--color-white)}}}@media (hover:hover){@media (prefers-color-scheme:dark){.hover\:dark\:text-white:hover{color:var(--color-white)}}}@media (prefers-color-scheme:dark){@media (hover:hover){.dark\:hover\:ring-white\/20:hover{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:ring-white\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}}.dark\:focus\:border-blue-700:focus{border-color:var(--color-blue-700)}.dark\:focus\:border-blue-800:focus{border-color:var(--color-blue-800)}.dark\:focus-visible\:bg-white\/5:focus-visible{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:bg-white\/5:focus-visible{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.dark\:focus-visible\:text-gray-300\/75:focus-visible{color:#d1d5dcbf}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:text-gray-300\/75:focus-visible{color:color-mix(in oklab,var(--color-gray-300)75%,transparent)}}.dark\:focus-visible\:text-gray-400:focus-visible{color:var(--color-gray-400)}.dark\:focus-visible\:ring-offset-gray-900:focus-visible{--tw-ring-offset-color:var(--color-gray-900)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}.dark\:disabled\:bg-transparent:disabled{background-color:#0000}.dark\:disabled\:text-gray-400:disabled{color:var(--color-gray-400)}.dark\:disabled\:ring-white\/10:disabled{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:disabled\:ring-white\/10:disabled{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled{-webkit-text-fill-color:oklch(70.7% .022 261.325)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled::placeholder{-webkit-text-fill-color:oklch(55.1% .027 264.364)}.dark\:disabled\:checked\:bg-gray-600:disabled:checked{background-color:var(--color-gray-600)}@media (min-width:64rem){.dark\:lg\:bg-transparent{background-color:#0000}}}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:calc(var(--spacing)*0)}.\[\&_\.fi-badge-delete-button\]\:hidden .fi-badge-delete-button{display:none}.\[\&_\.filepond--root\]\:font-sans .filepond--root{font-family:var(--font-sans)}.\[\&_optgroup\]\:bg-white optgroup{background-color:var(--color-white)}@media (prefers-color-scheme:dark){.\[\&_optgroup\]\:dark\:bg-gray-900 optgroup{background-color:var(--color-gray-900)}}.\[\&_option\]\:bg-white option{background-color:var(--color-white)}@media (prefers-color-scheme:dark){.\[\&_option\]\:dark\:bg-gray-900 option{background-color:var(--color-gray-900)}}.\[\&_svg\]\:size-2\.5 svg{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.\[\&_svg\]\:\!text-white svg{color:var(--color-white)!important}@media (hover:hover){.hover\:\[\&_svg\]\:stroke-emerald-500:hover svg{stroke:var(--color-emerald-500)}}@media (prefers-color-scheme:dark){.dark\:\[\&_svg\]\:\!text-white svg{color:var(--color-white)!important}}.\[\&\.trix-active\]\:bg-gray-50.trix-active{background-color:var(--color-gray-50)}@media (prefers-color-scheme:dark){.dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:not(:has(.fi-ac-action:focus)):focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of.fi-btn)){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,oklch(92.8% .006 264.531));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (prefers-color-scheme:dark){.dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of.fi-btn)){--tw-shadow:-1px 0 0 0 var(--tw-shadow-color,oklab(100% 0 5.96046e-8/.2));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of.fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of.fi-btn){border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of.fi-btn){border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:calc(var(--spacing)*0)}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:calc(var(--spacing)*.5)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:calc(var(--spacing)*0)}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{color:var(--color-white)}@media (hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[\@media\(hover\:hover\)\]\:duration-75{--tw-duration:75ms;transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-gray-400{background-color:var(--color-gray-400)}input:checked+.\[input\:checked\+\&\]\:text-white{color:var(--color-white)}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){input:checked+.\[input\:checked\+\&\]\:hover\:bg-gray-300:hover{background-color:var(--color-gray-300)}}@media (prefers-color-scheme:dark){input:checked+.dark\:\[input\:checked\+\&\]\:bg-gray-600{background-color:var(--color-gray-600)}@media (hover:hover){input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}}}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:#0307121a}@supports (color:color-mix(in lab,red,red)){input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:color-mix(in oklab,var(--color-gray-950)10%,transparent)}}@media (prefers-color-scheme:dark){input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20{--tw-ring-color:color-mix(in oklab,var(--color-white)20%,transparent)}}}}.card-hover{transition:all .3s}.card-hover:hover{transform:translateY(-4px);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.card-flip{perspective:1000px}.card-flip-inner{transform-style:preserve-3d;width:100%;height:100%;transition:transform .6s;position:relative}.card-flip:hover .card-flip-inner{transform:rotateY(180deg)}.card-flip .card-front,.card-flip .card-back{backface-visibility:hidden;width:100%;height:100%;position:absolute}.card-flip .card-back{transform:rotateY(180deg)}.gradient-bg{background:linear-gradient(135deg,#1e293b,#334155,#475569)}.card-glow{box-shadow:0 0 20px #ef44444d}.pulse-glow{animation:2s infinite pulse-glow}@keyframes pulse-glow{0%,to{box-shadow:0 0 20px #ef44444d}50%{box-shadow:0 0 30px #ef444480}}@media (max-width:640px){h1{font-size:2.5rem}h2{font-size:1.875rem}p{font-size:1rem}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} diff --git a/public/build/manifest.json b/public/build/manifest.json index 124be24..0bdabd3 100644 --- a/public/build/manifest.json +++ b/public/build/manifest.json @@ -1,6 +1,6 @@ { "resources/css/app.css": { - "file": "assets/app-cHkKdsAV.css", + "file": "assets/app-C1D18bxO.css", "src": "resources/css/app.css", "isEntry": true }, diff --git a/resources/views/filament/modals/deck-analytics-error.blade.php b/resources/views/filament/modals/deck-analytics-error.blade.php new file mode 100644 index 0000000..c97eb26 --- /dev/null +++ b/resources/views/filament/modals/deck-analytics-error.blade.php @@ -0,0 +1,9 @@ +
+
+ +
+

AI Analysis Failed

+

{{ $error }}

+
+
+
diff --git a/resources/views/filament/modals/deck-analytics.blade.php b/resources/views/filament/modals/deck-analytics.blade.php new file mode 100644 index 0000000..0e528f6 --- /dev/null +++ b/resources/views/filament/modals/deck-analytics.blade.php @@ -0,0 +1,102 @@ +
+ + {{-- Score + Archetype --}} +
+
+
{{ $report['overall_score'] ?? '—' }}
+
Overall Score / 100
+
+
+ + {{ $report['archetype'] ?? 'Unknown' }} + +
Archetype
+
+
+ + Synergy: {{ $report['synergy_report']['rating'] ?? '—' }} + +
+
+ + {{-- Win Rate --}} + @if(!empty($report['win_rate_prediction'])) +
+ Estimated Win Rate: {{ $report['win_rate_prediction'] }} +
+ @endif + + {{-- Curve Analysis --}} + @if(!empty($report['curve_analysis'])) +
+

Cost Curve Analysis

+

{{ $report['curve_analysis'] }}

+
+ @endif + + {{-- Key Combos --}} + @if(!empty($report['synergy_report']['key_combos'])) +
+

Key Combos

+
    + @foreach($report['synergy_report']['key_combos'] as $combo) +
  • + + {{ $combo }} +
  • + @endforeach +
+
+ @endif + + {{-- Anti-Synergies --}} + @if(!empty($report['synergy_report']['anti_synergies'])) +
+

Anti-Synergies

+
    + @foreach($report['synergy_report']['anti_synergies'] as $item) +
  • + + {{ $item }} +
  • + @endforeach +
+
+ @endif + + {{-- Weaknesses --}} + @if(!empty($report['weaknesses'])) +
+

Weaknesses

+
    + @foreach($report['weaknesses'] as $weakness) +
  • + + {{ $weakness }} +
  • + @endforeach +
+
+ @endif + + {{-- Optimization Suggestions --}} + @if(!empty($report['optimization_suggestions'])) +
+

Optimization Suggestions

+
+ @foreach($report['optimization_suggestions'] as $suggestion) +
+
+ Remove: {{ $suggestion['remove'] ?? '—' }} + + Add: {{ $suggestion['replace_with'] ?? '—' }} +
+

{{ $suggestion['reason'] ?? '' }}

+
+ @endforeach +
+
+ @endif + +
diff --git a/resources/views/filament/modals/deck-swap.blade.php b/resources/views/filament/modals/deck-swap.blade.php new file mode 100644 index 0000000..4f6244b --- /dev/null +++ b/resources/views/filament/modals/deck-swap.blade.php @@ -0,0 +1,39 @@ +
+ +

+ AI-suggested card swaps based on your deck composition. Click Apply on any row to execute the swap immediately. +

+ + @foreach($suggestions as $index => $swap) +
+
+
+
Remove
+
{{ $swap['remove_name'] }}
+
+
+
+
Add
+
{{ $swap['replace_with_name'] }}
+
+
+ +
+
+

+ {{ $swap['reason'] }} +

+
+ @endforeach + +