diff --git a/.env.example b/.env.example index 4ffd7b09..29aa4c59 100644 --- a/.env.example +++ b/.env.example @@ -80,3 +80,33 @@ DISPLAY_PLAYER_URL=https://portal.b2in.test/_cabinet/display # Nützlich in der Entwicklung, um Seed-Daten und manuelle Testeinträge zu erhalten. # Hinweis: Migrationen müssen mindestens einmal für die Test-DB ausgeführt werden: DB_DATABASE=testing sail artisan migrate # TESTING_PRESERVE_DATABASE=false + +# Seed-Admin (DatabaseSeeder) +SEED_ADMIN_NAME="Admin" +SEED_ADMIN_EMAIL=admin@b2in.test +SEED_ADMIN_PASSWORD= + +# --- Version (leer lassen: kommt aus der Datei RELEASE, die dev/betrieb/deploy.sh schreibt) +APP_VERSION= + +# --- GlitchTip (errors.adametz.media, Projekte server-b2in / browser-b2in) – siehe dev/betrieb/README.md +SENTRY_LARAVEL_DSN= +SENTRY_BROWSER_DSN= +SENTRY_ENVIRONMENT=production # Vorschau: preview, lokal: local +SENTRY_RELEASE= + +# --- Betriebs-Alerts (Mail und ntfy-Push) +MONITORING_ALERTS_ENABLED=true +MONITORING_ALERT_EMAIL= +MONITORING_NTFY_URL=https://push.adametz.media +MONITORING_NTFY_TOPIC=b2in-ops +MONITORING_NTFY_TOKEN= +MONITORING_NTFY_PRIORITY=4 + +# --- Tiefer Health-Check /health (Bearer-Token für Uptime Kuma) – je Umgebung ein eigener Wert +MONITORING_HEALTH_TOKEN= +MONITORING_QUEUE_BACKLOG_SECONDS=300 +MONITORING_DISK_MIN_FREE_PERCENT=10 + +# --- Nur lokal: Lesezugriff auf die GlitchTip-API (project:read, event:read) – nie committen +GLITCHTIP_API_TOKEN= diff --git a/.gitignore b/.gitignore index 8b98b037..1c7e1bbe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,17 @@ # Laravel /.phpunit.cache /node_modules -/public/build +# public/build ist versioniert (Git-Deploy: auf dem Server gibt es kein Node). Nur die +# Ausgabe des alten Standard-Builds (`npm run build`) liegt direkt darunter und wird nicht gebraucht. +/public/build/assets/ +/public/build/manifest.json /public/hot /public/storage /public/vendor /public/flux /storage/*.key +# schreibt dev/betrieb/deploy.sh beim Deploy (Version des ausgelieferten Tags) +/RELEASE /storage/app /storage/framework /storage/language @@ -50,11 +55,31 @@ yarn-error.log Network Trash Folder Temporary Items .apdisk -Icon +# macOS-Ordnersymbol heißt „Icon\r“ – ohne [\r] träfe das Muster bei core.ignorecase auch resources/views/flux/icon/ +Icon[\r] # Project specific _static/ _work/ _storage/ -dev/immobilien 07-05-2026/AZIZI SharePoint \ No newline at end of file +dev/immobilien 07-05-2026/AZIZI SharePoint +# Deployment-Archive werden bei Bedarf neu erzeugt +dev/**/deploy/*.tar.gz + +# Referenzmaterial und Projektdokumente ausserhalb der Versionierung +/_b2in_interior_shop/ +/docs/ + +# Original-Bildzulieferungen (mehrere MB je Datei) bleiben ausserhalb der Versionierung; +# die optimierten WebP-Fassungen liegen unter public/img/assets/marken/. +/dev/2026-08-28/images/ + +# Display-Player (public/_cabinet): Laufzeitdateien und Dateien, die nur auf dem Server liegen. +# Sie dürfen beim Git-Deploy weder überschrieben noch als Abweichung gemeldet werden. +/public/_cabinet/clicks.log +/public/_cabinet/logs/*.log +/public/_cabinet/offers/player.html +/public/_cabinet/offers/logo-cabinet-300.png +# Statisch veröffentlichte Flux-Skripte (alter Pfad), nur auf dem Server +/public/_flux/ diff --git a/CLAUDE.md b/CLAUDE.md index ed7a30e0..9bf9c07b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -128,7 +128,7 @@ Domains are configured in `config/domains.php` with environment variables: Domain-specific configurations include: - **portal.b2in.test**: Admin backend with Flux UI theme -- **b2in.test**: Anthracite/Dynamic Blue color scheme, Inter/IBM Plex Sans fonts +- **b2in.test**: two color worlds on one theme – Interior (default: Tanne `#202c2b`, Creme `#f7f4ef`, Sand `#d9cbbf`, Ocker `#d39e46`, Clay `#a38f82`, Anthrazit `#2d2926`; Inter/EB Garamond) and Immobilien (`body.world-immobilien`: Anthracite/Dynamic Blue, Inter/IBM Plex Sans). The world comes from `b2in_world()` (app/helpers.php), the logo per world from `ThemeHelper::getLogoPath()` - **b2a.test**: Azur Blue/Liberty Red color scheme, Inter/Merriweather fonts - **stileigentum.test**: Style Blue/Style Sun color scheme, Inter/Ephesis fonts - **style2own.test**: Imperial Blue/Sand Gold color scheme, Inter/EB Garamond fonts @@ -142,6 +142,11 @@ For local development, add domains to your hosts file: 127.0.0.1 style2own.test ``` +## Deployment & Monitoring +- Deploys run via Git tags only: `dev/betrieb/deploy.sh vX.Y.Z` on the server; remotes: `origin` (forge.adametz.media, deploy source), `NAS` (backup only). Runbook: `dev/betrieb/README.md`. +- `public/build` is versioned: build locally (`npm run build:web && npm run build:portal`) and commit before tagging. +- Errors go to GlitchTip (`errors.adametz.media`, org `adametz-media`, projects `server-b2in` = 8, `browser-b2in` = 7); read-only API token as `GLITCHTIP_API_TOKEN` in `.env`. `/health` (token) for Uptime Kuma, alerts via ntfy topic `b2in-ops`. + ## Important Files - `DOMAINS-CONFIG.md`: Detailed domain configuration guide - `FORTIFY-SANCTUM-SETUP.md`: Authentication setup guide @@ -160,7 +165,7 @@ The Laravel Boost guidelines are specifically curated by Laravel maintainers for ## Foundational Context This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions. -- php - 8.4.18 +- php - 8.4.26 - laravel/fortify (FORTIFY) - v1 - laravel/framework (LARAVEL) - v12 - laravel/prompts (PROMPTS) - v0 diff --git a/app/Console/Commands/CmsUntranslated.php b/app/Console/Commands/CmsUntranslated.php new file mode 100644 index 00000000..aa295869 --- /dev/null +++ b/app/Console/Commands/CmsUntranslated.php @@ -0,0 +1,105 @@ +option('locale'); + $findings = []; + + foreach (CmsContent::query()->orderBy('group')->orderBy('key')->get() as $row) { + $translations = $row->getTranslations('value'); + $label = "CMS {$row->group}.{$row->key}"; + + if (! array_key_exists($locale, $translations)) { + $findings[] = [$label, 'keine Übersetzung']; + + continue; + } + + $this->collect($translations[$locale], $label, $findings); + } + + foreach (CmsBrand::query()->ordered()->get() as $brand) { + foreach ($brand->translatable as $attribute) { + $translations = $brand->getTranslations($attribute); + + if (filled($translations[CmsBrand::BASE_LOCALE] ?? null) && blank($translations[$locale] ?? null)) { + $findings[] = ["Marke {$brand->slug}.{$attribute}", 'keine Übersetzung']; + } else { + $this->collect($translations[$locale] ?? null, "Marke {$brand->slug}.{$attribute}", $findings); + } + } + + foreach (CmsBrand::LOCALIZED_FIELDS as $field) { + $this->collect($brand->localized($field, $locale), "Marke {$brand->slug}.{$field}", $findings); + } + } + + foreach (CmsArticle::query()->get() as $article) { + foreach ($article->translatable as $attribute) { + $translations = $article->getTranslations($attribute); + $label = "Magazin {$article->slug}.{$attribute}"; + + if (filled($translations[CmsBrand::BASE_LOCALE] ?? null) && blank($translations[$locale] ?? null)) { + $findings[] = [$label, 'keine Übersetzung']; + } else { + $this->collect($translations[$locale] ?? null, $label, $findings); + } + } + } + + if ($findings === []) { + $this->info("Keine deutschen oder fehlenden Texte für „{$locale}“ gefunden."); + + return self::SUCCESS; + } + + $this->table(['Stelle', 'Text'], $findings); + $this->warn(count($findings).' Stellen.'); + + return self::FAILURE; + } + + /** + * @param list $findings + */ + private function collect(mixed $value, string $path, array &$findings): void + { + if (is_array($value)) { + foreach ($value as $key => $item) { + $this->collect($item, "{$path}.{$key}", $findings); + } + + return; + } + + if (! is_string($value)) { + return; + } + + $text = trim(html_entity_decode(strip_tags($value))); + + if ($text !== '' && preg_match_all(self::GermanWords, $text) >= 2) { + $findings[] = [$path, mb_strimwidth($text, 0, 90, '…')]; + } + } +} diff --git a/app/Console/Commands/MonitoringHeartbeat.php b/app/Console/Commands/MonitoringHeartbeat.php new file mode 100644 index 00000000..c75e5fd8 --- /dev/null +++ b/app/Console/Commands/MonitoringHeartbeat.php @@ -0,0 +1,25 @@ +recordHeartbeat(); + + return self::SUCCESS; + } +} diff --git a/app/Console/Commands/MonitoringQueueProbe.php b/app/Console/Commands/MonitoringQueueProbe.php new file mode 100644 index 00000000..a1aa6d00 --- /dev/null +++ b/app/Console/Commands/MonitoringQueueProbe.php @@ -0,0 +1,50 @@ +option('wait')); + + QueueProbe::dispatch($token); + + for ($second = 0; $second <= $wait; $second++) { + if (Cache::has(QueueProbe::cacheKey($token))) { + Cache::forget(QueueProbe::cacheKey($token)); + $this->info(sprintf('Queue-Worker läuft (Test-Job nach %d s abgeholt).', $second)); + + return self::SUCCESS; + } + + if ($second < $wait) { + Sleep::for(1)->second(); + } + } + + $this->error(sprintf('Kein Queue-Worker hat den Test-Job innerhalb von %d s abgeholt.', $wait)); + $this->line('Worker prüfen: läuft Supervisor (bzw. der Worker im Server-Panel)? Notfalls: nohup php artisan queue:work --tries=3 --max-time=3600 &'); + + return self::FAILURE; + } +} diff --git a/app/Helpers/ThemeHelper.php b/app/Helpers/ThemeHelper.php index 4d17ba6e..ca403e51 100644 --- a/app/Helpers/ThemeHelper.php +++ b/app/Helpers/ThemeHelper.php @@ -5,11 +5,20 @@ namespace App\Helpers; class ThemeHelper { /** - * Get the logo path based on the current theme + * Logo-Pfad für das aktuelle Theme. + * + * Für b2in hängt die Datei zusätzlich an der Farbwelt: die Interior-Welt trägt das Logo + * mit dem Zusatz „Interior“ und ockerfarbenem Bogen, die Immobilien-Welt das Logo ohne + * Zusatz mit blauem Bogen. Ohne Angabe wird die Welt aus der aktuellen Route gelesen. */ - public static function getLogoPath(string $type = 'positive'): string + public static function getLogoPath(string $type = 'positive', ?string $world = null): string { $theme = config('app.theme', 'b2in'); + + if ($theme === 'b2in' && ($world ?? b2in_world()) === 'immobilien') { + return self::getLogoPathForBrand('b2in-immobilien', $type); + } + return self::getLogoPathForBrand($theme, $type); } @@ -22,21 +31,25 @@ class ThemeHelper $logoMap = [ 'b2in' => [ + 'positive' => 'img/logos/b2in-interior-logo-positive.svg', + 'negative' => 'img/logos/b2in-interior-logo-negative.svg', + ], + 'b2in-immobilien' => [ 'positive' => 'img/logos/b2in-logo-positive.svg', - 'negative' => 'img/logos/b2in-logo-negative.svg' + 'negative' => 'img/logos/b2in-logo-negative.svg', ], 'b2a' => [ 'positive' => 'img/logos/b2a-logo-positiv.svg', - 'negative' => 'img/logos/b2a-logo-negativ.svg' + 'negative' => 'img/logos/b2a-logo-negativ.svg', ], 'stileigentum' => [ 'positive' => 'img/logos/stileigentum-logo-positiv.svg', - 'negative' => 'img/logos/stileigentum-logo-negativ.svg' + 'negative' => 'img/logos/stileigentum-logo-negativ.svg', ], 'style2own' => [ 'positive' => 'img/logos/style2own-logo-positiv.svg', - 'negative' => 'img/logos/style2own-logo-negativ.svg' - ] + 'negative' => 'img/logos/style2own-logo-negativ.svg', + ], ]; return $logoMap[$brand][$type] ?? $logoMap['b2in'][$type]; @@ -48,6 +61,7 @@ class ThemeHelper public static function getFaviconPath(): string { $theme = config('app.theme', 'b2in'); + return "img/favicons/{$theme}-favicon.ico"; } @@ -57,6 +71,7 @@ class ThemeHelper public static function getThemeCssPath(): string { $theme = config('app.theme', 'b2in'); + return "resources/css/web/theme-{$theme}.css"; } @@ -66,6 +81,7 @@ class ThemeHelper public static function getDomainConfig(): array { $theme = config('app.theme', 'b2in'); + return config("domains.domains.{$theme}", []); } @@ -75,6 +91,7 @@ class ThemeHelper public static function getPrimaryColor(): string { $config = self::getDomainConfig(); + return $config['color_scheme']['primary'] ?? '#2b3f51'; } @@ -84,6 +101,7 @@ class ThemeHelper public static function getSecondaryColor(): string { $config = self::getDomainConfig(); + return $config['color_scheme']['secondary'] ?? '#20a0da'; } @@ -93,6 +111,7 @@ class ThemeHelper public static function getPrimaryFont(): string { $config = self::getDomainConfig(); + return $config['font_family']['primary'] ?? 'Inter'; } @@ -102,6 +121,7 @@ class ThemeHelper public static function getSecondaryFont(): string { $config = self::getDomainConfig(); + return $config['font_family']['secondary'] ?? 'IBM Plex Sans'; } @@ -111,12 +131,14 @@ class ThemeHelper public static function getDomainName(): string { $config = self::getDomainConfig(); + return $config['domain_name'] ?? 'B2IN'; } public static function getDomainUrl(): string { $config = self::getDomainConfig(); + return $config['url'] ?? config('app.url'); } @@ -127,7 +149,7 @@ class ThemeHelper { $brand = $brand ?? config('app.theme', 'b2in'); $config = config("domains.domains.{$brand}", []); - + return [ 'primary' => $config['color_scheme']['primary'] ?? '#2b3f51', 'secondary' => $config['color_scheme']['secondary'] ?? '#20a0da', @@ -141,14 +163,14 @@ class ThemeHelper public static function getBrandName(?string $brand = null): string { $brand = $brand ?? config('app.theme', 'b2in'); - + $brandNames = [ 'b2in' => 'B2IN', 'b2a' => 'B2A', 'stileigentum' => 'StilEigentum', 'style2own' => 'Style2Own', ]; - + return $brandNames[$brand] ?? strtoupper($brand); } @@ -158,6 +180,7 @@ class ThemeHelper public static function getBrandConfig(?string $brand = null): array { $brand = $brand ?? config('app.theme', 'b2in'); + return config("domains.domains.{$brand}", []); } } diff --git a/app/Http/Controllers/DisplayEmbedController.php b/app/Http/Controllers/DisplayEmbedController.php new file mode 100644 index 00000000..1216c724 --- /dev/null +++ b/app/Http/Controllers/DisplayEmbedController.php @@ -0,0 +1,34 @@ +is_active, 404); + + $playlist = $display->livePlaylist()->withCount('modules')->first(); + + abort_if($playlist === null || $playlist->modules_count === 0, 404); + + // Der Player liest die ID aus dem Pfad (/display/{id}) und holt sich die Konfiguration + // über die öffentliche Route /api/display/{display}/config – dieselbe Quelle wie das + // physische Display. Keine doppelte Pflege. + return response()->file(public_path('_cabinet/display/index.html'), [ + 'Cache-Control' => 'no-cache, must-revalidate', + 'X-Robots-Tag' => 'noindex', + ]); + } +} diff --git a/app/Http/Controllers/HealthController.php b/app/Http/Controllers/HealthController.php new file mode 100644 index 00000000..df4c89a3 --- /dev/null +++ b/app/Http/Controllers/HealthController.php @@ -0,0 +1,39 @@ +bearerToken() ?? $request->query('token', '')); + + abort_if($token === '' || ! hash_equals($token, $given), 404); + + $checks = $probe->checks(); + $status = HealthProbe::worstStatus($checks); + + return response()->json([ + 'status' => $status, + 'version' => config('app.version'), + 'checked_at' => now()->toIso8601String(), + 'checks' => collect($checks)->mapWithKeys(fn (array $check): array => [ + $check['key'] => ['status' => $check['status'], 'detail' => $check['detail']], + ]), + ], $status === HealthProbe::StatusCritical ? 503 : 200) + ->header('Cache-Control', 'no-store'); + } +} diff --git a/app/Http/Middleware/AllowPortalFraming.php b/app/Http/Middleware/AllowPortalFraming.php new file mode 100644 index 00000000..135fc595 --- /dev/null +++ b/app/Http/Middleware/AllowPortalFraming.php @@ -0,0 +1,36 @@ +headers->has('Content-Security-Policy')) { + return $response; + } + + $portal = rtrim((string) config('domains.domain_portal_url'), '/'); + $ancestors = trim("'self' {$portal}"); + + $response->headers->set('Content-Security-Policy', "frame-ancestors {$ancestors}"); + $response->headers->remove('X-Frame-Options'); + + return $response; + } +} diff --git a/app/Http/Middleware/BasicAuthMiddleware.php b/app/Http/Middleware/BasicAuthMiddleware.php index 8fc75843..f9b1d5e7 100644 --- a/app/Http/Middleware/BasicAuthMiddleware.php +++ b/app/Http/Middleware/BasicAuthMiddleware.php @@ -32,6 +32,12 @@ class BasicAuthMiddleware return $next($request); } + // Skip Basic Auth für den Health-Check: Uptime Kuma schickt seinen eigenen + // Authorization-Header (Bearer-Token), /health prüft ihn selbst. + if ($path === 'health' || $path === 'up') { + return $next($request); + } + // Skip Basic Auth für Flux UI Assets (flux.js, flux.min.js, editor.js, etc.) if (str_starts_with($path, 'flux/')) { return $next($request); diff --git a/app/Http/Middleware/ReportErrorSignals.php b/app/Http/Middleware/ReportErrorSignals.php new file mode 100644 index 00000000..c0c22d66 --- /dev/null +++ b/app/Http/Middleware/ReportErrorSignals.php @@ -0,0 +1,96 @@ +signalFor($request, $response->getStatusCode()); + + if ($signal !== null) { + $location = $this->locationOf($request); + $context = [ + 'status' => $response->getStatusCode(), + 'method' => $request->method(), + 'path' => '/'.ltrim($request->path(), '/'), + 'referer' => $this->refererPath($request), + 'livewire' => $request->hasHeader('X-Livewire'), + ]; + + defer(fn () => $this->errorSignal->report($signal, $location, $context)); + } + + return $response; + } + + private function signalFor(Request $request, int $status): ?string + { + return match (true) { + $status === 404 && $this->hasInternalReferer($request) => ErrorSignal::DeadInternalLink, + $status === 403 && $request->user() !== null => ErrorSignal::AccessDenied, + $status === 419 => ErrorSignal::PageExpired, + $status === 429 && $request->user() !== null => ErrorSignal::Throttled, + default => null, + }; + } + + /** + * Livewire-Requests laufen alle über denselben Update-Endpunkt — der Ort + * ist dort die Seite, auf der der Nutzer stand. + */ + private function locationOf(Request $request): string + { + if ($request->hasHeader('X-Livewire')) { + return 'livewire '.($this->refererPath($request) ?? '/'); + } + + $routeName = $request->route()?->getName(); + + return $routeName !== null + ? $routeName + : '/'.ltrim($request->path(), '/'); + } + + private function hasInternalReferer(Request $request): bool + { + $referer = $request->headers->get('referer'); + + return is_string($referer) && parse_url($referer, PHP_URL_HOST) === $request->getHost(); + } + + private function refererPath(Request $request): ?string + { + $referer = $request->headers->get('referer'); + + if (! is_string($referer) || $referer === '') { + return null; + } + + $path = parse_url($referer, PHP_URL_PATH); + + return is_string($path) ? ErrorReportScrubber::scrubPath($path) : null; + } +} diff --git a/app/Jobs/Monitoring/QueueProbe.php b/app/Jobs/Monitoring/QueueProbe.php new file mode 100644 index 00000000..c267b252 --- /dev/null +++ b/app/Jobs/Monitoring/QueueProbe.php @@ -0,0 +1,31 @@ +token), now()->toIso8601String(), now()->addMinutes(10)); + } +} diff --git a/app/Livewire/Admin/Cms/CabinetInfoTablet.php b/app/Livewire/Admin/Cms/CabinetInfoTablet.php index 79711375..f9bb1828 100644 --- a/app/Livewire/Admin/Cms/CabinetInfoTablet.php +++ b/app/Livewire/Admin/Cms/CabinetInfoTablet.php @@ -98,13 +98,35 @@ class CabinetInfoTablet extends Component } /** - * @param array $hours Optional: Time picker values from DOM (bypasses wire:model sync issues) + * Zeit-Properties, die beim Speichern aus dem DOM uebernommen werden duerfen. + * + * @return array + */ + private function hourProperties(): array + { + return [ + 'hoursMondayOpen', 'hoursMondayClose', + 'hoursTuesdayOpen', 'hoursTuesdayClose', + 'hoursWednesdayOpen', 'hoursWednesdayClose', + 'hoursThursdayOpen', 'hoursThursdayClose', + 'hoursFridayOpen', 'hoursFridayClose', + 'hoursSaturdayOpen', 'hoursSaturdayClose', + 'hoursSundayOpen', 'hoursSundayClose', + ]; + } + + /** + * Der Flux-Zeit-Picker meldet das Leeren per X nicht zuverlaessig an wire:model. + * Deshalb liest das Formular die Werte beim Absenden aus dem DOM und uebergibt sie hier. + * Nur die Zeitfelder duerfen so gesetzt werden – alles andere kommt aus wire:model. + * + * @param array $hours Zeit-Picker-Werte aus dem DOM */ public function save(array $hours = []): void { - foreach ($hours as $prop => $value) { - if (property_exists($this, $prop)) { - $this->{$prop} = $value ?? ''; + foreach ($this->hourProperties() as $prop) { + if (array_key_exists($prop, $hours)) { + $this->{$prop} = is_string($hours[$prop]) ? $hours[$prop] : ''; } } diff --git a/app/Livewire/Admin/Cms/DisplayVersionEditor.php b/app/Livewire/Admin/Cms/DisplayVersionEditor.php index ec85b24a..b990f1dd 100644 --- a/app/Livewire/Admin/Cms/DisplayVersionEditor.php +++ b/app/Livewire/Admin/Cms/DisplayVersionEditor.php @@ -53,7 +53,8 @@ class DisplayVersionEditor extends Component public string $mediaSubline = ''; - public int $mediaDuration = 10; + /** Anzeigedauer eines Bildes in Sekunden als Eingabetext, Komma oder Punkt erlaubt („1,5“). */ + public string $mediaDuration = '10'; public bool $mediaIsActive = true; @@ -247,6 +248,12 @@ class DisplayVersionEditor extends Component public function saveItem(): void { + if ($this->itemType === 'media' && $this->mediaType === 'image' && self::parseDuration($this->mediaDuration) === null) { + $this->addError('mediaDuration', 'Bitte eine Dauer zwischen 0,5 und 120 Sekunden angeben, z. B. 1,5.'); + + return; + } + $content = $this->buildItemContent(); $isActive = $this->getActiveFlag(); @@ -279,6 +286,41 @@ class DisplayVersionEditor extends Component $this->refreshModulePreview(); } + /** + * Sekunden aus der Eingabe lesen: „1,5“, „1.5“ und „10“ sind gültig, gerundet auf Zehntel. + * Erlaubt sind 0,5 bis 120 Sekunden; alles andere ergibt null. + */ + public static function parseDuration(string|int|float $input): ?float + { + $normalized = str_replace(',', '.', trim((string) $input)); + + if ($normalized === '' || ! is_numeric($normalized)) { + return null; + } + + $seconds = round((float) $normalized, 1); + + if ($seconds < 0.5 || $seconds > 120) { + return null; + } + + return $seconds; + } + + /** + * Sekunden für die Anzeige: ganze Zahlen ohne Nachkommastelle, sonst mit Komma („1,5“). + */ + public static function formatDuration(int|float|string|null $seconds): string + { + $seconds = (float) str_replace(',', '.', (string) ($seconds ?? 10)); + + if (floor($seconds) === $seconds) { + return (string) (int) $seconds; + } + + return str_replace('.', ',', (string) round($seconds, 1)); + } + public function deleteItem(int $id): void { DisplayVersionItem::findOrFail($id)->delete(); @@ -437,7 +479,7 @@ class DisplayVersionEditor extends Component $this->mediaUrl = $content['media_url'] ?? ''; $this->mediaHeadline = $content['headline'] ?? ''; $this->mediaSubline = $content['subline'] ?? ''; - $this->mediaDuration = $content['duration_seconds'] ?? 10; + $this->mediaDuration = self::formatDuration($content['duration_seconds'] ?? 10); $this->mediaIsActive = $isActive; } @@ -501,7 +543,7 @@ class DisplayVersionEditor extends Component 'media_url' => $this->mediaUrl, 'headline' => $this->mediaHeadline, 'subline' => $this->mediaSubline, - 'duration_seconds' => $this->mediaDuration, + 'duration_seconds' => self::parseDuration($this->mediaDuration) ?? 10, ], 'slide' => [ 'type' => 'detail', @@ -663,7 +705,7 @@ class DisplayVersionEditor extends Component $this->mediaUrl = ''; $this->mediaHeadline = ''; $this->mediaSubline = ''; - $this->mediaDuration = 10; + $this->mediaDuration = '10'; $this->mediaIsActive = true; $this->slideShowLogo = true; $this->slideLogoUrl = ''; diff --git a/app/Livewire/Web/Components/Sections/AboutHero.php b/app/Livewire/Web/Components/Sections/AboutHero.php index c0aaa1a7..1cb3233a 100644 --- a/app/Livewire/Web/Components/Sections/AboutHero.php +++ b/app/Livewire/Web/Components/Sections/AboutHero.php @@ -8,9 +8,13 @@ class AboutHero extends Component { public $content = []; - public function mount() + /** Sektionsschluessel – die Immobilien-Welt nutzt eigene Inhalte (immobilien_about_hero). */ + public string $section = 'about_hero'; + + public function mount(string $section = 'about_hero') { - $this->content = cms_theme_section('about_hero'); + $this->section = $section; + $this->content = cms_theme_section($this->section); } public function render() diff --git a/app/Livewire/Web/Components/Sections/AudienceSwitch.php b/app/Livewire/Web/Components/Sections/AudienceSwitch.php new file mode 100644 index 00000000..83eea87c --- /dev/null +++ b/app/Livewire/Web/Components/Sections/AudienceSwitch.php @@ -0,0 +1,25 @@ + */ + public array $content = []; + + public string $bg = ''; + + public function mount(string $bg = ''): void + { + $section = cms_theme_section('audience_switch'); + $this->content = is_array($section) ? $section : []; + $this->bg = $bg; + } + + public function render() + { + return view('livewire.web.components.sections.audience-switch'); + } +} diff --git a/app/Livewire/Web/Components/Sections/BrandDetail.php b/app/Livewire/Web/Components/Sections/BrandDetail.php new file mode 100644 index 00000000..6f613136 --- /dev/null +++ b/app/Livewire/Web/Components/Sections/BrandDetail.php @@ -0,0 +1,89 @@ + */ + public array $brand = []; + + /** @var array> */ + public array $otherBrands = []; + + /** + * Galerie getrennt nach realisierten Projekten und Inspirationen. + * + * @var array{projects: array>, inspirations: array>} + */ + public array $gallery = ['projects' => [], 'inspirations' => []]; + + public function mount(string $slug): void + { + $brands = CmsBrand::forFrontend(); + + abort_unless(isset($brands[$slug]), 404); + + $this->slug = $slug; + $this->brand = $brands[$slug]; + $this->gallery = CmsBrand::groupGallery($this->brand['gallery'] ?? []); + $this->otherBrands = collect($brands) + ->reject(fn (array $brand, string $key) => $key === $slug) + ->values() + ->all(); + + $craft = $this->craftSection($slug, $brands); + + if ($craft !== null) { + $this->brand['sections'][] = $craft; + } + } + + /** + * Gemeinsamer Handwerk-Abschluss (Lang-Sektion `brand_craft`, Nachtrag 15): steht als letzter + * Abschnitt auf jeder Markenseite – außer auf der Seite der Handwerksmarke selbst. Der Link + * dorthin erscheint nur, wenn diese Marke veröffentlicht ist und eine Detailseite hat. + * + * @param array> $brands + * @return array|null + */ + private function craftSection(string $slug, array $brands): ?array + { + $content = cms_theme_section('brand_craft'); + + if (! is_array($content)) { + return null; + } + + $craftSlug = (string) ($content['brand_slug'] ?? ''); + + if ($craftSlug !== '' && $craftSlug === $slug) { + return null; + } + + $sections = CmsBrand::normalizeSections([$content]); + + if ($sections === []) { + return null; + } + + $section = $sections[0]; + $section['anchor'] = 'handwerk'; + + if ($craftSlug !== '' && ! empty($brands[$craftSlug]['has_detail_page'])) { + $section['link'] = route('marken.show', ['slug' => $craftSlug]); + $section['link_text'] = (string) ($content['link_text'] ?? $brands[$craftSlug]['name'] ?? ''); + } + + return $section; + } + + public function render() + { + return view('livewire.web.components.sections.brand-detail'); + } +} diff --git a/app/Livewire/Web/Components/Sections/BrandOverview.php b/app/Livewire/Web/Components/Sections/BrandOverview.php new file mode 100644 index 00000000..a810fe5d --- /dev/null +++ b/app/Livewire/Web/Components/Sections/BrandOverview.php @@ -0,0 +1,25 @@ +> */ + public array $brands = []; + + public string $bg = ''; + + public function mount(string $bg = ''): void + { + $this->brands = array_values(CmsBrand::forFrontend()); + $this->bg = $bg; + } + + public function render() + { + return view('livewire.web.components.sections.brand-overview'); + } +} diff --git a/app/Livewire/Web/Components/Sections/CTASection.php b/app/Livewire/Web/Components/Sections/CTASection.php index 6fc5c452..b668225b 100644 --- a/app/Livewire/Web/Components/Sections/CTASection.php +++ b/app/Livewire/Web/Components/Sections/CTASection.php @@ -12,8 +12,13 @@ class CTASection extends Component public $section = ''; - public function mount($bg = 'bg-secondary', $section = 'cta_section') + public function mount($bg = 'cta-band', $section = 'cta_section') { + // Der Standard-Abschluss hat je Welt eigene Texte und fuehrt zur Kontaktseite der Welt. + if ($section === 'cta_section' && b2in_world() === 'immobilien') { + $section = 'cta_section_immobilien'; + } + $this->section = $section; $this->content = cms_theme_section($this->section); $this->bg = $bg; diff --git a/app/Livewire/Web/Components/Sections/CoreBrands.php b/app/Livewire/Web/Components/Sections/CoreBrands.php new file mode 100644 index 00000000..521748f8 --- /dev/null +++ b/app/Livewire/Web/Components/Sections/CoreBrands.php @@ -0,0 +1,30 @@ + */ + public array $content = []; + + /** @var array> */ + public array $brands = []; + + public string $bg = ''; + + public function mount(string $bg = ''): void + { + $section = cms_theme_section('core_brands'); + $this->content = is_array($section) ? $section : []; + $this->brands = array_values(CmsBrand::forFrontend()); + $this->bg = $bg; + } + + public function render() + { + return view('livewire.web.components.sections.core-brands'); + } +} diff --git a/app/Livewire/Web/Components/Sections/DisplayFeed.php b/app/Livewire/Web/Components/Sections/DisplayFeed.php new file mode 100644 index 00000000..00dc91d9 --- /dev/null +++ b/app/Livewire/Web/Components/Sections/DisplayFeed.php @@ -0,0 +1,84 @@ + */ + public array $content = []; + + public ?int $displayId = null; + + public string $bg = ''; + + public bool $showLink = true; + + public function mount(string $bg = '', bool $showLink = true): void + { + $section = cms_theme_section('display_feed'); + $content = is_array($section) ? $section : []; + + $this->bg = $bg; + $this->showLink = $showLink && $this->linkTargetVisible($content); + $this->displayId = $this->resolveDisplayId($content); + + // Ohne Display bleiben auch die Texte leer – sie hätten sonst nichts zu beschriften und + // stünden trotzdem im Livewire-Snapshot der Seite. + $this->content = $this->displayId === null ? [] : $content; + } + + /** + * Im CMS hinterlegtes Display, sonst das erste aktive mit veröffentlichter Playlist. + * + * Ohne passendes Display rendert die Sektion nichts – lieber keine Sektion als ein + * Rahmen, in dem sich ewig ein Ladebalken dreht. + * + * @param array $content + */ + private function resolveDisplayId(array $content): ?int + { + $configured = $content['display_id'] ?? null; + + $query = Display::query() + ->where('is_active', true) + ->whereHas('playlists', fn ($q) => $q->where('status', DisplayPlaylist::STATUS_PUBLISHED) + ->whereHas('modules')); + + if (is_numeric($configured) && (int) $configured > 0) { + $display = (clone $query)->whereKey((int) $configured)->first(); + + if ($display !== null) { + return $display->id; + } + } + + return $query->orderBy('id')->value('id'); + } + + public function render() + { + return view('livewire.web.components.sections.display-feed'); + } + + /** + * Der Button führt standardmäßig auf /referenzen – ist die Seite im CMS ausgeblendet, entfällt er. + * + * @param array $content + */ + private function linkTargetVisible(array $content): bool + { + $path = rtrim(parse_url((string) ($content['link_url'] ?? '/referenzen'), PHP_URL_PATH) ?? '', '/'); + + return $path !== '/referenzen' || references_page_enabled(); + } +} diff --git a/app/Livewire/Web/Components/Sections/FAQ.php b/app/Livewire/Web/Components/Sections/FAQ.php index 44c71e2b..b1b3a104 100644 --- a/app/Livewire/Web/Components/Sections/FAQ.php +++ b/app/Livewire/Web/Components/Sections/FAQ.php @@ -20,8 +20,84 @@ class FAQ extends Component $this->content = cms_theme_section($this->section); } + /** + * Fragen nach Bereich gruppiert, in Seitenreihenfolge: zuerst die allgemeinen Fragen ohne + * Bereich, dann die Bereiche aus `categories` (Überschrift + Symbol), zuletzt Bereiche, die nur + * an Fragen stehen. Leere Bereiche entfallen. + * + * @param array $content + * @return list>}> + */ + public static function groups(array $content): array + { + $content = self::flatten($content); + $groups = ['' => ['title' => null, 'icon' => null, 'questions' => []]]; + + foreach ($content['categories'] ?? [] as $category) { + $title = trim((string) ($category['title'] ?? '')); + + if ($title !== '') { + $groups[$title] = ['title' => $title, 'icon' => ($category['icon'] ?? '') ?: 'question-mark-circle', 'questions' => []]; + } + } + + foreach ($content['questions'] ?? [] as $question) { + if (! is_array($question) || trim((string) ($question['question'] ?? '')) === '') { + continue; + } + + $title = trim((string) ($question['category'] ?? '')); + $groups[$title] ??= ['title' => $title, 'icon' => 'question-mark-circle', 'questions' => []]; + $groups[$title]['questions'][] = $question; + } + + return array_values(array_filter($groups, fn (array $group): bool => $group['questions'] !== [])); + } + + /** + * Wandelt die frühere Form mit verschachtelten `sections` (Bereich mit eigener Fragenliste) in + * die flache Form um, die der Inhalte-Editor bearbeiten kann (09.10.2026): jede Frage trägt + * ihren Bereich in `category`, Überschrift und Symbol stehen in `categories`. + * + * @param array $content + * @return array + */ + public static function flatten(array $content): array + { + if (! isset($content['sections']) || ! is_array($content['sections'])) { + return $content; + } + + $questions = array_map( + fn (mixed $question): mixed => is_array($question) ? [...$question, 'category' => $question['category'] ?? ''] : $question, + is_array($content['questions'] ?? null) ? $content['questions'] : [], + ); + $categories = is_array($content['categories'] ?? null) ? $content['categories'] : []; + + foreach ($content['sections'] as $section) { + if (! is_array($section)) { + continue; + } + + $title = trim((string) ($section['title'] ?? '')); + $categories[] = ['title' => $title, 'icon' => (string) ($section['icon'] ?? '')]; + + foreach ($section['questions'] ?? [] as $question) { + if (is_array($question)) { + $questions[] = [...$question, 'category' => $title]; + } + } + } + + unset($content['sections']); + $content['questions'] = $questions; + $content['categories'] = $categories; + + return $content; + } + public function render() { - return view('livewire.web.components.sections.f-a-q'); + return view('livewire.web.components.sections.f-a-q', ['groups' => self::groups($this->content)]); } } diff --git a/app/Livewire/Web/Components/Sections/FounderBar.php b/app/Livewire/Web/Components/Sections/FounderBar.php index bb4cc8ff..37c6971b 100644 --- a/app/Livewire/Web/Components/Sections/FounderBar.php +++ b/app/Livewire/Web/Components/Sections/FounderBar.php @@ -8,8 +8,12 @@ class FounderBar extends Component { public array $content = []; - public function mount(): void + /** Hintergrundklasse der Sektion; unter den Interior-Heroes (Startseite, Marken, Über uns) `bg-accent`. */ + public string $bg = 'bg-background'; + + public function mount(string $bg = 'bg-background'): void { + $this->bg = $bg; $this->content = cms_theme_section('founder_bar'); } diff --git a/app/Livewire/Web/Components/Sections/Hero.php b/app/Livewire/Web/Components/Sections/Hero.php index fe889d9b..a23ffc89 100644 --- a/app/Livewire/Web/Components/Sections/Hero.php +++ b/app/Livewire/Web/Components/Sections/Hero.php @@ -4,16 +4,86 @@ namespace App\Livewire\Web\Components\Sections; use Livewire\Component; +/** + * Hero der Startseite: Text links, rechts eine ruhige Slideshow als Hauptelement des Rahmens + * (Abstimmung 07.10.2026, Vorbild dev/2026-08-28/Farbwelt und Stil.png). + * + * Die Bilder kommen aus der Liste `slides` der Sektion `home/hero` (je `image`, `label`, `caption`, + * `alt`, `active`) und laufen in dieser Reihenfolge. Die Infokarte über dem Bild zeigt je Slide + * Marke (`label`) und Motiv (`caption`), ohne Angaben die festen Texte `card_title`/`card_text`. + * Ist die Liste leer oder alles deaktiviert, steht das einzelne Bild `image` da wie früher. + */ class Hero extends Component { - public $content = []; + /** @var array */ + public array $content = []; - public function mount() + /** @var array */ + public array $slides = []; + + public function mount(): void { - $this->content = cms_theme_section('hero'); + $section = cms_theme_section('hero'); + $this->content = is_array($section) ? $section : []; + $this->slides = self::activeSlides($this->content['slides'] ?? []) ?: $this->singleImage(); } - public function render() + /** + * Gepflegte Slides ohne Bild oder mit `active` = aus fallen weg. + * + * @return array + */ + public static function activeSlides(mixed $list): array + { + $slides = []; + + foreach ((array) $list as $slide) { + if (! is_array($slide) || trim((string) ($slide['image'] ?? '')) === '') { + continue; + } + + if (array_key_exists('active', $slide) && ! filter_var($slide['active'], FILTER_VALIDATE_BOOLEAN)) { + continue; + } + + $label = trim((string) ($slide['label'] ?? $slide['title'] ?? '')); + $caption = trim((string) ($slide['caption'] ?? '')); + + $slides[] = [ + 'image' => (string) $slide['image'], + 'alt' => trim((string) ($slide['alt'] ?? '')) ?: implode(' – ', array_filter([$label, $caption])), + 'label' => $label, + 'caption' => $caption, + ]; + } + + return $slides; + } + + /** + * @return array + */ + private function singleImage(): array + { + $image = trim((string) ($this->content['image'] ?? '')); + + return $image === '' ? [] : [[ + 'image' => $image, + 'alt' => (string) ($this->content['image_alt'] ?? ''), + 'label' => '', + 'caption' => '', + ]]; + } + + /** Wechsel alle `interval` Sekunden, begrenzt auf 3–30 s (Standard 7 s). */ + public function getIntervalMsProperty(): int + { + $seconds = (float) ($this->content['interval'] ?? 7); + + return (int) round(max(3, min(30, $seconds)) * 1000); + } + + public function render(): \Illuminate\View\View { return view('livewire.web.components.sections.hero'); } diff --git a/app/Livewire/Web/Components/Sections/HeroSlider.php b/app/Livewire/Web/Components/Sections/HeroSlider.php index 738e0de2..6ceb28f3 100644 --- a/app/Livewire/Web/Components/Sections/HeroSlider.php +++ b/app/Livewire/Web/Components/Sections/HeroSlider.php @@ -4,6 +4,10 @@ namespace App\Livewire\Web\Components\Sections; use Livewire\Component; +/** + * Hero der Themes b2a, Stileigentum und Style2own (Stand vor dem B2in-Entwurf vom 24.09.2026). + * Ohne gepflegte Sektion `hero_slider` bleibt der Bereich leer. + */ class HeroSlider extends Component { public $content = []; @@ -12,7 +16,8 @@ class HeroSlider extends Component public function mount() { - $this->content = cms_theme_section('hero_slider'); + $section = cms_theme_section('hero_slider'); + $this->content = is_array($section) ? $section : []; } public function nextSlide() diff --git a/app/Livewire/Web/Components/Sections/ImmobilienTeaser.php b/app/Livewire/Web/Components/Sections/ImmobilienTeaser.php new file mode 100644 index 00000000..4e454178 --- /dev/null +++ b/app/Livewire/Web/Components/Sections/ImmobilienTeaser.php @@ -0,0 +1,25 @@ + */ + public array $content = []; + + public string $bg = ''; + + public function mount(string $bg = ''): void + { + $section = cms_theme_section('immobilien_teaser'); + $this->content = is_array($section) ? $section : []; + $this->bg = $bg; + } + + public function render() + { + return view('livewire.web.components.sections.immobilien-teaser'); + } +} diff --git a/app/Livewire/Web/Components/Sections/MagazinDetail.php b/app/Livewire/Web/Components/Sections/MagazinDetail.php index 0ef295b5..1a1fe7a3 100644 --- a/app/Livewire/Web/Components/Sections/MagazinDetail.php +++ b/app/Livewire/Web/Components/Sections/MagazinDetail.php @@ -2,11 +2,12 @@ namespace App\Livewire\Web\Components\Sections; +use App\Models\CmsArticle; use Livewire\Component; class MagazinDetail extends Component { - public $articleId; + public $slug; public $article; @@ -14,25 +15,41 @@ class MagazinDetail extends Component public $content; - public function mount($id = 1) + /** Rueckweg zur Magazinliste der Welt, zu der der Beitrag gehoert. */ + public string $listUrl = ''; + + public function mount($slug) { - $this->articleId = (int) $id; + $this->slug = (string) $slug; $this->loadArticle(); + $this->listUrl = $this->articleWorld() === CmsArticle::WORLD_IMMOBILIEN + ? route('immobilien.magazin') + : route('magazin'); $this->loadRelatedArticles(); $this->loadThemeContent(); } + private function articleWorld(): string + { + return (string) ($this->article['world'] ?? CmsArticle::WORLD_INTERIOR); + } + private function loadArticle() { $articles = $this->getArticlesData(); - $this->article = $articles[$this->articleId] ?? $articles[1]; + + // Unbekannte Slugs haben frueher stillschweigend Artikel 1 ausgeliefert – mit Status 200. + // Das erzeugt Duplicate Content unter beliebig vielen URLs. + abort_unless(isset($articles[$this->slug]), 404); + + $this->article = $articles[$this->slug]; } private function loadRelatedArticles() { - $articles = $this->getArticlesData(); - $this->relatedArticles = collect($articles) - ->filter(fn ($article, $key) => $key != $this->articleId) + $this->relatedArticles = collect($this->getArticlesData()) + ->filter(fn (array $article) => ($article['world'] ?? CmsArticle::WORLD_INTERIOR) === $this->articleWorld()) + ->reject(fn (array $article, string $slug) => $slug === $this->slug) ->take(2) ->values() ->toArray(); @@ -43,9 +60,18 @@ class MagazinDetail extends Component $this->content = cms_theme_section('magazin_detail'); } - private function getArticlesData() + /** @var array>|null */ + private ?array $articlesCache = null; + + /** + * Wird beim Rendern zweimal gebraucht (Artikel + verwandte Artikel) – deshalb gemerkt, + * damit die Detailseite nur eine Abfrage auslöst. + * + * @return array> + */ + private function getArticlesData(): array { - return trans('b2in.articles'); + return $this->articlesCache ??= CmsArticle::forFrontend(); } public function render() diff --git a/app/Livewire/Web/Components/Sections/MagazinList.php b/app/Livewire/Web/Components/Sections/MagazinList.php index ecd1e800..039a63e2 100644 --- a/app/Livewire/Web/Components/Sections/MagazinList.php +++ b/app/Livewire/Web/Components/Sections/MagazinList.php @@ -2,6 +2,7 @@ namespace App\Livewire\Web\Components\Sections; +use App\Models\CmsArticle; use Livewire\Component; class MagazinList extends Component @@ -10,34 +11,41 @@ class MagazinList extends Component public $content = []; - public function mount() + /** Farbwelt der Liste: `interior` (/magazin) oder `immobilien` (/immobilien/magazin). */ + public string $world = CmsArticle::WORLD_INTERIOR; + + public function mount(string $world = CmsArticle::WORLD_INTERIOR) { + $this->world = in_array($world, CmsArticle::WORLDS, true) ? $world : CmsArticle::WORLD_INTERIOR; $this->loadPosts(); $this->loadThemeContent(); } private function loadPosts() { - $articles = trans('b2in.articles'); - $this->posts = collect($articles)->map(function ($article) { + $this->posts = collect(CmsArticle::forFrontend($this->world))->map(function (array $article) { return [ - 'id' => $article['id'], + 'slug' => $article['slug'], 'title' => $article['title'], - 'excerpt' => $article['content']['intro'], // Using intro as excerpt + 'excerpt' => $article['content']['intro'] ?? '', 'image' => $article['image'], 'date' => $article['date'], 'readTime' => $article['readTime'], ]; - })->all(); + })->values()->all(); } private function loadThemeContent() { - $this->content = cms_theme_section('magazin_list'); + $this->content = cms_theme_section( + $this->world === CmsArticle::WORLD_IMMOBILIEN ? 'magazin_list_immobilien' : 'magazin_list' + ); } public function render() { - return view('livewire.web.components.sections.magazin-list'); + return view('livewire.web.components.sections.magazin-list', [ + 'posts' => $this->posts, + ]); } } diff --git a/app/Livewire/Web/Components/Sections/MarkenCta.php b/app/Livewire/Web/Components/Sections/MarkenCta.php new file mode 100644 index 00000000..07af19f2 --- /dev/null +++ b/app/Livewire/Web/Components/Sections/MarkenCta.php @@ -0,0 +1,25 @@ + */ + public array $content = []; + + public string $bg = ''; + + public function mount(string $bg = ''): void + { + $section = cms_theme_section('marken_cta'); + $this->content = is_array($section) ? $section : []; + $this->bg = $bg; + } + + public function render() + { + return view('livewire.web.components.sections.marken-cta'); + } +} diff --git a/app/Livewire/Web/Components/Sections/MarkenGrowth.php b/app/Livewire/Web/Components/Sections/MarkenGrowth.php new file mode 100644 index 00000000..e5820af1 --- /dev/null +++ b/app/Livewire/Web/Components/Sections/MarkenGrowth.php @@ -0,0 +1,25 @@ + */ + public array $content = []; + + public string $bg = ''; + + public function mount(string $bg = ''): void + { + $section = cms_theme_section('marken_growth'); + $this->content = is_array($section) ? $section : []; + $this->bg = $bg; + } + + public function render() + { + return view('livewire.web.components.sections.marken-growth'); + } +} diff --git a/app/Livewire/Web/Components/Sections/MarkenNetwork.php b/app/Livewire/Web/Components/Sections/MarkenNetwork.php new file mode 100644 index 00000000..971faf80 --- /dev/null +++ b/app/Livewire/Web/Components/Sections/MarkenNetwork.php @@ -0,0 +1,25 @@ + */ + public array $content = []; + + public string $bg = ''; + + public function mount(string $bg = ''): void + { + $section = cms_theme_section('marken_network'); + $this->content = is_array($section) ? $section : []; + $this->bg = $bg; + } + + public function render() + { + return view('livewire.web.components.sections.marken-network'); + } +} diff --git a/app/Livewire/Web/Components/Sections/OriginSection.php b/app/Livewire/Web/Components/Sections/OriginSection.php new file mode 100644 index 00000000..9705013a --- /dev/null +++ b/app/Livewire/Web/Components/Sections/OriginSection.php @@ -0,0 +1,83 @@ + + */ + public const MAP_POSITIONS = [ + 'rotpunkt' => ['x' => 330, 'y' => 55, 'label' => 'left'], + 'februe' => ['x' => 480, 'y' => 90, 'label' => 'right'], + 'tischlerei' => ['x' => 295, 'y' => 285, 'label' => 'left'], + 'cabinet' => ['x' => 80, 'y' => 345, 'label' => 'right'], + ]; + + /** @var array */ + public array $content = []; + + public string $bg = ''; + + public function mount(string $bg = ''): void + { + $section = cms_theme_section('origin_section'); + $this->content = is_array($section) ? $section : []; + $this->bg = $bg; + } + + /** + * Veröffentlichte Marken mit gepflegtem Fertigungsort, in der Reihenfolge der Marken. + * + * Eine unveröffentlichte Marke fällt heraus, eine Marke ohne Ort ebenfalls. Der Link zur + * Markenseite hängt daran, ob die Marke eine Detailseite hat (Lang-Fallback: keine). + * + * @return list + */ + public function getLocationsProperty(): array + { + $out = []; + + foreach (CmsBrand::forFrontend() as $slug => $brand) { + $city = trim((string) ($brand['origin_city'] ?? '')); + $name = trim((string) ($brand['name'] ?? '')); + + if ($city === '' || $name === '') { + continue; + } + + $out[] = [ + 'slug' => (string) $slug, + 'city' => $city, + 'brand' => $name, + 'role' => trim((string) ($brand['origin_role'] ?? '')), + 'distance' => trim((string) ($brand['origin_distance'] ?? '')), + 'link' => ! empty($brand['has_detail_page']) ? '/marken/'.$slug : null, + 'map' => self::MAP_POSITIONS[$slug] ?? null, + ]; + } + + return $out; + } + + public function render() + { + return view('livewire.web.components.sections.origin-section'); + } +} diff --git a/app/Livewire/Web/Components/Sections/OurStory.php b/app/Livewire/Web/Components/Sections/OurStory.php index 77926785..5086f981 100644 --- a/app/Livewire/Web/Components/Sections/OurStory.php +++ b/app/Livewire/Web/Components/Sections/OurStory.php @@ -8,9 +8,13 @@ class OurStory extends Component { public $content = []; - public function mount() + /** Sektionsschluessel – die Immobilien-Welt nutzt eigene Inhalte (immobilien_our_story). */ + public string $section = 'our_story'; + + public function mount(string $section = 'our_story') { - $this->content = cms_theme_section('our_story'); + $this->section = $section; + $this->content = cms_theme_section($this->section); } public function render() diff --git a/app/Livewire/Web/Components/Sections/OurValues.php b/app/Livewire/Web/Components/Sections/OurValues.php index d6979b66..f13ddabd 100644 --- a/app/Livewire/Web/Components/Sections/OurValues.php +++ b/app/Livewire/Web/Components/Sections/OurValues.php @@ -8,9 +8,13 @@ class OurValues extends Component { public $content = []; - public function mount() + /** Sektionsschluessel – die Immobilien-Welt nutzt eigene Inhalte (immobilien_our_values). */ + public string $section = 'our_values'; + + public function mount(string $section = 'our_values') { - $this->content = cms_theme_section('our_values'); + $this->section = $section; + $this->content = cms_theme_section($this->section); } public function render() diff --git a/app/Livewire/Web/Components/Sections/PageHero.php b/app/Livewire/Web/Components/Sections/PageHero.php new file mode 100644 index 00000000..65a374f0 --- /dev/null +++ b/app/Livewire/Web/Components/Sections/PageHero.php @@ -0,0 +1,32 @@ + */ + public array $content = []; + + public string $bg = ''; + + public function mount(string $section = 'marken_hero', string $bg = ''): void + { + $content = cms_theme_section($section); + $this->content = is_array($content) ? $content : []; + $this->bg = $bg; + } + + public function render() + { + return view('livewire.web.components.sections.page-hero'); + } +} diff --git a/app/Livewire/Web/Components/Sections/ReferenceProjects.php b/app/Livewire/Web/Components/Sections/ReferenceProjects.php new file mode 100644 index 00000000..7e91df8c --- /dev/null +++ b/app/Livewire/Web/Components/Sections/ReferenceProjects.php @@ -0,0 +1,113 @@ + */ + public array $content = []; + + /** @var array> */ + public array $projects = []; + + public string $bg = ''; + + public int $limit = 0; + + public function mount(string $bg = '', int $limit = 0): void + { + $section = cms_theme_section('reference_projects'); + $this->content = is_array($section) ? $section : []; + $this->bg = $bg; + $this->limit = $limit; + + $projects = $this->fromReferences(); + + if ($projects === []) { + $projects = $this->fromBrandGalleries(); + } + + $this->projects = $this->limit > 0 ? array_slice($projects, 0, $this->limit) : $projects; + } + + /** + * @return array> + */ + private function fromReferences(): array + { + $references = CmsReference::query()->published()->ordered()->get(); + + if ($references->isEmpty()) { + return []; + } + + $brands = CmsBrand::forFrontend(); + $projects = []; + + foreach ($references as $reference) { + $gallery = CmsReference::normalizeGallery($reference->gallery); + $image = (string) ($reference->image ?: ($gallery[0]['image'] ?? '')); + + if ($image === '') { + continue; + } + + $projects[] = [ + 'key' => 'ref-'.$reference->id, + 'image' => $image, + 'caption' => (string) $reference->title, + 'meta' => implode(' · ', array_filter([$reference->location, $reference->year])), + 'description' => (string) $reference->description, + 'gallery' => array_values(array_filter($gallery, fn (array $item) => $item['image'] !== $image)), + 'brands' => $reference->resolveBrands($brands), + ]; + } + + return $projects; + } + + /** + * @return array> + */ + private function fromBrandGalleries(): array + { + $projects = []; + + foreach (CmsBrand::forFrontend() as $slug => $brand) { + foreach (CmsBrand::groupGallery($brand['gallery'] ?? [])['projects'] as $index => $item) { + $projects[] = [ + 'key' => $slug.'-'.$index, + 'image' => $item['image'], + 'caption' => $item['caption'], + 'meta' => '', + 'description' => '', + 'gallery' => [], + 'brands' => [[ + 'slug' => $slug, + 'name' => (string) ($brand['name'] ?? ''), + 'link' => ! empty($brand['has_detail_page']) ? '/marken/'.$slug : null, + ]], + ]; + } + } + + return $projects; + } + + public function render() + { + return view('livewire.web.components.sections.reference-projects'); + } +} diff --git a/app/Livewire/Web/Components/Sections/Sponsoring.php b/app/Livewire/Web/Components/Sections/Sponsoring.php new file mode 100644 index 00000000..5e333900 --- /dev/null +++ b/app/Livewire/Web/Components/Sections/Sponsoring.php @@ -0,0 +1,25 @@ + */ + public array $content = []; + + public string $bg = ''; + + public function mount(string $bg = ''): void + { + $section = cms_theme_section('sponsoring'); + $this->content = is_array($section) ? $section : []; + $this->bg = $bg; + } + + public function render() + { + return view('livewire.web.components.sections.sponsoring'); + } +} diff --git a/app/Livewire/Web/Components/Sections/VisionSection.php b/app/Livewire/Web/Components/Sections/VisionSection.php index d7757a8d..10afa516 100644 --- a/app/Livewire/Web/Components/Sections/VisionSection.php +++ b/app/Livewire/Web/Components/Sections/VisionSection.php @@ -10,9 +10,13 @@ class VisionSection extends Component public $bg = 'bg-background'; - public function mount($bg = 'bg-background') + /** Inhalt in weißer Box mit kleinerem Bild (Startseite, 07.10.2026); die anderen Themes bleiben offen. */ + public bool $boxed = false; + + public function mount($bg = 'bg-background', bool $boxed = false) { $this->bg = $bg; + $this->boxed = $boxed; $this->content = cms_theme_section('vision_section'); } diff --git a/app/Livewire/Web/Components/UI/AnnouncementBar.php b/app/Livewire/Web/Components/UI/AnnouncementBar.php deleted file mode 100644 index 610b0ca8..00000000 --- a/app/Livewire/Web/Components/UI/AnnouncementBar.php +++ /dev/null @@ -1,20 +0,0 @@ -content = cms_theme_section('announcement_bar'); - } - - public function render() - { - return view('livewire.web.components.ui.announcement-bar'); - } -} diff --git a/app/Livewire/Web/Components/UI/ContactForm.php b/app/Livewire/Web/Components/UI/ContactForm.php deleted file mode 100644 index b1172057..00000000 --- a/app/Livewire/Web/Components/UI/ContactForm.php +++ /dev/null @@ -1,115 +0,0 @@ - */ - public array $content = []; - - public function mount(): void - { - $this->content = cms_theme_section('contact_form'); - $this->formLoadedAt = time(); - } - - /** @return array */ - public function getSubjectsProperty(): array - { - return $this->content['form']['subjects'] ?? []; - } - - /** @return array> */ - public function getContactInfoProperty(): array - { - return $this->content['contact_info'] ?? []; - } - - /** @return array> */ - public function getSocialMediaProperty(): array - { - return $this->content['social_media']['platforms'] ?? []; - } - - public function submit(ContactFormService $service): void - { - $this->validate([ - 'firstName' => ['required', 'string', 'max:255'], - 'lastName' => ['required', 'string', 'max:255'], - 'email' => ['required', 'email:rfc', 'max:255'], - 'subject' => ['required', 'string'], - 'message' => ['required', 'string', 'max:2000'], - 'company' => ['nullable', 'string', 'max:255'], - 'phone' => ['nullable', 'string', 'max:255'], - 'privacy' => ['accepted'], - 'website' => ['nullable', 'string', 'max:0'], - ]); - - $spamDetector = SpamDetector::fromConfig(); - $payload = [ - 'first_name' => $this->firstName, - 'last_name' => $this->lastName, - 'email' => $this->email, - 'subject' => $this->subject, - 'message' => $this->message, - 'company' => $this->company, - 'phone' => $this->phone, - 'website' => $this->website, - 'ip' => request()->ip(), - 'user_agent' => request()->userAgent(), - 'is_spam' => false, - ]; - - $payload['is_spam'] = $spamDetector->detect($payload, $this->formLoadedAt); - - $subjectLabel = $this->getSubjectsProperty()[$this->subject] ?? $this->subject; - $subjectLine = $subjectLabel - ? 'Kontaktanfrage B2in: ' . $subjectLabel - : __('contact-form::contact-form.default_subject'); - $service->handle($payload, $subjectLine, 'contact-form'); - - $this->success = true; - $this->firstName = ''; - $this->lastName = ''; - $this->company = ''; - $this->email = ''; - $this->phone = ''; - $this->subject = ''; - $this->message = ''; - $this->privacy = false; - $this->website = ''; - $this->formLoadedAt = time(); - } - - public function render(): \Illuminate\View\View - { - return view('livewire.web.components.ui.contact-form'); - } -} diff --git a/app/Livewire/Web/Components/UI/Footer.php b/app/Livewire/Web/Components/UI/Footer.php deleted file mode 100644 index e569a01e..00000000 --- a/app/Livewire/Web/Components/UI/Footer.php +++ /dev/null @@ -1,13 +0,0 @@ - 'DE', - 'en' => 'EN', - ]; - - public function mount(): void - { - $this->domainName = \App\Helpers\ThemeHelper::getDomainName(); - $this->domainUrl = \App\Helpers\ThemeHelper::getDomainUrl(); - $this->currentLocale = app()->getLocale(); - - $this->content = cms_theme_section('header'); - - // Ensure required keys exist - if (!isset($this->content['portal_login'])) { - $this->content['portal_login'] = 'Portal Login'; - } - if (!isset($this->content['navigation']) || !is_array($this->content['navigation'])) { - $this->content['navigation'] = []; - } - } - - public function switchLanguage(string $locale): mixed - { - if (array_key_exists($locale, $this->availableLocales)) { - app()->setLocale($locale); - session(['locale' => $locale]); - $this->currentLocale = $locale; - - $referer = request()->header('Referer') ?? '/'; - - return redirect()->to($referer); - } - - return null; - } - - public function toggleMobileMenu(): void - { - $this->isMobileMenuOpen = ! $this->isMobileMenuOpen; - } - - public function closeMobileMenu(): void - { - $this->isMobileMenuOpen = false; - } - public function isActiveRoute($url) - { - $currentPath = request()->path(); - $currentPath = '/' . ltrim($currentPath, '/'); - - // Exact match - if ($currentPath === $url) { - return true; - } - - // Special handling for home route - if ($url === '/' && ($currentPath === '/' || $currentPath === '')) { - return true; - } - - // Check if current path starts with the navigation URL (for sub-pages) - if ($url !== '/' && str_starts_with($currentPath, rtrim($url, '/'))) { - return true; - } - - return false; - } - public function render() - { - return view('livewire.web.components.ui.header'); - } -} diff --git a/app/Livewire/Web/Components/Ui/AnnouncementBar.php b/app/Livewire/Web/Components/Ui/AnnouncementBar.php new file mode 100644 index 00000000..b511e779 --- /dev/null +++ b/app/Livewire/Web/Components/Ui/AnnouncementBar.php @@ -0,0 +1,46 @@ +world = b2in_world(); + + // Interior: global.announcement_bar, Immobilien: global.announcement_bar_immobilien. + $section = cms_theme_section($this->world === 'immobilien' ? 'announcement_bar_immobilien' : 'announcement_bar'); + $this->content = is_array($section) ? $section : []; + } + + /** + * Schluessel, unter dem sich der Browser das Wegklicken merkt. + * + * Leitet sich aus dem Inhalt ab, nicht nur aus der gepflegten `id`: Wird die Leiste im CMS + * neu belegt, ohne die `id` zu aendern, bekaemen Wiederkehrer die neue Meldung sonst nie + * zu sehen, weil ihr alter Dismiss-Eintrag im localStorage weitergilt. + */ + public function getDismissKeyProperty(): string + { + $fingerprint = implode('|', [ + $this->content['id'] ?? 'default', + $this->content['badge'] ?? '', + $this->content['text'] ?? '', + $this->content['link_url'] ?? '', + ]); + + return 'announcement_dismissed_'.substr(md5($fingerprint), 0, 12); + } + + public function render() + { + return view('livewire.web.components.ui.announcement-bar'); + } +} diff --git a/app/Livewire/Web/Components/Ui/AppointmentWidget.php b/app/Livewire/Web/Components/Ui/AppointmentWidget.php new file mode 100644 index 00000000..a6362f19 --- /dev/null +++ b/app/Livewire/Web/Components/Ui/AppointmentWidget.php @@ -0,0 +1,166 @@ + 'Projektausstattung', + 'immobilien' => 'Immobilien', + 'sonstiges' => 'Sonstiges', + ]; + + /** Farbwelt der Seite – in der Immobilien-Welt ist das Anliegen vorbelegt. */ + public string $world = 'interior'; + + public string $name = ''; + + public string $email = ''; + + public string $phone = ''; + + public string $topic = ''; + + public string $preferredDate = ''; + + public string $message = ''; + + public bool $privacy = false; + + public bool $success = false; + + /** @var string Honeypot – muss leer bleiben. */ + public string $website = ''; + + public ?int $formLoadedAt = null; + + /** @var array */ + public array $content = []; + + public function mount(): void + { + $section = cms_theme_section('appointment_widget'); + $this->content = is_array($section) ? $section : []; + $this->formLoadedAt = time(); + $this->world = b2in_world(); + + if ($this->world === 'immobilien') { + $this->topic = 'immobilien'; + } + + $this->applyBrandContext(); + } + + /** + * Auf einer Markenseite trägt der Button die Beschriftung dieser Marke. + * + * Die Zulieferung sieht ausdrücklich keinen zweiten CTA-Button vor, sondern eine + * kontextbezogene Beschriftung des vorhandenen Widgets. Da das Widget im Layout steckt und + * nicht je Seite eingebunden wird, liest es den Kontext aus der Route. + */ + private function applyBrandContext(): void + { + $route = request()->route(); + + if ($route?->getName() !== 'marken.show') { + return; + } + + $slug = (string) $route->parameter('slug'); + $brand = CmsBrand::forFrontend()[$slug] ?? null; + $label = is_array($brand) ? trim((string) ($brand['widget_label'] ?? '')) : ''; + + if ($label !== '') { + $this->content['button_label'] = $label; + } + } + + /** + * Auswahl „Anliegen": gepflegte Kernmarken zuerst, danach die festen Einträge. + * + * @return array + */ + public function getTopicsProperty(): array + { + $brands = []; + + foreach (CmsBrand::forFrontend() as $slug => $brand) { + $brands[$slug] = (string) ($brand['name'] ?? $slug); + } + + return $brands + self::EXTRA_TOPICS; + } + + public function getWhatsappUrlProperty(): string + { + return whatsapp_link(); + } + + public function submit(ContactFormService $service): void + { + $this->validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'email:rfc', 'max:255'], + 'phone' => ['nullable', 'string', 'max:80'], + 'topic' => ['nullable', 'string', 'max:255'], + 'preferredDate' => ['nullable', 'date', 'after_or_equal:today'], + 'message' => ['nullable', 'string', 'max:2000'], + 'privacy' => ['accepted'], + 'website' => ['nullable', 'string', 'max:0'], + ], [ + 'preferredDate.after_or_equal' => __('ui.appointment.date_in_past'), + ]); + + $topicLabel = $this->topics[$this->topic] ?? ''; + + $payload = [ + 'name' => $this->name, + 'email' => $this->email, + 'phone' => $this->phone, + 'topic' => $topicLabel, + 'preferred_date' => $this->preferredDate, + 'message' => $this->message, + 'website' => $this->website, + 'source' => request()->path(), + 'ip' => request()->ip(), + 'user_agent' => request()->userAgent(), + 'is_spam' => false, + ]; + + $payload['is_spam'] = SpamDetector::fromConfig()->detect($payload, $this->formLoadedAt); + + $subject = ($this->world === 'immobilien' ? 'Terminanfrage B2in Immobilien' : 'Terminanfrage B2in Interior') + .($topicLabel !== '' ? ': '.$topicLabel : ''); + $service->handle($payload, $subject, 'appointment-widget'); + + $this->success = true; + $this->reset(['name', 'email', 'phone', 'topic', 'preferredDate', 'message', 'privacy', 'website']); + $this->topic = $this->world === 'immobilien' ? 'immobilien' : ''; + $this->formLoadedAt = time(); + } + + public function startOver(): void + { + $this->success = false; + $this->formLoadedAt = time(); + } + + public function render(): \Illuminate\View\View + { + return view('livewire.web.components.ui.appointment-widget'); + } +} diff --git a/app/Livewire/Web/Components/Ui/ContactForm.php b/app/Livewire/Web/Components/Ui/ContactForm.php new file mode 100644 index 00000000..502e9ddc --- /dev/null +++ b/app/Livewire/Web/Components/Ui/ContactForm.php @@ -0,0 +1,205 @@ + */ + public array $content = []; + + /** Farbwelt der Seite (`interior` | `immobilien`). */ + public string $world = 'interior'; + + public function mount(string $world = 'interior'): void + { + $this->world = $world === 'immobilien' ? 'immobilien' : 'interior'; + $this->content = $this->loadContent(); + $this->formLoadedAt = time(); + } + + /** + * Inhalte der Welt. Die Immobilien-Welt liegt als Overlay über der Interior-Sektion: + * `contact_form_immobilien` trägt nur, was abweicht (Einstieg, Betreffe) – Adresse, + * Beschriftungen und Social Media erbt sie von `contact_form`. + * + * @return array + */ + private function loadContent(): array + { + $base = cms_theme_section('contact_form'); + $base = is_array($base) ? $base : []; + + if ($this->world !== 'immobilien') { + return $base; + } + + $overlay = cms_theme_section('contact_form_immobilien'); + + if (! is_array($overlay)) { + return $base; + } + + return array_replace_recursive($base, $overlay); + } + + /** + * Betreffe in Gruppen: Interior (mit den gepflegten Kernmarken vorneweg), Immobilien, B2in. + * Die Welt der Seite bestimmt die Reihenfolge – ihre Gruppe steht oben. + * + * Ohne `subject_groups` (aeltere CMS-Staende) faellt das Formular auf die flache Liste zurueck. + * + * @return array}> + */ + public function getSubjectGroupsProperty(): array + { + $groups = $this->content['form']['subject_groups'] ?? null; + + if (! is_array($groups) || $groups === []) { + $flat = $this->content['form']['subjects'] ?? []; + unset($flat['']); + + return $flat === [] ? [] : ['all' => ['label' => '', 'subjects' => $flat]]; + } + + $brands = []; + + foreach (CmsBrand::forFrontend() as $slug => $brand) { + $brands[$slug] = (string) ($brand['name'] ?? $slug); + } + + $out = []; + + foreach ($groups as $key => $group) { + $subjects = is_array($group['subjects'] ?? null) ? $group['subjects'] : []; + + if ($key === 'interior') { + $subjects = $brands + $subjects; + } + + $out[$key] = [ + 'label' => (string) ($group['label'] ?? ''), + 'subjects' => $subjects, + ]; + } + + $first = $this->world === 'immobilien' ? 'immobilien' : 'interior'; + + if (isset($out[$first])) { + $out = [$first => $out[$first]] + $out; + } + + return $out; + } + + /** + * Alle waehlbaren Betreffe als flache Liste (Schluessel → Beschriftung). + * + * @return array + */ + public function getSubjectsProperty(): array + { + $flat = []; + + foreach ($this->getSubjectGroupsProperty() as $group) { + $flat += $group['subjects']; + } + + return $flat; + } + + public function getSubjectPlaceholderProperty(): string + { + return (string) ($this->content['form']['subjects'][''] ?? $this->content['form']['subject_placeholder'] ?? __('ui.contact_form.subject_placeholder')); + } + + /** @return array> */ + public function getContactInfoProperty(): array + { + return $this->content['contact_info'] ?? []; + } + + public function submit(ContactFormService $service): void + { + $this->validate([ + 'firstName' => ['required', 'string', 'max:255'], + 'lastName' => ['required', 'string', 'max:255'], + 'email' => ['required', 'email:rfc', 'max:255'], + 'subject' => ['required', 'string', Rule::in(array_keys($this->subjects))], + 'message' => ['required', 'string', 'max:2000'], + 'company' => ['nullable', 'string', 'max:255'], + 'phone' => ['nullable', 'string', 'max:255'], + 'privacy' => ['accepted'], + 'website' => ['nullable', 'string', 'max:0'], + ]); + + $spamDetector = SpamDetector::fromConfig(); + $payload = [ + 'first_name' => $this->firstName, + 'last_name' => $this->lastName, + 'email' => $this->email, + 'subject' => $this->subject, + 'message' => $this->message, + 'company' => $this->company, + 'phone' => $this->phone, + 'website' => $this->website, + 'ip' => request()->ip(), + 'user_agent' => request()->userAgent(), + 'is_spam' => false, + ]; + + $payload['is_spam'] = $spamDetector->detect($payload, $this->formLoadedAt); + + $subjectLabel = $this->getSubjectsProperty()[$this->subject] ?? $this->subject; + $prefix = $this->world === 'immobilien' ? 'Kontaktanfrage B2in Immobilien' : 'Kontaktanfrage B2in'; + $subjectLine = $subjectLabel + ? $prefix.': '.$subjectLabel + : __('contact-form::contact-form.default_subject'); + $service->handle($payload, $subjectLine, 'contact-form'); + + $this->success = true; + $this->firstName = ''; + $this->lastName = ''; + $this->company = ''; + $this->email = ''; + $this->phone = ''; + $this->subject = ''; + $this->message = ''; + $this->privacy = false; + $this->website = ''; + $this->formLoadedAt = time(); + } + + public function render(): \Illuminate\View\View + { + return view('livewire.web.components.ui.contact-form'); + } +} diff --git a/app/Livewire/Web/Components/Ui/Footer.php b/app/Livewire/Web/Components/Ui/Footer.php new file mode 100644 index 00000000..d4cadc9d --- /dev/null +++ b/app/Livewire/Web/Components/Ui/Footer.php @@ -0,0 +1,69 @@ + */ + public array $content = []; + + /** Farbwelt der Seite (`interior` | `immobilien`), in mount() festgehalten. */ + public string $world = 'interior'; + + /** @var array */ + public array $worlds = []; + + public string $logoPath = ''; + + /** + * Negatives Logo für die Farbvariante „Modern“ (Nachtrag 18): dort liegt der Interior-Footer + * dunkel in Tanne. Die Palette schaltet im Browser, deshalb liegen beide Logos im Markup und + * das Stylesheet blendet das passende ein. Leer in der Immobilien-Welt, die ohnehin das + * negative Logo trägt. + */ + public string $logoPathDark = ''; + + /** + * Fuer die Immobilien-Welt zeigen die gemeinsamen Footer-Links auf die Seiten dieser Welt. + * + * @var array + */ + private const IMMOBILIEN_LINKS = [ + '/faq' => '/immobilien/faq', + '/about' => '/immobilien/ueber-b2in', + '/magazin' => '/immobilien/magazin', + ]; + + public function mount(): void + { + $section = cms_theme_section('footer'); + $this->content = is_array($section) ? $section : []; + $this->world = b2in_world(); + + if ($this->world === 'immobilien' && is_array($this->content['links'] ?? null)) { + $this->content['links'] = array_map(function ($link) { + if (is_array($link) && isset(self::IMMOBILIEN_LINKS[$link['url'] ?? ''])) { + $link['url'] = self::IMMOBILIEN_LINKS[$link['url']]; + } + + return $link; + }, $this->content['links']); + } + $this->worlds = b2in_worlds($this->world); + + // Der Interior-Footer liegt auf Sand (helle Fläche) und trägt deshalb das positive + // Logo; der Immobilien-Footer bleibt dunkel und nutzt die negative Variante. + $variant = $this->world === 'immobilien' ? 'negative' : 'positive'; + $this->logoPath = \App\Helpers\ThemeHelper::getLogoPath($variant, $this->world); + $this->logoPathDark = $this->world === 'immobilien' + ? '' + : \App\Helpers\ThemeHelper::getLogoPath('negative', $this->world); + } + + public function render() + { + return view('livewire.web.components.ui.footer'); + } +} diff --git a/app/Livewire/Web/Components/Ui/Header.php b/app/Livewire/Web/Components/Ui/Header.php new file mode 100644 index 00000000..aeafb368 --- /dev/null +++ b/app/Livewire/Web/Components/Ui/Header.php @@ -0,0 +1,130 @@ + 'DE', + 'en' => 'EN', + ]; + + /** Farbwelt der Seite (`interior` | `immobilien`), in mount() festgehalten. */ + public string $world = 'interior'; + + /** @var array */ + public array $worlds = []; + + public string $logoPath = ''; + + /** Pfad der Seite, in mount() festgehalten – ein Livewire-Request traegt ihn nicht mehr. */ + public string $currentPath = '/'; + + /** Ziel des Kontakt-Buttons: /contact (Interior) bzw. /immobilien/kontakt (Immobilien). */ + public string $contactUrl = ''; + + public function mount(): void + { + $this->domainName = \App\Helpers\ThemeHelper::getDomainName(); + $this->domainUrl = \App\Helpers\ThemeHelper::getDomainUrl(); + $this->currentLocale = app()->getLocale(); + $this->world = b2in_world(); + $this->worlds = b2in_worlds($this->world); + $this->logoPath = \App\Helpers\ThemeHelper::getLogoPath('positive', $this->world); + $this->currentPath = '/'.ltrim(request()->path(), '/'); + $this->contactUrl = route($this->world === 'immobilien' ? 'immobilien.contact' : 'contact'); + + // Jede Welt hat ihre eigene Navigation (CMS: global.header bzw. global.header_immobilien). + $this->content = cms_theme_section($this->world === 'immobilien' ? 'header_immobilien' : 'header'); + + // Ensure required keys exist + if (!isset($this->content['portal_login'])) { + $this->content['portal_login'] = 'Portal Login'; + } + if (!isset($this->content['navigation']) || !is_array($this->content['navigation'])) { + $this->content['navigation'] = []; + } + + // Referenzen lassen sich im CMS ausblenden; dann verschwindet auch der Menüpunkt. + if (! references_page_enabled()) { + $this->content['navigation'] = array_values(array_filter( + $this->content['navigation'], + fn ($item) => rtrim(parse_url((string) ($item['url'] ?? ''), PHP_URL_PATH) ?? '', '/') !== '/referenzen', + )); + } + } + + public function switchLanguage(string $locale): mixed + { + if (array_key_exists($locale, $this->availableLocales)) { + app()->setLocale($locale); + session(['locale' => $locale]); + $this->currentLocale = $locale; + + $referer = request()->header('Referer') ?? '/'; + + return redirect()->to($referer); + } + + return null; + } + + public function toggleMobileMenu(): void + { + $this->isMobileMenuOpen = ! $this->isMobileMenuOpen; + } + + public function closeMobileMenu(): void + { + $this->isMobileMenuOpen = false; + } + /** + * Aktiver Navigationspunkt: exakter Treffer, sonst der laengste Eintrag, dessen Pfad ein + * Praefix der Seite ist. So markiert /immobilien/magazin nur „Magazin“, nicht auch + * „Immobilien“. Anker (#…) zaehlen nicht zum Pfad. + */ + public function isActiveRoute($url): bool + { + $path = $this->navPath((string) $url); + + if ($this->currentPath === $path) { + return true; + } + + if ($path === '/' || ! str_starts_with($this->currentPath, rtrim($path, '/').'/')) { + return false; + } + + foreach ($this->content['navigation'] ?? [] as $navItem) { + $other = $this->navPath((string) ($navItem['url'] ?? '')); + + if ($other === $this->currentPath) { + return false; + } + + if (strlen($other) > strlen($path) && str_starts_with($this->currentPath, rtrim($other, '/').'/')) { + return false; + } + } + + return true; + } + + private function navPath(string $url): string + { + $path = (string) (parse_url($url, PHP_URL_PATH) ?? '/'); + + return '/'.ltrim($path, '/'); + } + public function render() + { + return view('livewire.web.components.ui.header'); + } +} diff --git a/app/Livewire/Web/Components/UI/TopBar.php b/app/Livewire/Web/Components/Ui/TopBar.php similarity index 100% rename from app/Livewire/Web/Components/UI/TopBar.php rename to app/Livewire/Web/Components/Ui/TopBar.php diff --git a/app/Models/CmsArticle.php b/app/Models/CmsArticle.php index 28c3fa11..564b2e54 100644 --- a/app/Models/CmsArticle.php +++ b/app/Models/CmsArticle.php @@ -13,12 +13,47 @@ class CmsArticle extends Model protected $table = 'cms_articles'; + /** + * Alte numerische Artikel-IDs (resources/lang/{locale}/b2in.php) → Slug. + * + * Wird an drei Stellen gebraucht: beim Anlegen durch den CmsArticleSeeder, für den + * Lang-Fallback und für die 301-Weiterleitung der alten /magazin/{id}-URLs. + * + * @var array + */ + public const LEGACY_ID_TO_SLUG = [ + 1 => 'escrow-system-dubai-investoren', + 2 => 'spotlight-al-jaddaf-hotspot', + 3 => 'turnkey-investments-moeblierung-rendite', + 4 => 'supply-chain-management-vertragssicherheit', + 5 => 'local-for-local-regionaler-moebelhandel', + ]; + + public const WORLD_INTERIOR = 'interior'; + + public const WORLD_IMMOBILIEN = 'immobilien'; + + /** @var array */ + public const WORLDS = [self::WORLD_INTERIOR, self::WORLD_IMMOBILIEN]; + + /** + * Beiträge aus dem Bestand, die zur Immobilien-Welt gehören (Dubai-Themen). + * + * @var array + */ + public const LEGACY_IMMOBILIEN_SLUGS = [ + 'escrow-system-dubai-investoren', + 'spotlight-al-jaddaf-hotspot', + 'turnkey-investments-moeblierung-rendite', + ]; + protected $fillable = [ 'slug', 'title', 'subtitle', 'image', 'category', + 'world', 'date_label', 'read_time', 'author', @@ -53,6 +88,104 @@ class CmsArticle extends Model return $query->orderBy('order')->orderByDesc('created_at'); } + public function scopeForWorld(Builder $query, string $world): Builder + { + return $query->where('world', $world); + } + + /** + * Veröffentlichte Artikel fürs Frontend, nach Slug indiziert. + * + * Das CMS gewinnt. Solange keine Artikel gepflegt sind, greift die Lang-Datei als Fallback – + * dieselbe Reihenfolge wie bei cms_theme_section(), damit das Magazin auf einer frischen + * Installation nicht leer ist. + * + * Mit `$world` nur die Beiträge dieser Farbwelt (Interior oder Immobilien) – die beiden + * Magazinlisten sind getrennt, die Detailseite rendert in der Welt ihres Beitrags. + * + * @return array> + */ + public static function forFrontend(?string $world = null): array + { + $maintained = static::query()->published()->exists(); + + if ($maintained) { + return static::query() + ->published() + ->when($world !== null, fn (Builder $query) => $query->forWorld($world)) + ->ordered() + ->get() + ->mapWithKeys(fn (self $article) => [$article->slug => $article->toFrontendArray()]) + ->all(); + } + + $articles = static::fallbackFromLang(); + + if ($world === null) { + return $articles; + } + + return array_filter($articles, fn (array $article) => ($article['world'] ?? self::WORLD_INTERIOR) === $world); + } + + /** + * Slug zu einer alten numerischen Magazin-ID, falls bekannt. + */ + public static function slugForLegacyId(int|string $id): ?string + { + return self::LEGACY_ID_TO_SLUG[(int) $id] ?? null; + } + + /** + * Slug eines Artikels aus der Lang-Datei. + * + * Neue Artikel bringen ihren Slug selbst mit (`'slug' => …`). Die fünf ursprünglichen + * Artikel hatten keinen und werden weiter über {@see LEGACY_ID_TO_SLUG} aufgelöst – die + * Konstante bleibt damit das, was sie ist: die Karte für die alten `/magazin/{id}`-URLs. + * + * @param array $article + */ + public static function slugForLangArticle(int|string $id, array $article): ?string + { + $slug = $article['slug'] ?? null; + + if (is_string($slug) && $slug !== '') { + return $slug; + } + + return self::slugForLegacyId($id); + } + + /** + * @return array> + */ + private static function fallbackFromLang(): array + { + $articles = trans('b2in.articles'); + + if (! is_array($articles)) { + return []; + } + + $out = []; + + foreach ($articles as $id => $article) { + if (! is_array($article) || ($article['published'] ?? true) === false) { + continue; + } + + $slug = self::slugForLangArticle($id, $article); + + if ($slug === null) { + continue; + } + + $out[$slug] = $article + ['slug' => $slug, 'world' => self::WORLD_INTERIOR]; + } + + return $out; + } + /** * @return array */ @@ -65,6 +198,7 @@ class CmsArticle extends Model 'subtitle' => $this->subtitle, 'image' => $this->image, 'category' => $this->category, + 'world' => $this->world ?? self::WORLD_INTERIOR, 'date' => $this->date_label, 'readTime' => $this->read_time, 'author' => $this->author ?? [], diff --git a/app/Models/CmsBrand.php b/app/Models/CmsBrand.php new file mode 100644 index 00000000..c221a4ae --- /dev/null +++ b/app/Models/CmsBrand.php @@ -0,0 +1,481 @@ + */ + public const GALLERY_CATEGORIES = [self::GALLERY_PROJECT, self::GALLERY_INSPIRATION, self::GALLERY_COMPANY]; + + /** Sprache der Spalten highlights, services, sections, showroom und der Bildunterschriften. */ + public const BASE_LOCALE = 'de'; + + /** + * Felder, die nur einsprachig als Spalte existieren und ihre Übersetzungen in `field_translations` + * tragen (09.10.2026). `gallery_captions` sind die Bildunterschriften, nach Bild-Datei. + */ + public const LOCALIZED_FIELDS = ['highlights', 'services', 'sections', 'showroom', 'gallery_captions']; + + protected $table = 'cms_brands'; + + protected $fillable = [ + 'slug', + 'name', + 'tagline', + 'teaser', + 'summary', + 'highlights', + 'description', + 'logo', + 'image', + 'services', + 'sections', + 'widget_label', + 'cta_title', + 'cta_text', + 'gallery', + 'field_translations', + 'website_url', + 'showroom', + 'origin_city', + 'origin_distance', + 'origin_role', + 'is_published', + 'order', + ]; + + /** @var array */ + public array $translatable = [ + 'name', + 'tagline', + 'teaser', + 'summary', + 'description', + 'widget_label', + 'cta_title', + 'cta_text', + 'origin_city', + 'origin_distance', + 'origin_role', + ]; + + protected function casts(): array + { + return [ + 'highlights' => 'array', + 'services' => 'array', + 'sections' => 'array', + 'gallery' => 'array', + 'field_translations' => 'array', + 'is_published' => 'boolean', + 'order' => 'integer', + ]; + } + + public function scopePublished(Builder $query): Builder + { + return $query->where('is_published', true); + } + + public function scopeOrdered(Builder $query): Builder + { + return $query->orderBy('order')->orderBy('id'); + } + + /** + * Veröffentlichte Kernmarken fürs Frontend, nach Slug indiziert. + * + * Das CMS gewinnt. Solange keine Marke gepflegt ist, greift die Liste `core_brands.brands` + * der Lang-Datei als Fallback, damit die Startseite auf einer frischen Installation nicht ohne + * Kernmarken dasteht. + * + * @return array> + */ + public static function forFrontend(): array + { + $brands = static::query()->published()->ordered()->get(); + + if ($brands->isNotEmpty()) { + return $brands + ->mapWithKeys(fn (self $brand) => [$brand->slug => $brand->toFrontendArray()]) + ->all(); + } + + return static::fallbackFromLang(); + } + + /** + * @return array> + */ + private static function fallbackFromLang(): array + { + // Direkt aus der Lang-Datei: Im CMS-Eintrag `home.core_brands` steht die Liste nicht + // (mehr), dort pflegt man nur Überschrift und Untertitel – die Marken in der Markenverwaltung. + $brands = trans('b2in.themes.'.config('app.theme', 'b2in').'.core_brands.brands'); + $brands = is_array($brands) ? $brands : []; + + $out = []; + + foreach ($brands as $brand) { + if (! is_array($brand) || empty($brand['name'])) { + continue; + } + + $slug = $brand['slug'] ?? \Illuminate\Support\Str::slug((string) $brand['name']); + + $entry = array_merge([ + 'slug' => $slug, + 'tagline' => '', + 'teaser' => '', + 'summary' => '', + 'highlights' => [], + 'description' => '', + 'logo' => '', + 'image' => '', + 'services' => [], + 'sections' => [], + 'widget_label' => '', + 'cta_title' => '', + 'cta_text' => '', + 'gallery' => [], + 'website_url' => '', + 'showroom' => '', + 'origin_city' => '', + 'origin_distance' => '', + 'origin_role' => '', + 'has_detail_page' => false, + ], $brand, ['slug' => $slug, 'has_detail_page' => false]); + + $entry['gallery'] = self::normalizeGallery($entry['gallery']); + $entry['sections'] = self::normalizeSections($entry['sections']); + + $out[$slug] = $entry; + } + + return $out; + } + + /** + * Seitenabschnitte in eine feste Form bringen. + * + * Jeder Abschnitt hat einen Titel und Absätze. Optional dazu: + * - `claim` hervorgehobene Schlusszeile + * - `quote` Zitat mit `quote_author` + * - `detail` Vertiefung, die im Frontend aufklappbar dargestellt wird + * + * @param mixed $sections + * @return list, claim: string, quote: string, quote_author: string, detail: array{title: string, paragraphs: list}|null}> + */ + public static function normalizeSections($sections): array + { + if (! is_array($sections)) { + return []; + } + + $out = []; + + foreach ($sections as $section) { + if (! is_array($section)) { + continue; + } + + $paragraphs = self::paragraphList($section['paragraphs'] ?? []); + $title = trim((string) ($section['title'] ?? '')); + + if ($title === '' && $paragraphs === []) { + continue; + } + + $detail = null; + + if (is_array($section['detail'] ?? null)) { + $detailParagraphs = self::paragraphList($section['detail']['paragraphs'] ?? []); + $detailTitle = trim((string) ($section['detail']['title'] ?? '')); + + if ($detailTitle !== '' || $detailParagraphs !== []) { + $detail = ['title' => $detailTitle, 'paragraphs' => $detailParagraphs]; + } + } + + $out[] = [ + 'title' => $title, + 'paragraphs' => $paragraphs, + 'claim' => trim((string) ($section['claim'] ?? '')), + 'quote' => trim((string) ($section['quote'] ?? '')), + 'quote_author' => trim((string) ($section['quote_author'] ?? '')), + 'detail' => $detail, + ]; + } + + return $out; + } + + /** + * Absätze eines Abschnitts für die Ausgabe gruppieren. + * + * Ein Absatz, der mit „- “ beginnt, ist ein Listenpunkt; aufeinanderfolgende Punkte bilden + * eine Liste. Steht im Punkt ein Doppelpunkt, wird der Teil davor als fette Einleitung + * ausgegeben („- Sichere Prüfung & Terminierung: Wir vereinbaren …“). So lässt sich eine + * Aufzählung im Backend im normalen Textfeld pflegen. + * + * @param list $paragraphs + * @return list}> + */ + public static function paragraphBlocks(array $paragraphs): array + { + $blocks = []; + + foreach ($paragraphs as $paragraph) { + if (! preg_match('/^[-–•]\s+(.+)$/su', $paragraph, $match)) { + $blocks[] = ['type' => 'paragraph', 'text' => $paragraph]; + + continue; + } + + [$lead, $text] = str_contains($match[1], ': ') + ? array_map('trim', explode(': ', $match[1], 2)) + : ['', trim($match[1])]; + + $last = array_key_last($blocks); + + if ($last === null || $blocks[$last]['type'] !== 'list') { + $blocks[] = ['type' => 'list', 'items' => []]; + $last = array_key_last($blocks); + } + + $blocks[$last]['items'][] = ['lead' => $lead, 'text' => $text]; + } + + return $blocks; + } + + /** + * @param mixed $paragraphs + * @return list + */ + private static function paragraphList($paragraphs): array + { + if (is_string($paragraphs)) { + $paragraphs = preg_split('/\R{2,}/', $paragraphs) ?: []; + } + + if (! is_array($paragraphs)) { + return []; + } + + return array_values(array_filter(array_map( + fn ($p) => trim((string) (is_array($p) ? ($p['text'] ?? '') : $p)), + $paragraphs, + ))); + } + + /** + * Galerie-Eintraege in eine feste Form bringen. + * + * Ein Eintrag ohne (oder mit unbekannter) Kategorie gilt als Inspiration, nicht als Projekt: + * Ein Entwurf, der versehentlich als Referenz durchgeht, waere die schaedlichere Verwechslung. + * + * @param mixed $gallery + * @return list + */ + public static function normalizeGallery($gallery): array + { + if (! is_array($gallery)) { + return []; + } + + $out = []; + + foreach ($gallery as $item) { + $image = is_array($item) ? (string) ($item['image'] ?? '') : (string) $item; + $image = trim($image); + + if ($image === '') { + continue; + } + + $category = is_array($item) ? (string) ($item['category'] ?? '') : ''; + + $out[] = [ + 'image' => $image, + 'category' => in_array($category, self::GALLERY_CATEGORIES, true) + ? $category + : self::GALLERY_INSPIRATION, + 'caption' => is_array($item) ? trim((string) ($item['caption'] ?? '')) : '', + ]; + } + + return $out; + } + + /** + * Galerie nach realisierten Projekten, Einblicken in die Werkstatt und Inspirationen getrennt. + * + * @param mixed $gallery + * @return array{projects: list, company: list, inspirations: list} + */ + public static function groupGallery($gallery): array + { + $items = self::normalizeGallery($gallery); + + return [ + 'projects' => array_values(array_filter( + $items, + fn (array $item) => $item['category'] === self::GALLERY_PROJECT, + )), + 'company' => array_values(array_filter( + $items, + fn (array $item) => $item['category'] === self::GALLERY_COMPANY, + )), + 'inspirations' => array_values(array_filter( + $items, + fn (array $item) => $item['category'] === self::GALLERY_INSPIRATION, + )), + ]; + } + + /** + * Beschriftung des Badges auf dem Galeriebild („Realisiertes Projekt“, „Aus der Werkstatt“, „Visualisierung“). + */ + public static function galleryBadge(string $category): string + { + return match ($category) { + self::GALLERY_PROJECT => __('ui.brand_gallery_badge_project'), + self::GALLERY_COMPANY => __('ui.brand_gallery_badge_company'), + default => __('ui.brand_gallery_badge_inspiration'), + }; + } + + /** + * @return array + */ + /** + * Ein einsprachiges Feld in der gewünschten Sprache: die Übersetzung aus `field_translations`, + * sonst die deutsche Spalte. `gallery_captions` liefert Bild-Datei => Unterschrift. + */ + public function localized(string $field, ?string $locale = null): mixed + { + $locale ??= app()->getLocale(); + $base = $field === 'gallery_captions' + ? collect(self::normalizeGallery($this->gallery))->mapWithKeys(fn (array $item) => [$item['image'] => $item['caption']])->all() + : $this->getAttribute($field); + + if ($locale === self::BASE_LOCALE) { + return $base; + } + + $translated = $this->field_translations[$locale][$field] ?? null; + + if ($field === 'gallery_captions') { + foreach ($base as $image => $caption) { + if (filled($translated[$image] ?? null)) { + $base[$image] = (string) $translated[$image]; + } + } + + return $base; + } + + return filled($translated) ? $translated : $base; + } + + /** + * Schreibt ein einsprachiges Feld: Deutsch in die Spalte, andere Sprachen nach `field_translations`. + * Eine Übersetzung, die genau dem deutschen Stand entspricht, wird nicht gespeichert – sonst + * gälte deutscher Text als übersetzt. + */ + public function setLocalized(string $field, string $locale, mixed $value): void + { + if ($locale === self::BASE_LOCALE) { + if ($field !== 'gallery_captions') { + $this->setAttribute($field, $value); + } + + return; + } + + $translations = $this->field_translations ?? []; + $base = $this->localized($field, self::BASE_LOCALE); + + if ($field === 'gallery_captions') { + $value = array_filter( + (array) $value, + fn (mixed $caption, string $image): bool => filled($caption) && $caption !== ($base[$image] ?? null), + ARRAY_FILTER_USE_BOTH, + ); + } + + if (blank($value) || $value === $base) { + unset($translations[$locale][$field]); + } else { + $translations[$locale][$field] = $value; + } + + $translations = array_filter($translations, fn (mixed $fields): bool => filled($fields)); + $this->field_translations = $translations === [] ? null : $translations; + } + + /** + * Bildergalerie in der gewünschten Sprache (Bilder und Rubriken sind sprachunabhängig). + * + * @return list + */ + public function localizedGallery(?string $locale = null): array + { + $captions = $this->localized('gallery_captions', $locale); + + return array_map( + fn (array $item): array => [...$item, 'caption' => (string) ($captions[$item['image']] ?? $item['caption'])], + self::normalizeGallery($this->gallery), + ); + } + + public function toFrontendArray(): array + { + return [ + 'id' => $this->id, + 'slug' => $this->slug, + 'name' => $this->name, + 'tagline' => $this->tagline, + 'teaser' => $this->teaser, + 'summary' => $this->summary, + 'highlights' => $this->localized('highlights') ?? [], + 'description' => $this->description, + 'logo' => $this->logo, + 'image' => $this->image, + 'services' => $this->localized('services') ?? [], + 'sections' => self::normalizeSections($this->localized('sections')), + 'widget_label' => (string) $this->widget_label, + 'cta_title' => (string) $this->cta_title, + 'cta_text' => (string) $this->cta_text, + 'gallery' => $this->localizedGallery(), + 'website_url' => $this->website_url, + 'showroom' => $this->localized('showroom'), + 'origin_city' => (string) $this->origin_city, + 'origin_distance' => (string) $this->origin_distance, + 'origin_role' => (string) $this->origin_role, + 'has_detail_page' => true, + ]; + } +} diff --git a/app/Models/CmsReference.php b/app/Models/CmsReference.php new file mode 100644 index 00000000..f5b7492d --- /dev/null +++ b/app/Models/CmsReference.php @@ -0,0 +1,115 @@ + */ + public array $translatable = ['title', 'description']; + + protected function casts(): array + { + return [ + 'gallery' => 'array', + 'brand_slugs' => 'array', + 'is_published' => 'boolean', + 'order' => 'integer', + ]; + } + + public function scopePublished(Builder $query): Builder + { + return $query->where('is_published', true); + } + + public function scopeOrdered(Builder $query): Builder + { + return $query->orderBy('order')->orderBy('id'); + } + + /** + * Galerie in eine feste Form bringen: nur Einträge mit Bild, Bildunterschrift getrimmt. + * + * @param mixed $gallery + * @return list + */ + public static function normalizeGallery($gallery): array + { + if (! is_array($gallery)) { + return []; + } + + $out = []; + + foreach ($gallery as $item) { + $image = trim((string) (is_array($item) ? ($item['image'] ?? '') : $item)); + + if ($image === '') { + continue; + } + + $out[] = [ + 'image' => $image, + 'caption' => is_array($item) ? trim((string) ($item['caption'] ?? '')) : '', + ]; + } + + return $out; + } + + /** + * Beteiligte Marken als Liste mit Name und Link, aufgelöst gegen die veröffentlichten Marken. + * + * Eine unveröffentlichte oder gelöschte Marke fällt heraus. + * + * @param array> $brands Ergebnis von CmsBrand::forFrontend() + * @return list + */ + public function resolveBrands(array $brands): array + { + $out = []; + + foreach ($this->brand_slugs ?? [] as $slug) { + $slug = (string) $slug; + + if (! isset($brands[$slug])) { + continue; + } + + $out[] = [ + 'slug' => $slug, + 'name' => (string) ($brands[$slug]['name'] ?? $slug), + 'link' => ! empty($brands[$slug]['has_detail_page']) ? '/marken/'.$slug : null, + ]; + } + + return $out; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index a67357c3..02578c9d 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,10 @@ namespace App\Providers; +use App\Support\OperationalAlert; +use Illuminate\Foundation\Console\AboutCommand; +use Illuminate\Queue\Events\JobFailed; +use Illuminate\Support\Facades\Queue; use Illuminate\Support\Facades\URL; use Illuminate\Support\ServiceProvider; @@ -29,5 +33,17 @@ class AppServiceProvider extends ServiceProvider if ($scheme === 'https') { URL::forceScheme('https'); } + + // Betriebs-Alert bei endgültig fehlgeschlagenem Queue-Job + Queue::failing(function (JobFailed $event): void { + OperationalAlert::send("Queue-Job fehlgeschlagen: {$event->job->resolveName()}", [ + 'connection' => $event->connectionName, + 'queue' => $event->job->getQueue(), + 'exception' => $event->exception->getMessage(), + ]); + }); + + // Ausgelieferte Version in `php artisan about` (ABOUT_SECTION in dev/betrieb/deploy.sh) + AboutCommand::add('B2in', fn (): array => ['Version' => config('app.version') ?? '—']); } } diff --git a/app/Providers/ThemeServiceProvider.php b/app/Providers/ThemeServiceProvider.php index 5341c30e..a3ffcac6 100644 --- a/app/Providers/ThemeServiceProvider.php +++ b/app/Providers/ThemeServiceProvider.php @@ -57,6 +57,18 @@ class ThemeServiceProvider extends ServiceProvider $domainConfig = array_merge($domainConfig, $confiDomains[$themeOverride]); } + // Unbekannter Host (Vorschau-, Staging- oder IP-Aufruf): Bis hierher stünde in `url` noch + // APP_URL bzw. der Vorgabewert aus config/domains.php – also eine *fremde* Domain. Alle + // Assets und Links würden dorthin zeigen, obwohl die Instanz unter einem anderen Namen + // läuft. Außerhalb von `production` gilt deshalb der tatsächliche Request-Origin. + // + // In `production` bleibt es bewusst bei der konfigurierten URL: dort darf ein gefälschter + // Host-Header keine Links auf eine fremde Domain erzeugen. + if ($domainConfig['domain_name'] !== $host && config('app.env') !== 'production') { + $domainConfig['domain_name'] = $host; + $domainConfig['url'] = Request::getSchemeAndHttpHost(); + } + // Dynamische ASSET_URL basierend auf der aktuellen Domain setzen // Verhindert CORS-Probleme, da Assets immer von derselben Domain geladen werden $assetUrl = $domainConfig['url']; diff --git a/app/Services/CmsPageTree.php b/app/Services/CmsPageTree.php new file mode 100644 index 00000000..92ffc905 --- /dev/null +++ b/app/Services/CmsPageTree.php @@ -0,0 +1,187 @@ +>}> + */ + public function pages(): array + { + $rows = CmsContent::query() + ->get(['id', 'group', 'key']) + ->keyBy(fn (CmsContent $row) => $row->group.'/'.$row->key); + + $pages = []; + + foreach (config('cms_pages.pages', []) as $pageKey => $page) { + $sections = []; + + foreach ($page['sections'] ?? [] as $section) { + $id = $section['group'].'/'.$section['key']; + + $sections[] = array_merge($section, [ + 'page' => $pageKey, + 'path' => $section['path'] ?? $page['path'] ?? null, + 'anchor' => $section['anchor'] ?? null, + 'content_id' => $rows[$id]->id ?? null, + 'theme_key' => $this->themeKey($section['group'], $section['key']), + ]); + } + + $pages[$pageKey] = [ + 'title' => $page['title'], + 'path' => $page['path'] ?? null, + 'sections' => $sections, + ]; + } + + $unlisted = $this->unlistedSections($rows->keys()->all(), $rows); + + if ($unlisted !== []) { + $pages[self::UNLISTED] = [ + 'title' => config('cms_pages.unlisted.title', 'Nicht mehr verwendet'), + 'path' => null, + 'sections' => $unlisted, + ]; + } + + return $pages; + } + + /** + * Eine Sektion aus der Registry samt Datenbankbezug, oder null. + * + * @return array|null + */ + public function section(string $group, string $key): ?array + { + foreach ($this->pages() as $page) { + foreach ($page['sections'] as $section) { + if ($section['group'] === $group && $section['key'] === $key) { + return $section; + } + } + } + + return null; + } + + /** + * Klartext-Beschriftung eines Feldes: Sektions-Override, dann Wörterbuch, sonst lesbar gemacht. + */ + public function fieldLabel(string $field, ?string $group = null, ?string $key = null): string + { + if ($group !== null && $key !== null) { + foreach (config('cms_pages.pages', []) as $page) { + foreach ($page['sections'] ?? [] as $section) { + if ($section['group'] === $group && $section['key'] === $key && isset($section['fields'][$field])) { + return $section['fields'][$field]; + } + } + } + } + + $labels = config('cms_pages.field_labels', []); + + if (isset($labels[$field])) { + return $labels[$field]; + } + + return Str::ucfirst(str_replace('_', ' ', $field)); + } + + /** + * Adresse der Vorschau für eine Sektion: Frontend-Domain, Pfad, Cache-Brecher und Sprungmarke. + */ + public function previewUrl(?array $section, int $version = 0): ?string + { + $path = $section['path'] ?? null; + + if ($path === null) { + return null; + } + + $url = rtrim(config('domains.protocol', 'https://').config('domains.domain_b2in'), '/') + .'/'.ltrim($path, '/') + .'?cms-preview='.$version; + + if (! empty($section['anchor'])) { + $url .= '#'.$section['anchor']; + } + + return $url; + } + + /** + * Theme-Section-Schlüssel (Lang-Datei) zu Gruppe/Key, für „Aus Vorlage anlegen“. + */ + public function themeKey(string $group, string $key): ?string + { + foreach (config('cms_section_map.sections', []) as $themeKey => $target) { + if ($target === [$group, $key]) { + return $themeKey; + } + } + + return null; + } + + /** + * @param list $ids + * @param \Illuminate\Support\Collection $rows + * @return list> + */ + private function unlistedSections(array $ids, $rows): array + { + $listed = []; + + foreach (config('cms_pages.pages', []) as $page) { + foreach ($page['sections'] ?? [] as $section) { + $listed[$section['group'].'/'.$section['key']] = true; + } + } + + $out = []; + + foreach ($ids as $id) { + if (isset($listed[$id])) { + continue; + } + + $row = $rows[$id]; + + $out[] = [ + 'group' => $row->group, + 'key' => $row->key, + 'page' => self::UNLISTED, + 'path' => null, + 'anchor' => null, + 'title' => $row->group.' / '.$row->key, + 'description' => null, + 'content_id' => $row->id, + 'theme_key' => null, + ]; + } + + usort($out, fn (array $a, array $b) => [$a['group'], $a['key']] <=> [$b['group'], $b['key']]); + + return $out; + } +} diff --git a/app/Services/Monitoring/HealthProbe.php b/app/Services/Monitoring/HealthProbe.php new file mode 100644 index 00000000..56e40a5c --- /dev/null +++ b/app/Services/Monitoring/HealthProbe.php @@ -0,0 +1,198 @@ +toIso8601String(), LOCK_EX); + } + + public function lastHeartbeat(): ?Carbon + { + $value = @file_get_contents(self::heartbeatPath()); + + return is_string($value) && trim($value) !== '' ? Carbon::parse(trim($value)) : null; + } + + /** + * @return list + */ + public function checks(): array + { + return [ + $this->database(), + $this->cache(), + $this->queue(), + $this->scheduler(), + $this->disk(), + ]; + } + + /** + * @param list $checks + */ + public static function worstStatus(array $checks): string + { + $statuses = array_column($checks, 'status'); + + return match (true) { + in_array(self::StatusCritical, $statuses, true) => self::StatusCritical, + in_array(self::StatusWarn, $statuses, true) => self::StatusWarn, + default => self::StatusOk, + }; + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + public function scheduler(): array + { + $lastBeat = $this->lastHeartbeat(); + $warnMinutes = (int) config('monitoring.scheduler.heartbeat_warn_minutes'); + $criticalMinutes = (int) config('monitoring.scheduler.heartbeat_critical_minutes'); + $minutesAgo = $lastBeat !== null ? (int) $lastBeat->diffInMinutes(now(), absolute: true) : null; + + return $this->check( + 'scheduler', + 'Scheduler', + match (true) { + $minutesAgo === null, $minutesAgo >= $criticalMinutes => self::StatusCritical, + $minutesAgo >= $warnMinutes => self::StatusWarn, + default => self::StatusOk, + }, + $lastBeat === null + ? 'Noch kein Herzschlag — läuft `schedule:run` per Cron (bzw. `schedule:work`)?' + : 'Letzter Herzschlag '.$lastBeat->format('d.m.Y H:i:s').' (vor '.$minutesAgo.' Min.).', + ); + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + public function disk(): array + { + $path = storage_path(); + $free = @disk_free_space($path); + $total = @disk_total_space($path); + + if ($free === false || $total === false || $total <= 0) { + return $this->check('disk', 'Plattenplatz', self::StatusWarn, 'Plattenplatz nicht ermittelbar.'); + } + + $freePercent = round($free / $total * 100, 1); + $minPercent = (float) config('monitoring.health.disk_min_free_percent'); + + return $this->check( + 'disk', + 'Plattenplatz', + match (true) { + $freePercent < $minPercent => self::StatusCritical, + $freePercent < $minPercent * 2 => self::StatusWarn, + default => self::StatusOk, + }, + sprintf('%s %% frei (%s GB von %s GB).', $freePercent, round($free / 1024 ** 3, 1), round($total / 1024 ** 3, 1)), + ); + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + private function database(): array + { + try { + DB::select('select 1'); + + return $this->check('database', 'Datenbank', self::StatusOk, 'Verbindung steht.'); + } catch (Throwable $exception) { + return $this->check('database', 'Datenbank', self::StatusCritical, 'Keine Verbindung: '.Str::limit($exception->getMessage(), 120)); + } + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + private function cache(): array + { + try { + $value = Str::random(8); + Cache::put('monitoring:health-probe', $value, 60); + + return Cache::get('monitoring:health-probe') === $value + ? $this->check('cache', 'Cache', self::StatusOk, 'Schreiben und Lesen funktionieren.') + : $this->check('cache', 'Cache', self::StatusCritical, 'Geschriebener Wert kommt nicht zurück.'); + } catch (Throwable $exception) { + return $this->check('cache', 'Cache', self::StatusCritical, 'Nicht erreichbar: '.Str::limit($exception->getMessage(), 120)); + } + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + private function queue(): array + { + if (config('queue.default') !== 'database') { + return $this->check('queue', 'Queue', self::StatusOk, 'Treiber '.config('queue.default').' — Rückstau hier nicht prüfbar.'); + } + + try { + $now = now()->getTimestamp(); + $oldestAvailable = DB::table('jobs') + ->whereNull('reserved_at') + ->where('available_at', '<=', $now) + ->min('available_at'); + } catch (Throwable $exception) { + return $this->check('queue', 'Queue', self::StatusCritical, 'Jobs-Tabelle nicht lesbar: '.Str::limit($exception->getMessage(), 120)); + } + + $waitingSeconds = $oldestAvailable !== null ? max(0, $now - (int) $oldestAvailable) : 0; + $criticalSeconds = (int) config('monitoring.health.queue_backlog_critical_seconds'); + + return $this->check( + 'queue', + 'Queue', + $waitingSeconds >= $criticalSeconds ? self::StatusCritical : self::StatusOk, + $oldestAvailable === null + ? 'Kein wartender Job.' + : 'Ältester wartender Job seit '.$waitingSeconds.' s.'.($waitingSeconds >= $criticalSeconds ? ' Worker gestoppt?' : ''), + ); + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + private function check(string $key, string $label, string $status, string $detail): array + { + return ['key' => $key, 'label' => $label, 'status' => $status, 'detail' => $detail]; + } +} diff --git a/app/Support/DisplayModuleSettings.php b/app/Support/DisplayModuleSettings.php index de9badb5..3bf52bc8 100644 --- a/app/Support/DisplayModuleSettings.php +++ b/app/Support/DisplayModuleSettings.php @@ -27,8 +27,10 @@ class DisplayModuleSettings ], DisplayVersionType::B2in->value => [ 'theme' => 'dark', - 'header_logo_url' => '/_cabinet/assets/b2in-logo-positive.svg', - 'header_claim' => 'Connecting Design & Property', + // Standard-Theme ist dunkel, das Logo liegt dort auf einem dunklen Scrim – + // deshalb die negative (weisse) Variante. + 'header_logo_url' => '/_cabinet/assets/b2in-interior-logo-negative.svg', + 'header_claim' => 'Premium-Einrichtung. Persönlich gemacht.', 'logo_position' => 'top-left', 'claim_position' => 'top-right', 'show_logo' => true, diff --git a/app/Support/Monitoring/ErrorReportScrubber.php b/app/Support/Monitoring/ErrorReportScrubber.php new file mode 100644 index 00000000..76bdaf56 --- /dev/null +++ b/app/Support/Monitoring/ErrorReportScrubber.php @@ -0,0 +1,159 @@ + + */ + public const AllowedQueryParameters = ['page', 'q', 'tab', 'sort']; + + private const EmailPattern = '/[A-Z0-9._%+\-]+@[A-Z0-9.\-]+\.[A-Z]{2,}/i'; + + /** Pfadsegmente, die wie ein Token aussehen (Magic Links, Reset-Links). */ + private const TokenSegmentPattern = '#(?<=/)[A-Za-z0-9_\-]{32,}(?=/|$)#'; + + public static function beforeSend(Event $event, ?EventHint $hint = null): ?Event + { + $userId = self::authenticatedUserId(); + + $event->setUser($userId !== null ? UserDataBag::createFromUserIdentifier($userId) : null); + $event->setRequest(self::scrubRequest($event->getRequest())); + + foreach ($event->getExceptions() as $exception) { + $exception->setValue(self::scrubText($exception->getValue())); + } + + if ($event->getMessage() !== null) { + $formatted = $event->getMessageFormatted(); + + $event->setMessage( + self::scrubText($event->getMessage()), + $event->getMessageParams(), + $formatted !== null ? self::scrubText($formatted) : null, + ); + } + + return $event; + } + + /** + * @param array $request + * @return array + */ + public static function scrubRequest(array $request): array + { + if (isset($request['url']) && is_string($request['url'])) { + $request['url'] = self::scrubUrl($request['url']); + } + + if (isset($request['query_string']) && is_string($request['query_string'])) { + $request['query_string'] = self::scrubQuery($request['query_string']); + } + + unset($request['data'], $request['cookies']); + + foreach ($request['headers'] ?? [] as $name => $values) { + if (strtolower((string) $name) === 'referer') { + $request['headers'][$name] = array_map( + static fn (mixed $value): string => self::scrubUrl((string) $value), + (array) $values, + ); + } + } + + return $request; + } + + public static function scrubUrl(string $url): string + { + $query = parse_url($url, PHP_URL_QUERY); + $withoutQuery = $query !== null && $query !== false ? Str::before($url, '?') : $url; + $scrubbedPath = self::scrubPath(self::scrubPathTokens($withoutQuery)); + + return $query !== null && $query !== false && $query !== '' + ? $scrubbedPath.'?'.self::scrubQuery($query) + : $scrubbedPath; + } + + public static function scrubQuery(string $query): string + { + parse_str($query, $parameters); + + $scrubbed = []; + foreach ($parameters as $name => $value) { + $isAllowed = in_array((string) $name, self::AllowedQueryParameters, true) + || str_starts_with((string) $name, 'utm_'); + + $scrubbed[$name] = $isAllowed && is_string($value) ? $value : self::Filtered; + } + + return http_build_query($scrubbed, '', '&', PHP_QUERY_RFC3986); + } + + public static function scrubPath(string $path): string + { + return self::scrubText((string) preg_replace(self::TokenSegmentPattern, self::Filtered, $path)); + } + + public static function scrubText(string $text): string + { + return (string) preg_replace(self::EmailPattern, '[email]', $text); + } + + /** + * Ersetzt Routenparameter, deren Name auf ein Geheimnis hindeutet + * (`token`, `hash`, `signature`), im Pfad der aktuellen Route. + */ + private static function scrubPathTokens(string $url): string + { + try { + $route = request()->route(); + } catch (Throwable) { + return $url; + } + + if ($route === null) { + return $url; + } + + foreach ($route->parameters() as $name => $value) { + if (is_string($value) && $value !== '' && Str::contains(strtolower((string) $name), ['token', 'hash', 'signature'])) { + $url = str_replace(rawurlencode($value), self::Filtered, str_replace($value, self::Filtered, $url)); + } + } + + return $url; + } + + private static function authenticatedUserId(): int|string|null + { + try { + return Auth::id(); + } catch (Throwable) { + return null; + } + } +} diff --git a/app/Support/Monitoring/ErrorSignal.php b/app/Support/Monitoring/ErrorSignal.php new file mode 100644 index 00000000..db66cbc5 --- /dev/null +++ b/app/Support/Monitoring/ErrorSignal.php @@ -0,0 +1,68 @@ + 'Toter interner Link', + self::AccessDenied => 'Zugriff verweigert (angemeldet)', + self::PageExpired => 'Seite abgelaufen (419)', + self::Throttled => 'Drosselung trifft angemeldeten Nutzer', + ]; + + private const MaxReportsPerWindow = 5; + + private const WindowSeconds = 600; + + /** + * @param array $context + */ + public function report(string $signal, string $location, array $context = []): bool + { + $location = Str::limit($location, 200, ''); + + $reported = RateLimiter::attempt( + 'error-signal:'.sha1($signal.'|'.$location), + self::MaxReportsPerWindow, + static fn (): bool => true, + self::WindowSeconds, + ); + + if ($reported === false) { + return false; + } + + withScope(function (Scope $scope) use ($signal, $location, $context): void { + $scope->setFingerprint(['error-signal', $signal, $location]); + $scope->setTag('signal', $signal); + $scope->setContext('signal', $context); + + captureMessage((self::Labels[$signal] ?? $signal).': '.$location, Severity::warning()); + }); + + return true; + } +} diff --git a/app/Support/Monitoring/Release.php b/app/Support/Monitoring/Release.php new file mode 100644 index 00000000..48e6aeb0 --- /dev/null +++ b/app/Support/Monitoring/Release.php @@ -0,0 +1,36 @@ + RELEASE`) — + * der Live-Server hat kein Git, solange per SFTP deployt wird. + * + * Versionen sind Git-Tags nach SemVer: Feature-Deploy erhöht die mittlere, + * Hotfix die letzte Stelle. Auf dem Tag ergibt das „v1.1.0“, mit späteren + * Commits „v1.1.0-2-gabc1234“, mit uncommitteten Änderungen „…-dirty“. + */ +class Release +{ + public static function current(?string $configured, ?string $basePath = null): ?string + { + $configured = trim((string) $configured); + + if ($configured !== '') { + return $configured; + } + + $file = rtrim($basePath ?? base_path(), '/').'/RELEASE'; + + if (! is_file($file)) { + return null; + } + + $release = trim((string) file_get_contents($file)); + + return preg_match('/^[A-Za-z0-9._\-]{1,64}$/', $release) === 1 ? $release : null; + } +} diff --git a/app/Support/OperationalAlert.php b/app/Support/OperationalAlert.php new file mode 100644 index 00000000..7b3cc56f --- /dev/null +++ b/app/Support/OperationalAlert.php @@ -0,0 +1,96 @@ + $context + */ + public static function send(string $summary, array $context = []): void + { + Log::channel('monitoring')->critical('[monitoring] '.$summary, $context); + + if (! config('monitoring.alerts.enabled')) { + return; + } + + self::mail($summary, $context); + self::push($summary, $context); + } + + /** + * @param array $context + */ + private static function mail(string $summary, array $context): void + { + $recipient = config('monitoring.alerts.mail_to'); + + if (empty($recipient)) { + return; + } + + try { + Mail::raw( + $summary."\n\n".json_encode($context, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), + fn ($message) => $message->to($recipient)->subject('['.config('app.name').'] Betriebs-Alert: '.Str::limit($summary, 80)), + ); + } catch (Throwable $e) { + Log::channel('monitoring')->error('[monitoring] Alert-Mail konnte nicht versendet werden.', [ + 'summary' => $summary, + 'error' => $e->getMessage(), + ]); + } + } + + /** + * JSON-Publish an die ntfy-Basis-URL (UTF-8-sicher, anders als Header). + * + * @param array $context + */ + private static function push(string $summary, array $context): void + { + $url = (string) config('monitoring.alerts.ntfy.url'); + $topic = (string) config('monitoring.alerts.ntfy.topic'); + + if ($url === '' || $topic === '') { + return; + } + + $details = collect($context) + ->map(fn (mixed $value, string $key): string => $key.': '.(is_scalar($value) || $value === null ? (string) $value : json_encode($value))) + ->implode("\n"); + + try { + Http::timeout(5) + ->connectTimeout(3) + ->when(filled(config('monitoring.alerts.ntfy.token')), fn ($request) => $request->withToken((string) config('monitoring.alerts.ntfy.token'))) + ->post(rtrim($url, '/'), [ + 'topic' => $topic, + 'title' => config('app.name').' ('.app()->environment().'): Betriebs-Alert', + 'message' => Str::limit(trim($summary."\n\n".$details), 3500), + 'priority' => (int) config('monitoring.alerts.ntfy.priority'), + 'tags' => ['rotating_light'], + ]) + ->throw(); + } catch (Throwable $e) { + Log::channel('monitoring')->error('[monitoring] ntfy-Push konnte nicht versendet werden.', [ + 'summary' => $summary, + 'error' => $e->getMessage(), + ]); + } + } +} diff --git a/app/helpers.php b/app/helpers.php index 31949547..16bfccfe 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -1,5 +1,6 @@ $sections */ $sections = config('cms_section_map.sections', []); - /** @var array $langKeys */ - $langKeys = config('cms_section_map.lang_keys', []); if (isset($sections[$sectionKey])) { [$group, $key] = $sections[$sectionKey]; @@ -60,9 +59,47 @@ if (! function_exists('cms_theme_section')) { } } - $langKey = $langKeys[$sectionKey] ?? $sectionKey; + return trans("b2in.themes.{$theme}.{$sectionKey}"); + } +} - return trans("b2in.themes.{$theme}.{$langKey}"); +if (! function_exists('references_page_enabled')) { + /** + * Ob die Seite /referenzen samt Menüpunkt sichtbar ist – Schalter im CMS-Modul „Referenzen“ + * (Einstellung pages.referenzen_enabled). Ohne Eintrag ist die Seite sichtbar. + */ + function references_page_enabled(): bool + { + return (bool) Setting::getValue('pages', 'referenzen_enabled', true); + } +} + +if (! function_exists('whatsapp_link')) { + /** + * Klick-zum-Chat-Link, sofern im CMS eine Nummer hinterlegt ist (global.contact.whatsapp). + * + * Liefert einen leeren String, solange keine Nummer bestaetigt ist – der Button erscheint dann + * gar nicht erst, statt auf eine erfundene Nummer zu zeigen. + */ + function whatsapp_link(): string + { + $service = app(CmsContentService::class); + + // Die Nummer kann als eigener Eintrag oder als Feld der Sektion `global.contact` liegen. + $number = $service->getIfExists('global.contact.whatsapp'); + + if ($number === null) { + $contact = $service->getIfExists('global.contact'); + $number = is_array($contact) ? ($contact['whatsapp'] ?? null) : null; + } + + if (! is_string($number)) { + return ''; + } + + $digits = preg_replace('/\D+/', '', $number); + + return $digits === '' ? '' : 'https://wa.me/'.$digits; } } @@ -94,6 +131,13 @@ if (! function_exists('theme_image_url')) { return asset('storage/'.$trimmed); } + // Liegt die Datei unter public/img/assets/, kommt sie von dort – auch wenn sie inzwischen in + // der Mediathek steht (AssetMediaImportSeeder). Nur so findet die WebP-Fassung + // neben JPG/PNG. + if (str_contains($trimmed, '/') && is_file(public_path('img/assets/'.$trimmed))) { + return asset('img/assets/'.$trimmed); + } + $candidates = array_values(array_unique(array_filter([$trimmed, basename($trimmed)]))); foreach ($candidates as $candidate) { if (CmsMedia::query()->where('filename', $candidate)->exists()) { @@ -123,29 +167,14 @@ if (! function_exists('tcms')) { } } -if (! function_exists('cms_media_url')) { - /** - * Resolve a CMS content key (type=image) to a full media URL. - * Falls back to asset('assets/images/...') if not found in media library. - */ - function cms_media_url(string $key, string $profile = ''): string - { - $filename = cms($key); - - if (! $filename || ! is_string($filename) || $filename === $key) { - $fallback = str_replace('.', '/', $key); - - return asset('assets/images/'.basename($fallback)); - } - - return media_url($filename, $profile); - } -} - if (! function_exists('media_url')) { /** * Resolve a CmsMedia filename to its full storage URL. - * Uses in-memory cache to avoid repeated DB queries. + * Cached per request to avoid repeated DB queries. + * + * Ohne Eintrag in der Mediathek zeigt die URL auf public/img/assets/ – dort legen die Seeder + * Marken-, Magazin- und Slideshow-Bilder ab (wie theme_image_url() im Frontend). Der frühere + * Rückfall assets/images/ existierte nicht und lieferte im Admin 404 (07.10.2026). */ function media_url(?string $filename, string $profile = ''): string { @@ -153,27 +182,80 @@ if (! function_exists('media_url')) { return ''; } - static $resolved = []; - $cacheKey = $filename.'|'.$profile; + // once(): je Request (und je Test) zwischengespeichert, nicht über die ganze Prozesslaufzeit. + return once(function () use ($filename, $profile): string { + $media = CmsMedia::where('filename', $filename)->first(); - if (isset($resolved[$cacheKey])) { - return $resolved[$cacheKey]; - } + if (! $media) { + return asset('img/assets/'.ltrim($filename, '/')); + } - $media = CmsMedia::where('filename', $filename)->first(); - - if (! $media) { - $resolved[$cacheKey] = asset('assets/images/'.$filename); - - return $resolved[$cacheKey]; - } - - if ($profile && $media->hasConversion($profile)) { - $resolved[$cacheKey] = $media->getConversionUrl($profile); - } else { - $resolved[$cacheKey] = $media->getUrl(); - } - - return $resolved[$cacheKey]; + return $profile && $media->hasConversion($profile) + ? $media->getConversionUrl($profile) + : $media->getUrl(); + }); + } +} + +if (! function_exists('b2in_world')) { + /** + * Farbwelt der aktuellen Seite: `interior` (Standard) oder `immobilien`. + * + * Die Immobilien-Welt umfasst die Immobilien-Routen samt Detailseiten und den + * Entwicklungs-Vorschauen. Das Layout setzt den Wert als Body-Klasse + * (`world-interior` / `world-immobilien`), theme-b2in.css schaltet daran die Farben um. + * Livewire-Komponenten merken sich die Welt in mount(), weil ein späterer + * Livewire-Request keine Seitenroute mehr trägt. + */ + function b2in_world(): string + { + if (app()->bound('b2in.world')) { + return (string) app('b2in.world'); + } + + $routeName = request()->route()?->getName(); + + if (is_string($routeName) && (str_starts_with($routeName, 'immobilien') || str_starts_with($routeName, 'dev.immobilien'))) { + return 'immobilien'; + } + + return 'interior'; + } +} + +if (! function_exists('b2in_worlds')) { + /** + * Die beiden Welten für den Welten-Wechsler in Kopf- und Fußzeile. + * + * @return array + */ + function b2in_worlds(?string $current = null): array + { + $current = $current ?? b2in_world(); + + return [ + 'interior' => [ + 'label' => __('ui.world_interior'), + 'url' => url('/'), + 'active' => $current === 'interior', + ], + 'immobilien' => [ + 'label' => __('ui.world_immobilien'), + 'url' => route('immobilien'), + 'active' => $current === 'immobilien', + ], + ]; + } +} + +if (! function_exists('b2in_world_set')) { + /** + * Welt für den laufenden Request festlegen, wenn sie nicht an der Route hängt – + * etwa auf der Magazin-Detailseite, die in der Welt ihres Beitrags rendert. + * Muss vor dem Rendern von Kopf- und Fußzeile geschehen (beide halten die Welt in mount() fest). + */ + function b2in_world_set(string $world): void + { + app()->instance('b2in.world', $world); } } diff --git a/bootstrap/app.php b/bootstrap/app.php index 788e5233..2a31997d 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,14 +1,25 @@ withRouting( web: __DIR__.'/../routes/domains.php', commands: __DIR__.'/../routes/console.php', health: '/up', + then: function (): void { + // Tiefer Health-Check für den externen Monitor (Uptime Kuma), auf jeder Domain + Route::get('/health', HealthController::class) + ->middleware('throttle:30,1') + ->name('health.deep'); + }, ) ->withMiddleware(function (Middleware $middleware) { // Traefik Reverse-Proxy vertraut die X-Forwarded-Proto/For Headers @@ -27,11 +38,23 @@ return Application::configure(basePath: dirname(__DIR__)) 'partner.setup' => \App\Http\Middleware\EnsurePartnerSetupCompleted::class, ]); + // Fehler ohne Exception (toter interner Link, 403/429 für Angemeldete, 419) – + // global, weil 404 vor dem Routing entsteht + $middleware->append(ReportErrorSignals::class); + + // Inhalte-Editor im Portal zeigt die Website im iframe: frame-ancestors statt SAMEORIGIN + $middleware->append(\App\Http\Middleware\AllowPortalFraming::class); + // BasicAuth ganz am Ende, nach Session-Middleware if (env('BASIC_AUTH_ENABLED', true)) { $middleware->append(\App\Http\Middleware\BasicAuthMiddleware::class); } }) ->withExceptions(function (Exceptions $exceptions) { - // + // Gemeldete Exceptions an GlitchTip (ohne DSN ein No-op); + // Laravels dontReport (404, Validierung, Auth) gilt weiter + Integration::handles($exceptions); + + // Vertippte artisan-Befehle sind kein Anwendungsfehler + $exceptions->dontReport(CommandNotFoundException::class); })->create(); diff --git a/composer.json b/composer.json index ecad2a81..6ad21219 100644 --- a/composer.json +++ b/composer.json @@ -22,6 +22,7 @@ "livewire/flux": "^2.1.1", "livewire/flux-pro": "^2.6", "livewire/volt": "^1.7.0", + "sentry/sentry-laravel": "^4.29", "spatie/laravel-permission": "^6.17" }, "require-dev": { diff --git a/composer.lock b/composer.lock index e314e90e..5f1c29f2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,11 +4,11 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9e07d437a063526b426b920d400db8b8", + "content-hash": "f2a8196dfd6ef735f3e827805a8a1f94", "packages": [ { "name": "acme/contact-form", - "version": "dev-master", + "version": "dev-feature/b2in-interior", "dist": { "type": "path", "url": "packages/acme/contact-form", @@ -55,7 +55,7 @@ }, { "name": "acme/cookie-consent", - "version": "dev-master", + "version": "dev-feature/b2in-interior", "dist": { "type": "path", "url": "packages/acme/CookieConsent", @@ -860,7 +860,7 @@ }, { "name": "flux-cms/core", - "version": "dev-master", + "version": "dev-feature/b2in-interior", "dist": { "type": "path", "url": "packages/flux-cms/core", @@ -1603,6 +1603,66 @@ ], "time": "2026-02-19T13:11:17+00:00" }, + { + "name": "jean85/pretty-package-versions", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.1.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^7.5|^8.5|^9.6", + "rector/rector": "^2.0", + "vimeo/psalm": "^4.3 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1" + }, + "time": "2025-03-19T14:43:43+00:00" + }, { "name": "laravel/fortify", "version": "v1.35.0", @@ -3493,6 +3553,84 @@ ], "time": "2026-02-16T23:10:27+00:00" }, + { + "name": "nyholm/psr7", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.8.2" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2024-09-09T07:06:30+00:00" + }, { "name": "paragonie/constant_time_encoding", "version": "v3.1.3", @@ -4378,6 +4516,195 @@ }, "time": "2025-12-14T04:43:48+00:00" }, + { + "name": "sentry/sentry", + "version": "4.34.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php.git", + "reference": "3d8f4e56becb10ede64e2ac6f8077f6434715461" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/3d8f4e56becb10ede64e2ac6f8077f6434715461", + "reference": "3d8f4e56becb10ede64e2ac6f8077f6434715461", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "guzzlehttp/psr7": "^1.8.4|^2.1.1|^3.0.0", + "jean85/pretty-package-versions": "^1.5|^2.0.4", + "php": "^7.2|^8.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0|^8.0" + }, + "conflict": { + "raven/raven": "*" + }, + "require-dev": { + "carthage-software/mago": "1.30.0", + "friendsofphp/php-cs-fixer": "^3.4", + "guzzlehttp/guzzle": "^7.0|^8.0", + "guzzlehttp/promises": "^2.0.3|^3.0.0", + "monolog/monolog": "^1.6|^2.0|^3.0", + "nyholm/psr7": "^1.8", + "open-telemetry/api": "^1.1", + "open-telemetry/context": "^1.1", + "open-telemetry/exporter-otlp": "^1.1", + "open-telemetry/gen-otlp-protobuf": "^1.2.1", + "open-telemetry/sdk": "^1.1", + "open-telemetry/sem-conv": "^1.27", + "phpstan/phpstan": "^2.2", + "phpunit/phpunit": "^8.5.52|^9.6.34", + "spiral/roadrunner-http": "^3.6", + "spiral/roadrunner-worker": "^3.6" + }, + "suggest": { + "ext-excimer": "Enable Sentry profiling with the Excimer PHP extension.", + "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Sentry\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "PHP SDK for Sentry (http://sentry.io)", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "profiling", + "sentry", + "tracing" + ], + "support": { + "issues": "https://github.com/getsentry/sentry-php/issues", + "source": "https://github.com/getsentry/sentry-php/tree/4.34.0" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2026-10-08T11:25:58+00:00" + }, + { + "name": "sentry/sentry-laravel", + "version": "4.29.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-laravel.git", + "reference": "4b3deab3d8818490220e1da8e2d7cca971f74410" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/4b3deab3d8818490220e1da8e2d7cca971f74410", + "reference": "4b3deab3d8818490220e1da8e2d7cca971f74410", + "shasum": "" + }, + "require": { + "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0 | ^13.0", + "nyholm/psr7": "^1.0", + "php": "^7.2 | ^8.0", + "sentry/sentry": "^4.34.0", + "symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0 | ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11", + "guzzlehttp/guzzle": "^7.2", + "laravel/ai": "^0.1.5 | ^1.0", + "laravel/folio": "^1.1", + "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0 | ^13.0", + "laravel/octane": "^2.15", + "laravel/pennant": "^1.0", + "livewire/livewire": "^2.0 | ^3.0 | ^4.0", + "mockery/mockery": "^1.3", + "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0", + "phpstan/phpstan": "^1.10 | ^2.2", + "phpunit/phpunit": "^8.5 | ^9.6 | ^10.4 | ^11.5" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Sentry": "Sentry\\Laravel\\Facade" + }, + "providers": [ + "Sentry\\Laravel\\ServiceProvider", + "Sentry\\Laravel\\Tracing\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-0": { + "Sentry\\Laravel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "Laravel SDK for Sentry (https://sentry.io)", + "homepage": "https://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "laravel", + "log", + "logging", + "profiling", + "sentry", + "tracing" + ], + "support": { + "issues": "https://github.com/getsentry/sentry-laravel/issues", + "source": "https://github.com/getsentry/sentry-laravel/tree/4.29.0" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2026-10-08T12:31:48+00:00" + }, { "name": "spatie/laravel-package-tools", "version": "1.93.0", @@ -5601,6 +5928,77 @@ ], "time": "2026-02-05T15:57:06+00:00" }, + { + "name": "symfony/options-resolver", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "88f9c561f678a02d54b897014049fa839e33ff82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/88f9c561f678a02d54b897014049fa839e33ff82", + "reference": "88f9c561f678a02d54b897014049fa839e33ff82", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v8.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-29T05:06:50+00:00" + }, { "name": "symfony/polyfill-ctype", "version": "v1.33.0", @@ -6495,6 +6893,93 @@ ], "time": "2026-01-26T15:07:59+00:00" }, + { + "name": "symfony/psr-http-message-bridge", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "67fd34de15ded1763aa1e330fe345f080a94022c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/67fd34de15ded1763aa1e330fe345f080a94022c", + "reference": "67fd34de15ded1763aa1e330fe345f080a94022c", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "psr/http-message": "^1.0|^2.0", + "symfony/http-foundation": "^7.4|^8.0" + }, + "conflict": { + "php-http/discovery": "<1.15" + }, + "require-dev": { + "nyholm/psr7": "^1.1", + "php-http/discovery": "^1.15", + "psr/log": "^1.1.4|^2|^3", + "symfony/browser-kit": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/runtime": "^7.4|^8.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "https://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "support": { + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v8.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-29T05:06:50+00:00" + }, { "name": "symfony/routing", "version": "v7.4.6", @@ -7967,66 +8452,6 @@ }, "time": "2025-04-30T06:54:44+00:00" }, - { - "name": "jean85/pretty-package-versions", - "version": "2.1.1", - "source": { - "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a", - "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.1.0", - "php": "^7.4|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "jean85/composer-provided-replaced-stub-package": "^1.0", - "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^7.5|^8.5|^9.6", - "rector/rector": "^2.0", - "vimeo/psalm": "^4.3 || ^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Jean85\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Lai", - "email": "alessandro.lai85@gmail.com" - } - ], - "description": "A library to get pretty versions strings of installed dependencies", - "keywords": [ - "composer", - "package", - "release", - "versions" - ], - "support": { - "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1" - }, - "time": "2025-03-19T14:43:43+00:00" - }, { "name": "laravel/boost", "version": "v1.8.11", diff --git a/config/app.php b/config/app.php index 8e208bf3..0a53e8c7 100644 --- a/config/app.php +++ b/config/app.php @@ -15,6 +15,18 @@ return [ 'name' => env('APP_NAME', 'Laravel'), + /* + |-------------------------------------------------------------------------- + | Ausgelieferte Version + |-------------------------------------------------------------------------- + | + | Git-Tag des Deploys (Datei RELEASE, schreibt dev/betrieb/deploy.sh) oder + | APP_VERSION. Erscheint in /health, `php artisan about` und GlitchTip. + | + */ + + 'version' => App\Support\Monitoring\Release::current(env('APP_VERSION')), + /* |-------------------------------------------------------------------------- | Application Environment @@ -41,6 +53,34 @@ return [ 'debug' => (bool) env('APP_DEBUG', false), + /* + |-------------------------------------------------------------------------- + | Indexierung durch Suchmaschinen + |-------------------------------------------------------------------------- + | + | Nur die Produktivumgebung darf indexiert werden. Vorschau- und Testinstanzen + | liefern damit automatisch `noindex, nofollow` – sonst konkurriert eine Kopie + | der Website mit dem Original um dieselben Suchergebnisse. + | + | Bewusst als eigener Schalter und nicht nur an APP_ENV gekoppelt, damit eine + | Vorschau notfalls auch mit APP_ENV=production noindex bleiben kann. + | + */ + 'indexable' => (bool) env('SITE_INDEXABLE', env('APP_ENV', 'production') === 'production'), + + /* + |-------------------------------------------------------------------------- + | Obere Hinweisleiste (Ankündigungsleiste) + |-------------------------------------------------------------------------- + | + | Seit der Abstimmung vom 01.10.2026 ausgeblendet – die Seite wirkt ohne die + | Leiste ruhiger. Inhalt und CMS-Pflege bleiben erhalten; mit + | B2IN_ANNOUNCEMENT_BAR=true ist sie auf allen Seiten wieder da. + | + */ + + 'announcement_bar' => (bool) env('B2IN_ANNOUNCEMENT_BAR', false), + /* |-------------------------------------------------------------------------- | Application URL diff --git a/config/cms_pages.php b/config/cms_pages.php new file mode 100644 index 00000000..d4cd4936 --- /dev/null +++ b/config/cms_pages.php @@ -0,0 +1,298 @@ + [ + 'title' => 'Überschrift', + 'subtitle' => 'Untertitel', + 'headline' => 'Überschrift', + 'tagline' => 'Claim', + 'text' => 'Text', + 'intro' => 'Einleitung', + 'description' => 'Beschreibung', + 'content' => 'Inhalt', + 'lead' => 'Vorspann', + 'note' => 'Hinweis', + 'label' => 'Beschriftung', + 'badge' => 'Kennzeichen', + 'eyebrow' => 'Überzeile', + 'quote' => 'Zitat', + 'author' => 'Zitatgeber', + 'name' => 'Name', + 'role' => 'Rolle / Funktion', + 'city' => 'Ort', + 'value' => 'Wert', + 'number' => 'Zahl', + 'suffix' => 'Zusatz', + 'icon' => 'Icon', + 'image' => 'Bild', + 'image_alt' => 'Bildbeschreibung', + 'alt' => 'Bildbeschreibung', + 'logo' => 'Logo', + 'link' => 'Link', + 'url' => 'Adresse (URL)', + 'href' => 'Link', + 'link_text' => 'Linktext', + 'button_text' => 'Button-Beschriftung', + 'button_link' => 'Button-Link', + 'primary_button' => 'Erster Button', + 'secondary_button' => 'Zweiter Button', + 'cta_title' => 'Überschrift Abschluss', + 'cta_text' => 'Text Abschluss', + 'cta_link' => 'Link Abschluss', + 'items' => 'Einträge', + 'steps' => 'Schritte', + 'cards' => 'Karten', + 'stats' => 'Kennzahlen', + 'features' => 'Merkmale', + 'benefits' => 'Vorteile', + 'values' => 'Werte', + 'links' => 'Links', + 'columns' => 'Spalten', + 'menu' => 'Menüpunkte', + 'navigation' => 'Navigation', + 'topics' => 'Themen', + 'options' => 'Auswahlmöglichkeiten', + 'placeholder' => 'Platzhaltertext', + 'meta_title' => 'Seitentitel (Browser, Google)', + 'meta_description' => 'Beschreibung für Google', + 'email' => 'E-Mail', + 'phone' => 'Telefon', + 'whatsapp' => 'WhatsApp-Nummer', + 'address' => 'Adresse', + 'opening_hours' => 'Öffnungszeiten', + 'copyright' => 'Copyright-Zeile', + 'map_alt' => 'Beschreibung der Karte', + 'region_label' => 'Beschriftung der Region', + 'distance_suffix' => 'Zusatz hinter der Entfernung', + 'hub' => 'Drehscheibe (Bielefeld)', + 'steps_title' => 'Überschrift Ablauf-Block', + 'steps_text' => 'Einleitung Ablauf-Block', + 'x' => 'Position waagerecht (Entwickler)', + 'y' => 'Position senkrecht (Entwickler)', + 'id' => 'Sprungmarke (Entwickler)', + 'slug' => 'Adresskürzel (Entwickler)', + 'teaser' => 'Kurztext', + 'summary' => 'Zusammenfassung', + 'brands' => 'Marken', + 'projects' => 'Projekte', + 'partners' => 'Partner', + 'questions' => 'Fragen', + 'question' => 'Frage', + 'answer' => 'Antwort', + 'read_more' => 'Weiterlesen-Text', + 'empty_text' => 'Text, wenn nichts vorhanden ist', + 'success_text' => 'Text nach dem Absenden', + 'submit_text' => 'Beschriftung Absenden-Button', + 'privacy_text' => 'Datenschutz-Hinweis', + 'subjects' => 'Betreffe', + 'subject' => 'Betreff', + ], + + /* + |-------------------------------------------------------------------------- + | Seiten in der Reihenfolge des Menüs + |-------------------------------------------------------------------------- + */ + 'pages' => [ + + 'home' => [ + 'title' => 'Startseite', + 'path' => '/', + 'sections' => [ + ['group' => 'home', 'key' => 'hero', 'anchor' => 'hero', 'title' => 'Hero', + 'description' => 'Der große Einstieg ganz oben: Zeile über der Überschrift (eyebrow), Überschrift, Text, Button, Häkchen-Punkte (stats) und die Slideshow. Unter „slides“ je Bild: image, label (Marke) und caption (Motiv) – beides erscheint in der Karte über dem Bild und wechselt mit –, alt (Bildbeschreibung für Screenreader) und active (aus = ausgeblendet); die Reihenfolge der Liste ist die Reihenfolge der Slideshow. „interval“ = Sekunden pro Bild (3–30). card_title/card_text stehen in der Karte, wenn eine Slide weder label noch caption hat; image/image_alt sind das Ersatzbild, wenn keine Slide aktiv ist.'], + ['group' => 'home', 'key' => 'founder_bar', 'anchor' => 'gruender', 'title' => 'Gründer-Leiste', + 'description' => 'Schmale Zeile mit Marcel Scheibe und Zitat. Steht auch auf /marken, „Über uns“ und in der Immobilien-Welt.'], + ['group' => 'home', 'key' => 'audience_switch', 'anchor' => 'wege', 'title' => 'Zielgruppen-Wahl', + 'description' => 'Zwei Wege: Privat einrichten oder Projekt ausstatten.'], + ['group' => 'home', 'key' => 'core_brands', 'anchor' => 'marken', 'title' => 'Kernmarken', + 'description' => 'Überschrift und Untertitel des Marken-Rasters. Die Kacheln selbst kommen aus der Markenverwaltung.'], + ['group' => 'home', 'key' => 'origin_section', 'anchor' => 'herkunft', 'title' => 'Aus der Region gefertigt', + 'description' => 'Karte mit Bielefeld als Drehscheibe und der Ablauf-Block am Beispiel CABINET. Die Standorte pflegst du bei den Marken. Steht auch auf /marken.'], + ['group' => 'home', 'key' => 'vision_section', 'anchor' => 'vision', 'title' => 'Gebaut auf Expertise', + 'description' => 'Weiße Box auf Ocker: Überschrift, Absätze (paragraphs) und Porträt mit Bildunterschrift (image_caption).'], + ['group' => 'home', 'key' => 'sponsoring', 'anchor' => 'engagement', 'title' => 'Regional verbunden', + 'description' => 'Vereine, die B2in unterstützt: je Verein name, image (Logo), text und optional url – mit url öffnet die Kachel die Vereinsseite in einem neuen Tab.'], + ['group' => 'referenzen', 'key' => 'display_feed', 'anchor' => 'displays', 'title' => 'Aktuelles aus dem Showroom', + 'description' => '„Aktuelles aus unserem Showroom“: Überschrift, Text, Hinweis (note) und Link in der weißen Box. Das Display rechts kommt aus den Store Displays (display_id leer = das erste veröffentlichte), Besucher können es über „Größer ansehen“ vergrößern. Steht auch auf /referenzen.'], + ['group' => 'home', 'key' => 'immobilien_teaser', 'anchor' => 'immobilien', 'title' => 'Immobilien-Teaser', + 'description' => 'Der Übergang in die Immobilien-Welt am Ende der Startseite.'], + ['group' => 'global', 'key' => 'cta_section', 'anchor' => 'cta', 'title' => 'Abschluss: Termin anfragen', + 'description' => 'Der letzte Block vor dem Fuß auf der Startseite und auf /referenzen. Marken und „Über uns“ haben eigene Abschlüsse.'], + ], + ], + + 'marken' => [ + 'title' => 'Marken', + 'path' => '/marken', + 'sections' => [ + ['group' => 'marken', 'key' => 'hero', 'anchor' => 'seitenkopf', 'title' => 'Seitenkopf', + 'description' => 'Zeile über der Überschrift (eyebrow), Überschrift, Einleitung (text), Bild und die Häkchen-Punkte (stats) oben auf /marken. Die Markenblöcke darunter kommen aus der Markenverwaltung.'], + ['group' => 'marken', 'key' => 'image_break', 'anchor' => 'bild', 'title' => 'Bildpause', + 'description' => 'Großes Bild zwischen den Markenblöcken und „Aus der Region gefertigt“, damit sich die beiden hellen Sektionen absetzen. Mit Zitat (quote) und Autor (author); ohne Zitat steht nur das Bild.'], + ['group' => 'marken', 'key' => 'network', 'anchor' => 'netzwerk', 'title' => 'Mehr als Marken: unser Netzwerk', + 'description' => 'Partner und Zulieferer jenseits der Kernmarken.'], + ['group' => 'marken', 'key' => 'growth', 'anchor' => 'wachstum', 'title' => 'Die Markenwelt wächst', + 'description' => 'Hinweis, dass weitere Marken folgen.'], + ['group' => 'marken', 'key' => 'cta', 'anchor' => 'marken-cta', 'title' => 'Abschluss auf /marken', + 'description' => 'Der Abschlussblock „Lernen Sie unsere Marken kennen“ mit Terminanfrage und WhatsApp.'], + ['group' => 'marken', 'key' => 'craft', 'anchor' => 'handwerk', 'title' => 'Handwerk-Abschluss auf jeder Markenseite', + 'description' => 'Der letzte Abschnitt auf den Seiten von CABINET, Rotpunkt und Febrü: „Planung plus Handwerk“ mit Link zu Otterpohl. Einmal gepflegt, überall gleich.', 'path' => '/marken/cabinet'], + ], + ], + + 'referenzen' => [ + 'title' => 'Referenzen', + 'path' => '/referenzen', + 'sections' => [ + ['group' => 'referenzen', 'key' => 'hero', 'anchor' => 'seitenkopf', 'title' => 'Seitenkopf', + 'description' => 'Überschrift, Einleitung und Bild der Referenzen-Seite. Ob die Seite (samt Menüpunkt) erscheint, schaltest du unter „Referenzen“.'], + ['group' => 'referenzen', 'key' => 'projects', 'anchor' => 'projekte', 'title' => 'Realisierte Projekte', + 'description' => 'Überschrift, Text und Leerzustand über den Projekten. Die Projekte selbst pflegst du unter „Referenzen“.'], + ], + ], + + 'magazin' => [ + 'title' => 'Magazin', + 'path' => '/magazin', + 'sections' => [ + ['group' => 'magazin', 'key' => 'list', 'anchor' => 'magazin', 'title' => 'Magazin-Übersicht', + 'description' => 'Überschrift und Einleitung der Übersicht. Die Beiträge pflegst du unter „Magazin“.'], + ['group' => 'magazin', 'key' => 'detail', 'anchor' => null, 'title' => 'Beitragsseite', + 'description' => 'Feste Texte auf jeder Beitragsseite, etwa „Zurück zur Übersicht“ und „Weitere Beiträge“.'], + ], + ], + + 'about' => [ + 'title' => 'Über uns', + 'path' => '/about', + 'sections' => [ + ['group' => 'about', 'key' => 'hero', 'anchor' => 'seitenkopf', 'title' => 'Seitenkopf', + 'description' => 'Zeile über der Überschrift (eyebrow), Überschrift, Zitat, Name und Funktion sowie Bild mit Infokarte (card_title, card_text).'], + ['group' => 'about', 'key' => 'our_story', 'anchor' => 'geschichte', 'title' => 'Unsere Geschichte', + 'description' => 'Überschrift, Text (summary) und die Zeitleiste (timeline) zur Entstehung von B2in.'], + ['group' => 'about', 'key' => 'image_break', 'anchor' => 'bild', 'title' => 'Bildpause', + 'description' => 'Großes Bild zwischen Geschichte und Werten, mit Zitat (quote) und Autor (author).'], + ['group' => 'about', 'key' => 'our_values', 'anchor' => 'werte', 'title' => 'Unsere Werte', + 'description' => 'Die Werte-Kacheln.'], + ['group' => 'about', 'key' => 'partner_cta', 'anchor' => 'cta', 'title' => 'Abschluss auf „Über uns“', + 'description' => 'Der Abschlussblock am Ende von „Über uns“.'], + ], + ], + + 'contact' => [ + 'title' => 'Kontakt', + 'path' => '/contact', + 'sections' => [ + ['group' => 'contact', 'key' => 'contact_form', 'anchor' => 'kontakt', 'title' => 'Kontaktformular', + 'description' => 'Kopf des Formulars (hero: eyebrow, title, subtitle), Betreffe, Feldbeschriftungen und Datenschutz-Hinweis.'], + ['group' => 'global', 'key' => 'contact', 'anchor' => 'kontakt', 'title' => 'Kontaktdaten', + 'description' => 'Telefon, E-Mail, Adresse und die WhatsApp-Nummer. Ohne WhatsApp-Nummer erscheint kein WhatsApp-Button.'], + ], + ], + + 'faq' => [ + 'title' => 'FAQ', + 'path' => '/faq', + 'sections' => [ + ['group' => 'faq', 'key' => 'faq', 'anchor' => 'faq', 'title' => 'Fragen und Antworten', + 'description' => 'Überschrift und alle Fragen der Seite. „category“ ordnet eine Frage einem Bereich zu (leer = allgemeine Fragen oben); Überschrift und Symbol der Bereiche stehen in „categories“, ihre Reihenfolge ist die auf der Seite.'], + ], + ], + + 'global' => [ + 'title' => 'Auf jeder Seite', + 'path' => '/', + 'sections' => [ + ['group' => 'global', 'key' => 'announcement_bar', 'anchor' => 'header', 'title' => 'Hinweisleiste', + 'description' => 'Schmale Zeile ganz oben über dem Menü (text, badge, Link). „enabled“ schaltet sie ein. Zurzeit ist die Leiste für die ganze Website über B2IN_ANNOUNCEMENT_BAR in der .env aus – Änderungen hier erscheinen erst, wenn sie dort eingeschaltet ist.'], + ['group' => 'global', 'key' => 'header', 'anchor' => 'header', 'title' => 'Hauptmenü', + 'description' => 'Menüpunkte und Buttons im Kopf der Interior-Welt. Der Punkt „Referenzen“ erscheint nur, solange die Referenzen-Seite eingeschaltet ist.'], + ['group' => 'global', 'key' => 'appointment_widget', 'anchor' => null, 'title' => 'Terminanfrage-Widget', + 'description' => 'Das schwebende Widget rechts unten: Texte, Themen und Zeitfenster.'], + ['group' => 'global', 'key' => 'footer', 'anchor' => 'footer', 'title' => 'Fußbereich', + 'description' => 'Claim, Zeile unter dem Claim (byline) und die Linkliste (links) im Fuß.'], + ], + ], + + 'immobilien' => [ + 'title' => 'Immobilien-Welt', + 'path' => '/immobilien', + 'sections' => [ + ['group' => 'global', 'key' => 'announcement_bar_immobilien', 'anchor' => 'header', 'title' => 'Hinweisleiste (Immobilien)', + 'description' => 'Hinweisleiste über dem Menü der Immobilien-Welt. Wie die Interior-Leiste zurzeit über B2IN_ANNOUNCEMENT_BAR ausgeschaltet.'], + ['group' => 'global', 'key' => 'header_immobilien', 'anchor' => 'header', 'title' => 'Hauptmenü (Immobilien)', + 'description' => 'Menüpunkte und Buttons im Kopf der Immobilien-Welt.'], + ['group' => 'global', 'key' => 'cta_section_immobilien', 'anchor' => 'cta', 'title' => 'Abschluss (Immobilien)', + 'description' => 'Der letzte Block vor dem Fuß auf allen Immobilien-Seiten.'], + ['group' => 'immobilien', 'key' => 'magazin_list', 'anchor' => 'magazin', 'title' => 'Magazin-Übersicht (Immobilien)', + 'description' => 'Überschrift und Einleitung unter /immobilien/magazin.', 'path' => '/immobilien/magazin'], + ['group' => 'immobilien', 'key' => 'about_hero', 'anchor' => 'seitenkopf', 'title' => 'Über B2in: Seitenkopf', + 'description' => 'Überschrift, Zitat, Name und Funktion sowie Bild mit Infokarte unter /immobilien/ueber-b2in.', 'path' => '/immobilien/ueber-b2in'], + ['group' => 'immobilien', 'key' => 'our_story', 'anchor' => 'geschichte', 'title' => 'Über B2in: Geschichte', + 'description' => 'Der Geschichte-Block der Immobilien-Welt.', 'path' => '/immobilien/ueber-b2in'], + ['group' => 'immobilien', 'key' => 'about_image_break', 'anchor' => 'bild', 'title' => 'Über B2in: Bildpause', + 'description' => 'Bild zwischen Geschichte und Werten.', 'path' => '/immobilien/ueber-b2in'], + ['group' => 'immobilien', 'key' => 'our_values', 'anchor' => 'werte', 'title' => 'Über B2in: Werte', + 'description' => 'Die Werte-Kacheln der Immobilien-Welt.', 'path' => '/immobilien/ueber-b2in'], + ['group' => 'faq', 'key' => 'faq_immobilien', 'anchor' => 'faq', 'title' => 'FAQ (Immobilien)', + 'description' => 'Fragen und Antworten unter /immobilien/faq.', 'path' => '/immobilien/faq'], + ['group' => 'contact', 'key' => 'contact_form_immobilien', 'anchor' => 'kontakt', 'title' => 'Kontaktformular (Immobilien)', + 'description' => 'Abweichende Texte und Betreffe unter /immobilien/kontakt. Leere Felder übernehmen den Interior-Wert.', 'path' => '/immobilien/kontakt'], + ], + ], + + 'legal' => [ + 'title' => 'Rechtliches', + 'path' => '/impressum', + 'sections' => [ + ['group' => 'legal', 'key' => 'impressum', 'anchor' => null, 'title' => 'Impressum', + 'description' => 'Pflichtangaben. Der Inhalt ist HTML.', 'path' => '/impressum'], + ['group' => 'legal', 'key' => 'privacy', 'anchor' => null, 'title' => 'Datenschutz', + 'description' => 'Datenschutzerklärung. Der Inhalt ist HTML.', 'path' => '/privacy'], + ['group' => 'legal', 'key' => 'terms', 'anchor' => null, 'title' => 'Nutzungsbedingungen', + 'description' => 'Nutzungsbedingungen der Website. Der Inhalt ist HTML.', 'path' => '/terms'], + ['group' => 'legal', 'key' => 'cookie_policy', 'anchor' => null, 'title' => 'Cookie-Hinweise', + 'description' => 'Cookie-Richtlinie. Der Inhalt ist HTML.', 'path' => '/cookie-policy'], + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Sammelpunkt für alles, was in der Datenbank liegt, aber oben nicht steht + |-------------------------------------------------------------------------- + */ + 'unlisted' => [ + 'title' => 'Nicht mehr verwendet', + 'description' => 'Einträge in der Datenbank, die keine Seite anzeigt. Normalerweise leer – der UnusedCmsContentCleanupSeeder räumt solche Einträge ab.', + ], +]; diff --git a/config/cms_section_map.php b/config/cms_section_map.php index a2035afc..e9792f44 100644 --- a/config/cms_section_map.php +++ b/config/cms_section_map.php @@ -8,84 +8,55 @@ declare(strict_types=1); * Wird von cms_theme_section() und CmsContentSeeder verwendet. */ return [ - 'lang_keys' => [ - 'card_section' => 'partner_card_section', - ], - 'sections' => [ 'announcement_bar' => ['global', 'announcement_bar'], + 'announcement_bar_immobilien' => ['global', 'announcement_bar_immobilien'], 'header' => ['global', 'header'], + 'footer' => ['global', 'footer'], 'cta_section' => ['global', 'cta_section'], - 'cta_section_portfolio' => ['global', 'cta_section_portfolio'], + 'cta_section_immobilien' => ['global', 'cta_section_immobilien'], + 'appointment_widget' => ['global', 'appointment_widget'], 'hero' => ['home', 'hero'], + 'audience_switch' => ['home', 'audience_switch'], + 'core_brands' => ['home', 'core_brands'], + 'origin_section' => ['home', 'origin_section'], + + 'marken_hero' => ['marken', 'hero'], + 'marken_image_break' => ['marken', 'image_break'], + 'marken_network' => ['marken', 'network'], + 'marken_growth' => ['marken', 'growth'], + 'marken_cta' => ['marken', 'cta'], + 'brand_craft' => ['marken', 'craft'], + + 'referenzen_hero' => ['referenzen', 'hero'], + 'reference_projects' => ['referenzen', 'projects'], + 'display_feed' => ['referenzen', 'display_feed'], + 'sponsoring' => ['home', 'sponsoring'], + 'immobilien_teaser' => ['home', 'immobilien_teaser'], 'founder_bar' => ['home', 'founder_bar'], - 'synergie_section' => ['home', 'synergie_section'], - 'ecosystem_core' => ['home', 'ecosystem_core'], 'vision_section' => ['home', 'vision_section'], - 'brand_worlds' => ['home', 'brand_worlds'], - 'integriertes_modell_b2in' => ['home', 'integriertes_modell_b2in'], - - 'immobilien_hero' => ['immobilien', 'hero'], - 'immobilien_hero_v2' => ['immobilien', 'hero_v2'], - 'immobilien_projects' => ['immobilien', 'projects_meta'], - 'immobilien_moebel_vorteil' => ['immobilien', 'moebel_vorteil'], - 'immobilien_trust' => ['immobilien', 'trust'], - 'immobilien_warum_dubai' => ['immobilien', 'warum_dubai'], - 'immobilien_image_break' => ['immobilien', 'image_break'], - 'immobilien_kaufprozess' => ['immobilien', 'kaufprozess'], - 'immobilien_bruecke' => ['immobilien', 'bruecke'], - 'immobilien_mindset' => ['immobilien', 'mindset'], - 'portfolio' => ['immobilien', 'portfolio'], - - 'netzwerk_hero' => ['netzwerk', 'hero'], - 'netzwerk_image_break' => ['netzwerk', 'image_break'], - 'netzwerk_teasers' => ['netzwerk', 'teasers'], - 'netzwerk_cta' => ['netzwerk', 'cta'], - 'netzwerk_cabinet_partner' => ['netzwerk', 'cabinet_partner'], - 'netzwerk_immobilien_hint' => ['netzwerk', 'immobilien_hint'], - - 'interior_hero' => ['netzwerk', 'interior_hero'], - 'interior_concept' => ['netzwerk', 'interior_concept'], - 'interior_brands' => ['netzwerk', 'interior_brands'], - 'interior_zielgruppen' => ['netzwerk', 'interior_zielgruppen'], - 'interior_process' => ['netzwerk', 'interior_process'], - 'interior_trust' => ['netzwerk', 'interior_trust'], 'faq' => ['faq', 'faq'], + 'faq_immobilien' => ['faq', 'faq_immobilien'], + + // Immobilien-Welt: eigene Navigation, eigenes Magazin, eigene Ueber-uns-Seite + 'header_immobilien' => ['global', 'header_immobilien'], + 'magazin_list_immobilien' => ['immobilien', 'magazin_list'], + 'immobilien_about_hero' => ['immobilien', 'about_hero'], + 'immobilien_our_story' => ['immobilien', 'our_story'], + 'immobilien_about_image_break' => ['immobilien', 'about_image_break'], + 'immobilien_our_values' => ['immobilien', 'our_values'], 'contact_form' => ['contact', 'contact_form'], + 'contact_form_immobilien' => ['contact', 'contact_form_immobilien'], 'about_hero' => ['about', 'hero'], 'our_story' => ['about', 'our_story'], 'about_image_break' => ['about', 'image_break'], 'our_values' => ['about', 'our_values'], - 'leadership_team' => ['about', 'leadership_team'], - 'broker_section' => ['netzwerk', 'broker_section'], - 'commitment_section' => ['netzwerk', 'commitment_section'], - 'dark_stats_section' => ['netzwerk', 'dark_stats_section'], - 'ecosystem_hero' => ['netzwerk', 'ecosystem_hero'], - 'ecosystem_stats' => ['netzwerk', 'ecosystem_stats'], - 'ecosystem_start' => ['netzwerk', 'ecosystem_start'], - 'ecosystem_hub' => ['netzwerk', 'ecosystem_hub'], - 'ecosystem_result' => ['netzwerk', 'ecosystem_result'], - 'end_customer_section' => ['netzwerk', 'end_customer_section'], - 'final_commitment' => ['netzwerk', 'final_commitment'], - 'digital_core' => ['netzwerk', 'digital_core'], - 'supply_chain_intro' => ['netzwerk', 'supply_chain_intro'], - - 'partner_hero' => ['netzwerk', 'partner_hero'], - 'partner_benefits' => ['netzwerk', 'partner_benefits'], - 'partner_cta' => ['netzwerk', 'partner_cta'], - 'partner_card_section' => ['netzwerk', 'partner_card_section'], - 'card_section' => ['netzwerk', 'partner_card_section'], - 'partner_benefits_developer' => ['netzwerk', 'partner_benefits_developer'], - 'partner_benefits_retailer' => ['netzwerk', 'partner_benefits_retailer'], - 'partner_benefits_supplier' => ['netzwerk', 'partner_benefits_supplier'], - 'partner_benefits_broker' => ['netzwerk', 'partner_benefits_broker'], - 'partner_process' => ['netzwerk', 'partner_process'], - 'supplier_section' => ['netzwerk', 'supplier_section'], + 'partner_cta' => ['about', 'partner_cta'], 'magazin_detail' => ['magazin', 'detail'], 'magazin_list' => ['magazin', 'list'], diff --git a/config/domains.php b/config/domains.php index c7bdac5d..16b2529b 100644 --- a/config/domains.php +++ b/config/domains.php @@ -71,13 +71,29 @@ return [ 'view_prefix' => 'b2in', 'assets_dir' => 'build/b2in', 'description' => 'Haupt-Landingpage mit Standard-Theme', + // Interior-Welt (Standard). Die Immobilien-Welt behält das bisherige Blau, + // siehe `worlds` und resources/css/web/theme-b2in.css. 'color_scheme' => [ - 'primary' => '#2b3f51', // Anthracite - 'secondary' => '#20a0da', // Dynamic Blue + 'primary' => '#202c2b', // Tanne + 'secondary' => '#a8741f', // Ocker ], 'font_family' => [ 'primary' => 'Inter', - 'secondary' => 'IBM Plex Sans', + 'secondary' => 'EB Garamond', + ], + 'worlds' => [ + 'interior' => [ + 'primary' => '#202c2b', // Tanne – Hauptton dunkel, Wortmarke + 'background' => '#f7f4ef', // Creme + 'surface' => '#d9cbbf', // Sand – Flächen, Footer + 'accent' => '#a8741f', // Ocker – Akzent, Logo-Bogen + 'secondary' => '#a38f82', // Clay – Sekundär, Produkte + 'text' => '#2d2926', // Anthrazit + ], + 'immobilien' => [ + 'primary' => '#2b3f51', // Anthracite + 'accent' => '#20a0da', // Dynamic Blue + ], ], ], diff --git a/config/logging.php b/config/logging.php index 8d94292b..317cbeb3 100644 --- a/config/logging.php +++ b/config/logging.php @@ -52,6 +52,13 @@ return [ 'channels' => [ + 'monitoring' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/monitoring.log'), + 'level' => 'debug', + 'days' => 14, + ], + 'stack' => [ 'driver' => 'stack', 'channels' => explode(',', env('LOG_STACK', 'single')), diff --git a/config/monitoring.php b/config/monitoring.php new file mode 100644 index 00000000..715530af --- /dev/null +++ b/config/monitoring.php @@ -0,0 +1,75 @@ + [ + 'enabled' => (bool) env('MONITORING_ALERTS_ENABLED', true), + + // Ops-Postfach. Leer = keine Alert-Mail (Log und ntfy laufen trotzdem). + 'mail_to' => env('MONITORING_ALERT_EMAIL'), + + // Zweiter Alarmweg: Push über ntfy, JSON-POST + // an die Basis-URL. Ohne URL oder Topic aus. + 'ntfy' => [ + 'url' => env('MONITORING_NTFY_URL'), + 'topic' => env('MONITORING_NTFY_TOPIC'), + 'token' => env('MONITORING_NTFY_TOKEN'), + 'priority' => (int) env('MONITORING_NTFY_PRIORITY', 4), + ], + ], + + /* + |-------------------------------------------------------------------------- + | Browserfehler + |-------------------------------------------------------------------------- + | + | Eigenes GlitchTip-Projekt für JavaScript-Fehler. Die DSN ist öffentlich + | (steht im HTML), sie erlaubt nur das Einliefern von Ereignissen. Ohne + | DSN wird kein Skript eingebunden. + | + */ + + 'browser' => [ + 'dsn' => env('SENTRY_BROWSER_DSN'), + 'sample_rate' => (float) env('SENTRY_BROWSER_SAMPLE_RATE', 1.0), + ], + + /* + |-------------------------------------------------------------------------- + | Health-Endpunkt und Scheduler-Herzschlag + |-------------------------------------------------------------------------- + | + | `/health` antwortet nur mit gültigem Token (Bearer-Header oder + | `?token=`); ohne konfiguriertes Token gibt es den Endpunkt nicht (404). + | Der Scheduler schreibt jede Minute einen Herzschlag; bleibt er aus, ist + | der Cron-Eintrag weg oder der Server hängt. + | + */ + + 'health' => [ + 'token' => env('MONITORING_HEALTH_TOKEN'), + 'queue_backlog_critical_seconds' => (int) env('MONITORING_QUEUE_BACKLOG_SECONDS', 300), + 'disk_min_free_percent' => (float) env('MONITORING_DISK_MIN_FREE_PERCENT', 10), + ], + + 'scheduler' => [ + // Leer = storage/framework/scheduler-heartbeat. Die Tests setzen je Prozess eine eigene Datei. + 'heartbeat_path' => env('MONITORING_HEARTBEAT_PATH'), + 'heartbeat_warn_minutes' => 3, + 'heartbeat_critical_minutes' => 10, + ], + +]; diff --git a/config/seeding.php b/config/seeding.php new file mode 100644 index 00000000..9e2fe010 --- /dev/null +++ b/config/seeding.php @@ -0,0 +1,21 @@ + env('SEED_ADMIN_NAME', 'Admin'), + 'admin_email' => env('SEED_ADMIN_EMAIL', 'admin@b2in.test'), + 'admin_password' => env('SEED_ADMIN_PASSWORD', 'password'), + +]; diff --git a/config/sentry.php b/config/sentry.php new file mode 100644 index 00000000..a3a71cc8 --- /dev/null +++ b/config/sentry.php @@ -0,0 +1,180 @@ + env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')), + + // @see https://spotlightjs.com/ + // 'spotlight' => env('SENTRY_SPOTLIGHT', false), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#logger + // 'logger' => Sentry\Logger\DebugFileLogger::class, // By default this will log to `storage_path('logs/sentry.log')` + + // The release version of your application + // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) + // Gleiche Kennung wie config('app.version'): SENTRY_RELEASE bzw. + // APP_VERSION, sonst die beim Deploy geschriebene Datei RELEASE. + 'release' => Release::current(env('SENTRY_RELEASE', env('APP_VERSION'))), + + // When left empty or `null` the Laravel environment will be used (usually discovered from `APP_ENV` in your `.env`) + 'environment' => env('SENTRY_ENVIRONMENT'), + + // Override the organization ID used for trace continuation checks. + 'org_id' => env('SENTRY_ORG_ID') === null ? null : (int) env('SENTRY_ORG_ID'), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#sample_rate + 'sample_rate' => env('SENTRY_SAMPLE_RATE') === null ? 1.0 : (float) env('SENTRY_SAMPLE_RATE'), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#traces_sample_rate + 'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float) env('SENTRY_TRACES_SAMPLE_RATE'), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#profiles_sample_rate + 'profiles_sample_rate' => env('SENTRY_PROFILES_SAMPLE_RATE') === null ? null : (float) env('SENTRY_PROFILES_SAMPLE_RATE'), + + // Only continue incoming traces when the organization IDs are compatible with this SDK instance. + 'strict_trace_continuation' => env('SENTRY_STRICT_TRACE_CONTINUATION', false), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#enable_logs + 'enable_logs' => env('SENTRY_ENABLE_LOGS', false), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#enable_metrics + 'enable_metrics' => env('SENTRY_ENABLE_METRICS', false), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#log_flush_threshold + 'log_flush_threshold' => env('SENTRY_LOG_FLUSH_THRESHOLD') === null ? null : (int) env('SENTRY_LOG_FLUSH_THRESHOLD'), + + // The minimum log level that will be sent to Sentry as logs using the `sentry_logs` logging channel + 'logs_channel_level' => env('SENTRY_LOG_LEVEL', env('SENTRY_LOGS_LEVEL', env('LOG_LEVEL', 'debug'))), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#send_default_pii + 'send_default_pii' => false, + + // Formular- und JSON-Inhalte verlassen den Server nie. + 'max_request_body_size' => 'never', + + // User-ID statt Person, Tokens aus URL/Query/Referer, E-Mails aus Meldungen. + 'before_send' => [ErrorReportScrubber::class, 'beforeSend'], + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#ignore_exceptions + // 'ignore_exceptions' => [], + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#ignore_transactions + 'ignore_transactions' => [ + // Ignore Laravel's default health URL + '/up', + '/health', + ], + + // Breadcrumb specific configuration + 'breadcrumbs' => [ + // Capture Laravel logs as breadcrumbs + 'logs' => env('SENTRY_BREADCRUMBS_LOGS_ENABLED', false), + + // Capture Laravel cache events (hits, writes etc.) as breadcrumbs + 'cache' => env('SENTRY_BREADCRUMBS_CACHE_ENABLED', false), + + // Capture Livewire components like routes as breadcrumbs + 'livewire' => env('SENTRY_BREADCRUMBS_LIVEWIRE_ENABLED', true), + + // Capture SQL queries as breadcrumbs + 'sql_queries' => env('SENTRY_BREADCRUMBS_SQL_QUERIES_ENABLED', true), + + // Capture SQL query bindings (parameters) in SQL query breadcrumbs + 'sql_bindings' => env('SENTRY_BREADCRUMBS_SQL_BINDINGS_ENABLED', false), + + // Capture queue job information as breadcrumbs + 'queue_info' => env('SENTRY_BREADCRUMBS_QUEUE_INFO_ENABLED', true), + + // Capture command information as breadcrumbs + 'command_info' => env('SENTRY_BREADCRUMBS_COMMAND_JOBS_ENABLED', true), + + // Capture HTTP client request information as breadcrumbs + 'http_client_requests' => env('SENTRY_BREADCRUMBS_HTTP_CLIENT_REQUESTS_ENABLED', true), + + // Capture send notifications as breadcrumbs + 'notifications' => env('SENTRY_BREADCRUMBS_NOTIFICATIONS_ENABLED', true), + ], + + // Performance monitoring specific configuration + 'tracing' => [ + // Trace queue jobs as their own transactions (this enables tracing for queue jobs) + 'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', true), + + // Capture queue jobs as spans when executed on the sync driver + 'queue_jobs' => env('SENTRY_TRACE_QUEUE_JOBS_ENABLED', true), + + // Capture SQL queries as spans + 'sql_queries' => env('SENTRY_TRACE_SQL_QUERIES_ENABLED', true), + + // Capture SQL query bindings (parameters) in SQL query spans + 'sql_bindings' => env('SENTRY_TRACE_SQL_BINDINGS_ENABLED', false), + + // Capture where the SQL query originated from on the SQL query spans + 'sql_origin' => env('SENTRY_TRACE_SQL_ORIGIN_ENABLED', true), + + // Define a threshold in milliseconds for SQL queries to resolve their origin + 'sql_origin_threshold_ms' => env('SENTRY_TRACE_SQL_ORIGIN_THRESHOLD_MS', 100), + + // Capture views rendered as spans + 'views' => env('SENTRY_TRACE_VIEWS_ENABLED', true), + + // Capture Livewire components as spans + 'livewire' => env('SENTRY_TRACE_LIVEWIRE_ENABLED', true), + + // Capture HTTP client requests as spans + 'http_client_requests' => env('SENTRY_TRACE_HTTP_CLIENT_REQUESTS_ENABLED', true), + + // Capture Laravel cache events (hits, writes etc.) as spans + 'cache' => env('SENTRY_TRACE_CACHE_ENABLED', true), + + // Capture Redis operations as spans (this enables Redis events in Laravel) + 'redis_commands' => env('SENTRY_TRACE_REDIS_COMMANDS', false), + + // Capture where the Redis command originated from on the Redis command spans + 'redis_origin' => env('SENTRY_TRACE_REDIS_ORIGIN_ENABLED', true), + + // Capture send notifications as spans + 'notifications' => env('SENTRY_TRACE_NOTIFICATIONS_ENABLED', true), + + // Enable tracing for requests without a matching route (404's) + 'missing_routes' => env('SENTRY_TRACE_MISSING_ROUTES_ENABLED', false), + + // Configures if the performance trace should continue after the response has been sent to the user until the application terminates + // This is required to capture any spans that are created after the response has been sent like queue jobs dispatched using `dispatch(...)->afterResponse()` for example + 'continue_after_response' => env('SENTRY_TRACE_CONTINUE_AFTER_RESPONSE', true), + + // Capture AI agent interactions as spans (requires laravel/ai) + 'gen_ai' => env('SENTRY_TRACE_GEN_AI_ENABLED', true), + + // Capture AI invoke_agent spans + 'gen_ai_invoke_agent' => env('SENTRY_TRACE_GEN_AI_INVOKE_AGENT_ENABLED', true), + + // Capture AI chat spans + 'gen_ai_chat' => env('SENTRY_TRACE_GEN_AI_CHAT_ENABLED', true), + + // Capture AI execute_tool spans + 'gen_ai_execute_tool' => env('SENTRY_TRACE_GEN_AI_EXECUTE_TOOL_ENABLED', true), + + // Capture AI embeddings spans + 'gen_ai_embeddings' => env('SENTRY_TRACE_GEN_AI_EMBEDDINGS_ENABLED', true), + + // Enable the tracing integrations supplied by Sentry (recommended) + 'default_integrations' => env('SENTRY_TRACE_DEFAULT_INTEGRATIONS_ENABLED', true), + ], + +]; diff --git a/database/factories/CmsArticleFactory.php b/database/factories/CmsArticleFactory.php index 53bcd566..755d4f92 100644 --- a/database/factories/CmsArticleFactory.php +++ b/database/factories/CmsArticleFactory.php @@ -23,6 +23,7 @@ class CmsArticleFactory extends Factory 'subtitle' => fake()->sentence(12), 'image' => 'b2in/magazin-'.fake()->numberBetween(1, 5).'.jpg', 'category' => fake()->randomElement(['Dubai Investment', 'Rendite & Einrichtung', 'B2B & Partner', 'Einrichtung & Netzwerk']), + 'world' => CmsArticle::WORLD_INTERIOR, 'date_label' => fake()->date('F j, Y'), 'read_time' => fake()->numberBetween(3, 10).' min read', 'author' => [ diff --git a/database/factories/CmsBrandFactory.php b/database/factories/CmsBrandFactory.php new file mode 100644 index 00000000..b27d3112 --- /dev/null +++ b/database/factories/CmsBrandFactory.php @@ -0,0 +1,70 @@ + + */ +class CmsBrandFactory extends Factory +{ + protected $model = CmsBrand::class; + + public function definition(): array + { + $name = fake()->unique()->company(); + + return [ + 'slug' => Str::slug($name).'-'.fake()->unique()->numberBetween(100, 999), + 'name' => ['de' => $name, 'en' => $name], + 'tagline' => ['de' => fake()->sentence(4), 'en' => fake()->sentence(4)], + 'teaser' => ['de' => fake()->paragraph(2), 'en' => fake()->paragraph(2)], + 'description' => ['de' => '

'.fake()->paragraph(4).'

', 'en' => '

'.fake()->paragraph(4).'

'], + 'logo' => '', + 'image' => '', + 'services' => [ + ['title' => fake()->words(3, true), 'description' => fake()->sentence(10)], + ['title' => fake()->words(3, true), 'description' => fake()->sentence(10)], + ], + 'gallery' => [], + 'website_url' => fake()->url(), + 'showroom' => 'Bielefeld', + 'is_published' => true, + 'order' => fake()->numberBetween(1, 20), + ]; + } + + /** + * Galerie mit realisierten Projekten und Inspirationen. + */ + public function withGallery(int $projects = 2, int $inspirations = 2): static + { + $items = []; + + for ($i = 1; $i <= $projects; $i++) { + $items[] = [ + 'image' => 'projekt-'.$i.'.webp', + 'category' => CmsBrand::GALLERY_PROJECT, + 'caption' => 'Projekt '.$i, + ]; + } + + for ($i = 1; $i <= $inspirations; $i++) { + $items[] = [ + 'image' => 'inspiration-'.$i.'.webp', + 'category' => CmsBrand::GALLERY_INSPIRATION, + 'caption' => 'Inspiration '.$i, + ]; + } + + return $this->state(fn () => ['gallery' => $items]); + } + + public function unpublished(): static + { + return $this->state(fn () => ['is_published' => false]); + } +} diff --git a/database/factories/CmsReferenceFactory.php b/database/factories/CmsReferenceFactory.php new file mode 100644 index 00000000..32697d74 --- /dev/null +++ b/database/factories/CmsReferenceFactory.php @@ -0,0 +1,62 @@ + + */ +class CmsReferenceFactory extends Factory +{ + protected $model = CmsReference::class; + + public function definition(): array + { + $title = fake()->unique()->words(3, true); + + return [ + 'title' => ['de' => ucfirst($title), 'en' => ucfirst($title)], + 'location' => fake()->city(), + 'year' => (string) fake()->numberBetween(2022, 2026), + 'description' => ['de' => fake()->paragraph(2), 'en' => fake()->paragraph(2)], + 'image' => 'referenzen/'.fake()->unique()->slug(2).'.webp', + 'gallery' => [], + 'brand_slugs' => [], + 'is_published' => true, + 'order' => fake()->numberBetween(1, 20), + ]; + } + + public function published(): static + { + return $this->state(fn () => ['is_published' => true]); + } + + public function unpublished(): static + { + return $this->state(fn () => ['is_published' => false]); + } + + /** + * @param list $slugs + */ + public function forBrands(array $slugs): static + { + return $this->state(fn () => ['brand_slugs' => $slugs]); + } + + public function withGallery(int $count = 2): static + { + return $this->state(function () use ($count) { + $items = []; + + for ($i = 1; $i <= $count; $i++) { + $items[] = ['image' => 'referenzen/bild-'.$i.'.webp', 'caption' => 'Bild '.$i]; + } + + return ['gallery' => $items]; + }); + } +} diff --git a/database/migrations/2026_08_28_110407_create_cms_brands_table.php b/database/migrations/2026_08_28_110407_create_cms_brands_table.php new file mode 100644 index 00000000..f15f01e1 --- /dev/null +++ b/database/migrations/2026_08_28_110407_create_cms_brands_table.php @@ -0,0 +1,40 @@ +id(); + $table->string('slug')->unique(); + $table->json('name'); + $table->json('tagline')->nullable(); + $table->json('teaser')->nullable(); + $table->json('description')->nullable(); + $table->string('logo')->nullable(); + $table->string('image')->nullable(); + $table->json('services')->nullable(); + $table->json('gallery')->nullable(); + $table->string('website_url')->nullable(); + $table->string('showroom')->nullable(); + $table->boolean('is_published')->default(true); + $table->integer('order')->default(0); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('cms_brands'); + } +}; diff --git a/database/migrations/2026_08_28_112244_add_summary_and_highlights_to_cms_brands_table.php b/database/migrations/2026_08_28_112244_add_summary_and_highlights_to_cms_brands_table.php new file mode 100644 index 00000000..9fee6347 --- /dev/null +++ b/database/migrations/2026_08_28_112244_add_summary_and_highlights_to_cms_brands_table.php @@ -0,0 +1,33 @@ +json('summary')->nullable()->after('teaser'); + $table->json('highlights')->nullable()->after('summary'); + }); + } + + public function down(): void + { + Schema::table('cms_brands', function (Blueprint $table) { + $table->dropColumn(['summary', 'highlights']); + }); + } +}; diff --git a/database/migrations/2026_09_03_084254_add_page_sections_to_cms_brands_table.php b/database/migrations/2026_09_03_084254_add_page_sections_to_cms_brands_table.php new file mode 100644 index 00000000..b786cb72 --- /dev/null +++ b/database/migrations/2026_09_03_084254_add_page_sections_to_cms_brands_table.php @@ -0,0 +1,42 @@ +json('sections')->nullable()->after('services'); + $table->json('widget_label')->nullable()->after('sections'); + $table->json('cta_title')->nullable()->after('widget_label'); + $table->json('cta_text')->nullable()->after('cta_title'); + }); + } + + public function down(): void + { + Schema::table('cms_brands', function (Blueprint $table) { + $table->dropColumn(['sections', 'widget_label', 'cta_title', 'cta_text']); + }); + } +}; diff --git a/database/migrations/2026_09_14_120000_add_world_to_cms_articles_table.php b/database/migrations/2026_09_14_120000_add_world_to_cms_articles_table.php new file mode 100644 index 00000000..ce8004e6 --- /dev/null +++ b/database/migrations/2026_09_14_120000_add_world_to_cms_articles_table.php @@ -0,0 +1,34 @@ +string('world', 20)->default(CmsArticle::WORLD_INTERIOR)->index()->after('category'); + }); + + CmsArticle::query() + ->whereIn('slug', CmsArticle::LEGACY_IMMOBILIEN_SLUGS) + ->update(['world' => CmsArticle::WORLD_IMMOBILIEN]); + } + + public function down(): void + { + Schema::table('cms_articles', function (Blueprint $table) { + $table->dropIndex(['world']); + $table->dropColumn('world'); + }); + } +}; diff --git a/database/migrations/2026_09_15_132909_add_origin_to_cms_brands_table.php b/database/migrations/2026_09_15_132909_add_origin_to_cms_brands_table.php new file mode 100644 index 00000000..59bcb806 --- /dev/null +++ b/database/migrations/2026_09_15_132909_add_origin_to_cms_brands_table.php @@ -0,0 +1,37 @@ +json('origin_city')->nullable()->after('showroom'); + $table->json('origin_distance')->nullable()->after('origin_city'); + $table->json('origin_role')->nullable()->after('origin_distance'); + }); + } + + public function down(): void + { + Schema::table('cms_brands', function (Blueprint $table) { + $table->dropColumn(['origin_city', 'origin_distance', 'origin_role']); + }); + } +}; diff --git a/database/migrations/2026_09_15_150000_create_cms_references_table.php b/database/migrations/2026_09_15_150000_create_cms_references_table.php new file mode 100644 index 00000000..7f3f6806 --- /dev/null +++ b/database/migrations/2026_09_15_150000_create_cms_references_table.php @@ -0,0 +1,44 @@ +id(); + $table->json('title'); + $table->string('location')->nullable(); + $table->string('year', 20)->nullable(); + $table->json('description')->nullable(); + $table->string('image')->nullable(); + $table->json('gallery')->nullable(); + $table->json('brand_slugs')->nullable(); + $table->boolean('is_published')->default(true); + $table->integer('order')->default(0); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('cms_references'); + } +}; diff --git a/database/migrations/2026_10_09_100225_add_translations_to_cms_brands_table.php b/database/migrations/2026_10_09_100225_add_translations_to_cms_brands_table.php new file mode 100644 index 00000000..5889f28a --- /dev/null +++ b/database/migrations/2026_10_09_100225_add_translations_to_cms_brands_table.php @@ -0,0 +1,28 @@ +": "..."}}}. Die bisherigen Spalten bleiben die deutsche Fassung. + */ +return new class extends Migration +{ + public function up(): void + { + Schema::table('cms_brands', function (Blueprint $table) { + $table->json('field_translations')->nullable()->after('gallery'); + }); + } + + public function down(): void + { + Schema::table('cms_brands', function (Blueprint $table) { + $table->dropColumn('field_translations'); + }); + } +}; diff --git a/database/seeders/AboutPageTextSeeder.php b/database/seeders/AboutPageTextSeeder.php new file mode 100644 index 00000000..271075b7 --- /dev/null +++ b/database/seeders/AboutPageTextSeeder.php @@ -0,0 +1,104 @@ + Gruppe und Schlüssel der Sektionen */ + public const SECTIONS = [ + ['about', 'hero'], + ['about', 'image_break'], + ['about', 'our_story'], + ['about', 'our_values'], + ['about', 'partner_cta'], + ['netzwerk', 'partner_cta'], + ]; + + /** @var array alte Stelle → neue Stelle */ + public const REPLACEMENTS = [ + 'aufmisst und am Ende geradesteht.' => 'aufmisst und am Ende auch dafür geradesteht.', + 'mit wenigen, ausgewählten Herstellern' => 'mit wenigen ausgewählten Herstellern', + '"Gute Einrichtung entsteht' => '„Gute Einrichtung entsteht', + 'bis nach der Montage."' => 'bis nach der Montage.“', + 'verbunden durch dieselbe Grundhaltung, dass Qualität und Wort halten zusammengehören.' => 'verbunden durch dieselbe Grundhaltung: Zu Qualität gehört, Wort zu halten.', + '2026 rückt das Interior in den Mittelpunkt: Mit CABINET, Rotpunkt Küchen und Febrü stehen starke Kernmarken im Zentrum, ergänzt um ein Netzwerk regionaler Fachexperten. Internationale Immobilien bleiben als ergänzender Bereich bestehen.' => '2026 rückt die Einrichtung in den Mittelpunkt: CABINET, Rotpunkt Küchen, Febrü und Otterpohl Möbelservice bilden die Kernmarken, ergänzt um ein Netzwerk regionaler Fachexperten. Internationale Immobilien bleiben als zweiter Bereich bestehen.', + 'Wir planen den Raum, den ein Standardmöbel liegen lässt.' => 'Wir planen auch den Raum, den ein Standardmöbel ungenutzt lässt.', + 'Werden Sie B2in Partner' => 'Werden Sie B2in-Partner', + 'B2in – Immobilien und Einrichtung verbinden' => 'Wohnraum halb als Planungsskizze, halb fertig eingerichtet', + 'B2in – Connecting Real Estate and Interior' => 'Living space, half planning sketch, half fully furnished', + 'In 2026 interiors move to the centre: CABINET, Rotpunkt Küchen and Febrü form the core, complemented by a network of regional specialists. International real estate remains as a complementary area.' => 'In 2026 interiors move to the centre: CABINET, Rotpunkt Küchen, Febrü and Otterpohl Möbelservice form the core, complemented by a network of regional specialists. International real estate remains as a second area.', + ]; + + public function run(): void + { + $total = 0; + + foreach (self::SECTIONS as [$group, $key]) { + $row = CmsContent::query()->where('group', $group)->where('key', $key)->first(); + + if (! $row) { + continue; + } + + $count = 0; + $value = $this->replaceDeep($row->getTranslations('value'), $count); + + if ($count === 0) { + continue; + } + + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache($group); + $total += $count; + } + + $this->command?->info($total > 0 + ? "About-Texte korrigiert ({$total} Stelle(n))." + : 'About-Texte: bereits aktuell oder nicht im CMS – nichts geändert.'); + } + + /** + * @param array $data + * @return array + */ + private function replaceDeep(array $data, int &$count): array + { + foreach ($data as $key => $item) { + if (is_array($item)) { + $data[$key] = $this->replaceDeep($item, $count); + + continue; + } + + if (! is_string($item)) { + continue; + } + + $replaced = strtr($item, self::REPLACEMENTS); + + if ($replaced !== $item) { + $data[$key] = $replaced; + $count++; + } + } + + return $data; + } +} diff --git a/database/seeders/AssetMediaImportSeeder.php b/database/seeders/AssetMediaImportSeeder.php new file mode 100644 index 00000000..87086010 --- /dev/null +++ b/database/seeders/AssetMediaImportSeeder.php @@ -0,0 +1,125 @@ +referencedAssets() as $value => $collection) { + if (CmsMedia::query()->where('filename', $value)->exists()) { + continue; + } + + $source = public_path('img/assets/'.$value); + $extension = strtolower(pathinfo($source, PATHINFO_EXTENSION)); + $path = $originals.'/'.Str::random(40).'.'.$extension; + + Storage::disk($disk)->put($path, file_get_contents($source)); + + $isSvg = $extension === 'svg'; + $dimensions = $isSvg ? false : @getimagesize($source); + + $media = CmsMedia::create([ + 'filename' => $value, + 'disk' => $disk, + 'path' => $path, + 'type' => 'image', + 'mime_type' => $isSvg ? 'image/svg+xml' : (mime_content_type($source) ?: 'image/'.$extension), + 'file_size' => filesize($source), + 'original_width' => $dimensions ? $dimensions[0] : null, + 'original_height' => $dimensions ? $dimensions[1] : null, + 'collection' => $collection, + 'conversions' => [], + ]); + + if (! $isSvg) { + $service->generateThumbnail($media); + } + + $imported++; + } + + $this->command?->info($imported === 0 + ? 'Mediathek: alle verwendeten Bilder sind bereits übernommen.' + : "Mediathek: {$imported} Bilder aus public/img/assets übernommen."); + } + + /** + * Bildpfade, die Marken, Magazin oder CMS verwenden und die unter public/img/assets/ liegen, + * mit der Sammlung, in die sie kommen (die erste Quelle zählt: Marken, Magazin, Website). + * + * @return array + */ + public function referencedAssets(): array + { + $values = []; + $collect = function (mixed $value, string $collection) use (&$collect, &$values): void { + if (is_array($value)) { + array_walk($value, fn ($item) => $collect($item, $collection)); + + return; + } + + if (! is_string($value) || ! preg_match('/\.(jpe?g|png|webp|svg|gif)$/i', $value)) { + return; + } + + $value = ltrim(trim($value), '/'); + + if (str_contains($value, '://') || str_starts_with($value, 'storage/') || str_starts_with($value, 'immobile/')) { + return; + } + + if (is_file(public_path('img/assets/'.$value))) { + $values[$value] ??= $collection; + } + }; + + foreach (CmsBrand::query()->get() as $brand) { + $collect([$brand->logo, $brand->image, $brand->gallery, $brand->sections], 'Marken'); + } + + foreach (CmsArticle::query()->get() as $article) { + $collect($article->toArray(), 'Magazin'); + } + + foreach (CmsContent::query()->get() as $row) { + $collect($row->getTranslations('value'), 'Website'); + } + + $collect(trans('b2in.themes.'.config('app.theme', 'b2in'), [], 'de'), 'Website'); + + ksort($values); + + return $values; + } +} diff --git a/database/seeders/AudienceSwitchProjectTextSeeder.php b/database/seeders/AudienceSwitchProjectTextSeeder.php new file mode 100644 index 00000000..2e6a7d2d --- /dev/null +++ b/database/seeders/AudienceSwitchProjectTextSeeder.php @@ -0,0 +1,84 @@ + alter Satz → neuer Satz */ + public const REPLACEMENTS = [ + 'Mit deutscher Vertragssicherheit und einem eingespielten Herstellernetzwerk.' => 'Mit einem zentralen deutschen Vertragspartner und einem eingespielten Herstellernetzwerk.', + 'With German contractual reliability and an established manufacturer network.' => 'With a single German contract partner and an established manufacturer network.', + 'Projektentwicklungen – koordiniert aus einer Hand' => 'Projektentwicklungen. Koordiniert aus einer Hand', + 'developments – coordinated from a single source' => 'developments. Coordinated from a single source', + ]; + + public function run(): void + { + $row = CmsContent::query()->where('group', 'home')->where('key', 'audience_switch')->first(); + + if (! $row) { + $this->command?->info('Projekttext: Sektion home/audience_switch nicht im CMS – die Lang-Datei gilt.'); + + return; + } + + $value = $row->getTranslations('value'); + $count = 0; + $value = $this->replaceDeep($value, $count); + + if ($count === 0) { + $this->command?->info('Projekttext: bereits aktuell, nichts geändert.'); + + return; + } + + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache('home'); + + $this->command?->info("Projekttext ersetzt ({$count} Stelle(n))."); + } + + /** + * @param array $data + * @return array + */ + private function replaceDeep(array $data, int &$count): array + { + foreach ($data as $key => $item) { + if (is_array($item)) { + $data[$key] = $this->replaceDeep($item, $count); + + continue; + } + + if (! is_string($item)) { + continue; + } + + $replaced = strtr($item, self::REPLACEMENTS); + + if ($replaced !== $item) { + $data[$key] = $replaced; + $count++; + } + } + + return $data; + } +} diff --git a/database/seeders/BrandGalleryCaptionNormalizerSeeder.php b/database/seeders/BrandGalleryCaptionNormalizerSeeder.php new file mode 100644 index 00000000..e5a435fc --- /dev/null +++ b/database/seeders/BrandGalleryCaptionNormalizerSeeder.php @@ -0,0 +1,64 @@ +whereNotNull('gallery')->get() as $brand) { + $gallery = $brand->gallery ?? []; + $changed = false; + + foreach ($gallery as $index => $item) { + $caption = (string) ($item['caption'] ?? ''); + $stripped = $this->stripPrefix($caption); + + if ($stripped !== $caption) { + $gallery[$index]['caption'] = $stripped; + $changed = true; + $cleaned++; + } + } + + if ($changed) { + $brand->gallery = CmsBrand::normalizeGallery($gallery); + $brand->save(); + } + } + + $this->command?->info("Bildunterschriften bereinigt: {$cleaned}."); + } + + private function stripPrefix(string $caption): string + { + foreach (self::PREFIXES as $prefix) { + if (str_starts_with($caption, $prefix)) { + return trim(substr($caption, strlen($prefix))); + } + } + + return $caption; + } +} diff --git a/database/seeders/BrandImageSeeder.php b/database/seeders/BrandImageSeeder.php new file mode 100644 index 00000000..10d1816e --- /dev/null +++ b/database/seeders/BrandImageSeeder.php @@ -0,0 +1,162 @@ + …, 'category' => …] für eine andere Kategorie. + * + * @var array}> + */ + private const IMAGES = [ + 'cabinet' => [ + 'image' => 'marken/cabinet/ankleide-solitaer-eiche-tano.webp', + 'gallery' => [ + 'marken/cabinet/dachschraegenschrank-filo-cashmere.webp' => 'Dachschrägenschrank in Filo Cashmere', + 'marken/cabinet/schrank-gegen-schraege-marmor.webp' => 'Schrank gegen die Schräge in Marmoroptik', + 'marken/cabinet/schlafzimmer-eiche-tano.webp' => 'Schlafzimmerschrank in Eiche Tano', + 'marken/cabinet/schlafzimmer-velluto-fango.webp' => 'Schlafzimmerschrank in Velluto Fango', + 'marken/cabinet/schlafzimmer-wandschrank-filo-cashmere.webp' => 'Wandschrank im Schlafzimmer in Filo Cashmere', + 'marken/cabinet/garderobe-seite-offen.webp' => 'Garderobe mit offener Seite', + 'marken/cabinet/garderobe-sitznische-filo-cashmere.webp' => 'Garderobe mit Sitznische in Filo Cashmere', + 'marken/cabinet/drehtuerenschrank-marmor.webp' => 'Drehtürenschrank in Marmoroptik', + 'marken/cabinet/flur-schrank-eiche-tano.webp' => 'Flurschrank in Eiche Tano', + 'marken/cabinet/dachschraege-velluto-fango.webp' => 'Schrank unter der Dachschräge in Velluto Fango', + 'marken/cabinet/ankleide-solitaer-eiche-tano-seite.webp' => 'Ankleide Solitär in Eiche Tano, Seitenansicht', + ], + ], + 'rotpunkt' => [ + 'image' => 'marken/rotpunkt/kueche-01.webp', + 'gallery' => [ + 'marken/rotpunkt/kueche-01-b.webp' => 'Küche 01, zweite Ansicht', + 'marken/rotpunkt/kueche-02.webp' => 'Küche 02', + 'marken/rotpunkt/kueche-03.webp' => 'Küche 03', + 'marken/rotpunkt/kueche-04.webp' => 'Küche 04', + 'marken/rotpunkt/kueche-05.webp' => 'Küche 05', + 'marken/rotpunkt/kueche-06.webp' => 'Küche 06', + 'marken/rotpunkt/kueche-06-b.webp' => 'Küche 06, zweite Ansicht', + 'marken/rotpunkt/kueche-07.webp' => 'Küche 07', + 'marken/rotpunkt/kueche-08.webp' => 'Küche 08', + 'marken/rotpunkt/kueche-09.webp' => 'Küche 09', + 'marken/rotpunkt/kueche-10.webp' => 'Küche 10', + 'marken/rotpunkt/kueche-11.webp' => 'Küche 11', + 'marken/rotpunkt/kueche-12.webp' => 'Küche 12', + ], + ], + // Bildunterschriften nach den Febrü-Produktlinien aus den Dateinamen. + 'februe' => [ + 'image' => 'marken/februe/base-thekenloesung.webp', + 'gallery' => [ + 'marken/februe/active-2-0-bureo.webp' => 'Active 2.0 mit Bureo', + 'marken/februe/active-2-0-soul-grossraum.webp' => 'Großraum mit Active 2.0 und Soul', + 'marken/februe/adesso.webp' => 'Adesso', + 'marken/februe/arena-stage.webp' => 'Arena Stage', + 'marken/februe/base.webp' => 'Base', + 'marken/februe/base-sideboard.webp' => 'Base Sideboard', + 'marken/februe/bobb-bionics-coworker-container-cube.webp' => 'Bobb, Bionics, CoWorker, Container und Cube', + 'marken/februe/bobb.webp' => 'Bobb', + 'marken/februe/brandon.webp' => 'Brandon', + 'marken/februe/coworker.webp' => 'CoWorker', + 'marken/februe/corporate.webp' => 'Corporate', + 'marken/februe/curved-ben-basic.webp' => 'Curved, Ben und Basic', + 'marken/februe/eline-one-silent-garderobenpaneel.webp' => 'E-Line, One, Silent und Garderobenpaneel', + 'marken/februe/elements-soul-grossraum.webp' => 'Großraum mit Elements und Soul', + 'marken/februe/vio.webp' => 'Vio', + ], + ], + // Otterpohl (Zulieferung 24.09.): Werkstattbilder und Referenzen. Seit 01.10. ist die Treppe mit + // Lamellenwand (tittle_otter.png) das Titelbild, das frühere Werkstatt-Titelbild steht in der + // Galerie – {@see OtterpohlBrandSeeder::swapTitleImage()} tauscht bestehende Installationen. + // Unterschriften ohne Kundennamen – die stehen nur in den Dateinamen der Zulieferung. + 'tischlerei' => [ + 'image' => OtterpohlBrandSeeder::TITLE_IMAGE, + 'gallery' => [ + 'marken/otterpohl/referenz-dziuballe-treppe.webp' => ['caption' => 'Treppe mit Holzstufen, Stufenbeleuchtung und Eichenhandlauf', 'category' => CmsBrand::GALLERY_PROJECT], + 'marken/otterpohl/referenz-luecke-12.webp' => ['caption' => 'Tür und Kommode vor Lamellenwand', 'category' => CmsBrand::GALLERY_PROJECT], + 'marken/otterpohl/referenz-neugebauer.webp' => ['caption' => 'Gewendelte Treppe mit Eichenstufen', 'category' => CmsBrand::GALLERY_PROJECT], + 'marken/otterpohl/referenz-luecke-15.webp' => ['caption' => 'Beleuchtete Wandregale über Eck', 'category' => CmsBrand::GALLERY_PROJECT], + 'marken/otterpohl/referenz-berkemeier-treppe.webp' => ['caption' => 'Treppe mit umlaufender Sockelleiste und Lichtdetail', 'category' => CmsBrand::GALLERY_PROJECT], + 'marken/otterpohl/referenz-objektbau-luecke-technik.webp' => ['caption' => 'Objektbau: Verkaufsraum mit Theke und Regalwand', 'category' => CmsBrand::GALLERY_PROJECT], + 'marken/otterpohl/referenz-otterpohl-11.webp' => ['caption' => 'Sideboard mit Eichenplatte im Büro', 'category' => CmsBrand::GALLERY_PROJECT], + OtterpohlBrandSeeder::FORMER_TITLE_IMAGE => ['caption' => OtterpohlBrandSeeder::FORMER_TITLE_CAPTION, 'category' => CmsBrand::GALLERY_COMPANY], + 'marken/otterpohl/werkstatt-02.webp' => ['caption' => 'CNC-Bearbeitungszentrum in der Fertigung', 'category' => CmsBrand::GALLERY_COMPANY], + 'marken/otterpohl/werkstatt-03.webp' => ['caption' => 'Einbau einer Tür vor Ort', 'category' => CmsBrand::GALLERY_COMPANY], + 'marken/otterpohl/werkstatt-04.webp' => ['caption' => 'Handwerkzeug in der Werkstatt', 'category' => CmsBrand::GALLERY_COMPANY], + 'marken/otterpohl/werkstatt-05-lift.webp' => ['caption' => 'Anlieferung per Möbellift – Montage inklusive', 'category' => CmsBrand::GALLERY_COMPANY], + ], + ], + ]; + + public function run(): void + { + foreach (self::IMAGES as $slug => $data) { + $brand = CmsBrand::query()->where('slug', $slug)->first(); + + if (! $brand) { + $this->command?->warn("Marke „{$slug}“ nicht gefunden – übersprungen."); + + continue; + } + + $titleSet = false; + + if (trim((string) $brand->image) === '') { + $brand->image = $data['image']; + $titleSet = true; + } + + $gallery = CmsBrand::normalizeGallery($brand->gallery); + $known = array_column($gallery, 'image'); + $added = 0; + + foreach ($data['gallery'] as $image => $entry) { + if (in_array($image, $known, true)) { + continue; + } + + $gallery[] = [ + 'image' => $image, + 'category' => is_array($entry) ? $entry['category'] : CmsBrand::GALLERY_INSPIRATION, + 'caption' => is_array($entry) ? $entry['caption'] : $entry, + ]; + $added++; + } + + $brand->gallery = $gallery; + $brand->save(); + + $this->command?->info(sprintf( + 'Marke „%s“: Titelbild %s, %d Galeriebilder ergänzt, %d vorhanden.', + $slug, + $titleSet ? 'gesetzt' : 'behalten', + $added, + count($gallery) - $added, + )); + } + } +} diff --git a/database/seeders/BrandLogoSeeder.php b/database/seeders/BrandLogoSeeder.php new file mode 100644 index 00000000..a6ba59af --- /dev/null +++ b/database/seeders/BrandLogoSeeder.php @@ -0,0 +1,72 @@ + */ + private const LOGOS = [ + 'cabinet' => 'marken/cabinet.svg', + 'rotpunkt' => 'marken/rotpunkt.svg', + 'februe' => 'marken/februe.png', + 'tischlerei' => 'marken/otterpohl.png', + ]; + + public function run(): void + { + $set = 0; + $kept = 0; + + foreach (self::LOGOS as $slug => $logo) { + $brand = CmsBrand::query()->where('slug', $slug)->first(); + + if (! $brand) { + $this->command?->warn("Marke „{$slug}“ nicht gefunden – uebersprungen."); + + continue; + } + + if (trim((string) $brand->logo) !== '') { + $kept++; + + continue; + } + + $brand->logo = $logo; + $brand->save(); + $set++; + } + + $this->command?->info("Markenlogos gesetzt: {$set}, vorhandene behalten: {$kept}."); + } +} diff --git a/database/seeders/BrandOriginSeeder.php b/database/seeders/BrandOriginSeeder.php new file mode 100644 index 00000000..5898e157 --- /dev/null +++ b/database/seeders/BrandOriginSeeder.php @@ -0,0 +1,87 @@ +, origin_distance: array, origin_role: array}> */ + private const ORIGINS = [ + 'cabinet' => [ + 'origin_city' => ['de' => 'Köln', 'en' => 'Cologne'], + 'origin_distance' => ['de' => 'rund 200 km', 'en' => 'about 200 km'], + 'origin_role' => [ + 'de' => 'Gefertigt in der Kölner Manufaktur, beraten und geplant im CABINET Store Bielefeld.', + 'en' => 'Made in the Cologne manufactory, advised and planned at the CABINET Store Bielefeld.', + ], + ], + 'rotpunkt' => [ + 'origin_city' => ['de' => 'Bünde', 'en' => 'Bünde'], + 'origin_distance' => ['de' => 'rund 30 km', 'en' => 'about 30 km'], + 'origin_role' => [ + 'de' => 'Küchen aus eigener Fertigung in Bünde – geplant bei uns im Küchenstudio.', + 'en' => 'Kitchens from their own production in Bünde – planned with us in the kitchen studio.', + ], + ], + 'februe' => [ + 'origin_city' => ['de' => 'Herford', 'en' => 'Herford'], + 'origin_distance' => ['de' => 'rund 20 km', 'en' => 'about 20 km'], + 'origin_role' => [ + 'de' => 'Büro- und Objektmöbel aus eigener Fertigung in Herford.', + 'en' => 'Office and contract furniture from their own production in Herford.', + ], + ], + 'tischlerei' => [ + 'origin_city' => ['de' => 'Rheda-Wiedenbrück', 'en' => 'Rheda-Wiedenbrück'], + 'origin_distance' => ['de' => 'rund 35 km', 'en' => 'about 35 km'], + 'origin_role' => [ + 'de' => 'Tischlerei und Innenausbau aus Rheda-Wiedenbrück – vom einzelnen Möbel bis zum ganzen Raum, inklusive Montage.', + 'en' => 'Joinery and interior fit-out from Rheda-Wiedenbrück – from a single piece to the whole room, installation included.', + ], + ], + ]; + + public function run(): void + { + $set = 0; + $kept = 0; + + foreach (self::ORIGINS as $slug => $origin) { + $brand = CmsBrand::query()->where('slug', $slug)->first(); + + if (! $brand) { + $this->command?->warn("Marke „{$slug}“ nicht gefunden – übersprungen."); + + continue; + } + + if (trim((string) $brand->getTranslation('origin_city', 'de', false)) !== '') { + $kept++; + + continue; + } + + $brand->fill($origin); + $brand->save(); + $set++; + } + + $this->command?->info("Fertigungsorte gesetzt: {$set}, vorhandene behalten: {$kept}."); + } +} diff --git a/database/seeders/BrandPageTextSeeder.php b/database/seeders/BrandPageTextSeeder.php new file mode 100644 index 00000000..59b17b3b --- /dev/null +++ b/database/seeders/BrandPageTextSeeder.php @@ -0,0 +1,438 @@ +pages() as $slug => $data) { + $brand = CmsBrand::query()->where('slug', $slug)->first(); + + if (! $brand) { + $this->command?->warn("Marke „{$slug}“ nicht gefunden – übersprungen."); + + continue; + } + + foreach (self::FIELDS as $field) { + if (array_key_exists($field, $data)) { + $brand->{$field} = $data[$field]; + } + } + + $brand->save(); + $updated++; + + $this->command?->info("Markenseite „{$slug}“: ".count($data['sections'] ?? []).' Abschnitte übernommen.'); + } + + $this->command?->info("Markenseiten aktualisiert: {$updated}."); + } + + /** + * @return array> + */ + private function pages(): array + { + return [ + 'cabinet' => [ + 'widget_label' => ['de' => 'Persönliche Schrankplanung vereinbaren', 'en' => 'Arrange a personal wardrobe consultation'], + 'description' => [ + 'de' => '

Ein Schrank ist selten der Grund, warum jemand ein Zuhause liebt. Er ist aber sehr oft der Grund, warum ein Raum funktioniert – oder eben nicht. Und Hand aufs Herz: Die schönste Dachschräge nützt wenig, wenn darunter seit dem Einzug drei Kartons stehen, für die nie ein Platz gefunden wurde.

' + .'

CABINET plant Einbauschränke, die sich dem Raum anpassen statt umgekehrt: von Wand zu Wand, vom Boden bis zur Decke, um die Schräge herum und am Heizkörper vorbei.

' + .'

Unsere Aufgabe ist es, herauszufinden, was genau dieser eine Raum leisten muss. Bei uns in der Bielefelder Rathausstraße entsteht daraus nicht einfach ein Schrank, sondern eine Lösung, die den vorhandenen Platz vollständig nutzt.

', + 'en' => '

A wardrobe is rarely the reason someone loves a home. It is very often the reason a room works – or does not.

', + ], + 'cta_title' => ['de' => 'Ihr Raum. Persönlich geplant.', 'en' => 'Your room. Personally planned.'], + 'cta_text' => [ + 'de' => 'Jeder Raum hat seine Ecken, Schrägen und Eigenheiten. Gemeinsam planen wir eine CABINET-Lösung, die genau dort hineinpasst, im Alltag funktioniert und den vorhandenen Platz vollständig nutzt. Persönlich geplant bei B2in in der Rathausstraße 11 in Bielefeld.', + 'en' => 'Every room has its corners, slopes and quirks. Together we plan a CABINET solution that fits exactly, works day to day and uses the available space completely.', + ], + 'sections' => [ + [ + 'title' => 'Millimeter statt Standardmaß', + 'paragraphs' => [ + 'Schränke von der Stange sind für den durchschnittlichen Raum gemacht. Nur wohnt niemand im durchschnittlichen Raum. Es gibt die Schräge, den Mauervorsprung, das Fenster an der ungünstigen Stelle und den Heizkörper, den niemand versetzen möchte.', + 'CABINET plant jedes Element für seinen Platz. Der Schrank endet damit nicht dort, wo das Raster aufhört, sondern dort, wo der Raum aufhört. Was sonst als schwer nutzbare Restfläche übrig bleibt, wird zu Stauraum.', + ], + 'detail' => [ + 'title' => 'Wo Standardlösungen an ihre Grenzen stoßen', + 'paragraphs' => [ + 'Planbar sind beispielsweise Schränke unter Dachschrägen, raumhohe Fronten bis unter die Decke, passgenaue Nischenlösungen zwischen zwei Wänden, Übergänge zu vorhandenen Möbeln sowie Aussparungen für Fensterbänke, Vorsprünge und Installationen.', + 'Auch der Sockel, die Fußleiste und der Abschluss zur Decke gehören zur Planung. Genau an diesen Übergängen entscheidet sich, ob ein Schrank wie ein Möbelstück vor der Wand wirkt oder wie ein selbstverständlicher Teil des Raumes.', + ], + ], + ], + [ + 'title' => 'Ein Bild und ein grobes Maß reichen für den Anfang', + 'paragraphs' => [ + 'Am Anfang reicht das grobe Maß. Am Ende entscheidet der Millimeter.', + 'Sie müssen also nicht erst alles millimetergenau ausmessen, bevor Sie zu uns kommen. Ein paar Fotos, ein Grundriss und die ungefähren Maße reichen, damit wir Sie beraten, planen und Ihnen ein konkretes Angebot erstellen können.', + 'Danach gehen wir gemeinsam ins Detail: Aufteilung, Ausstattung, Materialien, Farben und natürlich der Preis.', + 'Wenn Sie das Angebot annehmen und die Anzahlung erfolgt ist, übernehmen wir das professionelle Aufmaß bei Ihnen vor Ort. Ab jetzt zählt jeder Millimeter: Auf Grundlage dieser Maße machen wir die Feinplanung fertig, geben die Fertigung frei und bestellen Ihren Schrank.', + ], + 'claim' => 'So läuft’s: Foto / Grundriss + grobe Maße → Beratung → Planung & Angebot → Angebotsannahme → Anzahlung → professionelles Aufmaß → Feinplanung / Fertigungsfreigabe → Bestellung / Fertigung', + ], + [ + 'title' => 'Innen entscheidet sich, ob ein Schrank funktioniert', + 'paragraphs' => [ + 'Eine schöne Front ist schnell ausgesucht. Ob ein Schrank im Alltag trägt, entscheidet sich dahinter: bei Einteilung, Auszügen, Fachhöhen, Beleuchtung und der Frage, was in welcher Höhe erreichbar sein muss.', + 'Wir planen die Innenausstattung deshalb nicht nach Katalogseite, sondern nach dem, was tatsächlich untergebracht werden soll.', + ], + 'detail' => [ + 'title' => 'Die Fragen, die wir vorher stellen', + 'paragraphs' => [ + 'Wie viel Hängefläche wird wirklich gebraucht und wie viel Fachboden? Wo sollen Schuhe, Koffer, Bettwäsche, Sportsachen oder Weihnachtsdeko hin? Wer nutzt den Schrank – und wie groß ist diese Person?', + 'Auch die Dinge, die man nicht jeden Tag braucht, gehören in die Planung: Wäschekörbe, Bügelbrett, Staubsauger, Karnevalskostüme oder besondere Sportsachen. Wenn wir vorher wissen, was untergebracht werden soll, können wir den Platz direkt sinnvoll dafür einplanen.', + ], + ], + ], + [ + 'title' => 'Fronten, die zum Raum gehören', + 'paragraphs' => [ + 'Ein Einbauschrank kann bewusst auffallen oder nahezu verschwinden. Fronten in Farbe, Holzoptik, Glas oder Spiegel, mit Griff oder grifflos, verändern die Wirkung eines Raumes erheblich – gerade weil ein raumhoher Schrank eine große Fläche ist.', + 'Wir stimmen Fronten, Griffe und Oberflächen auf die vorhandene Architektur ab: auf Bodenbelag, Türen, Licht und angrenzende Möbel. So entsteht kein Fremdkörper, sondern eine ruhige Fläche, die den Raum größer wirken lässt.', + ], + 'detail' => [ + 'title' => 'Sichtbar oder unsichtbar – beides ist eine Entscheidung', + 'paragraphs' => [ + 'Eine wandfarbene, grifflose Front tritt zurück und lässt den Raum offener wirken. Eine Spiegelfront bringt Licht in schmale Flure und Ankleiden. Eine dunkle Holzfront setzt dagegen bewusst einen gestalterischen Schwerpunkt.', + 'Beides ist richtig – nur eben nicht gleichzeitig. Wir klären deshalb früh, welche Rolle der Schrank im Raum übernehmen soll, bevor wir über Dekore sprechen.', + ], + ], + ], + [ + 'title' => 'Mehr als Schlafzimmer', + 'paragraphs' => [ + 'Maßgefertigter Stauraum ist längst nicht auf die Ankleide beschränkt. Genauso gefragt sind Garderoben im Flur, Hauswirtschaftsräume, Dachgeschosse, Arbeitszimmer, Wohnwände mit Medientechnik und Aktenschränke in Praxen und Kanzleien.', + 'Materialien, Farben und Gestaltungselemente lassen sich über mehrere Räume hinweg aufgreifen. So entsteht nicht in jedem Zimmer eine neue Idee, sondern ein zusammenhängendes Interior-Konzept mit einer gemeinsamen gestalterischen Sprache.', + 'Zusammen mit Rotpunkt Küchen, Febrü und weiteren ausgewählten Partnern betrachten wir bei Bedarf den gesamten Innenraum: CABINET übernimmt die millimetergenaue Sonderlösung, Rotpunkt die Küche und Febrü die Arbeitswelt.', + ], + 'claim' => 'CABINET für den Millimeter. B2in für das Ganze.', + ], + [ + 'title' => 'Warum CABINET bei uns?', + 'paragraphs' => [ + 'Bei uns beginnt eine Planung nicht mit einem Prospekt, sondern mit Ihrem Raum und der Frage, wie Sie darin leben möchten. Erst danach sprechen wir über Fronten, Auszüge und Beschläge.', + 'Wir planen Stauraum, Wege, Licht, Materialien und angrenzende Wohnbereiche als zusammenhängendes Konzept – und begleiten den gesamten Weg von der ersten Idee über das Aufmaß bis zur fertigen Montage.', + 'Dabei planen wir nicht für den nächsten schnellen Verkauf, sondern für eine möglichst lange und zufriedene Nutzung. Ein Schrank, der zu viel kann, aber nicht gebraucht wird, ist keine gute Lösung – nur eine teure.', + ], + ], + [ + 'title' => 'Erleben statt nur beschreiben', + 'paragraphs' => [ + 'Oberflächen, Beschläge und Auszüge lassen sich schlecht beschreiben und gut ausprobieren. In unserem Showroom in Bielefeld können Sie Fronten anfassen, Auszüge öffnen, Innenausstattungen vergleichen und die Unterschiede selbst beurteilen.', + 'Sie müssen sich also nicht allein auf unser Verkaufsgespräch verlassen, sondern entscheiden auf Grundlage dessen, was Sie tatsächlich gesehen und angefasst haben.', + ], + ], + ], + ], + 'rotpunkt' => [ + 'tagline' => ['de' => 'Küchen, die Haltung zeigen.', 'en' => 'Kitchens with character.'], + 'widget_label' => ['de' => 'Persönliche Küchenberatung vereinbaren', 'en' => 'Arrange a personal kitchen consultation'], + 'description' => [ + 'de' => '

Eine Küche ist weit mehr als ein funktionaler Raum. Sie ist Treffpunkt, Arbeitsplatz und Mittelpunkt des täglichen Lebens. Und Hand aufs Herz: Wo finden die besten Gespräche statt – und wo enden die meisten Partys? Meistens in der Küche.

' + .'

Rotpunkt verbindet außergewöhnliche Gestaltungsfreiheit, intelligente Stauraumlösungen und durchdachte Materiallösungen zu Küchen, die nicht nur gut aussehen, sondern dauerhaft zum Leben ihrer Besitzer passen.

' + .'

Unsere Aufgabe ist es, genau herauszuarbeiten, welche Lösung zu Ihnen, Ihrem Alltag und Ihren persönlichen Vorstellungen passt. Bei uns in der Bielefelder Rathausstraße entsteht daraus nicht einfach nur eine Küche. Auf Wunsch denken wir das ganze Zuhause mit und ergänzen es bei Bedarf bis ins Detail handwerklich.

', + 'en' => '

A kitchen is far more than a functional room. It is a meeting place, a workspace and the centre of daily life.

', + ], + 'cta_title' => ['de' => 'Ihre Küche. Persönlich geplant.', 'en' => 'Your kitchen. Personally planned.'], + 'cta_text' => [ + 'de' => 'Jeder Raum ist anders. Jeder Alltag stellt andere Anforderungen. Gemeinsam entwickeln wir eine Rotpunkt-Küche, die gestalterisch überzeugt, im Alltag funktioniert und dauerhaft zu Ihnen passt. Persönlich geplant bei B2in in der Rathausstraße 11 in Bielefeld.', + 'en' => 'Every room is different. Together we develop a Rotpunkt kitchen that convinces in design, works day to day and suits you for the long run.', + ], + 'sections' => [ + [ + 'title' => 'Aus Ostwestfalen. Für Ihr Zuhause.', + 'paragraphs' => [ + 'Rotpunkt entwickelt und fertigt seit 1930 hochwertige Küchenmöbel an den ostwestfälischen Standorten Bünde und Preußisch Oldendorf-Getmold.', + 'Regionale Fertigung, jahrzehntelange Erfahrung und die unmittelbare Nähe zum Hersteller sind für uns keine romantischen Randnotizen, sondern die Grundlage für verlässliche Qualität und persönliche Küchenplanung.', + ], + ], + [ + 'title' => 'Gestaltungsfreiheit bis ins Detail', + 'paragraphs' => [ + 'Rotpunkt bietet eine außergewöhnliche Vielfalt an Fronten, Farben, Materialien, Korpusdekoren, Arbeitsplatten, Griffvarianten und grifflosen Lösungen. Mehr als 20 beidseitig ausgeführte Korpusfarben sorgen dafür, dass eine Küche nicht nur außen, sondern auch innen konsequent gestaltet werden kann.', + 'So planen wir keinen vorgegebenen Küchenblock, sondern eine Lösung, die sich an Raum, Architektur und den tatsächlichen Gewohnheiten ihrer Besitzer orientiert.', + ], + 'detail' => [ + 'title' => 'FENIX und authentische Holzoptiken', + 'paragraphs' => [ + 'FENIX ist eine besonders matte Oberfläche mit geringer Lichtreflexion, angenehm weicher Haptik und ausgeprägten Anti-Fingerprint-Eigenschaften. Oberflächliche Mikrokratzer können thermisch behandelt werden. 27 aufeinander abgestimmte Farben eröffnen eine breite Gestaltungsvielfalt.', + 'Auch bei ausgewählten Fronten in Holzoptik zeigt sich die Liebe zum Detail. Synchronporen-Dekore stimmen sichtbare Maserung und fühlbare Struktur präzise aufeinander ab. Dadurch entsteht bereits bei pflegeleichten Melamin-Holzreproduktionen eine natürliche Wirkung.', + 'Durch eine sorgfältige Planung kann die Holzoptik über mehrere Fronten hinweggeführt werden. Das Ergebnis ist ein ruhiges, zusammenhängendes Frontbild – ohne dass dafür zwingend Echtholz eingesetzt werden muss.', + ], + ], + ], + [ + 'title' => 'Mehr Raum. Mehr Ergonomie. Mehr Küche.', + 'paragraphs' => [ + 'Besonders hohe Unterschränke, niedrige Sockelhöhen und zusätzliche Schrankbreiten schaffen mehr nutzbaren Stauraum und eröffnen neue planerische Möglichkeiten. Klingt nach Kleinkram? Vielleicht. Im täglichen Gebrauch macht genau dieser Kleinkram einen erstaunlich großen Unterschied.', + ], + 'detail' => [ + 'title' => 'NEW DIMENSIONS', + 'paragraphs' => [ + 'Mit dem Maßkonzept NEW DIMENSIONS sind beispielsweise Unterschrankhöhen von bis zu 910 Millimetern in Verbindung mit einem nur 50 Millimeter hohen Sockel möglich.', + 'Zusätzliche Schrankbreiten und vielfältige Innenausstattungen helfen uns, den vorhandenen Raum konsequent und ergonomisch zu nutzen. Die Küche wirkt dadurch nicht nur großzügiger – sie ist es tatsächlich.', + ], + ], + ], + [ + 'title' => 'Nachhaltigkeit mit konkreter Substanz', + 'paragraphs' => [ + 'Nachhaltigkeit braucht keine großen Versprechen, sondern nachvollziehbare Fakten. Greenline steht bei Rotpunkt für konkrete Materialien, Zertifizierungen und messbare Unterschiede. Deshalb legen wir offen, welche Materialien Rotpunkt verwendet, welche Zertifizierungen dahinterstehen und welchen konkreten Unterschied Greenline für Umwelt und Raumklima macht.', + 'Die Greenline BioBoard Gen2 besteht aus bis zu 90 Prozent recyceltem Holz. 95 Prozent des Rotpunkt-Küchensortiments sind FSC-zertifiziert. Außerdem sind die Produkte nach JIS F4Star hinsichtlich ihrer Formaldehydemissionen zertifiziert.', + 'Sie haben bereits eine vergleichbare Küche im Blick, die beim Thema Nachhaltigkeit mehr verspricht? Bringen Sie die Unterlagen gerne mit. Wir schauen gemeinsam genau hin – ehrlich, nachvollziehbar und ohne Verkaufsnebel.', + ], + 'detail' => [ + 'title' => 'Zahlen, Zertifizierungen und Raumklima', + 'paragraphs' => [ + // ⚠️ Waldflächen-Aussage: laut Zulieferung nur mit ausdrücklicher Herstellerbestätigung + // veröffentlichen. Steht als Punkt in der Deployment-Checkliste. + 'Nach Angaben von Rotpunkt bleibt durch den Einsatz der Greenline-Spanplatten jährlich eine Waldfläche von ungefähr 50 Fußballfeldern erhalten.', + 'Die Greenline BioBoard Gen2 gibt laut Rotpunkt rund 50 Prozent weniger Formaldehyd an die Raumluft ab als herkömmliche Produkte. Das ist insbesondere für ein möglichst gesundes Raumklima relevant.', + 'Die FSC-Zertifizierung wird unter der Kennung FSC C131864 geführt. Entscheidend ist für uns nicht das grüne Etikett, sondern die konkrete und überprüfbare Aussage dahinter.', + ], + ], + ], + [ + 'title' => 'Mehr als Küchen', + 'paragraphs' => [ + 'Die Möglichkeiten von Rotpunkt enden nicht bei der klassischen Küche. Das Möbel- und Planungssystem lässt sich auch für Hauswirtschaftsräume, Badezimmer, Sideboards, Wohnmöbel und weitere Bereiche rund um das Wohnen einsetzen.', + 'Materialien, Farben und Gestaltungselemente können dabei über mehrere Räume hinweg aufgegriffen werden. So entsteht ein stimmiges Gesamtbild, statt in jedem Raum wieder ganz von vorne anzufangen.', + 'Bei Bedarf denken wir den Innenraum deshalb auch über die Küche hinaus – von Möbeln und Beleuchtung bis zu Tapeten, Fußböden und, wenn es sein soll, der letzten Blume.', + ], + ], + [ + 'title' => 'Warum eine Rotpunkt-Küche bei uns?', + 'paragraphs' => [ + 'Bei uns beginnt eine neue Küche nicht mit einem Prospekt, sondern mit Ihrem Raum und der Frage, wie Sie darin leben möchten.', + 'Arbeitsabläufe, Ergonomie, Stauraum, Materialien, Beleuchtung, Geräte und angrenzende Wohnbereiche planen wir als zusammenhängendes Konzept. Auch die Partystellplätze wollen wohlüberlegt sein – also jene Orte, an denen Gäste später stehen, sitzen, reden und vielleicht etwas länger bleiben.', + 'Wir stellen nicht einfach möglichst viele Produkte zusammen. Wir entwickeln eine Küche, die gestalterisch, funktional und wirtschaftlich überzeugt – und begleiten den gesamten Weg von der ersten Idee bis zur professionellen Montage.', + 'Dabei planen wir nicht für den nächsten schnellen Verkauf, sondern für eine möglichst lange und zufriedene Nutzung. Das ist kurzfristig vielleicht nicht immer die wirtschaftlichste Entscheidung für uns. Für eine ehrliche und dauerhafte Kundenbeziehung ist es die einzig richtige.', + ], + ], + [ + 'title' => 'Erleben statt nur erzählen', + 'paragraphs' => [ + 'Eine gute Entscheidung entsteht nicht allein am Planungstisch. Auf Wunsch – und manchmal auch mit etwas freundlicher Überzeugungsarbeit – begleiten wir Sie nach Abstimmung in das nahe Rotpunkt-Werk oder in ausgewählte Ausstellungen der Gerätehersteller.', + 'Dort können Sie Materialien, Fertigung und Technik selbst erleben, Geräte ausprobieren und Fragen direkt vor Ort stellen. Sie müssen sich also nicht allein auf unser Verkaufsgespräch verlassen, sondern erhalten Informationen aus erster Hand, können vergleichen und anschließend mit einem sicheren Gefühl entscheiden.', + 'Wir begleiten Sie dabei, ordnen die unterschiedlichen Möglichkeiten ein und führen Ihre Entscheidungen zu einem stimmigen Gesamtkonzept zusammen.', + ], + ], + ], + ], + 'februe' => [ + 'tagline' => ['de' => 'Arbeiten, wo man gerne bleibt.', 'en' => 'Work where people like to stay.'], + 'widget_label' => ['de' => 'Persönliche Arbeitsplatzberatung vereinbaren', 'en' => 'Arrange a personal workspace consultation'], + 'description' => [ + 'de' => '

Ein Büro ist kein Parkplatz für Schreibtische. Es ist ein Raum für Konzentration, Austausch, Bewegung und neue Ideen. Und manchmal entsteht die beste Idee eben nicht am Schreibtisch, sondern zwischen Kaffeemaschine, Lounge und einem guten Gespräch.

' + .'

Febrü verbindet ergonomische Arbeitsplätze mit wohnlichem Design, intelligentem Stauraum, durchdachter Akustik und flexiblen Raumstrukturen.

' + .'

Wir entwickeln daraus Arbeitswelten, die zu den Menschen, ihren Aufgaben und ihrer Umgebung passen – vom einzelnen Homeoffice bis zur vollständigen Unternehmensfläche.

', + 'en' => '

An office is not a car park for desks. It is a space for concentration, exchange, movement and new ideas.

', + ], + 'cta_title' => ['de' => 'Ihr Arbeitsplatz. Persönlich geplant.', 'en' => 'Your workspace. Personally planned.'], + 'cta_text' => [ + 'de' => 'Ob Homeoffice, Praxis, Kanzlei, wachsendes Unternehmen oder vollständige Arbeitswelt: Wir planen jeden Arbeitsplatz mit demselben Anspruch. Nur der Umfang verändert sich. Gemeinsam entwickeln wir eine Arbeitsumgebung, die gesundes Arbeiten unterstützt, gestalterisch überzeugt und den Menschen zeigt, dass ihre tägliche Leistung wahrgenommen und wertgeschätzt wird – persönlich geplant bei B2in in der Rathausstraße 11 in Bielefeld.', + 'en' => 'Whether a home office, a practice, a law firm or a complete working environment: we plan every workspace to the same standard. Only the scope changes.', + ], + 'sections' => [ + [ + 'title' => 'Zuhause oder Projekt. Zwei Wege. Derselbe Anspruch.', + 'paragraphs' => [ + 'Unsere Startseite führt bewusst über zwei Wege: Zuhause und Projekt. Denn ein einzelnes Homeoffice stellt andere Anforderungen als eine Büroetage mit fünfzig Arbeitsplätzen.', + 'Unterschiedliche Aufgaben brauchen unterschiedliche Planung und natürlich auch unterschiedliche Kalkulationen. Bei uns gibt es trotzdem nur Kunden – mit unterschiedlichen Räumen, Anforderungen und Stückzahlen. Der Anspruch an Produkt, Beratung und Service bleibt derselbe.', + ], + 'detail' => [ + 'title' => 'Bei uns gibt es Kunden – keine Schubladen', + 'paragraphs' => [ + 'Ob Privatkunde oder Unternehmen: Für uns gibt es zunächst einmal Kunden mit unterschiedlichen Räumen, Anforderungen und Stückzahlen.', + 'Natürlich beeinflusst die Menge den Preis. Fünfzig Arbeitsplätze werden anders kalkuliert als ein einzelner Schreibtisch fürs Homeoffice. Der Anspruch an Produkt, Beratung und Service bleibt trotzdem derselbe.', + 'Febrü bleibt Febrü. B2in bleibt B2in. Und jeder Kunde erhält eine Lösung, die zu seinem tatsächlichen Bedarf passt.', + ], + ], + 'claim' => 'Ob im Kleinen oder im Großen – die Detailtreue entscheidet.', + ], + [ + 'title' => 'Aus Herford. Für moderne Arbeitswelten.', + 'paragraphs' => [ + 'Febrü entwickelt und produziert hochwertige Büromöbel direkt im ostwestfälischen Herford – nur wenige Kilometer von Bielefeld entfernt. Eine sehr hohe Fertigungstiefe ermöglicht kurze Wege, verlässliche Qualität und hohe Flexibilität bei Materialien, Farben und individuellen Anforderungen.', + ], + 'detail' => [ + 'title' => 'Von einem Schreibtisch bis zum vollständigen Bürotrakt', + 'paragraphs' => [ + 'Das Sortiment reicht von ergonomischen und höhenverstellbaren Schreibtischen über Konferenz- und Besprechungstische, Bürostühle und Loungeelemente bis zu Empfangslösungen, Stauraum, Akustikelementen, mobilen Medienmöbeln, Schließfachsystemen und flexiblen Raumstrukturen.', + 'Damit lässt sich ein einzelner Arbeitsplatz genauso überzeugend planen wie eine Praxis, eine Kanzlei, ein Konferenzbereich oder ein vollständiger Bürotrakt.', + ], + ], + 'claim' => 'Made in Herford. Geplant in Bielefeld.', + ], + [ + 'title' => 'Nicht drei Marken. Ein durchgängiger Raum.', + 'paragraphs' => [ + 'Ein Bürotrakt endet nicht am Schreibtisch. Menschen brauchen Orte zum Arbeiten, für Besprechungen und Rückzug – aber ebenso für Pausen, den gemeinsamen Kaffee, das Mittagessen und den informellen Austausch.', + 'Genau hier greifen Febrü, Rotpunkt und CABINET bei uns ineinander: Febrü gestaltet die Arbeitswelt, Rotpunkt die Küche im Bürotrakt und CABINET die millimetergenaue Sonderlösung.', + 'Entscheidend ist nicht, welcher Hersteller welches Möbel liefert. Entscheidend ist, dass am Ende alles zusammengehört. Wir stimmen Arbeitsplätze, Küche, Stauraum, Farben, Materialien, Beleuchtung und Akustik zu einem durchgängigen Konzept aufeinander ab.', + ], + 'detail' => [ + 'title' => 'Wie die drei Marken zusammenspielen', + 'paragraphs' => [ + 'Febrü gestaltet ergonomische Arbeitsplätze, Konferenzbereiche, Loungezonen, Akustik, Stauraum und flexible Raumstrukturen.', + 'Rotpunkt gestaltet Mitarbeiterküchen, Coffee-Points und gemeinsam genutzte Aufenthaltsküchen als selbstverständlichen Bestandteil der Arbeitswelt – und nicht als übrig gebliebene Funktionszeile. Gerade hier entstehen oft Gespräche, Verbindungen und Ideen, für die im offiziellen Meeting kein Platz war.', + 'CABINET übernimmt dort, wo Nischen vollständig genutzt, Schränke von Wand zu Wand und vom Boden bis zur Decke geplant oder besondere Übergänge zwischen Arbeitsplatz, Stauraum und Architektur geschaffen werden sollen. So entstehen beispielsweise maßgefertigte Garderoben, Aktenschränke, Medienlösungen und Stauraumelemente.', + ], + ], + 'claim' => 'Febrü für die Arbeitswelt. Rotpunkt für die Küche. CABINET für die millimetergenaue Sonderlösung. B2in für das Ganze.', + ], + [ + 'title' => 'Ein Arbeitsplatz. Fünfzig Arbeitsplätze. Ein Anspruch.', + 'paragraphs' => [ + 'Ob wir über einen einzelnen Arbeitsplatz oder einen vollständigen Bürotrakt sprechen: Das grundsätzliche Problem bleibt dasselbe. Fühlt sich der Mensch, der dort täglich arbeitet, gesehen und wertgeschätzt – oder wurde ihm lediglich irgendwo ein Tisch hingestellt?', + 'Die Stückzahl verändert den Umfang der Aufgabe, aber nicht ihre Bedeutung. Wir bewerten einen Arbeitsplatz deshalb nicht nach Quadratmetern oder Auftragswert, sondern danach, was er für den Menschen leisten muss.', + ], + 'detail' => [ + 'title' => 'Wertschätzung ist keine Frage der Stückzahl', + 'paragraphs' => [ + 'Gerade in Zeiten des Fachkräftemangels können Unternehmen es sich nicht leisten, Arbeitsbedingungen als Nebensache zu behandeln. Wer Top-Leistung erwartet, muss die passenden Voraussetzungen schaffen. Ein Obstkorb und kostenloses Wasser sind freundlich – ersetzen aber keinen guten Arbeitsplatz.', + 'Besonders deutlich wird das bei Menschen, die Beruf und Familie miteinander organisieren. Teilzeit bedeutet nicht halbe Leistung. Oft wird in einem kürzeren Zeitfenster hoch konzentriert gearbeitet, während gleichzeitig Schule, Termine, Betreuung und der ganz normale Familienalltag organisiert werden müssen.', + 'Gerade hier darf der Arbeitsplatz kein Provisorium aus Küchentisch, Beistelltisch oder Schlafzimmerecke sein. Er muss sofort funktionieren, Bewegung ermöglichen, technisch durchdacht sein und sich trotzdem vernünftig in das Zuhause einfügen. Für den Menschen, der ihn täglich nutzt, ist ein einzelner Arbeitsplatz keine kleine Lösung. Er ist seine vollständige Arbeitswelt.', + ], + ], + ], + [ + 'title' => 'Ergonomie, die im Alltag funktioniert', + 'paragraphs' => [ + 'Ein Arbeitsplatz muss sich dem Menschen anpassen – nicht umgekehrt. Höhenverstellbare Schreibtische und ergonomische Bürostühle schaffen Bewegung und unterstützen eine gesunde Haltung.', + 'Ergonomie endet aber nicht bei Tisch und Stuhl. Auch Laufwege, Greifräume, Bildschirmposition, Beleuchtung, Stauraum und der Wechsel zwischen Tätigkeiten bestimmen, wie angenehm und produktiv ein Arbeitstag verläuft.', + ], + 'detail' => [ + 'title' => 'Und nein: Wir meinen nicht nur den Weg zur Kaffeemaschine', + 'paragraphs' => [ + 'Sinnvolle Laufwege sind Teil einer guten Planung – auch wenn Kaffeemaschine und Kühlschrank zweifellos eine gewisse Bedeutung für den Arbeitsalltag haben.', + 'Das gilt für vier Stunden ebenso wie für zehn Stunden am Schreibtisch, im Unternehmen genauso wie im privaten Zuhause. Und natürlich müssen die Möbel gestalterisch zum Raum passen. Wer denkt: „Das sieht doch keiner – außer den Mitarbeitern“, hat den ersten entscheidenden Fehler bereits gemacht. Die Mitarbeiter sehen es. Jeden Tag. Und sie arbeiten darin.', + ], + ], + 'quote' => 'Ich bin, sagen wir, alt genug, um beim Aufstehen gelegentlich zu stöhnen. Und ehrlich gesagt fühle ich mich an manchen Tagen noch etwas älter. Mein Arzt sagt, ich solle weniger sitzen. Mein Beruf findet nun einmal zu einem großen Teil am Computer statt. Ergo brauche ich eine Lösung, die mir mehr Bewegung ermöglicht, ohne dass ich dafür meinen Beruf wechseln muss.', + 'quote_author' => 'Marcel Scheibe, Geschäftsführer von B2in', + ], + [ + 'title' => 'Office meets Interior', + 'paragraphs' => [ + 'Identische Schreibtischreihen werden einem modernen Arbeitstag nicht mehr gerecht. Menschen benötigen Bereiche für Konzentration, spontane Gespräche, Teamarbeit, Videokonferenzen, vertrauliche Besprechungen und erholsame Pausen.', + 'Febrü verbindet dafür klassische Arbeitsplatzmöbel mit wohnlichen Loungeelementen, mobilen Multifunktionslösungen, Stauraum, Akustik und flexibler Raumzonierung. So entsteht nicht für jede Person derselbe Platz, sondern für jede Tätigkeit der richtige.', + ], + 'detail' => [ + 'title' => 'Das Wir und das Ich', + 'paragraphs' => [ + 'Ja, ja – das könnte man unter dem üblichen Verkaufs-Blabla abheften. Dahinter steht aber eine einfache Wahrheit: Verantwortung lässt sich nicht dauerhaft nach außen delegieren. Was bleibt, sind das Wir und das Ich.', + 'Ein Unternehmen muss Bedingungen schaffen, unter denen Menschen gemeinsam gut arbeiten, sich austauschen und konzentrieren können. Der Einzelne erhält die Möglichkeit – und trägt auch die Verantwortung –, daraus das Beste zu machen.', + 'Räume und Möbel schaffen allein noch keine gute Unternehmenskultur. Schlechte Arbeitsbedingungen können eine gute Kultur aber jeden Tag unnötig erschweren.', + ], + ], + 'claim' => 'Das Unternehmen stärkt das Wir. Der Einzelne macht daraus das Beste.', + ], + [ + 'title' => 'Ruhe und Flexibilität sind planbar', + 'paragraphs' => [ + 'Akustik, mobile Elemente und flexible Raumlösungen helfen dabei, Bereiche für Kommunikation, Konzentration und Rückzug zu schaffen – und sie später an veränderte Teams und Arbeitsweisen anzupassen.', + ], + 'detail' => [ + 'title' => 'Akustik und flexible Raumstrukturen', + 'paragraphs' => [ + 'Hallende Räume, Telefongespräche und Videokonferenzen können Konzentration und Sprachverständlichkeit erheblich beeinträchtigen. Akustikpaneele, Trennwände, Screens und entsprechend geplante Möbel helfen, Schall zu reduzieren.', + 'Mit modularen Möbeln und Raum-in-Raum-Lösungen lassen sich Arbeitsbereiche neu ordnen, ohne bei jeder Veränderung gleich feste Wände bauen zu müssen. Das ist im großen Büro wichtig – und im privaten Zuhause häufig noch wichtiger.', + ], + ], + ], + [ + 'title' => 'Gestaltung, die zur Identität passt', + 'paragraphs' => [ + 'Ein Büro ist ein sichtbarer Teil der Unternehmenskultur. Farben, Materialien und Raumwirkung beeinflussen, wie Mitarbeitende, Kunden und Bewerber ein Unternehmen wahrnehmen. Im Homeoffice muss der Arbeitsplatz professionell funktionieren und sich zugleich in die vorhandene Einrichtung einfügen.', + 'Dank der hohen Fertigungstiefe bietet Febrü eine große Auswahl an Materialien, Dekoren, Stoffen und Gestellfarben. Corporate Design muss nicht am Briefpapier enden. Und ein Homeoffice muss nach Feierabend nicht wie ein kleines Finanzamt aussehen.', + ], + 'detail' => [ + 'title' => 'Und ja: Pflanzen gehören dazu', + 'paragraphs' => [ + 'Eine Pflanze macht aus einem Unternehmen noch kein nachhaltiges Unternehmen. Sie macht aus einem technisch eingerichteten Raum aber häufig erst einen Ort, an dem Menschen gerne arbeiten. Das hat nichts mit Greenwashing zu tun, sondern schlicht mit Atmosphäre und Stil.', + ], + ], + ], + [ + 'title' => 'Nachhaltigkeit, die länger als bis zum nächsten Umzug hält', + 'paragraphs' => [ + 'Nachhaltigkeit beginnt bei der Lebensdauer eines Möbelstücks. Viele Febrü-Möbel sind modular aufgebaut, sodass Komponenten ausgetauscht oder ergänzt werden können, statt bei veränderten Anforderungen das gesamte Möbelstück zu ersetzen.', + ], + 'detail' => [ + 'title' => 'Konkrete Standards statt allgemeiner Versprechen', + 'paragraphs' => [ + 'Febrü produziert mit hoher Fertigungstiefe direkt in Herford. Das sorgt für kurze Wege und kontrollierte Prozesse. Mit laserTEC entstehen hochwertige, fugenlose Kanten ohne zusätzlichen Klebstoff.', + // ⚠️ Blauer Engel gilt laut Zulieferung nur für ausgewählte Tischsysteme und + // Stauraummöbel. Produktbezug beim Redigieren zwingend beibehalten. + 'Febrü arbeitet nach ISO 9001 und ISO 14001 und verfügt über einen PEFC-Produktkettennachweis. Ausgewählte Febrü-Tischsysteme und Stauraummöbel tragen den Blauen Engel.', + 'Nachhaltig ist nicht das Möbelstück mit dem längsten Werbetext. Nachhaltig ist das Möbelstück, das viele Jahre funktioniert und veränderte Anforderungen mitmacht.', + ], + ], + ], + [ + 'title' => 'Warum Febrü bei uns?', + 'paragraphs' => [ + 'Bei uns beginnt eine Planung nicht mit einem Möbelkatalog, sondern mit den Menschen und der Frage, wie tatsächlich gearbeitet wird. Wo ist Konzentration gefragt? Wo entstehen Gespräche? Welche Bereiche benötigen Diskretion? Und wie viel Stauraum wird wirklich gebraucht?', + 'Wir verbinden Ergonomie, Laufwege, Akustik, Stauraum, Beleuchtung, Kommunikation und Rückzug zu einem Gesamtkonzept. Es geht nicht darum, möglichst viele Möbel in einen Raum zu stellen. Es geht darum, eine bessere Arbeitswelt zu schaffen.', + ], + 'detail' => [ + 'title' => 'Im Homeoffice stellen sich andere Fragen', + 'paragraphs' => [ + 'Wie sichtbar darf der Arbeitsplatz sein? Wo verschwinden Technik und Unterlagen nach Feierabend? Und wie lässt sich professionelles Arbeiten so in die vorhandene Einrichtung integrieren, dass das Zuhause ein Zuhause bleibt?', + 'Auch hier gilt: Ein einzelner Arbeitsplatz ist keine kleinere Aufgabe. Er braucht nur eine andere Antwort als ein vollständiger Bürotrakt.', + ], + ], + ], + [ + 'title' => 'Erleben statt nur aus dem Katalog auswählen', + 'paragraphs' => [ + 'Durch die Nähe zwischen Bielefeld und Herford können Febrü-Produkte nach Abstimmung persönlich erlebt werden. Wir organisieren und begleiten den Besuch der Ausstellung – für einen Schreibtisch genauso wie für einen vollständigen Unternehmensstandort.', + 'Dort lassen sich Materialien anfassen, Stühle und Tische ausprobieren, Akustiklösungen erleben und unterschiedliche Arbeitswelten vergleichen. Sie müssen sich nicht allein auf ein Verkaufsgespräch verlassen.', + ], + ], + ], + ], + ]; + } +} diff --git a/database/seeders/BrandTranslationsSeeder.php b/database/seeders/BrandTranslationsSeeder.php new file mode 100644 index 00000000..813e0c2f --- /dev/null +++ b/database/seeders/BrandTranslationsSeeder.php @@ -0,0 +1,61 @@ +> $data */ + $data = json_decode((string) file_get_contents(__DIR__.'/data/brand-translations-en.json'), true, flags: JSON_THROW_ON_ERROR); + $updated = []; + + foreach ($data as $slug => $fields) { + $brand = CmsBrand::query()->where('slug', $slug)->first(); + + if (! $brand) { + continue; + } + + $existing = $brand->field_translations[self::LOCALE] ?? []; + + foreach ($fields as $field => $value) { + if ($field === 'gallery_captions') { + $value = array_merge( + array_intersect_key((array) $value, $brand->localized('gallery_captions', CmsBrand::BASE_LOCALE)), + array_filter((array) ($existing['gallery_captions'] ?? [])), + ); + } elseif (filled($existing[$field] ?? null)) { + continue; + } + + $brand->setLocalized($field, self::LOCALE, $value); + } + + if ($brand->isDirty('field_translations')) { + $brand->save(); + $updated[] = $slug; + } + } + + $this->command?->info($updated === [] + ? 'Marken-Übersetzungen: nichts zu tun.' + : 'Marken-Übersetzungen (en) ergänzt: '.implode(', ', $updated).'.'); + } +} diff --git a/database/seeders/CmsArticleSeeder.php b/database/seeders/CmsArticleSeeder.php index 5ca7bcdd..262322f4 100644 --- a/database/seeders/CmsArticleSeeder.php +++ b/database/seeders/CmsArticleSeeder.php @@ -8,19 +8,6 @@ use Illuminate\Support\Facades\Lang; class CmsArticleSeeder extends Seeder { - /** - * Numerische IDs aus resources/lang/{locale}/b2in.php → Slugs für cms_articles.slug - * - * @var array - */ - private const ARTICLE_ID_TO_SLUG = [ - 1 => 'escrow-system-dubai-investoren', - 2 => 'spotlight-al-jaddaf-hotspot', - 3 => 'turnkey-investments-moeblierung-rendite', - 4 => 'supply-chain-management-vertragssicherheit', - 5 => 'local-for-local-regionaler-moebelhandel', - ]; - public function run(): void { foreach ($this->getArticles() as $i => $data) { @@ -49,19 +36,28 @@ class CmsArticleSeeder extends Seeder $articlesEn = []; } - ksort($articlesDe); - + // Kein ksort: die Reihenfolge in der Lang-Datei bestimmt die Reihenfolge im Magazin – + // im CMS ueber `order`, im Lang-Fallback ueber die Array-Reihenfolge. Beide Wege stimmen + // damit ueberein. $out = []; foreach ($articlesDe as $id => $rowDe) { - $id = (int) $id; - $slug = self::ARTICLE_ID_TO_SLUG[$id] ?? null; + if (! is_array($rowDe)) { + continue; + } + + $slug = CmsArticle::slugForLangArticle($id, $rowDe); + if ($slug === null) { continue; } $rowEn = $articlesEn[$id] ?? $rowDe; + if (! is_array($rowEn)) { + $rowEn = $rowDe; + } + $out[] = [ 'slug' => $slug, 'title' => [ @@ -74,6 +70,7 @@ class CmsArticleSeeder extends Seeder ], 'image' => (string) ($rowDe['image'] ?? ''), 'category' => (string) ($rowDe['category'] ?? ''), + 'world' => (string) ($rowDe['world'] ?? CmsArticle::WORLD_INTERIOR), 'date_label' => (string) ($rowDe['date'] ?? ''), 'read_time' => (string) ($rowDe['readTime'] ?? ''), 'author' => is_array($rowDe['author'] ?? null) ? $rowDe['author'] : [], @@ -81,7 +78,7 @@ class CmsArticleSeeder extends Seeder 'de' => is_array($rowDe['content'] ?? null) ? $rowDe['content'] : [], 'en' => is_array($rowEn['content'] ?? null) ? $rowEn['content'] : [], ], - 'is_published' => true, + 'is_published' => ($rowDe['published'] ?? true) !== false, ]; } diff --git a/database/seeders/CmsBrandSeeder.php b/database/seeders/CmsBrandSeeder.php new file mode 100644 index 00000000..0dcc3c08 --- /dev/null +++ b/database/seeders/CmsBrandSeeder.php @@ -0,0 +1,172 @@ +brands() as $index => $data) { + if (CmsBrand::query()->where('slug', $data['slug'])->exists()) { + continue; + } + + CmsBrand::query()->create(array_merge($data, ['order' => $index + 1])); + $created++; + } + + $this->command?->info("Kernmarken: {$created} angelegt."); + } + + /** + * @return array> + */ + private function brands(): array + { + return [ + [ + 'slug' => 'cabinet', + 'logo' => 'marken/cabinet.svg', + 'name' => ['de' => 'CABINET', 'en' => 'CABINET'], + 'tagline' => ['de' => 'Einbauschränke nach Maß.', 'en' => 'Fitted wardrobes made to measure.'], + 'teaser' => [ + 'de' => 'Maßgefertigte Schranklösungen, geplant bis auf den Millimeter – gefertigt für Räume, in denen Standard nicht genügt.', + 'en' => 'Bespoke wardrobe solutions, planned to the millimetre – built for rooms where standard will not do.', + ], + 'summary' => [ + 'de' => 'Wo Standardmaße an ihre Grenzen stoßen, fängt CABINET an. Schranklösungen, die exakt in Ihren Raum geplant werden – von der Dachschräge über die Nische bis zur raumhohen Front. Gefertigt in der Qualität, die man erst beim zweiten Hinschauen ganz erfasst. + +Erleben Sie die Möglichkeiten in unserem Showroom in Bielefeld.', + 'en' => 'Where standard dimensions reach their limits, CABINET begins. Wardrobe solutions planned precisely for your room – from sloped ceilings and alcoves to full-height fronts. Built to a quality you only fully grasp on second look. + +Experience the possibilities in our Bielefeld showroom.', + ], + 'highlights' => [ + 'Millimetergenaue Planung', + 'Individuelle Fronten und Innenausstattung', + 'Persönliche Beratung vor Ort', + ], + 'description' => [ + 'de' => '

CABINET steht für Einbaulösungen, die sich dem Raum anpassen statt umgekehrt. Jedes Element wird für seinen Platz geplant – vom Dachschrägenschrank bis zur raumhohen Garderobe. Gefertigt in Deutschland, montiert von Fachleuten, die den Unterschied zwischen „passt" und „sitzt" kennen.

', + 'en' => '

CABINET stands for built-in solutions that adapt to the room rather than the other way round. Every element is planned for its place – from sloped-ceiling wardrobes to full-height hallway storage. Made in Germany, installed by specialists who know the difference between fitting and belonging.

', + ], + 'services' => [ + ['title' => 'Aufmaß vor Ort', 'description' => 'Nach Angebotsannahme und Anzahlung erfolgt das professionelle Aufmaß bei Ihnen vor Ort. Es bildet die Grundlage für die finale Feinplanung und Fertigungsfreigabe.'], + ['title' => 'Individuelle Planung', 'description' => 'Grundriss, Nutzung und Stil bestimmen die Lösung, nicht der Katalog.'], + ['title' => 'Fertigung in Deutschland', 'description' => 'Materialien und Verarbeitung, die auf Dauer angelegt sind.'], + ['title' => 'Montage durch Fachleute', 'description' => 'Wir liefern und montieren – bis zum letzten Detail.'], + ], + 'showroom' => 'Showroom Bielefeld', + 'origin_city' => ['de' => 'Köln', 'en' => 'Cologne'], + 'origin_distance' => ['de' => 'rund 200 km', 'en' => 'about 200 km'], + 'origin_role' => [ + 'de' => 'Gefertigt in der Kölner Manufaktur, beraten und geplant im CABINET Store Bielefeld.', + 'en' => 'Made in the Cologne manufactory, advised and planned at the CABINET Store Bielefeld.', + ], + 'is_published' => true, + ], + [ + 'slug' => 'rotpunkt', + 'logo' => 'marken/rotpunkt.svg', + 'name' => ['de' => 'Rotpunkt Küchen', 'en' => 'Rotpunkt Küchen'], + 'tagline' => ['de' => 'Küchen, die Haltung zeigen.', 'en' => 'Kitchens with character.'], + 'teaser' => [ + 'de' => 'Premium-Küchen aus deutscher Fertigung – individuell geplant, nachhaltig gedacht und gebaut für den Mittelpunkt Ihres Zuhauses.', + 'en' => 'Premium kitchens made in Germany – individually planned, sustainably conceived and built for the heart of your home.', + ], + 'summary' => [ + 'de' => 'Premium-Küchen aus deutscher Fertigung – individuell geplant und gebaut für den Raum, in dem am meisten passiert. Rotpunkt steht für durchdachte Funktion, langlebige Materialien und einen Anspruch an Nachhaltigkeit, der über das Marketing hinausgeht. + +Beratung und Planung in unserem Küchenstudio.', + 'en' => 'Premium kitchens made in Germany – individually planned and built for the room where most of life happens. Rotpunkt stands for considered function, durable materials and a commitment to sustainability that goes beyond marketing. + +Consultation and planning in our kitchen studio.', + ], + 'highlights' => [ + 'Fertigung in Deutschland', + 'Individuelle Planung nach Ihrem Grundriss', + 'Nachhaltige Materialien', + ], + 'description' => [ + 'de' => '

Die Küche ist der Raum, in dem sich das Leben sammelt. Rotpunkt fertigt sie in Deutschland, mit Blick auf Materialien, die halten, und auf eine Planung, die zum Alltag passt – nicht zum Prospekt. Wir begleiten von der ersten Skizze bis zur fertigen Küche.

', + 'en' => '

The kitchen is where life gathers. Rotpunkt builds them in Germany, with an eye on materials that last and on planning that fits everyday life – not a brochure. We accompany you from the first sketch to the finished kitchen.

', + ], + 'services' => [ + ['title' => 'Küchenplanung', 'description' => 'Gemeinsam entwickeln wir Grundriss, Stauraum und Arbeitswege.'], + ['title' => 'Nachhaltige Materialien', 'description' => 'Deutsche Fertigung mit Blick auf Herkunft und Langlebigkeit.'], + ['title' => 'Geräte und Technik', 'description' => 'Passende Ausstattung, abgestimmt auf Ihre Art zu kochen.'], + ['title' => 'Lieferung und Aufbau', 'description' => 'Koordiniert aus einer Hand, inklusive Anschluss.'], + ], + 'showroom' => 'Küchenstudio', + 'origin_city' => ['de' => 'Bünde', 'en' => 'Bünde'], + 'origin_distance' => ['de' => 'rund 30 km', 'en' => 'about 30 km'], + 'origin_role' => [ + 'de' => 'Küchen aus eigener Fertigung in Bünde – geplant bei uns im Küchenstudio.', + 'en' => 'Kitchens from their own production in Bünde – planned with us in the kitchen studio.', + ], + 'is_published' => true, + ], + [ + 'slug' => 'februe', + 'logo' => 'marken/februe.png', + 'name' => ['de' => 'Febrü', 'en' => 'Febrü'], + 'tagline' => ['de' => 'Arbeiten, wo man gerne bleibt.', 'en' => 'Work where you like to stay.'], + 'teaser' => [ + 'de' => 'Möbel für konzentriertes Arbeiten – vom durchdachten Homeoffice bis zur kompletten Büroeinrichtung.', + 'en' => 'Furniture for focused work – from a well-considered home office to a complete office fit-out.', + ], + 'summary' => [ + 'de' => 'Ob Homeoffice oder ganze Büroetage: Febrü macht Möbel für konzentriertes Arbeiten. Höhenverstellbare Tische, durchdachte Stauraumlösungen und Sitzmöbel, die auch nach acht Stunden noch überzeugen – mit einem Design, das ins Zuhause genauso passt wie ins Unternehmen.', + 'en' => 'Whether a home office or a whole office floor: Febrü makes furniture for focused work. Height-adjustable desks, well-considered storage and seating that still convinces after eight hours – with a design that suits the home as much as the company.', + ], + 'highlights' => [ + 'Ergonomie, die man merkt', + 'Vom einzelnen Arbeitsplatz bis zur Bürofläche', + 'Für Zuhause und fürs Unternehmen', + ], + 'description' => [ + 'de' => '

Gutes Arbeiten beginnt beim Möbel. Febrü baut Tische, Stühle und Stauraum, die den Rücken entlasten und den Raum ordnen – zuerst für das Zuhause, in dem immer öfter gearbeitet wird, und ebenso für Büros und Unternehmen.

', + 'en' => '

Good work begins with the furniture. Febrü builds desks, chairs and storage that relieve the back and bring order to a room – first for the home, where more and more work happens, and equally for offices and companies.

', + ], + 'services' => [ + ['title' => 'Homeoffice', 'description' => 'Ein Arbeitsplatz, der sich ins Zuhause fügt, statt es zu besetzen.'], + ['title' => 'Ergonomie', 'description' => 'Höhenverstellbare Tische und Sitzlösungen für langes Arbeiten.'], + ['title' => 'Büroeinrichtung', 'description' => 'Vom einzelnen Arbeitsplatz bis zur kompletten Fläche.'], + ['title' => 'Akustik und Ordnung', 'description' => 'Stauraum und Raumgliederung, die Konzentration ermöglichen.'], + ], + 'showroom' => '', + 'origin_city' => ['de' => 'Herford', 'en' => 'Herford'], + 'origin_distance' => ['de' => 'rund 20 km', 'en' => 'about 20 km'], + 'origin_role' => [ + 'de' => 'Büro- und Objektmöbel aus eigener Fertigung in Herford.', + 'en' => 'Office and contract furniture from their own production in Herford.', + ], + 'is_published' => true, + ], + // Vierte Kernmarke Otterpohl (Nachtrag 15). Slug bleibt „tischlerei“, Texte aus OtterpohlBrandSeeder. + array_merge(OtterpohlBrandSeeder::data(), [ + 'slug' => OtterpohlBrandSeeder::SLUG, + 'logo' => OtterpohlBrandSeeder::LOGO, + ]), + ]; + } +} diff --git a/database/seeders/CmsContentSeeder.php b/database/seeders/CmsContentSeeder.php index 3384386e..0033d637 100644 --- a/database/seeders/CmsContentSeeder.php +++ b/database/seeders/CmsContentSeeder.php @@ -3,33 +3,39 @@ namespace Database\Seeders; use FluxCms\Core\Models\CmsContent; +use FluxCms\Core\Services\CmsContentService; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\Lang; class CmsContentSeeder extends Seeder { /** - * Sections to skip (not migrated, handled elsewhere or irrelevant). + * Überschreibt bestehende CMS-Einträge mit den Werten aus den Lang-Dateien. * - * netzwerk_cabinet_partner / netzwerk_immobilien_hint: siehe NetzwerkPageCmsSeeder - * (nur einfügen wenn leer, damit manuelle CMS-Anpassungen nicht überschrieben werden). + * Standardmäßig aus, damit ein erneuter Seeder-Lauf die im Admin gepflegten Inhalte + * nicht zurücksetzt. Nur einschalten, wenn die Lang-Dateien bewusst als Quelle der + * Wahrheit gelten sollen – vorher ein DB-Backup ziehen: * - * @var array + * $seeder = new CmsContentSeeder; + * $seeder->overwriteExisting = true; + * $seeder->run(); */ - protected array $skipSections = [ - 'netzwerk_cabinet_partner', - 'netzwerk_immobilien_hint', - ]; + public bool $overwriteExisting = false; + + /** + * Nur diese Section-Keys verarbeiten (leer = alle). + * + * Erlaubt einen gezielten Lauf für einzelne Sektionen, ohne den Rest anzufassen. + * + * @var array + */ + public array $onlySections = []; public function run(): void { /** @var array $sectionMap */ $sectionMap = config('cms_section_map.sections', []); - /** @var array $langKeys */ - $langKeys = config('cms_section_map.lang_keys', []); - /** @var array $configTheme */ - $configTheme = config('content.themes.b2in', []); /** @var array $langDe */ $langDe = Lang::get('b2in.themes.b2in', [], 'de'); /** @var array $langEn */ @@ -45,29 +51,23 @@ class CmsContentSeeder extends Seeder $langEn = []; } - /** @var array $themeDe */ - $themeDe = array_merge($configTheme, $langDe); - /** @var array $themeEn */ - $themeEn = array_merge($configTheme, $langEn); - $created = 0; $updated = 0; + $skipped = 0; foreach ($sectionMap as $sectionKey => $groupKeyPair) { - if (in_array($sectionKey, $this->skipSections, true)) { + if ($this->onlySections !== [] && ! in_array($sectionKey, $this->onlySections, true)) { continue; } - $langSectionKey = $langKeys[$sectionKey] ?? $sectionKey; - - if (! array_key_exists($langSectionKey, $themeDe)) { - $this->command?->warn("Unmapped or missing theme data for section: {$sectionKey} (lang key: {$langSectionKey}) – skipping."); + if (! array_key_exists($sectionKey, $langDe)) { + $this->command?->warn("Unmapped or missing theme data for section: {$sectionKey} – skipping."); continue; } - $sectionDataDe = $themeDe[$langSectionKey]; - $sectionDataEn = $themeEn[$langSectionKey] ?? $sectionDataDe; + $sectionDataDe = $langDe[$sectionKey]; + $sectionDataEn = $langEn[$sectionKey] ?? $sectionDataDe; [$group, $key] = $groupKeyPair; $type = $this->detectType($sectionDataDe); @@ -83,6 +83,12 @@ class CmsContentSeeder extends Seeder ]; if ($content) { + if (! $this->overwriteExisting) { + $skipped++; + + continue; + } + $content->update([ 'type' => $type, 'value' => $value, @@ -100,7 +106,15 @@ class CmsContentSeeder extends Seeder } } - $this->command?->info("CmsContent: {$created} created, {$updated} updated."); + $this->command?->info("CmsContent: {$created} created, {$updated} updated, {$skipped} kept (existing CMS content)."); + + if ($skipped > 0 && ! $this->overwriteExisting) { + $this->command?->comment('Bestehende CMS-Inhalte wurden nicht angetastet. Zum Überschreiben $overwriteExisting = true setzen.'); + } + + if ($created > 0 || $updated > 0) { + app(CmsContentService::class)->clearCache(); + } } private function detectType(mixed $data): string diff --git a/database/seeders/CmsProjectSeeder.php b/database/seeders/CmsProjectSeeder.php index d9ca179c..a8257800 100644 --- a/database/seeders/CmsProjectSeeder.php +++ b/database/seeders/CmsProjectSeeder.php @@ -5,15 +5,168 @@ namespace Database\Seeders; use App\Models\CmsProject; use Illuminate\Database\Seeder; use Illuminate\Support\Carbon; -use Illuminate\Support\Facades\Lang; class CmsProjectSeeder extends Seeder { private const PROJECT_SLUG = 'azizi-creek-views-4'; /** - * Seed the CMS projects table from resources/lang/{locale}/b2in.php - * (themes.b2in.immobilien_projects.projects.{slug}). + * Projektdaten Azizi Creek Views 4 – bis 06.10.2026 als Sektion themes.b2in.immobilien_projects + * in den Lang-Dateien, die keine Seite mehr anzeigt (Archiv: dev/2026-08-28/archiv-2026-10-06/). + * + * @var array> + */ + private const SOURCE = [ + 'de' => [ + 'slug' => 'azizi-creek-views-4', + 'title' => 'Azizi Developments: Creek Views 4', + 'location' => 'Al Jaddaf, Dubai', + 'status' => 'NEW LAUNCH', + 'launch_date' => '03.03.2026', + 'price_from' => 'ab 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)', + 'image' => 'expose/a1/image-4.jpeg', + 'highlights' => [ + 'Prime Waterfront Views', + '1BR: ab 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)', + 'Exklusives 3BR Penthouse (Single Inventory)', + 'High Rental Demand & Capital Appreciation', + ], + 'quick_facts' => [ + [ + 'icon' => 'home-modern', + 'label' => 'Typen', + 'value' => '1BR & 3BR Penthouse', + ], + [ + 'icon' => 'squares-2x2', + 'label' => 'Größe', + 'value' => '543 – 2.346 sqft', + ], + [ + 'icon' => 'building-office-2', + 'label' => 'Einheiten', + 'value' => 'Nur 132 (Limited)', + ], + [ + 'icon' => 'user', + 'label' => 'Entwickler', + 'value' => 'Azizi Developments', + ], + ], + 'investment_case' => [ + 'title' => 'Starkes Investment, hohe Nachfrage.', + 'text' => 'Creek Views 4 bietet eine strategische Top-Lage in Al Jaddaf. Die Kombination aus limitiertem Angebot (nur 132 Einheiten) und Premium-Ausstattung macht dieses Projekt zur idealen Wahl für Investoren, die auf Wertsteigerung (Capital Appreciation) und hohe Mietnachfrage abzielen.', + 'views' => [ + 'Road View', + 'Sitting & Play Area View', + 'Neighbour View', + ], + ], + 'gallery' => [ + 'expose/a1/image-4.jpeg', + 'expose/a1/image-3.jpeg', + 'expose/a1/image-2.jpeg', + 'expose/a1/image-5.jpeg', + 'expose/a1/image-6.jpeg', + 'expose/a1/image-7.jpeg', + ], + 'location_info' => [ + 'title' => 'Strategische Location: Al Jaddaf', + 'map_url' => 'https://maps.google.com/?q=Al+Jaddaf+Dubai', + 'points' => [ + 'Direkte Anbindung an Dubai Creek und Waterfront', + 'Wenige Minuten bis Downtown Dubai & Burj Khalifa', + 'Exzellente Infrastruktur und wachsender Stadtteil', + ], + ], + 'contact' => [ + 'title' => 'Sichern Sie sich eine der 132 Einheiten.', + 'subtitle' => 'Ihr Ansprechpartner: Marcel Scheibe', + 'options' => [ + '' => 'Ich interessiere mich für...', + '1br' => '1 Bedroom Apartment', + '3br_penthouse' => '3BR Penthouse (Single Unit)', + 'general' => 'Allgemeine Beratung', + ], + ], + ], + 'en' => [ + 'slug' => 'azizi-creek-views-4', + 'title' => 'Azizi Developments: Creek Views 4', + 'location' => 'Al Jaddaf, Dubai', + 'status' => 'NEW LAUNCH', + 'launch_date' => '03.03.2026', + 'price_from' => 'from 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)', + 'image' => 'expose/a1/image-4.jpeg', + 'highlights' => [ + 'Prime Waterfront Views', + '1BR: from 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)', + 'Exclusive 3BR Penthouse (Single Inventory)', + 'High Rental Demand & Capital Appreciation', + ], + 'quick_facts' => [ + [ + 'icon' => 'home-modern', + 'label' => 'Types', + 'value' => '1BR & 3BR Penthouse', + ], + [ + 'icon' => 'squares-2x2', + 'label' => 'Size', + 'value' => '543 – 2,346 sqft', + ], + [ + 'icon' => 'building-office-2', + 'label' => 'Units', + 'value' => 'Only 132 (Limited)', + ], + [ + 'icon' => 'user', + 'label' => 'Developer', + 'value' => 'Azizi Developments', + ], + ], + 'investment_case' => [ + 'title' => 'Strong Investment, High Demand.', + 'text' => 'Creek Views 4 offers a strategic top location in Al Jaddaf. The combination of limited supply (only 132 units) and premium finishes makes this project the ideal choice for investors targeting capital appreciation and high rental demand.', + 'views' => [ + 'Road View', + 'Sitting & Play Area View', + 'Neighbour View', + ], + ], + 'gallery' => [ + 'expose/a1/image-4.jpeg', + 'expose/a1/image-3.jpeg', + 'expose/a1/image-2.jpeg', + 'expose/a1/image-5.jpeg', + 'expose/a1/image-6.jpeg', + 'expose/a1/image-7.jpeg', + ], + 'location_info' => [ + 'title' => 'Strategic Location: Al Jaddaf', + 'map_url' => 'https://maps.google.com/?q=Al+Jaddaf+Dubai', + 'points' => [ + 'Direct connection to Dubai Creek and Waterfront', + 'Just minutes to Downtown Dubai & Burj Khalifa', + 'Excellent infrastructure and growing district', + ], + ], + 'contact' => [ + 'title' => 'Secure one of the 132 units.', + 'subtitle' => 'Your contact: Marcel Scheibe', + 'options' => [ + '' => 'I am interested in...', + '1br' => '1 Bedroom Apartment', + '3br_penthouse' => '3BR Penthouse (Single Unit)', + 'general' => 'General Consultation', + ], + ], + ], + ]; + + /** + * Seed the CMS projects table from {@see self::SOURCE}. * * Zusätzliche Blöcke investor_trust / furniture_benefit sind in den Lang-Dateien * nicht enthalten und werden hier mit DE/EN ergänzt. @@ -33,20 +186,8 @@ class CmsProjectSeeder extends Seeder */ private function getProjects(): array { - $key = 'b2in.themes.b2in.immobilien_projects.projects.'.self::PROJECT_SLUG; - - /** @var array $de */ - $de = Lang::get($key, [], 'de'); - /** @var array $en */ - $en = Lang::get($key, [], 'en'); - - if ($de === [] || ! is_array($de)) { - return []; - } - - if (! is_array($en)) { - $en = []; - } + $de = self::SOURCE['de']; + $en = self::SOURCE['en']; $launchDate = isset($de['launch_date']) && is_string($de['launch_date']) ? Carbon::createFromFormat('d.m.Y', $de['launch_date']) diff --git a/database/seeders/CmsSectionFieldsSeeder.php b/database/seeders/CmsSectionFieldsSeeder.php new file mode 100644 index 00000000..3cfc355b --- /dev/null +++ b/database/seeders/CmsSectionFieldsSeeder.php @@ -0,0 +1,72 @@ + $sections */ + $sections = config('cms_section_map.sections', []); + $theme = config('app.theme', 'b2in'); + $added = []; + + foreach ($sections as $sectionKey => [$group, $key]) { + $row = CmsContent::query()->where('group', $group)->where('key', $key)->first(); + + if (! $row) { + continue; + } + + $skip = UnusedCmsContentCleanupSeeder::UNUSED_FIELDS["{$group}.{$key}"] ?? []; + $value = $row->getTranslations('value'); + $fields = []; + + foreach ($value as $locale => $content) { + $defaults = trans("b2in.themes.{$theme}.{$sectionKey}", [], $locale); + + if (! is_array($content) || ! is_array($defaults)) { + continue; + } + + foreach ($defaults as $field => $default) { + if (! array_key_exists($field, $content) && ! in_array($field, $skip, true)) { + $content[$field] = $default; + $fields[$field] = true; + } + } + + $value[$locale] = $content; + } + + if ($fields === []) { + continue; + } + + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache($group); + $added[] = "{$group}.{$key} (".implode(', ', array_keys($fields)).')'; + } + + $this->command?->info($added === [] + ? 'CMS-Felder: alle Einträge vollständig.' + : 'CMS-Felder ergänzt: '.implode('; ', $added).'.'); + } +} diff --git a/database/seeders/Concerns/ReplacesCmsTexts.php b/database/seeders/Concerns/ReplacesCmsTexts.php new file mode 100644 index 00000000..f81bbfa4 --- /dev/null +++ b/database/seeders/Concerns/ReplacesCmsTexts.php @@ -0,0 +1,125 @@ + */ + private array $brandFields = [ + 'name', 'tagline', 'teaser', 'summary', 'description', 'widget_label', 'cta_title', 'cta_text', + 'origin_city', 'origin_distance', 'origin_role', 'highlights', 'services', 'sections', 'gallery', + ]; + + /** @var list */ + private array $articleFields = ['title', 'subtitle', 'content']; + + /** + * @param array $replacements + * @param array $exact + * @return int Anzahl geänderter Textstellen + */ + protected function replaceCmsTexts(array $replacements, array $exact = []): int + { + $count = 0; + $groups = []; + + foreach (CmsContent::query()->get() as $row) { + $changes = 0; + $row->value = $this->replaceDeep($row->getTranslations('value'), $replacements, $exact, $changes); + + if ($changes > 0) { + $row->save(); + $groups[$row->group] = true; + $count += $changes; + } + } + + foreach (array_keys($groups) as $group) { + app(CmsContentService::class)->clearCache($group); + } + + foreach (CmsBrand::query()->get() as $brand) { + $count += $this->replaceInModel($brand, $this->brandFields, $replacements, $exact); + } + + foreach (CmsArticle::query()->get() as $article) { + $count += $this->replaceInModel($article, $this->articleFields, $replacements, $exact); + } + + return $count; + } + + /** + * @param list $fields + * @param array $replacements + * @param array $exact + */ + private function replaceInModel(Model $model, array $fields, array $replacements, array $exact): int + { + $changes = 0; + $translatable = property_exists($model, 'translatable') ? $model->translatable : []; + + foreach ($fields as $field) { + $isTranslatable = in_array($field, $translatable, true); + $value = $isTranslatable ? $model->getTranslations($field) : $model->getAttribute($field); + + if (! is_array($value)) { + continue; + } + + $before = $changes; + $value = $this->replaceDeep($value, $replacements, $exact, $changes); + + if ($changes > $before) { + $isTranslatable ? $model->setTranslations($field, $value) : $model->setAttribute($field, $value); + } + } + + if ($changes > 0) { + $model->save(); + } + + return $changes; + } + + /** + * @param array $data + * @param array $replacements + * @param array $exact + * @return array + */ + private function replaceDeep(array $data, array $replacements, array $exact, int &$count): array + { + foreach ($data as $key => $item) { + if (is_array($item)) { + $data[$key] = $this->replaceDeep($item, $replacements, $exact, $count); + + continue; + } + + if (! is_string($item)) { + continue; + } + + $replaced = $exact[$item] ?? strtr($item, $replacements); + + if ($replaced !== $item) { + $data[$key] = $replaced; + $count++; + } + } + + return $data; + } +} diff --git a/database/seeders/ContentCorrections20261008Seeder.php b/database/seeders/ContentCorrections20261008Seeder.php new file mode 100644 index 00000000..d84f46f4 --- /dev/null +++ b/database/seeders/ContentCorrections20261008Seeder.php @@ -0,0 +1,287 @@ + Teiltexte, die ersetzt werden (Deutsch und Englisch) */ + public const REPLACEMENTS = [ + // CABINET: „Ein Bild und ein grobes Maß reichen für den Anfang“ + 'So läuft’s: Foto + grobe Maße → Beratung → Planung & Angebot → Aufmaß vor Ort → Feinplanung → Bestellung' => 'So läuft’s: Foto / Grundriss + grobe Maße → Beratung → Planung & Angebot → Angebotsannahme → Anzahlung → professionelles Aufmaß → Feinplanung / Fertigungsfreigabe → Bestellung / Fertigung', + 'Für den Anfang reichen uns ein Bild und ein grobes Maß völlig aus.' => 'Am Anfang reicht das grobe Maß. Am Ende entscheidet der Millimeter.', + 'Sie müssen also nicht erst alles millimetergenau ausmessen. Ein paar Fotos von der Raumsituation und die ungefähren Maße reichen, damit wir schon eine gute Planung machen und Ihnen ein konkretes Angebot erstellen können.' => 'Sie müssen also nicht erst alles millimetergenau ausmessen, bevor Sie zu uns kommen. Ein paar Fotos, ein Grundriss und die ungefähren Maße reichen, damit wir Sie beraten, planen und Ihnen ein konkretes Angebot erstellen können.', + 'Wenn alles grundsätzlich passt, kommen wir zum professionellen Aufmaß bei Ihnen vor Ort. Danach machen wir die Feinplanung fertig und geben den Schrank zur Bestellung frei.' => 'Wenn Sie das Angebot annehmen und die Anzahlung erfolgt ist, übernehmen wir das professionelle Aufmaß bei Ihnen vor Ort. Ab jetzt zählt jeder Millimeter: Auf Grundlage dieser Maße machen wir die Feinplanung fertig, geben die Fertigung frei und bestellen Ihren Schrank.', + 'Wir messen millimetergenau in Ihren Räumen – Grundlage jeder Planung.' => 'Nach Angebotsannahme und Anzahlung erfolgt das professionelle Aufmaß bei Ihnen vor Ort. Es bildet die Grundlage für die finale Feinplanung und Fertigungsfreigabe.', + + // „Aus der Region gefertigt“ – Ablauf am Beispiel CABINET + 'Beraten, aufgemessen und geplant wird bei uns im CABINET Store Bielefeld.' => 'Beraten und geplant wird bei uns im CABINET Store Bielefeld, aufgemessen nach Ihrer Zusage bei Ihnen vor Ort.', + 'Im CABINET Store nehmen wir Maß, planen bis ins Detail und stimmen jede Front und jede Innenaufteilung mit Ihnen ab.' => 'Im CABINET Store planen wir mit Ihnen bis ins Detail und stimmen jede Front und jede Innenaufteilung ab – für den Anfang reichen Fotos und grobe Maße. Nach Ihrer Zusage nehmen wir vor Ort exakt Maß.', + 'CABINET fertigt Ihren Schrank in der eigenen Manufaktur – nach den Maßen aus der Planung.' => 'CABINET fertigt Ihren Schrank in der eigenen Manufaktur – nach den exakten Maßen aus dem Aufmaß vor Ort.', + 'Consulting, measuring and planning happen with us at the CABINET Store Bielefeld. Assembly takes place on site – with our joinery,' => 'Consulting and planning happen with us at the CABINET Store Bielefeld; the exact measurements are taken at your home once you give the go-ahead. Assembly takes place on site – with the Otterpohl joinery,', + 'At the CABINET Store we take measurements, plan down to the last detail and agree every front and interior layout with you.' => 'At the CABINET Store we plan with you down to the last detail and agree every front and interior layout – photos and rough measurements are enough to start. Once you give the go-ahead, we take exact measurements on site.', + 'CABINET builds your wardrobe in its own manufactory – to the measurements from the planning.' => 'CABINET builds your wardrobe in its own manufactory – to the exact measurements taken on site.', + + // Marken: „Mehr als Marken: unser Netzwerk“ + 'Wir kommen zu Ihnen, nehmen Maß und planen mit Ihnen gemeinsam.' => 'Wir planen mit Ihnen gemeinsam – zunächst nach Fotos und groben Maßen. Das exakte Aufmaß vor Ort übernehmen wir nach Ihrer Zusage.', + 'We come to you, measure up and plan together with you.' => 'We plan together with you – first from photos and rough measurements. We take the exact measurements on site once you give the go-ahead.', + + // Über uns: Zitat im Seitenkopf + 'ein Ansprechpartner, vom ersten Aufmaß bis nach der Montage.' => 'ein Ansprechpartner, vom ersten Gespräch bis nach der Montage.', + 'one point of contact, from the first measurement to after installation.' => 'one point of contact, from the first conversation to after installation.', + + // Magazin: Abschluss jeder Beitragsseite + 'Entdecken Sie mehr über Immobilien-Investments und das B2in-Ökosystem.' => 'Weitere Einblicke rund um Einrichtung, Planung und Projekte finden Sie im B2in Magazin.', + 'Discover more about real estate investments and the B2in ecosystem.' => 'Further insights into interiors, planning and projects can be found in the B2in Magazine.', + + // Otterpohl: Montage + 'Das garantiert Ihnen absolute Planungssicherheit.' => 'Das erhöht die Planungssicherheit deutlich.', + ]; + + /** @var array Ganze Werte, die nur als Ganzes getauscht werden */ + public const EXACT = [ + 'Aufmaß & Planung' => 'Planung & Aufmaß', + 'Measuring & planning' => 'Planning & measuring', + + // FAQ „Wie läuft eine Beratung bei Ihnen ab?“ + 'Am Anfang steht ein Gespräch – im Showroom, bei Ihnen zu Hause oder telefonisch. Wir schauen uns an, welche Räume es betrifft, wie Sie sie nutzen und was Ihnen wichtig ist. Danach folgt das Aufmaß vor Ort, anschließend die Planung. Sie sehen Ihre Lösung, bevor etwas gefertigt wird. Termine vereinbaren Sie über das Formular auf dieser Seite oder direkt telefonisch.' => self::FAQ_CONSULTATION_DE, + 'It starts with a conversation – in the showroom, at your home or by phone. We look at the rooms involved, how you use them and what matters to you. Measuring up on site follows, then the planning. You see your solution before anything is made. Appointments can be arranged through the form on this page or by phone.' => self::FAQ_CONSULTATION_EN, + + // FAQ „Was kostet eine Maßanfertigung …?“ + 'Das hängt vom Raum, den Materialien und der Ausstattung ab – eine seriöse Zahl lässt sich erst nach dem Aufmaß nennen. Was sich sagen lässt: Maßanfertigung nutzt Flächen, die ein Standardmöbel liegen lässt – Schrägen, Nischen, ungewöhnliche Höhen. Sie zahlen für den Raum, den Sie sonst verschenken. Das Angebot bekommen Sie vor der Fertigung, verbindlich und aufgeschlüsselt.' => self::FAQ_COST_DE, + 'That depends on the room, the materials and the fittings – a serious figure is only possible after measuring up. What can be said: bespoke uses the space standard furniture leaves behind – slopes, niches, unusual heights. You pay for the space you would otherwise give away. You receive the quote before anything is made, binding and itemised.' => self::FAQ_COST_EN, + + // FAQ „Was bedeutet Projektausstattung bei B2in?“ + 'Für Objekte, Büros und Projektentwicklungen übernehmen wir die vollständige Ausstattung – koordiniert aus einer Hand. Wir steuern die Beschaffung von Möbeln und Innenausstattung operativ und strategisch. Das bedeutet: Wir sichern Lieferverträge ab, überwachen Meilensteine direkt bei den Herstellern und eskalieren bei Abweichungen sofort auf Managementebene. Unser Ziel ist absolute Vertragssicherheit und termingerechte Lieferung ohne Reibungsverluste.' => self::FAQ_PROJECT_DE, + 'For properties, offices and developments we take on the complete fit-out, coordinated from a single source. We manage the procurement of furniture and interiors both operationally and strategically: we secure supply contracts, monitor milestones directly with the manufacturers and escalate deviations immediately. The goal is contractual reliability and on-time delivery without friction.' => self::FAQ_PROJECT_EN, + ]; + + public const FAQ_CONSULTATION_DE = 'Am Anfang steht ein Gespräch – im Showroom, telefonisch oder auf Wunsch bei Ihnen vor Ort. Für eine erste Planung reichen uns in der Regel Fotos, ein Grundriss und grobe Maße. Damit können wir bereits Ideen entwickeln, die Planung konkretisieren und Ihnen ein entsprechendes Angebot erstellen. Wenn Ihnen die Planung gefällt und Sie unser Angebot annehmen, erfolgt nach der Anzahlung das professionelle Aufmaß bei Ihnen vor Ort. Auf Grundlage dieser exakten Maße erstellen wir die Feinplanung und geben die Möbel anschließend zur Fertigung frei.'; + + public const FAQ_CONSULTATION_EN = 'It starts with a conversation – in the showroom, by phone or, if you like, at your home. For a first plan, photos, a floor plan and rough measurements are usually all we need. With these we can develop ideas, refine the planning and prepare a quote. If you like the plan and accept our quote, we take the professional measurements on site once the deposit has been paid. Based on these exact measurements we complete the detailed planning and then release the furniture for production.'; + + public const FAQ_COST_DE = 'Das hängt vom Raum, den Materialien und der Ausstattung ab. Bereits auf Basis von Fotos, Grundriss und groben Maßen können wir eine konkrete Planung und ein entsprechendes Angebot erstellen. Das professionelle Aufmaß erfolgt nach Angebotsannahme und Anzahlung und dient anschließend der finalen Feinplanung und Fertigungsfreigabe; zeigen sich dabei vor Ort relevante Abweichungen, stimmen wir Anpassungen mit Ihnen ab. Maßanfertigung nutzt Flächen, die ein Standardmöbel liegen lässt – Schrägen, Nischen, ungewöhnliche Höhen. Sie zahlen für den Raum, den Sie sonst verschenken.'; + + public const FAQ_COST_EN = 'That depends on the room, the materials and the fittings. Based on photos, a floor plan and rough measurements we can already prepare a concrete plan and a matching quote. The professional measurement on site follows once the quote is accepted and the deposit paid, and serves the final detailed planning and production release; if relevant deviations show up on site, we agree any adjustments with you. Bespoke uses the space standard furniture leaves behind – slopes, niches, unusual heights. You pay for the space you would otherwise give away.'; + + public const FAQ_PROJECT_DE = 'Für Objekte, Büros und Projektentwicklungen übernehmen wir die vollständige Einrichtung – koordiniert aus einer Hand, von der Küche bis zur letzten Blume. Sie haben einen zentralen deutschen Vertragspartner und einen festen Ansprechpartner, der Planung, Hersteller und Gewerke zusammenhält. Dahinter steht ein eingespieltes Herstellernetzwerk, dessen Abläufe wir kennen – so bleibt auch ein großes Projekt übersichtlich.'; + + public const FAQ_PROJECT_EN = 'For properties, offices and developments we take on the complete fit-out – coordinated from a single source, from the kitchen to the last flower. You have one central German contracting partner and a fixed point of contact who keeps planning, manufacturers and trades together. Behind this is a well-established network of manufacturers whose processes we know – so even a large project stays manageable.'; + + /** @var list Beiträge aus der früheren Ausrichtung – offline, bis es neue gibt */ + public const UNPUBLISHED_ARTICLES = [ + 'supply-chain-management-vertragssicherheit', + 'local-for-local-regionaler-moebelhandel', + ]; + + public const REWRITTEN_ARTICLE = 'massanfertigung-warum-der-millimeter-zaehlt'; + + /** @var list Bisherige Vereinsnamen – solange einer davon drinsteht, kommt die neue Liste */ + public const FORMER_SPONSORS = ['TC Bad Waldliesborn-Horn', 'TC Hövelhof']; + + private const MONTHS = [ + 'januar' => 'Januar', 'january' => 'Januar', 'februar' => 'Februar', 'february' => 'Februar', + 'märz' => 'März', 'march' => 'März', 'april' => 'April', 'mai' => 'Mai', 'may' => 'Mai', + 'juni' => 'Juni', 'june' => 'Juni', 'juli' => 'Juli', 'july' => 'Juli', 'august' => 'August', + 'september' => 'September', 'oktober' => 'Oktober', 'october' => 'Oktober', 'november' => 'November', + 'dezember' => 'Dezember', 'december' => 'Dezember', + ]; + + public function run(): void + { + $texts = $this->replaceCmsTexts(self::REPLACEMENTS, self::EXACT); + $slides = $this->addSlides(); + $sponsors = $this->replaceSponsors(); + $articles = $this->updateArticles(); + + $this->command?->info(sprintf( + 'Korrekturen 08.10.: %d Textstelle(n), %d Slide(s), Vereine %s, %d Beitrag/Beiträge aktualisiert.', + $texts, $slides, $sponsors ? 'neu' : 'unverändert', $articles, + )); + } + + /** + * Fügt die Slides der Lang-Datei, die im CMS fehlen, an derselben Stelle ein (hinter dem Bild, + * das in der Lang-Datei davor steht). Fehlt dieses Bild, bleibt die Liste unangetastet. + */ + private function addSlides(): int + { + $row = CmsContent::query()->where('group', 'home')->where('key', 'hero')->first(); + + if (! $row) { + return 0; + } + + $value = $row->getTranslations('value'); + $added = 0; + + foreach ($value as $locale => $content) { + $defaults = trans('b2in.themes.b2in.hero.slides', [], $locale); + + if (! is_array($content) || ! is_array($content['slides'] ?? null) || ! is_array($defaults)) { + continue; + } + + foreach ($defaults as $index => $slide) { + $images = array_column($content['slides'], 'image'); + + if (in_array($slide['image'], $images, true)) { + continue; + } + + // Nur wenn das Nachbarbild aus der Lang-Datei in der Liste steht – eine ganz eigene + // Liste im CMS bleibt so, wie sie ist. + $previous = $index > 0 ? array_search($defaults[$index - 1]['image'], $images, true) : false; + + if ($previous === false) { + continue; + } + + array_splice($content['slides'], $previous + 1, 0, [$slide]); + $added++; + } + + $value[$locale] = $content; + } + + if ($added > 0) { + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache('home'); + } + + return $added; + } + + private function replaceSponsors(): bool + { + $row = CmsContent::query()->where('group', 'home')->where('key', 'sponsoring')->first(); + + if (! $row) { + return false; + } + + $value = $row->getTranslations('value'); + $changed = false; + + foreach ($value as $locale => $content) { + $names = array_column((array) ($content['logos'] ?? []), 'name'); + $defaults = trans('b2in.themes.b2in.sponsoring.logos', [], $locale); + + if (! is_array($content) || ! is_array($defaults)) { + continue; + } + + if (array_intersect($names, self::FORMER_SPONSORS) !== []) { + $value[$locale]['logos'] = $defaults; + $changed = true; + + continue; + } + + // Vereinsseiten nachtragen, wo der Verein schon steht, aber noch keine URL hat. + $urls = array_column($defaults, 'url', 'name'); + + foreach ((array) ($content['logos'] ?? []) as $index => $logo) { + $url = $urls[$logo['name'] ?? ''] ?? null; + + if ($url !== null && blank($logo['url'] ?? null)) { + $value[$locale]['logos'][$index]['url'] = $url; + $changed = true; + } + } + } + + if ($changed) { + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache('home'); + } + + return $changed; + } + + /** + * Maßanfertigungs-Beitrag aus der Lang-Datei, zwei Beiträge offline, Datum und Lesezeit deutsch. + */ + private function updateArticles(): int + { + $count = 0; + $source = collect(trans('b2in.articles', [], 'de'))->firstWhere('slug', self::REWRITTEN_ARTICLE); + $sourceEn = collect(trans('b2in.articles', [], 'en'))->firstWhere('slug', self::REWRITTEN_ARTICLE); + + foreach (CmsArticle::query()->get() as $article) { + if (in_array($article->slug, self::UNPUBLISHED_ARTICLES, true)) { + $article->is_published = false; + } + + if ($article->slug === self::REWRITTEN_ARTICLE && is_array($source) + && str_contains((string) $article->getTranslation('title', 'de'), 'Warum der Millimeter über den Raum entscheidet')) { + foreach (['title', 'subtitle', 'content'] as $field) { + $article->setTranslation($field, 'de', $source[$field]); + + if (is_array($sourceEn)) { + $article->setTranslation($field, 'en', $sourceEn[$field]); + } + } + } + + $article->date_label = self::germanDate((string) $article->date_label); + $article->read_time = self::germanReadTime((string) $article->read_time); + + if ($article->isDirty()) { + $article->save(); + $count++; + } + } + + return $count; + } + + /** „August 26, 2026“ / „März 10, 2026“ → „26. August 2026“; schon Deutsches bleibt. */ + public static function germanDate(string $value): string + { + if (! preg_match('/^\s*(\p{L}+)\s+(\d{1,2}),\s*(\d{4})\s*$/u', $value, $match)) { + return $value; + } + + $month = self::MONTHS[mb_strtolower($match[1])] ?? null; + + return $month === null ? $value : "{$match[2]}. {$month} {$match[3]}"; + } + + /** „5 min read“ → „5 Min. Lesezeit“; schon Deutsches bleibt. */ + public static function germanReadTime(string $value): string + { + return preg_match('/^\s*(\d+)\s*min(?:\.|utes?)?\s*read\s*$/i', $value, $match) + ? "{$match[1]} Min. Lesezeit" + : $value; + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index b40ae54c..b6b6aa8b 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -14,14 +14,20 @@ class DatabaseSeeder extends Seeder */ public function run(): void { - // User::factory(10)->create(); - User::factory()->create([ - 'name' => 'Kevin Adametz', - 'email' => 'kevin.adametz@me.com', - 'password' => Hash::make('xunfew-0Jygjy-minnyt'), + 'name' => config('seeding.admin_name'), + 'email' => config('seeding.admin_email'), + 'password' => Hash::make(config('seeding.admin_password')), ]); - $this->call(TestDisplaySeeder::class); + // CMS-Inhalte: legen nur an, was fehlt – bestehende Redaktion bleibt unangetastet. + $this->call([ + CmsContentSeeder::class, + CmsLegalSeeder::class, + CmsArticleSeeder::class, + CmsBrandSeeder::class, + CmsProjectSeeder::class, + TestDisplaySeeder::class, + ]); } } diff --git a/database/seeders/DemoBrandGalleryCleanupSeeder.php b/database/seeders/DemoBrandGalleryCleanupSeeder.php new file mode 100644 index 00000000..e2d56507 --- /dev/null +++ b/database/seeders/DemoBrandGalleryCleanupSeeder.php @@ -0,0 +1,52 @@ +whereNotNull('gallery')->get() as $brand) { + $gallery = CmsBrand::normalizeGallery($brand->gallery); + $kept = array_values(array_filter( + $gallery, + fn (array $item) => ! in_array($item['image'], $demoImages, true), + )); + + if (count($kept) === count($gallery)) { + continue; + } + + $removed += count($gallery) - count($kept); + $brand->gallery = $kept; + $brand->save(); + } + + $this->command?->info("Demobilder aus den Galerien entfernt: {$removed}."); + } +} diff --git a/database/seeders/DemoBrandGallerySeeder.php b/database/seeders/DemoBrandGallerySeeder.php new file mode 100644 index 00000000..3aed63f8 --- /dev/null +++ b/database/seeders/DemoBrandGallerySeeder.php @@ -0,0 +1,70 @@ +> + */ + public const GALLERIES = [ + 'cabinet' => [ + ['b2a.webp', CmsBrand::GALLERY_PROJECT, 'Wohnwand mit Einbauregal, Bielefeld'], + ['hero-room.webp', CmsBrand::GALLERY_PROJECT, 'Wohnbereich mit Raumteiler'], + ['stileigentum.webp', CmsBrand::GALLERY_INSPIRATION, 'Entwurf Wohnzimmer mit Sideboard'], + ['best-of-two-worlds.jpg', CmsBrand::GALLERY_INSPIRATION, 'Visualisierung offener Wohnraum'], + ], + 'rotpunkt' => [ + ['best-of-two-world.jpg', CmsBrand::GALLERY_PROJECT, 'Offener Wohn- und Kochbereich'], + ['style2own.webp', CmsBrand::GALLERY_INSPIRATION, 'Entwurf heller Wohnbereich'], + ['magazin-3.webp', CmsBrand::GALLERY_INSPIRATION, 'Visualisierung Wohnraum mit Ausblick'], + ], + 'februe' => [ + ['accommodation-2.webp', CmsBrand::GALLERY_PROJECT, 'Empfangsbereich eines Buerogebaeudes'], + ['accommodation-1.webp', CmsBrand::GALLERY_PROJECT, 'Grossraumbuero mit Arbeitsplaetzen'], + ['partner-hero.webp', CmsBrand::GALLERY_INSPIRATION, 'Entwurf Besprechungsbereich'], + ['ecosystem-hero.webp', CmsBrand::GALLERY_INSPIRATION, 'Visualisierung Projektraum'], + ], + ]; + + public function run(): void + { + foreach (self::GALLERIES as $slug => $items) { + $brand = CmsBrand::query()->where('slug', $slug)->first(); + + if (! $brand) { + $this->command?->warn("Marke „{$slug}“ nicht gefunden – uebersprungen."); + + continue; + } + + $brand->gallery = CmsBrand::normalizeGallery(array_map( + fn (array $item) => ['image' => $item[0], 'category' => $item[1], 'caption' => $item[2]], + $items, + )); + $brand->save(); + + $this->command?->info("Galerie fuer „{$brand->slug}“ gesetzt: ".count($brand->gallery).' Bilder.'); + } + } +} diff --git a/database/seeders/DisplayInteriorBrandingSeeder.php b/database/seeders/DisplayInteriorBrandingSeeder.php new file mode 100644 index 00000000..be1f0442 --- /dev/null +++ b/database/seeders/DisplayInteriorBrandingSeeder.php @@ -0,0 +1,58 @@ +where('type', DisplayVersionType::B2in)->get() as $module) { + $settings = $module->settings ?? []; + + if (in_array($settings['header_logo_url'] ?? null, [self::LOGO_DARK, self::LOGO_LIGHT], true)) { + continue; + } + + $settings['header_logo_url'] = ($settings['theme'] ?? 'dark') === 'light' + ? self::LOGO_LIGHT + : self::LOGO_DARK; + + $settings['header_claim'] = self::CLAIM; + + $module->settings = $settings; + $module->save(); + $updated++; + } + + $this->command?->info("Display-Branding vereinheitlicht: {$updated} B2in-Module."); + } +} diff --git a/database/seeders/DisplayMediaUrlNormalizerSeeder.php b/database/seeders/DisplayMediaUrlNormalizerSeeder.php new file mode 100644 index 00000000..c8df32ac --- /dev/null +++ b/database/seeders/DisplayMediaUrlNormalizerSeeder.php @@ -0,0 +1,77 @@ +normalize($module->settings ?? []); + + if ($settings !== ($module->settings ?? [])) { + $module->settings = $settings; + $module->save(); + } + } + + foreach (DisplayVersionItem::all() as $item) { + $content = $this->normalize($item->content ?? []); + + if ($content !== ($item->content ?? [])) { + $item->content = $content; + $item->save(); + } + } + + $this->command?->info("Display-Medien-URLs host-unabhängig gemacht: {$this->rewritten} Verweise."); + } + + /** + * @param array $value + * @return array + */ + private function normalize(array $value): array + { + foreach ($value as $key => $entry) { + if (is_array($entry)) { + $value[$key] = $this->normalize($entry); + + continue; + } + + if (is_string($entry) && preg_match(self::ASSET_URL_PATTERN, $entry, $matches) === 1) { + $value[$key] = $matches[1]; + $this->rewritten++; + } + } + + return $value; + } +} diff --git a/database/seeders/FaqCategoriesSeeder.php b/database/seeders/FaqCategoriesSeeder.php new file mode 100644 index 00000000..87f18604 --- /dev/null +++ b/database/seeders/FaqCategoriesSeeder.php @@ -0,0 +1,44 @@ +where('group', 'faq')->whereIn('key', ['faq', 'faq_immobilien'])->get() as $row) { + $value = $row->getTranslations('value'); + $updated = array_map(fn (mixed $content): mixed => is_array($content) ? FAQ::flatten($content) : $content, $value); + + if ($updated !== $value) { + $row->value = $updated; + $row->save(); + $changed++; + } + } + + if ($changed > 0) { + app(CmsContentService::class)->clearCache('faq'); + } + + $this->command?->info("FAQ: {$changed} Einträge auf Bereiche je Frage umgestellt."); + } +} diff --git a/database/seeders/HeroTrustItemsSeeder.php b/database/seeders/HeroTrustItemsSeeder.php new file mode 100644 index 00000000..2deec97f --- /dev/null +++ b/database/seeders/HeroTrustItemsSeeder.php @@ -0,0 +1,74 @@ +> Bisherige Standardpunkte der Startseite je Sprache */ + public const FORMER_HOME_STATS = [ + 'de' => ['Premium-Marken', 'Maßgefertigte Lösungen', 'Persönliche Beratung'], + 'en' => ['Premium brands', 'Bespoke solutions', 'Personal consulting'], + ]; + + public function run(): void + { + $updated = array_filter([ + $this->apply('home', 'hero', 'hero', fn (mixed $current, string $locale) => $current === (self::FORMER_HOME_STATS[$locale] ?? null)), + $this->apply('marken', 'hero', 'marken_hero', fn (mixed $current) => ! filled($current)), + ]); + + $this->command?->info($updated === [] + ? 'Hero-Vertrauenspunkte: bereits aktuell, nichts geändert.' + : 'Hero-Vertrauenspunkte gesetzt: '.implode(', ', $updated).'.'); + } + + /** + * @param callable(mixed, string): bool $shouldReplace + */ + private function apply(string $group, string $key, string $langSection, callable $shouldReplace): ?string + { + $row = CmsContent::query()->where('group', $group)->where('key', $key)->first(); + + if (! $row) { + return null; + } + + $value = $row->getTranslations('value'); + $changed = false; + + foreach ($value as $locale => $content) { + $stats = trans("b2in.themes.b2in.{$langSection}.stats", [], $locale); + + if (! is_array($content) || ! is_array($stats) || ! $shouldReplace($content['stats'] ?? null, $locale)) { + continue; + } + + $content['stats'] = $stats; + $value[$locale] = $content; + $changed = true; + } + + if (! $changed) { + return null; + } + + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache($group); + + return "{$group}/{$key}"; + } +} diff --git a/database/seeders/HomeHeroSlidesSeeder.php b/database/seeders/HomeHeroSlidesSeeder.php new file mode 100644 index 00000000..e9c4dde6 --- /dev/null +++ b/database/seeders/HomeHeroSlidesSeeder.php @@ -0,0 +1,89 @@ +where('group', 'home')->where('key', 'hero')->first(); + + if (! $row) { + $this->command?->info('Hero-Slideshow: home/hero nicht im CMS – die Lang-Datei gilt.'); + + return; + } + + $value = $row->getTranslations('value'); + $changed = false; + + foreach ($value as $locale => $content) { + $defaults = trans('b2in.themes.b2in.hero', [], $locale); + + if (! is_array($content) || ! is_array($defaults) || ! is_array($defaults['slides'] ?? null)) { + continue; + } + + if (! array_key_exists('slides', $content)) { + $value[$locale] = $content + ['interval' => $defaults['interval'] ?? 7, 'slides' => $defaults['slides']]; + $changed = true; + + continue; + } + + $withCaptions = $this->addMissingCaptions((array) $content['slides'], $defaults['slides']); + + if ($withCaptions !== $content['slides']) { + $value[$locale]['slides'] = $withCaptions; + $changed = true; + } + } + + if (! $changed) { + $this->command?->info('Hero-Slideshow: Slides bereits gepflegt, nichts geändert.'); + + return; + } + + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache('home'); + + $this->command?->info('Hero-Slideshow: Bilder bzw. Texte der Infokarte eingetragen.'); + } + + /** + * Ergänzt `caption` bei Slides, die eines der gelieferten Bilder zeigen und noch keinen Text haben. + * + * @param array $slides + * @param array> $defaults + * @return array + */ + private function addMissingCaptions(array $slides, array $defaults): array + { + $captions = array_column($defaults, 'caption', 'image'); + + return array_map(function ($slide) use ($captions) { + if (! is_array($slide) || array_key_exists('caption', $slide) || ! isset($captions[$slide['image'] ?? ''])) { + return $slide; + } + + return $slide + ['caption' => $captions[$slide['image']]]; + }, $slides); + } +} diff --git a/database/seeders/HomeHeroTextSeeder.php b/database/seeders/HomeHeroTextSeeder.php new file mode 100644 index 00000000..3703fec1 --- /dev/null +++ b/database/seeders/HomeHeroTextSeeder.php @@ -0,0 +1,121 @@ + */ + public const TITLES = [ + 'de' => [ + 'old' => 'Premium-Einrichtung von starken Marken', + 'new' => 'Räume aus einer Hand.
Mit starken Marken und persönlichen Lösungen.', + ], + 'en' => [ + 'old' => 'Premium furnishing from strong brands', + 'new' => 'Spaces from a single source.
With strong brands and personal solutions.', + ], + ]; + + /** @var array */ + public const SUBTITLES = [ + 'de' => [ + 'old' => 'Von der einzelnen Maßanfertigung bis zur vollständigen Ausstattung', + 'new' => 'Wir vereinen CABINET, Rotpunkt Küchen, Febrü und ein Netzwerk regionaler Experten, um individuelle Interior-Lösungen für Ihr Zuhause oder Ihr Projekt zu realisieren.', + ], + 'en' => [ + 'old' => 'From a single bespoke piece to a complete fit-out', + 'new' => 'We bring together CABINET, Rotpunkt Küchen, Febrü and a network of regional experts to create individual interior solutions for your home or your project.', + ], + ]; + + public const EYEBROW = 'B2in Interior'; + + public const FIRST_SLIDE_IMAGE = 'b2in/slideshow/rotpunkt-fenix-house.webp'; + + public const FIRST_SLIDE_LABEL = ['old' => 'Rotpunkt Küchen', 'new' => 'B2in Interior']; + + public function run(): void + { + $row = CmsContent::query()->where('group', 'home')->where('key', 'hero')->first(); + + if (! $row) { + $this->command?->info('Hero: Sektion home/hero nicht im CMS – die Lang-Datei gilt.'); + + return; + } + + $value = $row->getTranslations('value'); + $changed = false; + + foreach ($value as $locale => $content) { + if (! is_array($content)) { + continue; + } + + $title = self::TITLES[$locale] ?? null; + + if ($title && str_contains((string) ($content['title'] ?? ''), $title['old'])) { + $content['title'] = $title['new']; + $changed = true; + } + + $subtitle = self::SUBTITLES[$locale] ?? null; + + if ($subtitle && str_contains((string) ($content['subtitle'] ?? ''), $subtitle['old'])) { + $content['subtitle'] = $subtitle['new']; + $changed = true; + } + + if (! filled($content['eyebrow'] ?? null)) { + $content['eyebrow'] = self::EYEBROW; + $changed = true; + } + + foreach ((array) ($content['slides'] ?? []) as $index => $slide) { + if (is_array($slide) && ($slide['image'] ?? null) === self::FIRST_SLIDE_IMAGE + && ($slide['label'] ?? null) === self::FIRST_SLIDE_LABEL['old']) { + $content['slides'][$index]['label'] = self::FIRST_SLIDE_LABEL['new']; + $changed = true; + } + } + + if (array_key_exists('cta2_text', $content) || array_key_exists('cta2_link', $content)) { + unset($content['cta2_text'], $content['cta2_link']); + $changed = true; + } + + $value[$locale] = $content; + } + + if (! $changed) { + $this->command?->info('Hero: bereits aktuell, nichts geändert.'); + + return; + } + + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache('home'); + + $this->command?->info('Hero: Texte aktualisiert (Überschrift, Zeile darüber, Untertitel, erste Slide).'); + } +} diff --git a/database/seeders/HomeVisionTitleSeeder.php b/database/seeders/HomeVisionTitleSeeder.php new file mode 100644 index 00000000..fa52d767 --- /dev/null +++ b/database/seeders/HomeVisionTitleSeeder.php @@ -0,0 +1,58 @@ + */ + public const TITLES = [ + 'de' => ['old' => 'Gebaut auf Expertise und Vertrauen', 'new' => 'Gebaut auf Expertise und Vertrauen'], + 'en' => ['old' => 'Built on Expertise and Trust', 'new' => 'Built on Expertise and Trust'], + ]; + + public function run(): void + { + $row = CmsContent::query()->where('group', 'home')->where('key', 'vision_section')->first(); + + if (! $row) { + $this->command?->info('Vision: Sektion nicht im CMS – die Lang-Datei gilt.'); + + return; + } + + $value = $row->getTranslations('value'); + $changed = false; + + foreach ($value as $locale => $content) { + $title = self::TITLES[$locale] ?? null; + + if (is_array($content) && $title && ($content['title'] ?? null) === $title['old']) { + $value[$locale]['title'] = $title['new']; + $changed = true; + } + } + + if (! $changed) { + $this->command?->info('Vision: bereits aktuell, nichts geändert.'); + + return; + } + + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache('home'); + + $this->command?->info('Vision: Überschrift mit Hervorhebung gesetzt.'); + } +} diff --git a/database/seeders/InteriorRelaunchCmsSeeder.php b/database/seeders/InteriorRelaunchCmsSeeder.php new file mode 100644 index 00000000..bbadb87e --- /dev/null +++ b/database/seeders/InteriorRelaunchCmsSeeder.php @@ -0,0 +1,66 @@ + + */ + private const RELAUNCH_SECTIONS = [ + // Global + 'announcement_bar', + 'header', + 'footer', + 'cta_section', + + // Startseite + 'hero', + 'founder_bar', + 'audience_switch', + 'core_brands', + 'vision_section', + 'sponsoring', + 'immobilien_teaser', + + // Unterseite /marken + 'marken_hero', + 'marken_network', + 'marken_growth', + 'marken_cta', + + // Unterseiten – Durchgang auf Alt-Begriffe + 'about_hero', + 'our_story', + 'faq', + 'contact_form', + ]; + + public function run(): void + { + $seeder = new CmsContentSeeder; + $seeder->setCommand($this->command); + $seeder->onlySections = self::RELAUNCH_SECTIONS; + $seeder->overwriteExisting = true; + $seeder->run(); + + $this->command?->info('Interior-Relaunch: '.count(self::RELAUNCH_SECTIONS).' Sektionen aus den Lang-Dateien übernommen.'); + } +} diff --git a/database/seeders/InteriorReleaseSeeder.php b/database/seeders/InteriorReleaseSeeder.php new file mode 100644 index 00000000..e215d87e --- /dev/null +++ b/database/seeders/InteriorReleaseSeeder.php @@ -0,0 +1,71 @@ +> + */ + public const STEPS = [ + // Fehlende CMS-Einträge aus den Lang-Dateien anlegen – vorhandene bleiben unberührt. + CmsContentSeeder::class, + CmsBrandSeeder::class, + // Die in AP1 neu getexteten Sektionen überschreiben (alter Website-Stand). + InteriorRelaunchCmsSeeder::class, + CmsArticleSeeder::class, + // Displays: nur Branding und Medien-URLs. + DisplayInteriorBrandingSeeder::class, + DisplayMediaUrlNormalizerSeeder::class, + // Marken + BrandPageTextSeeder::class, + BrandGalleryCaptionNormalizerSeeder::class, + WorldSplitCmsSeeder::class, + OriginSectionCmsSeeder::class, + BrandOriginSeeder::class, + OtterpohlBrandSeeder::class, + BrandImageSeeder::class, + DemoBrandGalleryCleanupSeeder::class, + // Texte und Korrekturen + WhatsappNumberSeeder::class, + AudienceSwitchProjectTextSeeder::class, + HomeHeroTextSeeder::class, + UnusedCmsContentCleanupSeeder::class, + AboutPageTextSeeder::class, + ProofreadingCorrectionsSeeder::class, + LegalTextUpdateSeeder::class, + ReferencesPageSwitchSeeder::class, + HomeHeroSlidesSeeder::class, + PageHeroEyebrowSeeder::class, + HeroTrustItemsSeeder::class, + HomeVisionTitleSeeder::class, + ContentCorrections20261008Seeder::class, + FaqCategoriesSeeder::class, + BrandTranslationsSeeder::class, + // Zuletzt: fehlende Felder ergänzen, verwendete Bilder in die Mediathek. + CmsSectionFieldsSeeder::class, + AssetMediaImportSeeder::class, + ]; + + public function run(): void + { + $this->call(self::STEPS); + } +} diff --git a/database/seeders/LegalTextUpdateSeeder.php b/database/seeders/LegalTextUpdateSeeder.php new file mode 100644 index 00000000..766745ac --- /dev/null +++ b/database/seeders/LegalTextUpdateSeeder.php @@ -0,0 +1,126 @@ + alte Stelle → neue Stelle */ + public const REPLACEMENTS = [ + 'Angaben gemäß § 5 TMG' => 'Angaben gemäß § 5 DDG', + 'Registergericht: Amtsg. Bad Oeynhausen' => 'Registergericht: Amtsgericht Bad Oeynhausen', + 'Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV' => 'Verantwortlich für den Inhalt nach § 18 Abs. 2 MStV', + '>EU-Streitschlichtung<' => '>Verbraucherstreitbeilegung<', + 'gemäß § 7 Abs. 1 TMG' => 'gemäß § 7 Abs. 1 DDG', + 'Nach §§ 8 bis 10 TMG' => 'Nach §§ 8 bis 10 DDG', + 'info@b2in.de' => 'info@b2in.eu', + 'Industriestr. 25, 91710 Gunzenhausen, betrieben.' => 'Industriestr. 25, 91710 Gunzenhausen, betrieben; der Server steht in deren Rechenzentrum in Falkenstein (Sachsen), Deutschland.', + 'Folgende Informationen werden dabei ohne Ihr Zutun erfasst und bis zur automatisierten Löschung gespeichert:' => 'Folgende Informationen werden dabei ohne Ihr Zutun erfasst, höchstens 14 Tage gespeichert und danach automatisch gelöscht:', + 'Stand: 13.03.2026' => 'Stand: 06.10.2026', + 'B2in ist das Netzwerk, das exklusives Design und internationale Immobilien verbindet („Connecting Design and Property“). Über unsere Website bieten wir unverbindliche Informationen zu unseren Dienstleistungen, Immobilienprojekten (z. B. in Dubai oder Lissabon), Supply-Chain-Management und unserem Einrichtungsnetzwerk an.' => 'Unter B2in Interior bieten wir hochwertige Einrichtung mit ausgewählten Marken, Maßanfertigung und persönlicher Beratung für private Räume und Projekte an; ergänzend informieren wir über ausgewählte internationale Immobilienprojekte. Über unsere Website bieten wir unverbindliche Informationen zu unseren Leistungen, Marken, Einrichtungs- und Ausstattungsprojekten sowie zu Immobilienprojekten (z. B. in Dubai) an.', + 'Unverbindlichkeit von Immobilien- und Investmentinformationen (WICHTIG!)' => 'Unverbindlichkeit von Immobilien- und Investmentinformationen', + '(z. B. Immobilien-Investment oder Supply-Chain-Management)' => '(z. B. Beratung, Planung und Angebot für Ihre Einrichtung oder Anfragen zu Immobilienprojekten)', + '(z. B. das Speichern Ihrer Consent-Einstellungen). Die Rechtsgrundlage hierfür ist Art. 6 Abs. 1 lit. f DSGVO.' => '(z. B. das Speichern Ihrer Consent-Einstellungen). Die Rechtsgrundlage hierfür ist § 25 Abs. 2 Nr. 2 TDDDG sowie Art. 6 Abs. 1 lit. f DSGVO.', + '(z. B. das Speichern Ihrer Consent-Einstellungen). Sie können nicht deaktiviert werden. Die Rechtsgrundlage hierfür ist Art. 6 Abs. 1 lit. f DSGVO.' => '(z. B. das Speichern Ihrer Consent-Einstellungen). Sie können nicht deaktiviert werden. Die Rechtsgrundlage hierfür ist § 25 Abs. 2 Nr. 2 TDDDG sowie Art. 6 Abs. 1 lit. f DSGVO.', + '§ 25 Abs. 1 TTDSG/TDDDG' => '§ 25 Abs. 1 TDDDG', + 'IP-Anonymisierung: Wir haben auf dieser Website die Funktion IP-Anonymisierung aktiviert. Dadurch wird Ihre IP-Adresse von Google innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum vor der Übermittlung in die USA gekürzt.' => 'IP-Adressen: Wir setzen Google Analytics 4 ein. Dort werden IP-Adressen nicht protokolliert oder gespeichert; Google nutzt sie lediglich, um daraus grobe Standortdaten abzuleiten, und verwirft sie anschließend.', + ]; + + /** + * Ergänzungen der Datenschutzerklärung: Abschnitt „Hosting“ (Hetzner) mit neuer Nummerierung und + * E-Mail über united-domains, Server-Logs höchstens 14 Tage. Nur anwenden, solange der Hosting-Abschnitt fehlt – sonst würde der + * ergänzte Satz bei jedem Lauf erneut angehängt. + * + * @var array + */ + public const PRIVACY_ADDITIONS = [ + '

2. Datenerfassung auf unserer Website (Server-Log-Dateien)

' => '

2. Hosting

+

+ Unsere Website wird auf einem Cloud-Server der Hetzner Online GmbH, Industriestr. 25, 91710 Gunzenhausen, betrieben; der Server steht in deren Rechenzentrum in Falkenstein (Sachsen), Deutschland. Alle beim Aufruf der Website anfallenden Daten – insbesondere die unter Ziffer 3 genannten Server-Log-Daten und die Angaben aus dem Kontaktformular – werden auf diesem Server verarbeitet. Rechtsgrundlage ist unser berechtigtes Interesse an einem sicheren und zuverlässigen Betrieb unserer Website (Art. 6 Abs. 1 lit. f DSGVO). Mit Hetzner besteht ein Vertrag über Auftragsverarbeitung nach Art. 28 DSGVO. +

+ + +
+

3. Datenerfassung auf unserer Website (Server-Log-Dateien)

', + '

3. Kontaktformular und E-Mail-Kontakt

' => '

4. Kontaktformular und E-Mail-Kontakt

', + '

4. Cookies

' => '

5. Cookies

', + '

5. Google Analytics

' => '

6. Google Analytics

', + '

6. Externe Links (z. B. Google Maps)

' => '

7. Externe Links (z. B. Google Maps)

', + '

7. SSL- bzw. TLS-Verschlüsselung

' => '

8. SSL- bzw. TLS-Verschlüsselung

', + '

8. Ihre Rechte als betroffene Person

' => '

9. Ihre Rechte als betroffene Person

', + 'Diese Daten geben wir nicht ohne Ihre Einwilligung weiter.' => 'Diese Daten geben wir nicht ohne Ihre Einwilligung weiter. Unsere Domains und unser E-Mail-Postfach liegen bei der united-domains GmbH, Gautinger Straße 10, 82319 Starnberg; E-Mails, die Sie uns schreiben, und unsere Antworten werden über deren Server übertragen und dort gespeichert. Auch mit united-domains besteht ein Vertrag über Auftragsverarbeitung nach Art. 28 DSGVO.', + ]; + + public function run(): void + { + $count = 0; + + foreach (CmsContent::query()->where('group', 'legal')->get() as $row) { + $value = $row->getTranslations('value'); + $updated = $this->replaceDeep($value, $count, self::REPLACEMENTS); + + if (! str_contains(json_encode($updated, JSON_UNESCAPED_UNICODE) ?: '', 'Hetzner Online GmbH')) { + $updated = $this->replaceDeep($updated, $count, self::PRIVACY_ADDITIONS); + } + + if ($updated !== $value) { + $row->value = $updated; + $row->save(); + } + } + + app(CmsContentService::class)->clearCache('legal'); + + $this->command?->info($count > 0 + ? "Rechtstexte: {$count} Feld(er) aktualisiert." + : 'Rechtstexte: bereits aktuell oder nicht im CMS – nichts geändert.'); + } + + /** + * @param array $data + * @param array $replacements + * @return array + */ + private function replaceDeep(array $data, int &$count, array $replacements): array + { + foreach ($data as $key => $item) { + if (is_array($item)) { + $data[$key] = $this->replaceDeep($item, $count, $replacements); + + continue; + } + + if (! is_string($item)) { + continue; + } + + $replaced = strtr($item, $replacements); + + if ($replaced !== $item) { + $data[$key] = $replaced; + $count++; + } + } + + return $data; + } +} diff --git a/database/seeders/OriginSectionCmsSeeder.php b/database/seeders/OriginSectionCmsSeeder.php new file mode 100644 index 00000000..3a9dabde --- /dev/null +++ b/database/seeders/OriginSectionCmsSeeder.php @@ -0,0 +1,69 @@ + */ + private const SECTIONS = ['origin_section']; + + public function run(): void + { + $seeder = new CmsContentSeeder; + $seeder->setCommand($this->command); + $seeder->onlySections = self::SECTIONS; + $seeder->run(); + + $this->dropLegacyLocations(); + + $this->command?->info('Herkunfts-Sektion: angelegt, falls sie fehlte.'); + } + + private function dropLegacyLocations(): void + { + $row = CmsContent::query()->where('group', 'home')->where('key', 'origin_section')->first(); + + if (! $row) { + return; + } + + $value = $row->getTranslations('value'); + $changed = false; + + foreach ($value as $locale => $section) { + if (is_array($section) && array_key_exists('locations', $section)) { + unset($section['locations']); + $value[$locale] = $section; + $changed = true; + } + } + + if (! $changed) { + return; + } + + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache('home'); + + $this->command?->info('Herkunfts-Sektion: veralteten Schlüssel „locations“ entfernt – die Standorte kommen aus den Marken.'); + } +} diff --git a/database/seeders/OtterpohlBrandSeeder.php b/database/seeders/OtterpohlBrandSeeder.php new file mode 100644 index 00000000..2616ee26 --- /dev/null +++ b/database/seeders/OtterpohlBrandSeeder.php @@ -0,0 +1,193 @@ +where('slug', self::SLUG)->first(); + + if (! $brand) { + $this->command?->warn('Marke „'.self::SLUG.'“ nicht gefunden – erst CmsBrandSeeder ausführen.'); + + return; + } + + $brand->fill(self::data()); + + if (trim((string) $brand->logo) === '') { + $brand->logo = self::LOGO; + } + + $swapped = self::swapTitleImage($brand); + + $brand->save(); + + $this->command?->info('Otterpohl: Marke „'.self::SLUG.'“ mit den Texten vom 24.09.2026 (v2) und dem Abschnitt „Montage“ aktualisiert' + .($swapped ? ', Titelbild getauscht.' : '.')); + } + + /** + * Tauscht Titelbild und Produktbild (Abstimmung 01.10.2026): Die Treppe mit Lamellenwand wird + * Titelbild, das bisherige Werkstattbild nimmt ihren Platz in der Galerie ein (Aus der Werkstatt). + * + * Nur solange noch das alte Titelbild gesetzt ist – ein im Backend gewähltes Bild bleibt. + */ + public static function swapTitleImage(CmsBrand $brand): bool + { + if ($brand->image !== self::FORMER_TITLE_IMAGE) { + return false; + } + + $brand->image = self::TITLE_IMAGE; + + $gallery = CmsBrand::normalizeGallery($brand->gallery); + $former = ['image' => self::FORMER_TITLE_IMAGE, 'category' => CmsBrand::GALLERY_COMPANY, 'caption' => self::FORMER_TITLE_CAPTION]; + $position = array_search(self::TITLE_IMAGE_IN_GALLERY, array_column($gallery, 'image'), true); + + if ($position !== false) { + $gallery[$position] = $former; + } elseif (! in_array(self::FORMER_TITLE_IMAGE, array_column($gallery, 'image'), true)) { + $gallery[] = $former; + } + + $brand->gallery = array_values($gallery); + + return true; + } + + /** + * Alle Textfelder der Marke. Ohne slug, logo, image, gallery, order. + * + * Reihenfolge wie in der Zulieferung v2: Einleitung „Wollmilchsau“, zwei Abschnitte, die acht + * Leistungen, zum Schluss „Das Ganze statt nur das Einzelne“ – der steht als Abschlussblock + * (cta_title/cta_text), damit er auf der Seite hinter Leistungen und Galerie bleibt. + * + * @return array + */ + public static function data(): array + { + return [ + 'name' => ['de' => 'Otterpohl Möbelservice', 'en' => 'Otterpohl Möbelservice'], + 'tagline' => ['de' => 'Nicht easy click & buy. Aber dennoch easy to get.', 'en' => 'Not easy click & buy. But still easy to get.'], + 'teaser' => [ + 'de' => 'Individuelle Möbel, Türen, Treppen, Küchen, Wandverkleidungen und Objektbau – bis hin zum kompletten Innenausbau. Tischlerhandwerk aus Rheda-Wiedenbrück.', + 'en' => 'Bespoke furniture, doors, stairs, kitchens, wall cladding and contract work – up to complete interior fit-outs. Joinery from Rheda-Wiedenbrück.', + ], + 'summary' => [ + 'de' => 'Individuelle Möbel. Türen. Treppen. Küchen. Wandverkleidungen. Objektbau. Sonderanfertigungen. Lackierungen und Echtholzfurniere. Bis hin zum kompletten Innenausbau. Mit Otterpohl Möbelservice haben wir einen Partner an unserer Seite, bei dem die Möglichkeiten nicht am einzelnen Möbelstück aufhören. + +Denn manchmal braucht ein Raum mehr als einen Schrank oder ein Sideboard. Vielleicht soll eine Treppe Teil des Gestaltungskonzepts werden. Eine Wand erhält eine individuelle Holzverkleidung. Oder Möbel, Materialien und bauliche Elemente müssen so zusammenspielen, dass am Ende alles wie aus einem Guss wirkt. Genau dort beginnt der individuelle Innenausbau.', + 'en' => 'Bespoke furniture. Doors. Stairs. Kitchens. Wall cladding. Contract work. Special constructions. Lacquer and real-wood veneer. Up to complete interior fit-outs. With Otterpohl Möbelservice we have a partner whose possibilities do not end at the single piece of furniture. + +Sometimes a room needs more than a wardrobe or a sideboard. A staircase becomes part of the design. A wall gets individual wood cladding. Or furniture, materials and built elements have to work together so that everything looks as if cast from one mould. That is where individual interior fit-out begins.', + ], + 'highlights' => [ + 'Individuelle Möbel, Türen, Treppen und Küchen', + 'Innenausbau, Objektbau, Lack und Echtholzfurnier', + 'Planung und Handwerk aus einer Hand – inklusive Montage', + ], + 'description' => ['de' => '', 'en' => ''], + 'services' => [ + ['title' => 'Individuelle Möbel & Sonderanfertigungen', 'description' => 'Möbel nach Maß, besondere Konstruktionen und individuelle Lösungen – nach Planung, Idee, Skizze oder konkreter Anforderung.'], + ['title' => 'Innenausbau', 'description' => 'Von einzelnen Ausbauarbeiten bis zum ganzheitlichen Raumkonzept – inklusive individueller Verkleidungen und maßgefertigter Einbauten.'], + ['title' => 'Türen & Treppen', 'description' => 'Individuelle Türen, Treppen und konstruktive Lösungen, die sich in Architektur und Einrichtung einfügen.'], + ['title' => 'Küchen', 'description' => 'Individuelle Küchenlösungen und handwerkliche Ergänzungen auch dort, wo klassische Küchenprogramme an ihre Grenzen stoßen.'], + ['title' => 'Wandverkleidungen & besondere Details', 'description' => 'Holzverkleidungen, Lamellen, Paneele und individuelle Gestaltungselemente, die Architektur und Einrichtung miteinander verbinden.'], + ['title' => 'Objektbau', 'description' => 'Individuelle Lösungen für Büros, Verkaufsräume und gewerblich genutzte Flächen – vom Einzelmöbel bis zum kompletten Ausbau.'], + ['title' => 'Lack & Echtholzfurnier', 'description' => 'Individuelle Lackierungen und Furniere für Lösungen, bei denen Farbe, Material und Oberfläche exakt aufeinander abgestimmt werden sollen.'], + ['title' => 'Montage', 'description' => 'Die Umsetzung endet nicht bei der Fertigung. Entscheidend ist, dass Möbel, Ausbau und Raum am Ende auch vor Ort sauber zusammenkommen.'], + ], + 'sections' => [ + [ + 'title' => 'Ziemlich nah an der eierlegenden Wollmilchsau', + 'paragraphs' => [ + 'Der Begriff ist vielleicht nicht besonders elegant. Aber ganz falsch ist er nicht.', + 'Individuelle Möbel. Türen. Treppen. Küchen. Wandverkleidungen. Objektbau. Sonderanfertigungen. Lackierungen und Echtholzfurniere. Bis hin zum kompletten Innenausbau.', + 'Mit Otterpohl Möbelservice haben wir einen Partner an unserer Seite, bei dem die Möglichkeiten nicht am einzelnen Möbelstück aufhören.', + 'Denn manchmal braucht ein Raum mehr als einen Schrank oder ein Sideboard. Vielleicht soll eine Treppe Teil des Gestaltungskonzepts werden. Eine Wand erhält eine individuelle Holzverkleidung. Eine Tür soll sich selbstverständlich in den Raum einfügen. Oder Möbel, Materialien und bauliche Elemente müssen so zusammenspielen, dass am Ende alles wie aus einem Guss wirkt.', + ], + 'claim' => 'Genau dort beginnt der individuelle Innenausbau.', + ], + [ + 'title' => 'Vom einzelnen Möbel bis zum ganzen Raum', + 'paragraphs' => [ + 'Wir arbeiten mit Herstellern, die schon sehr viele individuelle Möglichkeiten bieten. CABINET, Rotpunkt und Febrü geben uns dafür eine starke Basis. Aber es gibt Projekte, bei denen die Lösung darüber hinausgeht.', + 'Mit Otterpohl Möbelservice können wir deshalb nicht nur individuelle Möbel und Sonderanfertigungen realisieren, sondern auch Türen, Treppen, Küchen, Wand- und Deckenverkleidungen sowie komplette Innenausbauten und Lösungen für den Objektbereich einbeziehen.', + ], + 'claim' => 'So können wir Räume ganzheitlicher denken – und Details nicht isoliert betrachten.', + ], + [ + 'title' => 'Planung trifft Handwerk', + 'paragraphs' => [ + 'Manchmal entsteht die beste Lösung aus einem Möbelprogramm. Manchmal braucht es eine individuelle Ergänzung. Und manchmal muss etwas komplett neu gedacht und gebaut werden. Genau diese Kombination macht für uns den Unterschied.', + 'Wir planen den Raum und verbinden bei Bedarf unterschiedliche Hersteller, Materialien und handwerkliche Lösungen miteinander. Otterpohl Möbelservice ergänzt diese Planung um die Möglichkeiten einer klassischen Tischlerei und eines erfahrenen Innenausbauers.', + ], + 'claim' => 'Das Ergebnis kann ein einzelnes Möbel sein. Oder ein kompletter Raum.', + ], + // Ergänzung vom 01.10.2026. Absätze mit „- “ erscheinen als Liste, der Teil vor dem + // ersten Doppelpunkt fett ({@see CmsBrand::paragraphBlocks()}). + [ + 'title' => 'Montage', + 'paragraphs' => [ + 'Eine perfekte Montage ist keine Glückssache, sondern das Ergebnis starker Logistik. Wir sorgen dafür, dass alles Hand in Hand geht:', + '- Sichere Prüfung & Terminierung: Wir vereinbaren Ihren Montagetermin erst, wenn Ihre Lieferung bei uns eingegangen und auf Vollständigkeit und Unversehrtheit geprüft ist. Das erhöht die Planungssicherheit deutlich.', + '- Perfekt vorbereitete Lieferung: Wir prüfen vorab die Anliefersituation bei Ihnen vor Ort. Die Lieferung erfolgt mit unserem modernen Fuhrpark, optimal geschützt durch Spezialfolien und Decken.', + '- Flexibler Renovierungsschutz: Ihr Bauprojekt verzögert sich? Kein Problem. Wir lagern Ihre Möbel fachgerecht und sicher ein.', + '- Erweiterter Komfort: Auf Wunsch liefern wir Umzugskartons, lagern Möbel zwischen oder passen vorhandene Möbelstücke direkt an.', + ], + ], + ], + 'widget_label' => ['de' => 'Persönliche Beratung zur Maßarbeit vereinbaren', 'en' => 'Arrange a personal consultation on bespoke work'], + 'cta_title' => ['de' => 'Das Ganze statt nur das Einzelne', 'en' => 'The whole, not just the single piece'], + 'cta_text' => [ + 'de' => 'Genau deshalb passt Otterpohl Möbelservice zu unserem Ansatz: Wir möchten Räume nicht in einzelne Gewerke zerlegen, sondern Lösungen schaffen, bei denen Möbel, Materialien, Architektur und handwerkliche Details zusammenpassen. Mal braucht es dafür einen Hersteller. Mal einen Tischler. Und manchmal beides. Nicht easy click & buy. Aber dennoch easy to get.', + 'en' => 'That is why Otterpohl Möbelservice fits our approach: we do not want to split rooms into single trades, but create solutions where furniture, materials, architecture and craft details belong together. Sometimes that takes a manufacturer. Sometimes a joiner. And sometimes both. Not easy click & buy. But still easy to get.', + ], + 'origin_city' => ['de' => 'Rheda-Wiedenbrück', 'en' => 'Rheda-Wiedenbrück'], + 'origin_distance' => ['de' => 'rund 35 km', 'en' => 'about 35 km'], + 'origin_role' => [ + 'de' => 'Tischlerei und Innenausbau aus Rheda-Wiedenbrück – vom einzelnen Möbel bis zum ganzen Raum, inklusive Montage.', + 'en' => 'Joinery and interior fit-out from Rheda-Wiedenbrück – from a single piece to the whole room, installation included.', + ], + 'showroom' => '', + 'is_published' => true, + ]; + } +} diff --git a/database/seeders/PageHeroEyebrowSeeder.php b/database/seeders/PageHeroEyebrowSeeder.php new file mode 100644 index 00000000..3a7296d5 --- /dev/null +++ b/database/seeders/PageHeroEyebrowSeeder.php @@ -0,0 +1,95 @@ +}> */ + public const SECTIONS = [ + 'marken' => ['group' => 'marken', 'key' => 'hero', 'lang' => 'marken_hero', 'path' => []], + 'about' => ['group' => 'about', 'key' => 'hero', 'lang' => 'about_hero', 'path' => []], + 'contact' => ['group' => 'contact', 'key' => 'contact_form', 'lang' => 'contact_form', 'path' => ['hero']], + ]; + + /** @var list Frühere Vorschläge, die durch den Text der Lang-Datei ersetzt werden */ + public const FORMER_EYEBROWS = ['Unsere Marken', 'Our brands']; + + /** @var array> Abschnitt → Präfixe, die aus der Überschrift fallen */ + public const TITLE_PREFIXES = [ + 'about' => [ + 'Über B2in: ', + 'About B2in: ', + ], + ]; + + public function run(): void + { + $updated = []; + + foreach (self::SECTIONS as $name => $section) { + $row = CmsContent::query()->where('group', $section['group'])->where('key', $section['key'])->first(); + + if (! $row) { + continue; + } + + $value = $row->getTranslations('value'); + $changed = false; + + foreach ($value as $locale => $content) { + if (! is_array($content)) { + continue; + } + + $langPath = implode('.', ['b2in.themes.b2in', $section['lang'], ...$section['path'], 'eyebrow']); + $eyebrow = trans($langPath, [], $locale); + $fieldPath = implode('.', [...$section['path'], 'eyebrow']); + + $current = data_get($content, $fieldPath); + + if ($eyebrow !== $langPath && $current !== $eyebrow + && (! filled($current) || in_array($current, self::FORMER_EYEBROWS, true))) { + data_set($content, $fieldPath, $eyebrow); + $changed = true; + } + + foreach (self::TITLE_PREFIXES[$name] ?? [] as $prefix) { + $titlePath = implode('.', [...$section['path'], 'title']); + $title = (string) data_get($content, $titlePath, ''); + + if (str_starts_with($title, $prefix)) { + data_set($content, $titlePath, substr($title, strlen($prefix))); + $changed = true; + } + } + + $value[$locale] = $content; + } + + if ($changed) { + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache($section['group']); + $updated[] = $name; + } + } + + $this->command?->info($updated === [] + ? 'Hero-Zeilen: bereits aktuell, nichts geändert.' + : 'Hero-Zeilen ergänzt: '.implode(', ', $updated).'.'); + } +} diff --git a/database/seeders/ProofreadingCorrectionsSeeder.php b/database/seeders/ProofreadingCorrectionsSeeder.php new file mode 100644 index 00000000..2b8d62ce --- /dev/null +++ b/database/seeders/ProofreadingCorrectionsSeeder.php @@ -0,0 +1,85 @@ + alte Stelle → neue Stelle */ + public const REPLACEMENTS = [ + 'Rotpunkt Küchen jetzt bei B2in Interior – jetzt Beratungstermin sichern' => 'Rotpunkt Küchen neu bei B2in Interior – jetzt Beratungstermin sichern', + 'CABINET, Rotpunkt Küchen, Febrü und ein Netzwerk' => 'CABINET, Rotpunkt Küchen, Febrü, Otterpohl Möbelservice und ein Netzwerk', + 'mit CABINET, Rotpunkt Küchen, Febrü und einem Netzwerk' => 'mit CABINET, Rotpunkt Küchen, Febrü, Otterpohl Möbelservice und einem Netzwerk', + 'CABINET, Rotpunkt Küchen und Febrü –' => 'CABINET, Rotpunkt Küchen, Febrü und Otterpohl Möbelservice –', + 'von der Montage über das Aufmaß bis zu' => 'vom Aufmaß über die Montage bis zu', + '"Meine Mission' => '„Meine Mission', + 'Zuhause der Menschen."' => 'Zuhause der Menschen.“', + 'Unser Kontakt-Nummer' => 'Unsere Telefonnummer', + 'Unser Büro-Standort' => 'Unser Bürostandort', + 'Ihre Nachricht...' => 'Ihre Nachricht …', + 'Wird gesendet...' => 'Wird gesendet …', + 'Bitte wählen...' => 'Bitte wählen …', + 'Warum das Dubai Escrow-System' => 'Warum das Dubai-Escrow-System', + 'einen der sichersten und transparentesten regulatorischen Rahmenwerke der Welt geschaffen, der Investorengelder' => 'eines der sichersten und transparentesten regulatorischen Rahmenwerke der Welt geschaffen, das Investorengelder', + '"Hidden Champions"' => '„Hidden Champions“', + 'Diese Logistik macht den Standort unvergleichlich.' => 'Diese Anbindung macht den Standort unvergleichlich.', + 'über Tausende Kilometer Entfernung' => 'aus Tausenden Kilometern Entfernung', + 'die in Dubai florierende Umsätze generiert' => 'die in Dubai hohe Umsätze generiert', + '"Turnkey"' => '„Turnkey“', + 'oft gesichert durch Zugänge zu deutschen' => 'oft gesichert durch Zugang zu deutschen', + 'um sofortige Lösungen zu erzwingen' => 'um schnelle Lösungen zu erzwingen', + '("Hidden Gems")' => '(„Hidden Gems“)', + 'Das Konzept "Local for Local"' => 'Das Konzept „Local for Local“', + '"Was ist heute in meiner Nähe verfügbar?"' => '„Was ist heute in meiner Nähe verfügbar?“', + 'Support your Locals – Ein Gewinn' => 'Support your Locals – ein Gewinn', + 'Das "David gegen Goliath"-Prinzip' => 'Das „David-gegen-Goliath“-Prinzip', + 'der für einen Schrank zu schmal und für nichts zu breit ist' => 'der für einen Schrank zu schmal und zum Leerlassen zu breit ist', + '„Maß oder nicht"' => '„Maß oder nicht“', + 'Registergericht: Amtsg.' => 'Registergericht: Amtsg.', + 'Irland („Google")' => 'Irland („Google“)', + 'von „http://" auf „https://" wechselt' => 'von „http://“ auf „https://“ wechselt', + '(„B2in", „wir", „uns")' => '(„B2in“, „wir“, „uns“)', + '(„Connecting Design and Property")' => '(„Connecting Design and Property“)', + 'B2In GmbH' => 'B2in GmbH', + 'Unsere Aufgabe ist es herauszufinden,' => 'Unsere Aufgabe ist es, herauszufinden,', + 'Für den Anfang reicht uns ein Bild und ein grobes Maß völlig aus.' => 'Für den Anfang reichen uns ein Bild und ein grobes Maß völlig aus.', + 'vom durchdachten Home-Office' => 'vom durchdachten Homeoffice', + 'Ob Home-Office oder ganze Büroetage' => 'Ob Homeoffice oder ganze Büroetage', + 'ins Zuhause fügt statt es zu besetzen' => 'ins Zuhause fügt, statt es zu besetzen', + 'Ruhe und Flexibilität sind planbar.' => 'Ruhe und Flexibilität sind planbar', + 'erst, wenn Ihre Lieferung vollständig und unversehrt bei uns geprüft wurde' => 'erst, wenn Ihre Lieferung bei uns eingegangen und auf Vollständigkeit und Unversehrtheit geprüft ist', + 'an ihre Grenzen kommen' => 'an ihre Grenzen stoßen', + 'mit unserer Tischlerei, die auf Wunsch' => 'mit der Tischlerei Otterpohl, die auf Wunsch', + 'Unsere Tischlerei baut auf und ergänzt' => 'Die Tischlerei Otterpohl baut auf und ergänzt', + ]; + + /** @var array ganze Werte, die nur als Ganzes getauscht werden (Leistungstitel) */ + public const EXACT_VALUES = [ + 'Home-Office' => 'Homeoffice', + ]; + + public function run(): void + { + $count = $this->replaceCmsTexts(self::REPLACEMENTS, self::EXACT_VALUES); + + $this->command?->info($count > 0 + ? "Lektorat: {$count} Textstelle(n) korrigiert." + : 'Lektorat: bereits aktuell, nichts geändert.'); + } +} diff --git a/database/seeders/ReferencesPageSwitchSeeder.php b/database/seeders/ReferencesPageSwitchSeeder.php new file mode 100644 index 00000000..b0ad9399 --- /dev/null +++ b/database/seeders/ReferencesPageSwitchSeeder.php @@ -0,0 +1,29 @@ +firstOrCreate( + ['group' => 'pages', 'key' => 'referenzen_enabled'], + ['value' => '0', 'type' => 'boolean', 'description' => 'Seite /referenzen und Menüpunkt „Referenzen“ anzeigen'], + ); + + $this->command?->info($setting->wasRecentlyCreated + ? 'Referenzen: Seite und Menüpunkt ausgeblendet.' + : 'Referenzen: Schalter steht bereits auf „'.($setting->value === '1' ? 'an' : 'aus').'“ – unverändert.'); + } +} diff --git a/database/seeders/UnusedCmsContentCleanupSeeder.php b/database/seeders/UnusedCmsContentCleanupSeeder.php new file mode 100644 index 00000000..90eb3d93 --- /dev/null +++ b/database/seeders/UnusedCmsContentCleanupSeeder.php @@ -0,0 +1,179 @@ + Gruppe.Schlüssel der toten Sektionen */ + public const UNUSED = [ + 'about.leadership_team', + 'home.brand_worlds', 'home.ecosystem_core', 'home.hero_slider', 'home.integriertes_modell_b2in', 'home.synergie_section', + 'immobilien.bruecke', 'immobilien.hero', 'immobilien.hero_v2', 'immobilien.image_break', 'immobilien.kaufprozess', + 'immobilien.mindset', 'immobilien.moebel_vorteil', 'immobilien.portfolio', 'immobilien.projects_meta', + 'immobilien.trust', 'immobilien.warum_dubai', + 'global.cta_section_portfolio', + 'netzwerk.broker_section', 'netzwerk.cabinet_partner', 'netzwerk.commitment_section', 'netzwerk.cta', + 'netzwerk.dark_stats_section', 'netzwerk.digital_core', 'netzwerk.ecosystem_hero', 'netzwerk.ecosystem_hub', + 'netzwerk.ecosystem_result', 'netzwerk.ecosystem_start', 'netzwerk.ecosystem_stats', 'netzwerk.end_customer_section', + 'netzwerk.final_commitment', 'netzwerk.hero', 'netzwerk.image_break', 'netzwerk.immobilien_hint', + 'netzwerk.interior_brands', 'netzwerk.interior_concept', 'netzwerk.interior_hero', 'netzwerk.interior_process', + 'netzwerk.interior_trust', 'netzwerk.interior_zielgruppen', 'netzwerk.partner_benefits', + 'netzwerk.partner_benefits_broker', 'netzwerk.partner_benefits_developer', 'netzwerk.partner_benefits_retailer', + 'netzwerk.partner_benefits_supplier', 'netzwerk.partner_card_section', 'netzwerk.partner_hero', + 'netzwerk.partner_process', 'netzwerk.supplier_section', 'netzwerk.supply_chain_intro', 'netzwerk.teasers', + ]; + + /** @var array> Gruppe.Schlüssel → Felder, die keine Vorlage ausgibt */ + public const UNUSED_FIELDS = [ + 'about.partner_cta' => ['stats'], + 'contact.contact_form' => ['social_media'], + 'magazin.list' => ['load_more'], + 'immobilien.magazin_list' => ['load_more'], + 'magazin.detail' => ['share_article'], + // Kacheln kommen aus der Markenverwaltung; die Liste war im CMS ohne Wirkung (07.10.2026). + 'home.core_brands' => ['brands'], + ]; + + public function run(): void + { + $moved = $this->movePartnerCta(); + $stripped = $this->stripUnusedFields(); + + if ($stripped > 0) { + $this->command?->info("CMS-Aufräumen: ungenutzte Felder aus {$stripped} Sektion(en) entfernt."); + } + + $rows = $this->unusedRows(); + + if ($rows === []) { + $this->command?->info('CMS-Aufräumen: keine toten Sektionen (mehr) vorhanden'.($moved ? ', partner_cta verschoben.' : '.')); + + return; + } + + $path = 'cms-archiv/cms-content-geloescht-'.now()->format('Y-m-d_His').'.json'; + Storage::disk('local')->put($path, json_encode( + array_map(fn (CmsContent $row) => [ + 'group' => $row->group, + 'key' => $row->key, + 'type' => $row->type, + 'order' => $row->order, + 'value' => $row->getTranslations('value'), + ], $rows), + JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES, + )); + + $groups = []; + + foreach ($rows as $row) { + $groups[$row->group] = true; + $row->delete(); + } + + foreach (array_keys($groups) as $group) { + app(CmsContentService::class)->clearCache($group); + } + + $this->command?->info(sprintf( + 'CMS-Aufräumen: %d tote Sektionen gelöscht, Sicherung unter %s%s', + count($rows), + Storage::disk('local')->path($path), + $moved ? ', partner_cta nach „about“ verschoben.' : '.', + )); + } + + /** + * @return list + */ + private function unusedRows(): array + { + return CmsContent::query()->get() + ->filter(fn (CmsContent $row) => in_array($row->group.'.'.$row->key, self::UNUSED, true)) + ->values() + ->all(); + } + + /** + * Zieht den Abschluss der Über-uns-Seite in die Gruppe „about“. + */ + private function movePartnerCta(): bool + { + $old = CmsContent::query()->where('group', 'netzwerk')->where('key', 'partner_cta')->first(); + $current = CmsContent::query()->where('group', 'about')->where('key', 'partner_cta')->first(); + $changed = false; + + if ($old && ! $current) { + $old->group = 'about'; + $old->save(); + $current = $old; + $changed = true; + } elseif ($old) { + $old->delete(); + $changed = true; + } + + if ($changed) { + app(CmsContentService::class)->clearCache('netzwerk'); + app(CmsContentService::class)->clearCache('about'); + } + + return $changed; + } + + /** + * Entfernt die Felder aus {@see self::UNUSED_FIELDS} in allen Sprachen. + */ + private function stripUnusedFields(): int + { + $count = 0; + + foreach (self::UNUSED_FIELDS as $section => $fields) { + [$group, $key] = explode('.', $section, 2); + $row = CmsContent::query()->where('group', $group)->where('key', $key)->first(); + + if (! $row) { + continue; + } + + $value = $row->getTranslations('value'); + $stripped = array_map( + fn ($content) => is_array($content) ? array_diff_key($content, array_flip($fields)) : $content, + $value, + ); + + if ($stripped === $value) { + continue; + } + + $row->value = $stripped; + $row->save(); + app(CmsContentService::class)->clearCache($group); + $count++; + } + + return $count; + } +} diff --git a/database/seeders/WhatsappNumberSeeder.php b/database/seeders/WhatsappNumberSeeder.php new file mode 100644 index 00000000..4426c432 --- /dev/null +++ b/database/seeders/WhatsappNumberSeeder.php @@ -0,0 +1,83 @@ + + */ + private const PLACEHOLDERS = ['+49 151 00000000', '+49 521 98610020']; + + /** @var array */ + private const LOCALES = ['de', 'en']; + + public function run(): void + { + $row = CmsContent::query()->where('group', 'global')->where('key', 'contact')->first(); + + if (! $row) { + CmsContent::create([ + 'group' => 'global', + 'key' => 'contact', + 'type' => 'json', + 'value' => array_fill_keys(self::LOCALES, ['whatsapp' => self::NUMBER]), + 'order' => 0, + ]); + app(CmsContentService::class)->clearCache('global'); + + $this->command?->info('WhatsApp-Nummer: Eintrag global.contact angelegt.'); + + return; + } + + $value = $row->getTranslations('value'); + $changed = 0; + + foreach (self::LOCALES as $locale) { + $section = is_array($value[$locale] ?? null) ? $value[$locale] : []; + $current = trim((string) ($section['whatsapp'] ?? '')); + + if ($current !== '' && ! in_array($current, self::PLACEHOLDERS, true)) { + continue; + } + + $section['whatsapp'] = self::NUMBER; + $value[$locale] = $section; + $changed++; + } + + if ($changed === 0) { + $this->command?->info('WhatsApp-Nummer: bereits gepflegt, nichts geändert.'); + + return; + } + + $row->value = $value; + $row->save(); + app(CmsContentService::class)->clearCache('global'); + + $this->command?->info("WhatsApp-Nummer gesetzt ({$changed} Sprache(n))."); + } +} diff --git a/database/seeders/WorldSplitCmsSeeder.php b/database/seeders/WorldSplitCmsSeeder.php new file mode 100644 index 00000000..50eec7e1 --- /dev/null +++ b/database/seeders/WorldSplitCmsSeeder.php @@ -0,0 +1,63 @@ + */ + private const NEW_SECTIONS = [ + 'header_immobilien', + 'announcement_bar_immobilien', + 'magazin_list_immobilien', + 'faq_immobilien', + 'contact_form_immobilien', + 'cta_section_immobilien', + 'immobilien_about_hero', + 'immobilien_our_story', + 'immobilien_about_image_break', + 'immobilien_our_values', + ]; + + /** @var array */ + private const OVERWRITE_SECTIONS = [ + 'header', + 'magazin_list', + // Betreffe in Gruppen (Interior / Immobilien / B2in) statt flacher Liste, 15.09. + 'contact_form', + 'contact_form_immobilien', + ]; + + public function run(): void + { + $create = new CmsContentSeeder; + $create->setCommand($this->command); + $create->onlySections = self::NEW_SECTIONS; + $create->run(); + + $overwrite = new CmsContentSeeder; + $overwrite->setCommand($this->command); + $overwrite->onlySections = self::OVERWRITE_SECTIONS; + $overwrite->overwriteExisting = true; + $overwrite->run(); + + $this->command?->info('Welten-Trennung: '.count(self::NEW_SECTIONS).' Sektionen angelegt (falls fehlend), '.count(self::OVERWRITE_SECTIONS).' Interior-Sektionen aktualisiert.'); + } +} diff --git a/database/seeders/data/brand-translations-en.json b/database/seeders/data/brand-translations-en.json new file mode 100644 index 00000000..a1ef2fe3 --- /dev/null +++ b/database/seeders/data/brand-translations-en.json @@ -0,0 +1,532 @@ +{ + "cabinet": { + "highlights": [ + "Planned to the millimetre", + "Bespoke fronts and interior fittings", + "Personal consultation on site" + ], + "services": [ + { + "title": "Measuring on site", + "description": "Once you have accepted the quote and paid the deposit, we carry out a professional survey at your home. It forms the basis for the final detailed planning and the release for production." + }, + { + "title": "Individual planning", + "description": "Your floor plan, use and style shape the solution, not the catalogue." + }, + { + "title": "Made in Germany", + "description": "Materials and workmanship built to last." + }, + { + "title": "Fitting by specialists", + "description": "We deliver and install – down to the last detail." + } + ], + "showroom": "Showroom Bielefeld", + "sections": [ + { + "title": "Millimetres, not standard sizes", + "paragraphs": [ + "Off-the-peg wardrobes are made for the average room. But nobody lives in an average room. There is the sloping ceiling, the projecting wall, the window in an awkward spot and the radiator nobody wants to move.", + "CABINET plans every element for its exact place. The wardrobe does not stop where the grid ends, but where the room ends. Space that would otherwise be left over and hard to use becomes storage." + ], + "detail": { + "title": "Where standard solutions reach their limits", + "paragraphs": [ + "We can plan, for example, wardrobes beneath sloping ceilings, floor-to-ceiling fronts, made-to-measure alcove solutions between two walls, transitions to existing furniture, and cut-outs for window sills, projections and installations.", + "The plinth, the skirting board and the finish at the ceiling are part of the planning too. It is precisely at these transitions that a wardrobe either looks like a piece of furniture standing in front of a wall, or like a natural part of the room." + ] + } + }, + { + "title": "A photo and rough measurements are enough to begin", + "paragraphs": [ + "At the start, rough measurements are enough. In the end, every millimetre counts.", + "So there is no need to measure everything to the millimetre before you come to see us. A few photos, a floor plan and approximate dimensions are enough for us to advise you, plan your project and prepare a concrete quote.", + "Then we go into the details together: layout, fittings, materials, colours and, of course, the price.", + "Once you accept the quote and the deposit has been paid, we carry out a professional survey at your home. From this point on, every millimetre counts: based on these measurements, we complete the detailed planning, release production and order your wardrobe." + ], + "claim": "How it works: photo / floor plan + rough measurements → consultation → planning & quote → acceptance of quote → deposit → professional survey on site → detailed planning / release for production → order / production" + }, + { + "title": "The inside decides whether a wardrobe works", + "paragraphs": [ + "A beautiful front is quickly chosen. Whether a wardrobe works in everyday life is decided behind it: in the layout, the pull-outs, the shelf heights, the lighting and the question of what needs to be within reach at which height.", + "That is why we do not plan interior fittings from a catalogue page, but around what actually needs to be stored." + ], + "detail": { + "title": "The questions we ask first", + "paragraphs": [ + "How much hanging space is really needed, and how much shelving? Where should shoes, suitcases, bed linen, sports kit or Christmas decorations go? Who uses the wardrobe – and how tall is that person?", + "The things you do not need every day belong in the plan as well: laundry baskets, the ironing board, the vacuum cleaner, carnival costumes or specialist sports equipment. If we know in advance what needs to be stored, we can allocate the space sensibly from the outset." + ] + } + }, + { + "title": "Fronts that belong to the room", + "paragraphs": [ + "A fitted wardrobe can stand out deliberately or almost disappear. Fronts in colour, wood effect, glass or mirror, with or without handles, change the character of a room considerably – precisely because a floor-to-ceiling wardrobe is a large surface.", + "We match fronts, handles and surfaces to the existing architecture: to the flooring, doors, light and adjoining furniture. The result is not a foreign body, but a calm surface that makes the room feel larger." + ], + "detail": { + "title": "Visible or invisible – both are a decision", + "paragraphs": [ + "A handleless front in the colour of the wall recedes and makes the room feel more open. A mirrored front brings light into narrow hallways and dressing rooms. A dark wood front, on the other hand, creates a deliberate design focal point.", + "Both are right – just not at the same time. So we clarify early on what role the wardrobe should play in the room before we talk about finishes." + ] + } + }, + { + "title": "More than bedrooms", + "paragraphs": [ + "Bespoke storage is by no means limited to the dressing room. Hallway wardrobes, utility rooms, loft spaces, studies, living-room units with media technology and filing cabinets in practices and law firms are just as much in demand.", + "Materials, colours and design elements can be carried through several rooms. Instead of a new idea in every room, the result is a coherent interior concept with a shared design language.", + "Together with Rotpunkt Küchen, Febrü and other selected partners, we can look at the entire interior where needed: CABINET provides the made-to-measure special solution, Rotpunkt the kitchen and Febrü the workspace." + ], + "claim": "CABINET for the millimetre. B2in for the whole." + }, + { + "title": "Why CABINET with us?", + "paragraphs": [ + "With us, planning does not begin with a brochure, but with your room and the question of how you want to live in it. Only then do we talk about fronts, pull-outs and fittings.", + "We plan storage, circulation, light, materials and adjoining living areas as one coherent concept – and accompany you all the way from the first idea through the survey to the finished installation.", + "We do not plan for the next quick sale, but for the longest and most satisfying use possible. A wardrobe that can do too much but is not needed is not a good solution – just an expensive one." + ] + }, + { + "title": "Experience it rather than read about it", + "paragraphs": [ + "Surfaces, fittings and pull-outs are hard to describe and easy to try out. In our showroom in Bielefeld you can touch fronts, open pull-outs, compare interior fittings and judge the differences for yourself.", + "So you do not have to rely on our sales conversation alone, but can decide on the basis of what you have actually seen and touched." + ] + } + ], + "gallery_captions": { + "marken/cabinet/dachschraegenschrank-filo-cashmere.webp": "Sloping-ceiling wardrobe in Filo Cashmere", + "marken/cabinet/schrank-gegen-schraege-marmor.webp": "Wardrobe fitted against the slope in a marble look", + "marken/cabinet/schlafzimmer-eiche-tano.webp": "Bedroom wardrobe in Eiche Tano", + "marken/cabinet/schlafzimmer-velluto-fango.webp": "Bedroom wardrobe in Velluto Fango", + "marken/cabinet/schlafzimmer-wandschrank-filo-cashmere.webp": "Built-in bedroom wardrobe in Filo Cashmere", + "marken/cabinet/garderobe-seite-offen.webp": "Hallway wardrobe with open side", + "marken/cabinet/garderobe-sitznische-filo-cashmere.webp": "Hallway wardrobe with seating niche in Filo Cashmere", + "marken/cabinet/drehtuerenschrank-marmor.webp": "Hinged-door wardrobe in a marble look", + "marken/cabinet/flur-schrank-eiche-tano.webp": "Hallway cabinet in Eiche Tano", + "marken/cabinet/dachschraege-velluto-fango.webp": "Wardrobe beneath a sloping ceiling in Velluto Fango", + "marken/cabinet/ankleide-solitaer-eiche-tano-seite.webp": "Solitär dressing room in Eiche Tano, side view" + } + }, + "rotpunkt": { + "highlights": [ + "Made in Germany", + "Individual planning based on your floor plan", + "Sustainable materials" + ], + "services": [ + { + "title": "Kitchen planning", + "description": "Together we develop the layout, storage and working routes." + }, + { + "title": "Sustainable materials", + "description": "German manufacturing with an eye on origin and durability." + }, + { + "title": "Appliances and technology", + "description": "The right equipment, matched to the way you cook." + }, + { + "title": "Delivery and installation", + "description": "Coordinated from a single source, including connection." + } + ], + "showroom": "Kitchen studio", + "sections": [ + { + "title": "From East Westphalia. For your home.", + "paragraphs": [ + "Since 1930, Rotpunkt has been developing and manufacturing high-quality kitchen furniture at its East Westphalian sites in Bünde and Preußisch Oldendorf-Getmold.", + "Regional manufacturing, decades of experience and close proximity to the manufacturer are not romantic footnotes for us, but the foundation for dependable quality and personal kitchen planning." + ] + }, + { + "title": "Freedom of design down to the detail", + "paragraphs": [ + "Rotpunkt offers an exceptional range of fronts, colours, materials, carcass finishes, worktops, handle options and handleless solutions. More than 20 carcass colours, finished on both sides, mean that a kitchen can be designed consistently not only on the outside, but on the inside as well.", + "So we do not plan a predefined block of units, but a solution shaped by the room, the architecture and the actual habits of the people who use it." + ], + "detail": { + "title": "FENIX and authentic wood effects", + "paragraphs": [ + "FENIX is an exceptionally matt surface with low light reflection, a pleasantly soft feel and pronounced anti-fingerprint properties. Superficial micro-scratches can be treated thermally. 27 coordinated colours open up a wide range of design options.", + "Attention to detail also shows in selected wood-effect fronts. Synchronised-pore finishes align the visible grain precisely with the texture you can feel. This gives a natural look even with easy-care melamine wood reproductions.", + "With careful planning, the wood effect can be carried across several fronts. The result is a calm, continuous front – without necessarily having to use real wood." + ] + } + }, + { + "title": "More space. More ergonomics. More kitchen.", + "paragraphs": [ + "Extra-tall base units, low plinth heights and additional cabinet widths create more usable storage and open up new planning options. Sounds like small details? Perhaps. In daily use, these small details make a surprisingly big difference." + ], + "detail": { + "title": "NEW DIMENSIONS", + "paragraphs": [ + "With the NEW DIMENSIONS sizing concept, base unit heights of up to 910 millimetres are possible, for example, combined with a plinth just 50 millimetres high.", + "Additional cabinet widths and a wide variety of interior fittings help us make consistent and ergonomic use of the available space. The kitchen does not just look more generous – it actually is." + ] + } + }, + { + "title": "Sustainability with real substance", + "paragraphs": [ + "Sustainability does not need big promises, but verifiable facts. At Rotpunkt, Greenline stands for specific materials, certifications and measurable differences. That is why we disclose which materials Rotpunkt uses, which certifications stand behind them and what concrete difference Greenline makes for the environment and indoor climate.", + "The Greenline BioBoard Gen2 consists of up to 90 per cent recycled wood. 95 per cent of the Rotpunkt kitchen range is FSC-certified. In addition, the products are certified to JIS F4Star with regard to their formaldehyde emissions.", + "Already have a comparable kitchen in mind that promises more on sustainability? You are welcome to bring the documents with you. We will take a close look together – honestly, transparently and without any sales spin." + ], + "detail": { + "title": "Figures, certifications and indoor climate", + "paragraphs": [ + "According to Rotpunkt, the use of Greenline chipboard preserves an area of forest equivalent to around 50 football pitches every year.", + "According to Rotpunkt, the Greenline BioBoard Gen2 releases around 50 per cent less formaldehyde into the indoor air than conventional products. This is particularly relevant for as healthy an indoor climate as possible.", + "The FSC certification is registered under the code FSC C131864. What matters to us is not the green label, but the concrete and verifiable statement behind it." + ] + } + }, + { + "title": "More than kitchens", + "paragraphs": [ + "Rotpunkt's possibilities do not end with the classic kitchen. The furniture and planning system can also be used for utility rooms, bathrooms, sideboards, living-room furniture and other areas of the home.", + "Materials, colours and design elements can be carried through several rooms. The result is a harmonious overall picture, instead of starting from scratch in every room.", + "Where needed, we therefore think about the interior beyond the kitchen – from furniture and lighting to wallpaper, flooring and, if you wish, the very last flower." + ] + }, + { + "title": "Why a Rotpunkt kitchen with us?", + "paragraphs": [ + "With us, a new kitchen does not begin with a brochure, but with your room and the question of how you want to live in it.", + "We plan workflows, ergonomics, storage, materials, lighting, appliances and adjoining living areas as one coherent concept. Even the spots where a party gathers deserve careful thought – the places where guests will later stand, sit, talk and perhaps stay a little longer.", + "We do not simply put together as many products as possible. We develop a kitchen that convinces in terms of design, function and cost – and accompany you all the way from the first idea to professional installation.", + "We do not plan for the next quick sale, but for the longest and most satisfying use possible. In the short term, that may not always be the most profitable decision for us. For an honest and lasting customer relationship, it is the only right one." + ] + }, + { + "title": "Experience it rather than hear about it", + "paragraphs": [ + "A good decision is not made at the planning table alone. On request – and sometimes with a little friendly persuasion – we can arrange to accompany you to the nearby Rotpunkt factory or to selected showrooms of the appliance manufacturers.", + "There you can experience materials, manufacturing and technology for yourself, try out appliances and ask questions on the spot. So you do not have to rely on our sales conversation alone, but receive first-hand information, can compare and then decide with confidence.", + "We accompany you throughout, put the different options into context and bring your decisions together into one coherent overall concept." + ] + } + ], + "gallery_captions": { + "marken/rotpunkt/kueche-01-b.webp": "Kitchen 01, second view", + "marken/rotpunkt/kueche-02.webp": "Kitchen 02", + "marken/rotpunkt/kueche-03.webp": "Kitchen 03", + "marken/rotpunkt/kueche-04.webp": "Kitchen 04", + "marken/rotpunkt/kueche-05.webp": "Kitchen 05", + "marken/rotpunkt/kueche-06.webp": "Kitchen 06", + "marken/rotpunkt/kueche-06-b.webp": "Kitchen 06, second view", + "marken/rotpunkt/kueche-07.webp": "Kitchen 07", + "marken/rotpunkt/kueche-08.webp": "Kitchen 08", + "marken/rotpunkt/kueche-09.webp": "Kitchen 09", + "marken/rotpunkt/kueche-10.webp": "Kitchen 10", + "marken/rotpunkt/kueche-11.webp": "Kitchen 11", + "marken/rotpunkt/kueche-12.webp": "Kitchen 12" + } + }, + "februe": { + "highlights": [ + "Ergonomics you can feel", + "From a single workstation to an entire office floor", + "For your home and for your business" + ], + "services": [ + { + "title": "Home office", + "description": "A workspace that fits into your home instead of taking it over." + }, + { + "title": "Ergonomics", + "description": "Height-adjustable desks and seating solutions for long working days." + }, + { + "title": "Office furnishing", + "description": "From a single workstation to a complete floor." + }, + { + "title": "Acoustics and organisation", + "description": "Storage and spatial zoning that make concentration possible." + } + ], + "showroom": "", + "sections": [ + { + "title": "Home or project. Two paths. The same standard.", + "paragraphs": [ + "Our home page deliberately offers two paths: Home and Project. A single home office has different requirements from an office floor with fifty workstations.", + "Different tasks need different planning and, of course, different costings. Even so, we only have customers – with different rooms, requirements and quantities. The standard we set for product, advice and service stays the same." + ], + "detail": { + "title": "We have customers – not pigeonholes", + "paragraphs": [ + "Private client or company: to us, first and foremost, there are customers with different rooms, requirements and quantities.", + "Naturally, quantity affects the price. Fifty workstations are costed differently from a single desk for a home office. The standard we set for product, advice and service stays the same.", + "Febrü remains Febrü. B2in remains B2in. And every customer receives a solution that fits their actual needs." + ] + }, + "claim": "Large or small – attention to detail makes the difference." + }, + { + "title": "From Herford. For modern working environments.", + "paragraphs": [ + "Febrü develops and produces high-quality office furniture right in Herford, East Westphalia – just a few kilometres from Bielefeld. A very high degree of in-house manufacturing allows short distances, dependable quality and great flexibility in materials, colours and individual requirements." + ], + "detail": { + "title": "From a single desk to an entire office wing", + "paragraphs": [ + "The range extends from ergonomic and height-adjustable desks, conference and meeting tables, office chairs and lounge elements to reception solutions, storage, acoustic elements, mobile media furniture, locker systems and flexible spatial structures.", + "This means a single workstation can be planned just as convincingly as a medical practice, a law firm, a conference area or an entire office wing." + ] + }, + "claim": "Made in Herford. Planned in Bielefeld." + }, + { + "title": "Not three brands. One continuous space.", + "paragraphs": [ + "An office wing does not end at the desk. People need places to work, to meet and to retreat – but also for breaks, a shared coffee, lunch and informal conversation.", + "This is exactly where Febrü, Rotpunkt and CABINET come together with us: Febrü designs the workspace, Rotpunkt the kitchen in the office wing and CABINET the made-to-measure special solution.", + "What matters is not which manufacturer supplies which piece of furniture. What matters is that, in the end, everything belongs together. We coordinate workstations, kitchen, storage, colours, materials, lighting and acoustics into one continuous concept." + ], + "detail": { + "title": "How the three brands work together", + "paragraphs": [ + "Febrü designs ergonomic workstations, conference areas, lounge zones, acoustics, storage and flexible spatial structures.", + "Rotpunkt designs staff kitchens, coffee points and shared break-room kitchens as a natural part of the working environment – not as a leftover row of units. This is often where conversations, connections and ideas emerge that had no place in the official meeting.", + "CABINET comes in wherever alcoves are to be used in full, wardrobes planned from wall to wall and from floor to ceiling, or special transitions created between workstation, storage and architecture. The results include bespoke cloakrooms, filing cabinets, media solutions and storage units." + ] + }, + "claim": "Febrü for the workspace. Rotpunkt for the kitchen. CABINET for the made-to-measure special solution. B2in for the whole." + }, + { + "title": "One workstation. Fifty workstations. One standard.", + "paragraphs": [ + "Whether we are talking about a single workstation or an entire office wing, the underlying question remains the same: does the person who works there every day feel seen and valued – or has a desk simply been put down somewhere for them?", + "The number of units changes the scope of the task, but not its importance. That is why we do not assess a workstation by square metres or order value, but by what it needs to do for the person using it." + ], + "detail": { + "title": "Appreciation is not a question of quantity", + "paragraphs": [ + "Especially at a time of skills shortages, companies cannot afford to treat working conditions as an afterthought. If you expect top performance, you have to create the right conditions. A fruit bowl and free water are a nice gesture – but they are no substitute for a good workplace.", + "This becomes particularly clear for people who combine work and family. Part-time does not mean half the performance. Often, people work with great focus in a shorter window of time while also organising school, appointments, childcare and everyday family life.", + "Here in particular, the workspace must not be a makeshift arrangement of kitchen table, side table or a corner of the bedroom. It has to work straight away, allow movement, be technically well thought out and still fit sensibly into the home. For the person who uses it every day, a single workstation is not a small solution. It is their entire working world." + ] + } + }, + { + "title": "Ergonomics that work in everyday life", + "paragraphs": [ + "A workstation has to adapt to the person – not the other way round. Height-adjustable desks and ergonomic office chairs encourage movement and support a healthy posture.", + "But ergonomics does not end with the desk and chair. Walking routes, reach zones, screen position, lighting, storage and the switch between tasks also determine how comfortable and productive a working day is." + ], + "detail": { + "title": "And no, we do not just mean the way to the coffee machine", + "paragraphs": [ + "Sensible walking routes are part of good planning – even if the coffee machine and fridge undoubtedly play a certain role in everyday working life.", + "This applies to four hours at a desk just as much as to ten, in the company just as much as at home. And of course the furniture has to suit the room in terms of design. Anyone who thinks “Nobody sees it anyway – apart from the staff” has already made the first crucial mistake. The staff do see it. Every day. And they work in it." + ] + }, + "quote": "I am, let us say, old enough to groan occasionally when I get up. And to be honest, on some days I feel a little older still. My doctor says I should sit less. My job, however, takes place largely at a computer. Ergo, I need a solution that lets me move more without having to change careers.", + "quote_author": "Marcel Scheibe, Geschäftsführer von B2in" + }, + { + "title": "Office meets Interior", + "paragraphs": [ + "Identical rows of desks no longer do justice to a modern working day. People need areas for concentration, spontaneous conversations, teamwork, video calls, confidential meetings and restful breaks.", + "To achieve this, Febrü combines classic workstation furniture with homely lounge elements, mobile multifunctional solutions, storage, acoustics and flexible zoning. Rather than the same place for every person, the result is the right place for every activity." + ], + "detail": { + "title": "The We and the I", + "paragraphs": [ + "Yes, yes – you could file this under the usual sales talk. But behind it lies a simple truth: responsibility cannot be delegated to others for ever. What remains is the We and the I.", + "A company has to create conditions in which people can work well together, exchange ideas and concentrate. The individual is given the opportunity – and also bears the responsibility – to make the most of it.", + "Rooms and furniture alone do not create a good company culture. But poor working conditions can make a good culture needlessly difficult every single day." + ] + }, + "claim": "The company strengthens the We. The individual makes the most of it." + }, + { + "title": "Calm and flexibility can be planned", + "paragraphs": [ + "Acoustics, mobile elements and flexible spatial solutions help create areas for communication, concentration and retreat – and adapt them later to changing teams and ways of working." + ], + "detail": { + "title": "Acoustics and flexible spatial structures", + "paragraphs": [ + "Echoing rooms, phone calls and video conferences can significantly impair concentration and speech intelligibility. Acoustic panels, partitions, screens and appropriately planned furniture help reduce noise.", + "With modular furniture and room-in-room solutions, work areas can be rearranged without having to build fixed walls every time something changes. That matters in a large office – and often matters even more at home." + ] + } + }, + { + "title": "Design that reflects your identity", + "paragraphs": [ + "An office is a visible part of a company's culture. Colours, materials and the character of a space influence how employees, customers and applicants perceive a company. In a home office, the workspace has to function professionally while fitting into the existing interior.", + "Thanks to its high degree of in-house manufacturing, Febrü offers a wide choice of materials, finishes, fabrics and frame colours. Corporate design does not have to stop at the letterhead. And a home office does not have to look like a tax office after hours." + ], + "detail": { + "title": "And yes, plants belong too", + "paragraphs": [ + "A plant does not make a company sustainable. But it often turns a technically furnished room into a place where people enjoy working. That has nothing to do with greenwashing – it is simply a matter of atmosphere and style." + ] + } + }, + { + "title": "Sustainability that lasts longer than the next move", + "paragraphs": [ + "Sustainability begins with the lifespan of a piece of furniture. Many Febrü pieces have a modular design, so components can be replaced or added instead of replacing the entire piece when requirements change." + ], + "detail": { + "title": "Concrete standards instead of general promises", + "paragraphs": [ + "Febrü manufactures with a high degree of in-house production directly in Herford. This ensures short distances and controlled processes. laserTEC produces high-quality, seamless edges without additional adhesive.", + "Febrü works to ISO 9001 and ISO 14001 and holds PEFC chain-of-custody certification. Selected Febrü desk systems and storage furniture carry the Blauer Engel (Blue Angel) ecolabel.", + "The sustainable piece of furniture is not the one with the longest advertising copy. It is the one that works for many years and adapts to changing requirements." + ] + } + }, + { + "title": "Why Febrü with us?", + "paragraphs": [ + "With us, planning does not begin with a furniture catalogue, but with the people and the question of how work is actually done. Where is concentration needed? Where do conversations happen? Which areas need discretion? And how much storage is really needed?", + "We bring ergonomics, walking routes, acoustics, storage, lighting, communication and retreat together into one overall concept. The point is not to put as much furniture into a room as possible. The point is to create a better working environment." + ], + "detail": { + "title": "A home office raises different questions", + "paragraphs": [ + "How visible should the workspace be? Where do technology and paperwork disappear after hours? And how can professional work be integrated into the existing interior so that home remains home?", + "Here too: a single workstation is not a smaller task. It simply needs a different answer from an entire office wing." + ] + } + }, + { + "title": "Experience it rather than choose from a catalogue", + "paragraphs": [ + "Thanks to the short distance between Bielefeld and Herford, Febrü products can be experienced in person by arrangement. We organise and accompany your visit to the showroom – for a single desk just as for an entire company site.", + "There you can touch materials, try out chairs and desks, experience acoustic solutions and compare different working environments. You do not have to rely on a sales conversation alone." + ] + } + ], + "gallery_captions": { + "marken/februe/active-2-0-bureo.webp": "Active 2.0 with Bureo", + "marken/februe/active-2-0-soul-grossraum.webp": "Open-plan office with Active 2.0 and Soul", + "marken/februe/adesso.webp": "Adesso", + "marken/februe/arena-stage.webp": "Arena Stage", + "marken/februe/base.webp": "Base", + "marken/februe/base-sideboard.webp": "Base sideboard", + "marken/februe/bobb-bionics-coworker-container-cube.webp": "Bobb, Bionics, CoWorker, Container and Cube", + "marken/februe/bobb.webp": "Bobb", + "marken/februe/brandon.webp": "Brandon", + "marken/februe/coworker.webp": "CoWorker", + "marken/februe/corporate.webp": "Corporate", + "marken/februe/curved-ben-basic.webp": "Curved, Ben and Basic", + "marken/februe/eline-one-silent-garderobenpaneel.webp": "E-Line, One, Silent and coat panel", + "marken/februe/elements-soul-grossraum.webp": "Open-plan office with Elements and Soul", + "marken/februe/vio.webp": "Vio" + } + }, + "tischlerei": { + "highlights": [ + "Bespoke furniture, doors, staircases and kitchens", + "Interior fit-out, commercial projects, lacquer and real wood veneer", + "Planning and craftsmanship from a single source – including installation" + ], + "services": [ + { + "title": "Bespoke furniture & special commissions", + "description": "Made-to-measure furniture, special constructions and individual solutions – based on a plan, an idea, a sketch or a specific requirement." + }, + { + "title": "Interior fit-out", + "description": "From individual fit-out work to a complete spatial concept – including individual cladding and bespoke built-in units." + }, + { + "title": "Doors & staircases", + "description": "Individual doors, staircases and structural solutions that blend into the architecture and the interior." + }, + { + "title": "Kitchens", + "description": "Individual kitchen solutions and crafted additions, even where standard kitchen ranges reach their limits." + }, + { + "title": "Wall cladding & special details", + "description": "Wood cladding, slats, panels and individual design elements that connect architecture and interior." + }, + { + "title": "Commercial projects", + "description": "Individual solutions for offices, sales areas and commercial spaces – from a single piece of furniture to a complete fit-out." + }, + { + "title": "Lacquer & real wood veneer", + "description": "Custom lacquer finishes and veneers for solutions in which colour, material and surface need to be precisely matched." + }, + { + "title": "Installation", + "description": "The job does not end with production. What matters is that furniture, fit-out and room come together cleanly on site in the end." + } + ], + "showroom": "", + "sections": [ + { + "title": "Pretty close to an all-in-one solution", + "paragraphs": [ + "The term may not be particularly elegant. But it is not entirely wrong either.", + "Bespoke furniture. Doors. Staircases. Kitchens. Wall cladding. Commercial projects. Special commissions. Lacquer finishes and real wood veneers. Right through to a complete interior fit-out.", + "With Otterpohl Möbelservice, we have a partner at our side whose possibilities do not stop at the individual piece of furniture.", + "Because sometimes a room needs more than a wardrobe or a sideboard. Perhaps a staircase should become part of the design concept. A wall is given individual wood cladding. A door should blend naturally into the room. Or furniture, materials and structural elements have to work together so that, in the end, everything looks as if it were made in one piece." + ], + "claim": "That is exactly where bespoke interior fit-out begins." + }, + { + "title": "From a single piece of furniture to an entire room", + "paragraphs": [ + "We work with manufacturers who already offer a great many individual options. CABINET, Rotpunkt and Febrü give us a strong foundation for this. But there are projects where the solution goes further.", + "With Otterpohl Möbelservice, we can therefore not only realise bespoke furniture and special commissions, but also include doors, staircases, kitchens, wall and ceiling cladding, as well as complete interior fit-outs and solutions for commercial projects." + ], + "claim": "This lets us think about rooms more holistically – rather than looking at details in isolation." + }, + { + "title": "Planning meets craftsmanship", + "paragraphs": [ + "Sometimes the best solution comes from a furniture range. Sometimes it needs an individual addition. And sometimes something has to be completely rethought and built from scratch. It is precisely this combination that makes the difference for us.", + "We plan the room and, where needed, combine different manufacturers, materials and crafted solutions. Otterpohl Möbelservice adds the capabilities of a traditional joinery and an experienced interior fit-out specialist to this planning." + ], + "claim": "The result can be a single piece of furniture. Or an entire room." + }, + { + "title": "Installation", + "paragraphs": [ + "A perfect installation is not a matter of luck, but the result of strong logistics. We make sure everything goes hand in hand:", + "- Careful inspection & scheduling: we only arrange your installation date once your delivery has arrived with us and has been checked for completeness and damage. This significantly increases planning certainty.", + "- Thoroughly prepared delivery: we check the delivery conditions at your home in advance. Delivery is made with our modern fleet, well protected by special film and blankets.", + "- Flexible renovation cover: your building project is delayed? Not a problem. We store your furniture professionally and securely.", + "- Added convenience: on request, we supply moving boxes, store furniture temporarily or adapt existing pieces of furniture directly." + ] + } + ], + "gallery_captions": { + "marken/otterpohl/referenz-dziuballe-treppe.webp": "Staircase with wooden treads, step lighting and oak handrail", + "marken/otterpohl/referenz-luecke-12.webp": "Door and chest of drawers in front of a slatted wall", + "marken/otterpohl/referenz-neugebauer.webp": "Winding staircase with oak treads", + "marken/otterpohl/referenz-luecke-15.webp": "Illuminated corner wall shelves", + "marken/otterpohl/referenz-berkemeier-treppe.webp": "Staircase with continuous skirting and lighting detail", + "marken/otterpohl/referenz-objektbau-luecke-technik.webp": "Commercial project: sales room with counter and shelving wall", + "marken/otterpohl/referenz-otterpohl-11.webp": "Sideboard with oak top in an office", + "marken/otterpohl/werkstatt-titel.webp": "Production in the workshop in Rheda-Wiedenbrück", + "marken/otterpohl/werkstatt-02.webp": "CNC machining centre in production", + "marken/otterpohl/werkstatt-03.webp": "Installing a door on site", + "marken/otterpohl/werkstatt-04.webp": "Hand tools in the workshop", + "marken/otterpohl/werkstatt-05-lift.webp": "Delivery by furniture lift – installation included" + } + } +} \ No newline at end of file diff --git a/dev/12-01-2026/Moebeldatenliste Stand 4.11.2025.csv b/dev/2026-01-12/Moebeldatenliste Stand 4.11.2025.csv similarity index 100% rename from dev/12-01-2026/Moebeldatenliste Stand 4.11.2025.csv rename to dev/2026-01-12/Moebeldatenliste Stand 4.11.2025.csv diff --git a/dev/12-01-2026/db-backup.sql b/dev/2026-01-12/db-backup.sql similarity index 100% rename from dev/12-01-2026/db-backup.sql rename to dev/2026-01-12/db-backup.sql diff --git a/dev/12-01-2026/entwicklungsplan.md b/dev/2026-01-12/entwicklungsplan.md similarity index 100% rename from dev/12-01-2026/entwicklungsplan.md rename to dev/2026-01-12/entwicklungsplan.md diff --git a/dev/12-01-2026/konzeption.md b/dev/2026-01-12/konzeption.md similarity index 100% rename from dev/12-01-2026/konzeption.md rename to dev/2026-01-12/konzeption.md diff --git a/dev/27-02-2026/B2in Website-Architektur.md b/dev/2026-02-27/B2in Website-Architektur.md similarity index 100% rename from dev/27-02-2026/B2in Website-Architektur.md rename to dev/2026-02-27/B2in Website-Architektur.md diff --git a/dev/27-02-2026/b2in-local-for-local.md b/dev/2026-02-27/b2in-local-for-local.md similarity index 100% rename from dev/27-02-2026/b2in-local-for-local.md rename to dev/2026-02-27/b2in-local-for-local.md diff --git a/dev/27-02-2026/b2in-umsetzung-changelog.md b/dev/2026-02-27/b2in-umsetzung-changelog.md similarity index 100% rename from dev/27-02-2026/b2in-umsetzung-changelog.md rename to dev/2026-02-27/b2in-umsetzung-changelog.md diff --git a/dev/27-02-2026/b2in-website-umsetzungsplan.md b/dev/2026-02-27/b2in-website-umsetzungsplan.md similarity index 100% rename from dev/27-02-2026/b2in-website-umsetzungsplan.md rename to dev/2026-02-27/b2in-website-umsetzungsplan.md diff --git a/dev/27-02-2026/backup-before-relaunch/about.blade.php b/dev/2026-02-27/backup-before-relaunch/about.blade.php similarity index 100% rename from dev/27-02-2026/backup-before-relaunch/about.blade.php rename to dev/2026-02-27/backup-before-relaunch/about.blade.php diff --git a/dev/27-02-2026/backup-before-relaunch/b2in.blade.php b/dev/2026-02-27/backup-before-relaunch/b2in.blade.php similarity index 100% rename from dev/27-02-2026/backup-before-relaunch/b2in.blade.php rename to dev/2026-02-27/backup-before-relaunch/b2in.blade.php diff --git a/dev/27-02-2026/backup-before-relaunch/contact.blade.php b/dev/2026-02-27/backup-before-relaunch/contact.blade.php similarity index 100% rename from dev/27-02-2026/backup-before-relaunch/contact.blade.php rename to dev/2026-02-27/backup-before-relaunch/contact.blade.php diff --git a/dev/27-02-2026/backup-before-relaunch/content.php b/dev/2026-02-27/backup-before-relaunch/content.php similarity index 100% rename from dev/27-02-2026/backup-before-relaunch/content.php rename to dev/2026-02-27/backup-before-relaunch/content.php diff --git a/dev/27-02-2026/backup-before-relaunch/ecosystem.blade.php b/dev/2026-02-27/backup-before-relaunch/ecosystem.blade.php similarity index 100% rename from dev/27-02-2026/backup-before-relaunch/ecosystem.blade.php rename to dev/2026-02-27/backup-before-relaunch/ecosystem.blade.php diff --git a/dev/27-02-2026/backup-before-relaunch/footer.blade.php b/dev/2026-02-27/backup-before-relaunch/footer.blade.php similarity index 100% rename from dev/27-02-2026/backup-before-relaunch/footer.blade.php rename to dev/2026-02-27/backup-before-relaunch/footer.blade.php diff --git a/dev/27-02-2026/backup-before-relaunch/hero.blade.php b/dev/2026-02-27/backup-before-relaunch/hero.blade.php similarity index 100% rename from dev/27-02-2026/backup-before-relaunch/hero.blade.php rename to dev/2026-02-27/backup-before-relaunch/hero.blade.php diff --git a/dev/27-02-2026/backup-before-relaunch/home.blade.php b/dev/2026-02-27/backup-before-relaunch/home.blade.php similarity index 100% rename from dev/27-02-2026/backup-before-relaunch/home.blade.php rename to dev/2026-02-27/backup-before-relaunch/home.blade.php diff --git a/dev/27-02-2026/backup-before-relaunch/magazin.blade.php b/dev/2026-02-27/backup-before-relaunch/magazin.blade.php similarity index 100% rename from dev/27-02-2026/backup-before-relaunch/magazin.blade.php rename to dev/2026-02-27/backup-before-relaunch/magazin.blade.php diff --git a/dev/27-02-2026/backup-before-relaunch/partner.blade.php b/dev/2026-02-27/backup-before-relaunch/partner.blade.php similarity index 100% rename from dev/27-02-2026/backup-before-relaunch/partner.blade.php rename to dev/2026-02-27/backup-before-relaunch/partner.blade.php diff --git a/dev/27-02-2026/backup-before-relaunch/web.php b/dev/2026-02-27/backup-before-relaunch/web.php similarity index 100% rename from dev/27-02-2026/backup-before-relaunch/web.php rename to dev/2026-02-27/backup-before-relaunch/web.php diff --git a/dev/27-02-2026/review-architektur-02-03-2026.md b/dev/2026-02-27/review-architektur-02-03-2026.md similarity index 100% rename from dev/27-02-2026/review-architektur-02-03-2026.md rename to dev/2026-02-27/review-architektur-02-03-2026.md diff --git a/dev/12-03-2026/content.md b/dev/2026-03-12/content.md similarity index 100% rename from dev/12-03-2026/content.md rename to dev/2026-03-12/content.md diff --git a/dev/12-03-2026/magazin.md b/dev/2026-03-12/magazin.md similarity index 100% rename from dev/12-03-2026/magazin.md rename to dev/2026-03-12/magazin.md diff --git a/dev/12-03-2026/tasks.md b/dev/2026-03-12/tasks.md similarity index 100% rename from dev/12-03-2026/tasks.md rename to dev/2026-03-12/tasks.md diff --git a/dev/2026-08-28/B2in_Interior-Konzept.md b/dev/2026-08-28/B2in_Interior-Konzept.md new file mode 100644 index 00000000..6620f08d --- /dev/null +++ b/dev/2026-08-28/B2in_Interior-Konzept.md @@ -0,0 +1,102 @@ +# B2in Interieur +## Konzept zur Neuausrichtung der Website – Richtung, Struktur und Textauszüge + +*Adametz.Media | Kevin Adametz | Juli 2026 | Zur Abstimmung* + +--- + +Hallo Marcel, dieses Dokument fasst zusammen, wie ich die Website auf die neue Ausrichtung umbaue – Struktur, Gewichtung und ausgewählte Textauszüge, damit Du die Richtung beurteilen kannst. Es sind bewusst nicht alle Texte enthalten, sondern die Stellen, die den Ton setzen. Nimm Dir in Ruhe die Zeit, es durchzugehen; Dein gesammeltes Feedback baue ich nach meinem Urlaub direkt ein. + +--- + +## 1. Die neue Ausrichtung in drei Sätzen + +B2in stellt künftig das Interieur und die Kernmarken nach vorne – CABINET, Rotpunkt Küchen, Febrü und weitere. Die Immobilien bleiben Teil des Angebots, rücken aber bewusst nach hinten: Ergänzung statt Aufmacher. Deine Idee der Doppelbedeutung nehme ich dabei auf: + +> **B2in – Bridges to International. Bridges to Interior.** +> +> *Die internationale Herkunft bleibt Teil der Geschichte, das Interieur wird der Kern. Im Logo wird das sichtbar: B2in mit dem Zusatz „Interieur".* + +Wichtiges Prinzip dabei: **B2in Interieur ist das Dach – die Kernmarken sind die Gesichter.** Jede Marke behält ihren eigenen Auftritt und ihre eigene Stärke; B2in verbindet sie, ohne sie zu vermischen. Genau das unterscheidet eine Premium-Gruppe von einem Gemischtwarenladen. + +--- + +## 2. Der neue Seitenaufbau + +Die Seite wird nicht neu gebaut – Struktur und Technik bleiben. Es ändern sich Reihenfolge, Gewichtung und Inhalte. So sieht der Aufbau der Startseite künftig aus: + +| # | Bereich | Was passiert | +|---|---------|--------------| +| 1 | **Ankündigungsleiste** | Bleibt als Instrument, trägt künftig Interieur-Themen (z.B. Neuheiten aus den Showrooms) statt dauerhaft Immobilien-Launches. | +| 2 | **Hero** | Neue Headline und neue Bildwelt: Interieur und Marken zuerst. Zwei Buttons: „Unsere Marken entdecken" und „Termin anfragen". | +| 3 | **Weiche Privat / Geschäft** | Neu: Zwei klare Wege direkt unter dem Einstieg – Privatkunden (Einrichtung fürs Zuhause) und Geschäftskunden (Ausstattung für Projekte, „bis zur letzten Blume"). | +| 4 | **Kernmarken** | Neu: Das Herzstück. Kacheln für CABINET, Rotpunkt, Febrü – über das CMS von Dir selbst erweiterbar, jede Marke mit eigener Detailseite. | +| 5 | **Über Dich / Vertrauen** | Bleibt – Du als Gesicht und persönlicher Ansprechpartner. Text dreht sich: Einrichtungskompetenz zuerst, Immobilien als ergänzende Expertise am Ende. | +| 6 | **Aktuelles (Display)** | Neu: Die Inhalte aus dem Display-CMS erscheinen auf der Website (9:16). Dazu kommt Deine neue, selbst pflegbare Rubrik-Seite als eigenes Web-Display. | +| 7 | **Immobilien-Teaser** | Bleibt, aber klein und dezent am Ende der Seite – wer gezielt sucht, findet den Weg; wer wegen Einrichtung kommt, wird nicht abgelenkt. | +| 8 | **Abschluss & Kontakt** | Terminanfrage-Widget (Name, E-Mail, Wunschtermin, Notiz, Markenauswahl) plus WhatsApp-Button, der direkt den Chat mit Dir öffnet. | + +In der Navigation rückt **„Marken" nach vorne, „Immobilien" nach hinten**. Auch Titel und Beschreibung für Google werden auf die neue Ausrichtung umgestellt, damit die Seite auch in der Suche die richtige Geschichte erzählt. + +--- + +## 3. Textauszüge – so klingt die neue Richtung + +Drei Auszüge, die den Ton setzen. Alle weiteren Texte folgen dieser Linie. + +### 3.1 Hero (Einstieg) + +> **B2in Interieur – Premium-Einrichtung von starken Marken. Für Ihr Zuhause. Für Ihr Projekt.** +> +> *Von der einzelnen Maßanfertigung bis zur vollständigen Ausstattung – mit CABINET, Rotpunkt Küchen, Febrü und einem Netzwerk regionaler Fachexperten.* + +### 3.2 Die Weiche: Privat / Geschäft + +> **Einrichtung für Ihr Zuhause** +> +> Einzelne Möbelstücke, maßgefertigte Einbaulösungen oder die komplette Einrichtung: Unsere Kernmarken und unser Fachhandels-Netzwerk begleiten Sie von der ersten Idee bis zur Montage. + +> **Ausstattung für Ihr Projekt** +> +> Vollständige Einrichtung für Objekte, Büros und Projektentwicklungen – koordiniert aus einer Hand, von der Küche bis zur letzten Blume. Mit deutscher Vertragssicherheit und einem eingespielten Herstellernetzwerk. + +### 3.3 Beispiel Kernmarken-Kachel (CABINET) + +> **CABINET – Einbauschränke nach Maß.** +> +> Maßgefertigte Schranklösungen, geplant bis auf den Millimeter – gefertigt für Räume, in denen Standard nicht genügt. Erleben Sie die Möglichkeiten in unserem Showroom in Bielefeld. + +Rotpunkt und Febrü bekommen Kacheln im selben Stil. Bei Febrü setze ich den Schwerpunkt auf das Zuhause-Arbeiten (Home-Office) und nenne die Büro- und Unternehmensausstattung als zweiten Aspekt – so passt die Marke in beide Welten, mit der richtigen Gewichtung. + +--- + +## 4. Was bewusst so bleibt + +- **Die Immobilien** bleiben statisch wie bisher und rücken nur in der Gewichtung nach hinten. Der Bereich selbst bleibt vollständig erreichbar. +- **Das Magazin** bleibt bestehen – die neue Rubrik-Seite ergänzt es, ersetzt es aber nicht. +- **Videos** laufen über YouTube-Einbindung – unkompliziert und ohne eigene Videotechnik. Das Influencer-Video bekommt darüber einen gut sichtbaren Platz. + +--- + +## 5. Dein Feedback – diese Punkte entscheide bitte Du + +Damit ich nach dem Urlaub direkt umsetzen kann, brauche ich zu diesen Punkten Deine Rückmeldung: + +| Punkt | Frage an Dich | +|-------|---------------| +| **Logo-Zusatz „Interieur"** | Freigabe der Ergänzung im Logo. Kläre bitte auch, ob Du eine Logo-Datei anpassen lässt oder ich das übernehmen soll. | +| **Claim** | Vorschlag: „Premium-Einrichtung. Persönlich gemacht." (ersetzt „Connecting Design and Property"). Passt das – oder soll „Bridges to Interior" selbst als Claim-Zeile erscheinen? | +| **Hero-Headline** | Passt Dir die Richtung aus Auszug 3.1? | +| **Febrü-Tonalität** | Home-Office zuerst, Büro als zweiter Aspekt – einverstanden? | +| **Name der neuen Rubrik** | „Aktuelles", „Referenzen", „Projekte" – oder ein anderer Name? | +| **Bildmaterial** | Für Hero und Kernmarken brauche ich hochwertige Motive (Logos und Basis-Infos zu Rotpunkt und Febrü ebenfalls). Was kannst Du liefern, was soll ich auswählen? | + +--- + +## 6. Zeitplan + +- **Bis Anfang August:** Du gehst dieses Konzept in Ruhe durch und sammelst Dein Feedback zu den Punkten aus Abschnitt 5. +- **Ab meiner Rückkehr:** Ich baue Dein Feedback ein und setze Struktur, Texte und Funktionen um. Zwischenstände zeige ich Dir vor dem Livegang. +- **Ende August:** Livegang der neuen Ausrichtung – vorausgesetzt, Feedback und Zulieferungen (Bilder, Logos, Marken-Infos) liegen rechtzeitig vor. + +*Bei Fragen erreichst Du mich nach dem Urlaub wie gewohnt – dringende Punkte gerne per Mail, ich arbeite sie der Reihe nach ab.* \ No newline at end of file diff --git a/dev/2026-08-28/Bildschirmfoto 2026-09-24 um 17.30.16.png b/dev/2026-08-28/Bildschirmfoto 2026-09-24 um 17.30.16.png new file mode 100644 index 00000000..95ac6279 Binary files /dev/null and b/dev/2026-08-28/Bildschirmfoto 2026-09-24 um 17.30.16.png differ diff --git a/dev/2026-08-28/Farbwelt und Stil.png b/dev/2026-08-28/Farbwelt und Stil.png new file mode 100644 index 00000000..f6757b2a Binary files /dev/null and b/dev/2026-08-28/Farbwelt und Stil.png differ diff --git a/dev/2026-08-28/Februe_Webseitentext_B2in_FINAL.pdf b/dev/2026-08-28/Februe_Webseitentext_B2in_FINAL.pdf new file mode 100644 index 00000000..eb1ba303 Binary files /dev/null and b/dev/2026-08-28/Februe_Webseitentext_B2in_FINAL.pdf differ diff --git a/dev/2026-08-28/Februe_Webseitentext_FINAL.md b/dev/2026-08-28/Februe_Webseitentext_FINAL.md new file mode 100644 index 00000000..b1a53a1a --- /dev/null +++ b/dev/2026-08-28/Februe_Webseitentext_FINAL.md @@ -0,0 +1,236 @@ +# B2in Interior · Febrü + +**Arbeiten, wo man gerne bleibt.** + +Webseitentext und Umsetzungsstruktur für die Febrü-Seite +Stand: 31. August 2026 · Korrigierte Fassung zur Umsetzung + +--- + +## Umsetzungshinweise (nicht veröffentlichen) + +**Webstruktur:** Der normale Seitentext bleibt direkt sichtbar. Alle als `AUFKLAPPBARER DETAILBEREICH` gekennzeichneten Vertiefungen werden als Akkordeon umgesetzt. So bleibt die Seite schnell erfassbar, ohne dass Inhalt verloren geht. + +**CTA:** Kein zweiter Button. Das bereits vorhandene schwebende Terminanfrage-Widget erhält auf dieser Markenseite die Beschriftung **„Persönliche Arbeitsplatzberatung vereinbaren"**. Es bleibt beim Scrollen sichtbar und darf auf dem Smartphone keine Inhalte verdecken. + +--- + +## Hero + +Ein Büro ist kein Parkplatz für Schreibtische. Es ist ein Raum für Konzentration, Austausch, Bewegung und neue Ideen. Und manchmal entsteht die beste Idee eben nicht am Schreibtisch, sondern zwischen Kaffeemaschine, Lounge und einem guten Gespräch. + +Febrü verbindet ergonomische Arbeitsplätze mit wohnlichem Design, intelligentem Stauraum, durchdachter Akustik und flexiblen Raumstrukturen. + +Wir entwickeln daraus Arbeitswelten, die zu den Menschen, ihren Aufgaben und ihrer Umgebung passen – vom einzelnen Homeoffice bis zur vollständigen Unternehmensfläche. + +**Ihr Arbeitsplatz. Persönlich geplant.** + +--- + +## Zuhause oder Projekt. Zwei Wege. Derselbe Anspruch. + +Unsere Startseite führt bewusst über zwei Wege: Zuhause und Projekt. Denn ein einzelnes Homeoffice stellt andere Anforderungen als eine Büroetage mit fünfzig Arbeitsplätzen. + +Unterschiedliche Aufgaben brauchen unterschiedliche Planung und natürlich auch unterschiedliche Kalkulationen. Bei uns gibt es trotzdem nur Kunden – mit unterschiedlichen Räumen, Anforderungen und Stückzahlen. Der Anspruch an Produkt, Beratung und Service bleibt derselbe. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Bei uns gibt es Kunden – keine Schubladen +> +> B2B und B2C sind Begriffe aus Präsentationen und Vertriebsschulungen. Früher hieß es Privatkunde oder Firmenkunde. Oder, noch schlimmer: A-, B- oder C-Kunde. Bei diesem Schubladendenken machen wir nicht mit. +> +> Natürlich beeinflusst die Menge den Preis. Wer fünfzig Arbeitsplätze einrichtet, erhält eine andere Kalkulation als jemand, der einen einzelnen Schreibtisch für sein Homeoffice sucht. Alles andere wäre weder ehrlich noch kaufmännisch sinnvoll. +> +> Die Menge verändert aber weder die Qualität des Produktes noch die Sorgfalt der Planung, die persönliche Beratung oder den Service. Ein einzelner Arbeitsplatz im privaten Zuhause verdient dieselbe Aufmerksamkeit wie eine vollständige Büroetage. +> +> Febrü bleibt Febrü. B2in bleibt B2in. Und jeder Kunde erhält eine Lösung, die zu seinem tatsächlichen Bedarf passt. + +**Ob im Kleinen oder im Großen – die Detailtreue entscheidet.** + +--- + +## Aus Herford. Für moderne Arbeitswelten. + +Febrü entwickelt und produziert hochwertige Büromöbel direkt im ostwestfälischen Herford – nur wenige Kilometer von Bielefeld entfernt. Eine Fertigungstiefe von 95 Prozent ermöglicht kurze Wege, verlässliche Qualität und hohe Flexibilität bei Materialien, Farben und individuellen Anforderungen. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Von einem Schreibtisch bis zum vollständigen Bürotrakt +> +> Das Sortiment reicht von ergonomischen und höhenverstellbaren Schreibtischen über Konferenz- und Besprechungstische, Bürostühle und Loungeelemente bis zu Empfangslösungen, Stauraum, Akustikelementen, mobilen Medienmöbeln, Schließfachsystemen und flexiblen Raumstrukturen. +> +> Damit lässt sich ein einzelner Arbeitsplatz genauso überzeugend planen wie eine Praxis, eine Kanzlei, ein Konferenzbereich oder ein vollständiger Bürotrakt. + +**Made in Herford. Geplant in Bielefeld.** + +--- + +## Nicht drei Marken. Ein durchgängiger Raum. + +Ein Bürotrakt endet nicht am Schreibtisch. Menschen brauchen Orte zum Arbeiten, für Besprechungen und Rückzug – aber ebenso für Pausen, den gemeinsamen Kaffee, das Mittagessen und den informellen Austausch. + +Genau hier greifen Febrü, Rotpunkt und CABINET bei uns ineinander: Febrü gestaltet die Arbeitswelt, Rotpunkt die Küche im Bürotrakt und CABINET die millimetergenaue Sonderlösung. + +Entscheidend ist nicht, welcher Hersteller welches Möbel liefert. Entscheidend ist, dass am Ende alles zusammengehört. Wir stimmen Arbeitsplätze, Küche, Stauraum, Farben, Materialien, Beleuchtung und Akustik zu einem durchgängigen Konzept aufeinander ab. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Wie die drei Marken zusammenspielen +> +> Febrü gestaltet ergonomische Arbeitsplätze, Konferenzbereiche, Loungezonen, Akustik, Stauraum und flexible Raumstrukturen. +> +> Rotpunkt gestaltet Mitarbeiterküchen, Coffee-Points und gemeinsam genutzte Aufenthaltsküchen als selbstverständlichen Bestandteil der Arbeitswelt – und nicht als übrig gebliebene Funktionszeile. Gerade hier entstehen oft Gespräche, Verbindungen und Ideen, für die im offiziellen Meeting kein Platz war. +> +> CABINET übernimmt dort, wo Nischen vollständig genutzt, Schränke von Wand zu Wand und vom Boden bis zur Decke geplant oder besondere Übergänge zwischen Arbeitsplatz, Stauraum und Architektur geschaffen werden sollen. So entstehen beispielsweise maßgefertigte Garderoben, Aktenschränke, Medienlösungen und Stauraumelemente. + +**Febrü für die Arbeitswelt. Rotpunkt für die Küche. CABINET für die millimetergenaue Sonderlösung. B2in für das Ganze.** + +--- + +## Ein Arbeitsplatz. Fünfzig Arbeitsplätze. Ein Anspruch. + +Ob wir über einen einzelnen Arbeitsplatz oder einen vollständigen Bürotrakt sprechen: Das grundsätzliche Problem bleibt dasselbe. Fühlt sich der Mensch, der dort täglich arbeitet, gesehen und wertgeschätzt – oder wurde ihm lediglich irgendwo ein Tisch hingestellt? + +Die Stückzahl verändert den Umfang der Aufgabe, aber nicht ihre Bedeutung. Wir bewerten einen Arbeitsplatz deshalb nicht nach Quadratmetern oder Auftragswert, sondern danach, was er für den Menschen leisten muss. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Wertschätzung ist keine Frage der Stückzahl +> +> Gerade in Zeiten des Fachkräftemangels können Unternehmen es sich nicht leisten, Arbeitsbedingungen als Nebensache zu behandeln. Wer Top-Leistung erwartet, muss die passenden Voraussetzungen schaffen. Ein Obstkorb und kostenloses Wasser sind freundlich – ersetzen aber keinen guten Arbeitsplatz. +> +> Besonders deutlich wird das bei teilzeitbeschäftigten Müttern – selbstverständlich genauso bei Vätern und allen anderen Menschen mit familiärer Sorgeverantwortung. Teilzeit bedeutet nicht halbe Leistung. Oft wird in einem kürzeren Zeitfenster hoch konzentriert gearbeitet, während neben dem nächsten Onlinemeeting gleichzeitig Schule, Termine, Betreuung und damit unsere wichtigste gemeinsame Ressource organisiert werden: unser Nachwuchs. +> +> Gerade hier darf der Arbeitsplatz kein Provisorium aus Küchentisch, Beistelltisch oder Schlafzimmerecke sein. Er muss sofort funktionieren, Bewegung ermöglichen, technisch durchdacht sein und sich trotzdem vernünftig in das Zuhause einfügen. Für den Menschen, der ihn täglich nutzt, ist ein einzelner Arbeitsplatz keine kleine Lösung. Er ist seine vollständige Arbeitswelt. + +--- + +## Ergonomie, die im Alltag funktioniert + +Ein Arbeitsplatz muss sich dem Menschen anpassen – nicht umgekehrt. Höhenverstellbare Schreibtische und ergonomische Bürostühle schaffen Bewegung und unterstützen eine gesunde Haltung. + +Ergonomie endet aber nicht bei Tisch und Stuhl. Auch Laufwege, Greifräume, Bildschirmposition, Beleuchtung, Stauraum und der Wechsel zwischen Tätigkeiten bestimmen, wie angenehm und produktiv ein Arbeitstag verläuft. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Und nein: Wir meinen nicht nur den Weg zur Kaffeemaschine +> +> Sinnvolle Laufwege sind Teil einer guten Planung – auch wenn Kaffeemaschine und Kühlschrank zweifellos eine gewisse Bedeutung für den Arbeitsalltag haben. +> +> Das gilt für vier Stunden ebenso wie für zehn Stunden am Schreibtisch, im Unternehmen genauso wie im privaten Zuhause. Und natürlich müssen die Möbel gestalterisch zum Raum passen. Wer denkt: „Das sieht doch keiner – außer den Mitarbeitern", hat den ersten entscheidenden Fehler bereits gemacht. Die Mitarbeiter sehen es. Jeden Tag. Und sie arbeiten darin. + +Marcel Scheibe, Geschäftsführer von B2in, bringt es persönlich auf den Punkt: + +> „Ich bin, sagen wir, alt genug, um beim Aufstehen gelegentlich zu stöhnen. Und ehrlich gesagt fühle ich mich an manchen Tagen noch etwas älter. Mein Arzt sagt, ich solle weniger sitzen. Mein Beruf findet nun einmal zu einem großen Teil am Computer statt. Ergo brauche ich eine Lösung, die mir mehr Bewegung ermöglicht, ohne dass ich dafür meinen Beruf wechseln muss." + +--- + +## Office meets Interior + +Identische Schreibtischreihen werden einem modernen Arbeitstag nicht mehr gerecht. Menschen benötigen Bereiche für Konzentration, spontane Gespräche, Teamarbeit, Videokonferenzen, vertrauliche Besprechungen und erholsame Pausen. + +Febrü verbindet dafür klassische Arbeitsplatzmöbel mit wohnlichen Loungeelementen, mobilen Multifunktionslösungen, Stauraum, Akustik und flexibler Raumzonierung. So entsteht nicht für jede Person derselbe Platz, sondern für jede Tätigkeit der richtige. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Das Wir und das Ich +> +> Ja, ja – das könnte man unter dem üblichen Verkaufs-Blabla abheften. Dahinter steht aber eine einfache Wahrheit: Verantwortung lässt sich nicht dauerhaft nach außen delegieren. Was bleibt, sind das Wir und das Ich. +> +> Ein Unternehmen muss Bedingungen schaffen, unter denen Menschen gemeinsam gut arbeiten, sich austauschen und konzentrieren können. Der Einzelne erhält die Möglichkeit – und trägt auch die Verantwortung –, daraus das Beste zu machen. +> +> Räume und Möbel schaffen allein noch keine gute Unternehmenskultur. Schlechte Arbeitsbedingungen können eine gute Kultur aber jeden Tag unnötig erschweren. +> +> Das Unternehmen stärkt das Wir. Der Einzelne macht daraus das Beste. + +--- + +## Ruhe und Flexibilität sind planbar. + +Akustik, mobile Elemente und flexible Raumlösungen helfen dabei, Bereiche für Kommunikation, Konzentration und Rückzug zu schaffen – und sie später an veränderte Teams und Arbeitsweisen anzupassen. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Akustik und flexible Raumstrukturen +> +> Hallende Räume, Telefongespräche und Videokonferenzen können Konzentration und Sprachverständlichkeit erheblich beeinträchtigen. Akustikpaneele, Trennwände, Screens und entsprechend geplante Möbel helfen, Schall zu reduzieren. +> +> Mit modularen Möbeln und Raum-in-Raum-Lösungen lassen sich Arbeitsbereiche neu ordnen, ohne bei jeder Veränderung gleich feste Wände bauen zu müssen. Das ist im großen Büro wichtig – und im privaten Zuhause häufig noch wichtiger. + +--- + +## Gestaltung, die zur Identität passt + +Ein Büro ist ein sichtbarer Teil der Unternehmenskultur. Farben, Materialien und Raumwirkung beeinflussen, wie Mitarbeitende, Kunden und Bewerber ein Unternehmen wahrnehmen. Im Homeoffice muss der Arbeitsplatz professionell funktionieren und sich zugleich in die vorhandene Einrichtung einfügen. + +Dank der hohen Fertigungstiefe bietet Febrü eine große Auswahl an Materialien, Dekoren, Stoffen und Gestellfarben. Corporate Design muss nicht am Briefpapier enden. Und ein Homeoffice muss nach Feierabend nicht wie ein kleines Finanzamt aussehen. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Und ja: Pflanzen gehören dazu +> +> Eine Pflanze macht aus einem Unternehmen noch kein nachhaltiges Unternehmen. Sie macht aus einem technisch eingerichteten Raum aber häufig erst einen Ort, an dem Menschen gerne arbeiten. Das hat nichts mit Greenwashing zu tun, sondern schlicht mit Atmosphäre und Stil. + +--- + +## Nachhaltigkeit, die länger als bis zum nächsten Umzug hält + +Nachhaltigkeit beginnt bei der Lebensdauer eines Möbelstücks. Viele Febrü-Möbel sind modular aufgebaut, sodass Komponenten ausgetauscht oder ergänzt werden können, statt bei veränderten Anforderungen das gesamte Möbelstück zu ersetzen. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Konkrete Standards statt allgemeiner Versprechen +> +> Febrü produziert mit hoher Fertigungstiefe direkt in Herford. Das sorgt für kurze Wege und kontrollierte Prozesse. Mit laserTEC entstehen hochwertige, fugenlose Kanten ohne zusätzlichen Klebstoff. +> +> Febrü arbeitet nach ISO 9001 und ISO 14001 und verfügt über einen PEFC-Produktkettennachweis. Ausgewählte Febrü-Tischsysteme und Stauraummöbel tragen den Blauen Engel. +> +> Nachhaltig ist nicht das Möbelstück mit dem längsten Werbetext. Nachhaltig ist das Möbelstück, das viele Jahre funktioniert und veränderte Anforderungen mitmacht. + +--- + +## Warum Febrü bei uns? + +Bei uns beginnt eine Planung nicht mit einem Möbelkatalog, sondern mit den Menschen und der Frage, wie tatsächlich gearbeitet wird. Wo ist Konzentration gefragt? Wo entstehen Gespräche? Welche Bereiche benötigen Diskretion? Und wie viel Stauraum wird wirklich gebraucht? + +Wir verbinden Ergonomie, Laufwege, Akustik, Stauraum, Beleuchtung, Kommunikation und Rückzug zu einem Gesamtkonzept. Es geht nicht darum, möglichst viele Möbel in einen Raum zu stellen. Es geht darum, eine bessere Arbeitswelt zu schaffen. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Im Homeoffice stellen sich andere Fragen +> +> Wie sichtbar darf der Arbeitsplatz sein? Wo verschwinden Technik und Unterlagen nach Feierabend? Und wie lässt sich professionelles Arbeiten so in die vorhandene Einrichtung integrieren, dass das Zuhause ein Zuhause bleibt? +> +> Auch hier gilt: Ein einzelner Arbeitsplatz ist keine kleinere Aufgabe. Er braucht nur eine andere Antwort als ein vollständiger Bürotrakt. + +--- + +## Erleben statt nur aus dem Katalog auswählen + +Durch die Nähe zwischen Bielefeld und Herford können Febrü-Produkte nach Abstimmung persönlich erlebt werden. Wir organisieren und begleiten den Besuch der Ausstellung – für einen Schreibtisch genauso wie für einen vollständigen Unternehmensstandort. + +Dort lassen sich Materialien anfassen, Stühle und Tische ausprobieren, Akustiklösungen erleben und unterschiedliche Arbeitswelten vergleichen. Sie müssen sich nicht allein auf ein Verkaufsgespräch verlassen. + +--- + +## Abschluss + +**Ihr Arbeitsplatz. Persönlich geplant.** + +Ob Homeoffice, Praxis, Kanzlei, wachsendes Unternehmen oder vollständige Arbeitswelt: Wir planen jeden Arbeitsplatz mit demselben Anspruch. Nur der Umfang verändert sich. + +Gemeinsam entwickeln wir eine Arbeitsumgebung, die gesundes Arbeiten unterstützt, gestalterisch überzeugt und den Menschen zeigt, dass ihre tägliche Leistung wahrgenommen und wertgeschätzt wird – persönlich geplant bei B2in in der Rathausstraße 11 in Bielefeld. + +**Ob im Kleinen oder im Großen – die Detailtreue entscheidet.** + +--- + +## Interne Quellenhinweise (nicht veröffentlichen) + +Die Quellen dienen der Umsetzung, den Herstellern und einer abschließenden rechtlichen Prüfung. Aussagen nur im belegten Umfang veröffentlichen. + +- Febrü, Nachhaltigkeit und Zertifizierungen: https://www.februe.de/unternehmen/nachhaltigkeit +- Blauer Engel, Febrü: https://www.blauer-engel.de/de/unternehmen/februe-bueromoebel-gmbh +- Blauer Engel listet für Febrü zwei Produktgruppen: ausgewählte Tischsysteme sowie ausgewählte Stauraummöbel. **Produktbezug bei Veröffentlichung zwingend beibehalten** – keine pauschale Aussage über das Gesamtsortiment. +- Die pauschale Aussage zur nahezu vollständigen Wiederverwertbarkeit von Aluminium und Stahl wurde entfernt. + +**Vor Veröffentlichung:** +- Herstellerfreigabe einholen +- Umweltaussagen mit Blick auf die EmpCo-Regeln (ab 27.09.2026) prüfen lassen + +--- + +## Änderungen gegenüber der Fassung vom 31.08. + +- Der erklärende Satz „Die Aussage bezieht sich ausdrücklich auf die offiziell gelisteten Produktgruppen und nicht pauschal auf das gesamte Sortiment" wurde aus dem Kundentext entfernt. Die Aussage davor ist bereits präzise; der Hinweis steht jetzt in den internen Quellenhinweisen. +- Die Formulierung zu teilzeitbeschäftigten Müttern bleibt unverändert. diff --git a/dev/2026-08-28/Korrekturen-2026-10-08.md b/dev/2026-08-28/Korrekturen-2026-10-08.md new file mode 100644 index 00000000..22f45724 --- /dev/null +++ b/dev/2026-08-28/Korrekturen-2026-10-08.md @@ -0,0 +1,123 @@ +Im Hero auf der Home im Slider bitte noch diese beiden Bilder mit aufnehmen + +an pos 4 = dev/2026-08-28/images/februe/Februe_Active-2-0_Bureo_300dpi_HighRes.jpg + +an pos 8, bzw 9 = +dev/2026-08-28/images/februe/Februe_Elements-Soul_Grossraum_300dpi_HighRes.jpg + + + +bei der Rubrik „Regional verbunden“ sind aktuell teilweise die falschen Vereine bzw. Bezeichnungen hinterlegt. +Bitte dort die tatsächlich von uns unterstützten Vereine einpflegen: +DSC Arminia Bielefeld +TC Bad Salzuflen +https://www.tcbadsalzuflen.de/ +Tennisclub Hiddenhausen von 1973 e. V. +https://tc-hiddenhausen.de/ +TC Blau Weiss Halle e. V. +https://www.tcbw-hallewestf.de/Home + +Beim TC Hiddenhausen ist auf der aktuellen Seite offenbar schon das richtige Logo eingebaut, darunter steht aber fälschlicherweise „TC Hövelhof“. Das bitte entsprechend korrigieren. +Der aktuell aufgeführte TC Bad Waldliesborn-Horn gehört dort nicht hinein und sollte ersetzt werden. + +Die Texte darunter bitte möglichst einheitlich und schlicht halten, z. B.: +TC Bad Salzuflen (logo dev/2026-08-28/sponsoren-logos/TCBadSalzuflen.png) +Tennisclub aus Bad Salzuflen – regional verwurzelt und engagiert im Vereinssport. +TC Hiddenhausen (LOGO dev/2026-08-28/sponsoren-logos/TCH_Logo.png) +Tennisclub aus Hiddenhausen – regional verwurzelt und engagiert im Vereinssport. +TC Blau Weiss Halle (logo dev/2026-08-28/sponsoren-logos/TCBWH_Logo.jpg) +Tennisclub aus Halle (Westfalen) – regional verwurzelt und engagiert im Vereinssport. + + +Inhlatliche korrekturen + +Das sind keine neuen gestalterischen Wünsche, sondern im Wesentlichen inhaltliche Konsistenz und ein paar Texte, die noch aus einer früheren Richtung stammen. + +1. Maßanfertigung / Aufmaß – bitte einmal durchgängig angleichen +Auf der CABINET-Seite ist der Ablauf unter „Ein Bild und ein grobes Maß reichen für den Anfang“ eigentlich schon genau richtig beschrieben. Den tatsächlichen Ablauf würde ich aber noch etwas genauer darstellen und bitte dann auch überall auf der Website entsprechend durchziehen: +Foto / Grundriss + grobe Maße → Beratung → Planung & Angebot → Angebotsannahme → Anzahlung → professionelles Aufmaß → Feinplanung / Fertigungsfreigabe → Bestellung / Fertigung +Der für mich wichtige Punkt ist: +Am Anfang reicht das grobe Maß. Am Ende entscheidet der Millimeter. +Der Kunde muss also nicht erst sein Haus millimetergenau vermessen, bevor er zu uns kommen kann. Mit Fotos, einem Grundriss und ungefähren Maßen können wir beraten, planen und bereits ein konkretes Angebot erstellen. +Wenn das Angebot angenommen und die Anzahlung erfolgt ist, übernehmen wir das professionelle Aufmaß vor Ort. Ab diesem Zeitpunkt zählt dann tatsächlich jeder Millimeter, weil dieses Maß die Grundlage für die endgültige Feinplanung, Fertigungsfreigabe und Bestellung bildet. +Das sollte bitte auf allen entsprechenden Seiten und auch in den FAQ einheitlich dargestellt werden. +Auf der CABINET-Seite würde ich bei „Aufmaß vor Ort“ statt „Grundlage jeder Planung“ eher schreiben: +Nach Angebotsannahme und Anzahlung erfolgt das professionelle Aufmaß bei Ihnen vor Ort. Es bildet die Grundlage für die finale Feinplanung und Fertigungsfreigabe. +In den FAQ bei „Wie läuft eine Beratung bei Ihnen ab?“ würde ich schreiben: +Am Anfang steht ein Gespräch – im Showroom, telefonisch oder auf Wunsch bei Ihnen vor Ort. Für eine erste Planung reichen uns in der Regel Fotos, ein Grundriss und grobe Maße. Damit können wir bereits Ideen entwickeln, die Planung konkretisieren und Ihnen ein entsprechendes Angebot erstellen. +Wenn Ihnen die Planung gefällt und Sie unser Angebot annehmen, erfolgt nach der Anzahlung das professionelle Aufmaß bei Ihnen vor Ort. Auf Grundlage dieser exakten Maße erstellen wir die Feinplanung und geben die Möbel anschließend zur Fertigung frei. +Und bei „Was kostet eine Maßanfertigung?“ bitte den Hinweis streichen, dass eine seriöse Zahl erst nach dem Aufmaß möglich sei. +Richtig ist: +Bereits auf Basis von Fotos, Grundriss und groben Maßen können wir eine konkrete Planung und ein entsprechendes Angebot erstellen. Das professionelle Aufmaß erfolgt nach Angebotsannahme und Anzahlung und dient anschließend der finalen Feinplanung und Fertigungsfreigabe. +Natürlich kann sich nach dem Aufmaß im Ausnahmefall noch etwas verändern, wenn sich vor Ort relevante Abweichungen ergeben. Der Kunde soll aber eindeutig verstehen: Für Beratung, Planung und Angebot reichen zunächst grobe Maße. Die millimetergenaue Vermessung übernehmen später wir. + +2. Magazinartikel „Warum der Millimeter über den Raum entscheidet“ +Hier würde ich den Text bitte komplett austauschen. Damit du da nicht noch einmal formulieren musst, kannst du folgenden Text direkt übernehmen: +Nach Maß statt von der Stange: +Warum am Ende der Millimeter zählt – und am Anfang grobe Maße reichen +Dachschrägen, Nischen, ungewöhnliche Höhen: Wo Standardmöbel an ihre Grenzen kommen, beginnt die Maßanfertigung. Und am Ende entscheiden tatsächlich wenige Millimeter darüber, ob eine Lösung wirklich perfekt in den Raum passt. +Am Anfang müssen Sie diese Millimeter aber noch gar nicht kennen. +Für eine erste Beratung, Planung und ein konkretes Angebot reichen uns in der Regel grobe Raummaße, ein Grundriss oder ein paar Fotos. Damit können wir bereits beurteilen, was sinnvoll machbar ist, erste Ideen entwickeln und Ihre individuelle Lösung planen. +Das exakte Aufmaß kommt später – und ist unsere Aufgabe, nicht Ihre. +Erst die Idee, dann der Millimeter +Niemand muss vor dem ersten Beratungstermin mit dem Lasermessgerät durch die Wohnung laufen. +Für die erste Planung reichen ungefähre Breiten, Höhen und Tiefen vollkommen aus. Gemeinsam entwickeln wir daraus die passende Lösung und klären Materialien, Ausstattung, Gestaltung und Budget. +Auf dieser Grundlage erhalten Sie von uns Ihre Planung und ein entsprechendes Angebot. +Wenn Sie sich für die Lösung entscheiden, das Angebot annehmen und die Anzahlung erfolgt ist, kommt der nächste Schritt: das professionelle Aufmaß bei Ihnen vor Ort. +Denn spätestens jetzt zählt tatsächlich jeder Millimeter. +Wände sind selten vollkommen gerade, Böden nicht immer eben und gerade in älteren Gebäuden können sich Höhen, Winkel und Anschlüsse über einen Raum deutlich verändern. +Diese Abweichungen nehmen wir exakt auf und berücksichtigen sie bei der finalen Feinplanung. +Der Ablauf ist damit bewusst einfach: +Grobe Maße reichen für Beratung und Angebot. Die exakten Maße übernehmen wir nach Auftragserteilung. +Anschließend erfolgt die Fertigungsfreigabe und Ihre individuelle Einrichtung geht in die Bestellung bzw. Fertigung. +Der Raum, den man sonst verschenkt +Der Vorteil einer Maßanfertigung liegt nicht nur in der Optik, sondern vor allem darin, den vorhandenen Raum bestmöglich zu nutzen. +Ein Schrank, der einer Dachschräge exakt folgt, nutzt Bereiche, die mit einem Standardmöbel häufig verloren gehen. Gleiches gilt für Nischen, schwierige Ecken, ungewöhnliche Raumhöhen oder individuelle Grundrisse. +So entsteht Stauraum dort, wo vorher keiner war – und eine Lösung, die sich selbstverständlich in den Raum einfügt. +Maßanfertigung dort, wo sie Sinn ergibt +Maßanfertigung ist nicht automatisch überall die beste Lösung. +Bei geraden Wänden, üblichen Raumhöhen und klassischen Anforderungen kann auch ein gutes Serienmöbel die vernünftigere Wahl sein. +Deshalb beginnt unsere Beratung nicht mit der Frage, wie möglichst viel Maßanfertigung eingesetzt werden kann, sondern damit, welche Lösung für den jeweiligen Raum tatsächlich die richtige ist. +Und wenn Maßanfertigung sinnvoll ist, sorgen wir dafür, dass am Ende genau das stimmt, was am Anfang noch gar nicht stimmen muss: +der letzte Millimeter. + +3. Magazin – Immobilien-Hinweis entfernen +Unter dem Maßanfertigungsartikel und auch unter dem Küchenartikel steht aktuell noch: +„Entdecken Sie mehr über Immobilien-Investments und das B2in-Ökosystem.“ +Das passt dort aus meiner Sicht überhaupt nicht mehr. +Bitte als allgemeinen Magazin-Baustein ersetzen durch: +Weitere Einblicke rund um Einrichtung, Planung und Projekte finden Sie im B2in Magazin. + +4. Alte Magazinartikel +Die beiden Artikel +„Supply-Chain-Management für Entwickler“ +„Local for Local“ +würde ich aktuell erst einmal deaktivieren. +Die stammen inhaltlich noch deutlich aus einer früheren B2in-Richtung. +Beim Supply-Chain-Artikel sind Formulierungen wie garantierte Ankunft, Eskalation auf Managementebene, Millionenersparnis usw. deutlich härter als das, was wir heute zum Projektgeschäft kommunizieren. +Beim Local-for-Local-Artikel wird wiederum ein digitaler Marktplatzansatz beschrieben, den wir aktuell so ebenfalls nicht darstellen. +Bevor wir die beiden jetzt aufwendig umschreiben, bitte zunächst rausnehmen. Neue Magazinbeiträge können wir später sauber aus der heutigen Ausrichtung heraus entwickeln. + +5. FAQ Projektgeschäft +Hier steckt ebenfalls noch einiges aus der alten Supply-Chain-Sprache drin, unter anderem „absolute Vertragssicherheit“, Überwachung von Lieferverträgen und sofortige Eskalation auf Managementebene. +Das würde ich bitte an unserer heutigen Positionierung ausrichten. +Unsere Formulierung dafür ist: +Vollständige Einrichtung für Objekte, Büros und Projektentwicklungen – koordiniert aus einer Hand, von der Küche bis zur letzten Blume. Mit einem zentralen deutschen Vertragspartner und einem eingespielten Herstellernetzwerk. +Die FAQ-Antwort bitte daraus ableiten. Der Schwerpunkt sollte auf Koordination, einem Ansprechpartner und dem eingespielten Netzwerk liegen und nicht auf Garantie- und Eskalationsformulierungen. + +6. Otterpohl Logistik +Bei der Formulierung +„Das garantiert Ihnen absolute Planungssicherheit.“ +würde ich ebenfalls etwas zurückgehen. +Bitte ändern in: +„Das erhöht die Planungssicherheit deutlich.“ +Das sagt aus meiner Sicht genug und wir versprechen damit nicht etwas absolut, was letztlich niemand zu 100 % garantieren kann. + +7. Magazin – Datum und Lesezeit +Kleine Sache, aber bitte ebenfalls einmal einheitlich eindeutschen. +Aktuell zum Beispiel: +August 26, 2026 · 5 min read +bitte: + +26. August 2026 · 5 Min. Lesezeit +Das dann bitte bei allen Magazinartikeln entsprechend einheitlich. \ No newline at end of file diff --git a/dev/2026-08-28/Rotpunkt_Kuechen_Webseitentext_B2in_FINAL.pdf b/dev/2026-08-28/Rotpunkt_Kuechen_Webseitentext_B2in_FINAL.pdf new file mode 100644 index 00000000..45707d98 Binary files /dev/null and b/dev/2026-08-28/Rotpunkt_Kuechen_Webseitentext_B2in_FINAL.pdf differ diff --git a/dev/2026-08-28/Rotpunkt_Webseitentext_FINAL.md b/dev/2026-08-28/Rotpunkt_Webseitentext_FINAL.md new file mode 100644 index 00000000..c684d829 --- /dev/null +++ b/dev/2026-08-28/Rotpunkt_Webseitentext_FINAL.md @@ -0,0 +1,164 @@ +# B2in Interior · Rotpunkt Küchen + +**Küchen, die Haltung zeigen.** + +Webseitentext und Umsetzungsstruktur für die Rotpunkt-Seite +Stand: 31. August 2026 · Korrigierte Fassung zur Umsetzung + +--- + +## Umsetzungshinweise (nicht veröffentlichen) + +**Webstruktur:** Der normale Seitentext bleibt direkt sichtbar. Alle als `AUFKLAPPBARER DETAILBEREICH` gekennzeichneten Vertiefungen werden als Akkordeon umgesetzt. So bleibt die Seite schnell erfassbar, ohne dass Inhalt verloren geht. + +**CTA:** Kein zweiter Button. Das bereits vorhandene schwebende Terminanfrage-Widget erhält auf dieser Markenseite die Beschriftung **„Persönliche Küchenberatung vereinbaren"**. Es bleibt beim Scrollen sichtbar und darf auf dem Smartphone keine Inhalte verdecken. + +**Zu prüfen:** Showroom-Adresse am Seitenende – nennt die Rotpunkt-Seite den richtigen Standort (Küchenstudio), oder ist die Rathausstraße 11 hier korrekt? + +--- + +## Hero + +Eine Küche ist weit mehr als ein funktionaler Raum. Sie ist Treffpunkt, Arbeitsplatz und Mittelpunkt des täglichen Lebens. Und Hand aufs Herz: Wo finden die besten Gespräche statt – und wo enden die meisten Partys? Meistens in der Küche. + +Rotpunkt verbindet außergewöhnliche Gestaltungsfreiheit, intelligente Stauraumlösungen und durchdachte Materiallösungen zu Küchen, die nicht nur gut aussehen, sondern dauerhaft zum Leben ihrer Besitzer passen. + +Unsere Aufgabe ist es, genau herauszuarbeiten, welche Lösung zu Ihnen, Ihrem Alltag und Ihren persönlichen Vorstellungen passt. Bei uns in der Bielefelder Rathausstraße entsteht daraus nicht einfach nur eine Küche. Auf Wunsch denken wir das ganze Zuhause mit und ergänzen es bei Bedarf bis ins Detail handwerklich. + +**Ihre Küche. Persönlich geplant.** + +--- + +## Aus Ostwestfalen. Für Ihr Zuhause. + +Rotpunkt entwickelt und fertigt seit 1930 hochwertige Küchenmöbel an den ostwestfälischen Standorten Bünde und Preußisch Oldendorf-Getmold. + +Regionale Fertigung, jahrzehntelange Erfahrung und die unmittelbare Nähe zum Hersteller sind für uns keine romantischen Randnotizen, sondern die Grundlage für verlässliche Qualität und persönliche Küchenplanung. + +--- + +## Gestaltungsfreiheit bis ins Detail + +Rotpunkt bietet eine außergewöhnliche Vielfalt an Fronten, Farben, Materialien, Korpusdekoren, Arbeitsplatten, Griffvarianten und grifflosen Lösungen. Mehr als 20 beidseitig ausgeführte Korpusfarben sorgen dafür, dass eine Küche nicht nur außen, sondern auch innen konsequent gestaltet werden kann. + +So planen wir keinen vorgegebenen Küchenblock, sondern eine Lösung, die sich an Raum, Architektur und den tatsächlichen Gewohnheiten ihrer Besitzer orientiert. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### FENIX und authentische Holzoptiken +> +> FENIX ist eine besonders matte Oberfläche mit geringer Lichtreflexion, angenehm weicher Haptik und ausgeprägten Anti-Fingerprint-Eigenschaften. Oberflächliche Mikrokratzer können thermisch behandelt werden. 27 aufeinander abgestimmte Farben eröffnen eine breite Gestaltungsvielfalt. +> +> Auch bei ausgewählten Fronten in Holzoptik zeigt sich die Liebe zum Detail. Synchronporen-Dekore stimmen sichtbare Maserung und fühlbare Struktur präzise aufeinander ab. Dadurch entsteht bereits bei pflegeleichten Melamin-Holzreproduktionen eine natürliche Wirkung. +> +> Durch eine sorgfältige Planung kann die Holzoptik über mehrere Fronten hinweggeführt werden. Das Ergebnis ist ein ruhiges, zusammenhängendes Frontbild – ohne dass dafür zwingend Echtholz eingesetzt werden muss. + +--- + +## Mehr Raum. Mehr Ergonomie. Mehr Küche. + +Besonders hohe Unterschränke, niedrige Sockelhöhen und zusätzliche Schrankbreiten schaffen mehr nutzbaren Stauraum und eröffnen neue planerische Möglichkeiten. Klingt nach Kleinkram? Vielleicht. Im täglichen Gebrauch macht genau dieser Kleinkram einen erstaunlich großen Unterschied. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### NEW DIMENSIONS +> +> Mit dem Maßkonzept NEW DIMENSIONS sind beispielsweise Unterschrankhöhen von bis zu 910 Millimetern in Verbindung mit einem nur 50 Millimeter hohen Sockel möglich. +> +> Zusätzliche Schrankbreiten und vielfältige Innenausstattungen helfen uns, den vorhandenen Raum konsequent und ergonomisch zu nutzen. Die Küche wirkt dadurch nicht nur großzügiger – sie ist es tatsächlich. + +--- + +## Nachhaltigkeit mit konkreter Substanz + +Nachhaltigkeit braucht keine großen Versprechen, sondern nachvollziehbare Fakten. Greenline steht bei Rotpunkt für konkrete Materialien, Zertifizierungen und messbare Unterschiede. Deshalb legen wir offen, welche Materialien Rotpunkt verwendet, welche Zertifizierungen dahinterstehen und welchen konkreten Unterschied Greenline für Umwelt und Raumklima macht. + +Die Greenline BioBoard Gen2 besteht aus bis zu 90 Prozent recyceltem Holz. 95 Prozent des Rotpunkt-Küchensortiments sind FSC-zertifiziert. Außerdem sind die Produkte nach JIS F4Star hinsichtlich ihrer Formaldehydemissionen zertifiziert. + +Sie haben bereits eine vergleichbare Küche im Blick, die beim Thema Nachhaltigkeit mehr verspricht? Bringen Sie die Unterlagen gerne mit. Wir schauen gemeinsam genau hin – ehrlich, nachvollziehbar und ohne Verkaufsnebel. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Zahlen, Zertifizierungen und Raumklima +> +> Nach Angaben von Rotpunkt bleibt durch den Einsatz der Greenline-Spanplatten jährlich eine Waldfläche von ungefähr 50 Fußballfeldern erhalten. +> +> Die Greenline BioBoard Gen2 gibt laut Rotpunkt rund 50 Prozent weniger Formaldehyd an die Raumluft ab als herkömmliche Produkte. Das ist insbesondere für ein möglichst gesundes Raumklima relevant. +> +> Die FSC-Zertifizierung wird unter der Kennung FSC C131864 geführt. Entscheidend ist für uns nicht das grüne Etikett, sondern die konkrete und überprüfbare Aussage dahinter. + +--- + +## Mehr als Küchen + +Die Möglichkeiten von Rotpunkt enden nicht bei der klassischen Küche. Das Möbel- und Planungssystem lässt sich auch für Hauswirtschaftsräume, Ankleiden, Badezimmer und weitere Wohnbereiche einsetzen. + +Materialien, Farben und Gestaltungselemente können über mehrere Räume hinweg aufgegriffen werden. So entsteht nicht in jedem Zimmer eine neue Idee, sondern ein zusammenhängendes Interior-Konzept mit einer gemeinsamen gestalterischen Sprache. + +Zusammen mit CABINET, Febrü und weiteren ausgewählten Partnern betrachten wir bei Bedarf den gesamten Innenraum – von Möbeln und Beleuchtung bis zu Tapeten, Fußböden und, wenn es sein soll, der letzten Blume. + +--- + +## Warum eine Rotpunkt-Küche bei uns? + +Bei uns beginnt eine neue Küche nicht mit einem Prospekt, sondern mit Ihrem Raum und der Frage, wie Sie darin leben möchten. + +Arbeitsabläufe, Ergonomie, Stauraum, Materialien, Beleuchtung, Geräte und angrenzende Wohnbereiche planen wir als zusammenhängendes Konzept. Auch die Partystellplätze wollen wohlüberlegt sein – also jene Orte, an denen Gäste später stehen, sitzen, reden und vielleicht etwas länger bleiben. + +Wir stellen nicht einfach möglichst viele Produkte zusammen. Wir entwickeln eine Küche, die gestalterisch, funktional und wirtschaftlich überzeugt – und begleiten den gesamten Weg von der ersten Idee bis zur professionellen Montage. + +Dabei planen wir nicht für den nächsten schnellen Verkauf, sondern für eine möglichst lange und zufriedene Nutzung. Das ist kurzfristig vielleicht nicht immer die wirtschaftlichste Entscheidung für uns. Für eine ehrliche und dauerhafte Kundenbeziehung ist es die einzig richtige. + +--- + +## Erleben statt nur erzählen + +Eine gute Entscheidung entsteht nicht allein am Planungstisch. Auf Wunsch – und manchmal auch mit etwas freundlicher Überzeugungsarbeit – begleiten wir Sie nach Abstimmung in das nahe Rotpunkt-Werk oder in ausgewählte Ausstellungen der Gerätehersteller. + +Dort können Sie Materialien, Fertigung und Technik selbst erleben, Geräte ausprobieren und Fragen direkt vor Ort stellen. Sie müssen sich also nicht allein auf unser Verkaufsgespräch verlassen, sondern erhalten Informationen aus erster Hand, können vergleichen und anschließend mit einem sicheren Gefühl entscheiden. + +Wir begleiten Sie dabei, ordnen die unterschiedlichen Möglichkeiten ein und führen Ihre Entscheidungen zu einem stimmigen Gesamtkonzept zusammen. + +--- + +## Küchenstudio plus Handwerk + +Rotpunkt deckt bereits eine enorme planerische und gestalterische Bandbreite ab. Es geht deshalb ausdrücklich nicht um Sonderanfertigungen um jeden Preis. + +Natürlich gibt es trotzdem immer diesen einen planerischen Sonderfall, bei dem selbst hervorragende Standardsysteme an ihre Grenzen kommen. Dann greift unsere dauerhaft verankerte Schnittstelle zu angeschlossenen Tischlereien. + +Wir wägen gestalterischen Mehrwert, technische Notwendigkeit und wirtschaftliche Sinnhaftigkeit ehrlich miteinander ab. Am Ende entscheiden aber Ihre Wünsche – nicht unser Drang, Ihnen unbedingt noch eine Sonderlösung zu verkaufen. + +> **AUFKLAPPBARER DETAILBEREICH** +> ### Wenn das Handwerk den letzten Millimeter übernimmt +> +> Möglich sind beispielsweise passgenaue Nischenlösungen, besondere Verkleidungen, raumhohe Einbauten, Übergänge zu angrenzenden Möbeln oder individuelle Anpassungen an die vorhandene Architektur. +> +> Bei Bedarf endet das Konzept nicht an der Arbeitsplatte. Auch Tapeten, Fußböden, Wandgestaltung, Beleuchtung und weitere Details können einbezogen werden. + +**Die Möglichkeiten eines modernen Küchenstudios. Die Flexibilität des Handwerks.** + +--- + +## Abschluss + +**Ihre Küche. Persönlich geplant.** + +Jeder Raum ist anders. Jeder Alltag stellt andere Anforderungen. Gemeinsam entwickeln wir eine Rotpunkt-Küche, die gestalterisch überzeugt, im Alltag funktioniert und dauerhaft zu Ihnen passt. Persönlich geplant bei B2in in der Rathausstraße 11 in Bielefeld. + +--- + +## Interne Quellenhinweise (nicht veröffentlichen) + +Die Quellen dienen der Umsetzung, den Herstellern und einer abschließenden rechtlichen Prüfung. Aussagen nur im belegten Umfang veröffentlichen. + +- Rotpunkt Küchen, Nachhaltigkeit: https://www.rotpunktkuechen.de/nachhaltigkeit +- Dort belegt: bis zu 90 % Recyclingholz, ca. 50 Fußballfelder, 95 % FSC (FSC C131864), JIS F4Star, rund 50 % weniger Formaldehyd bei Greenline BioBoard Gen2 + +**Vor Veröffentlichung:** +- Herstellerfreigabe einholen +- Waldflächen-Aussage nur mit ausdrücklicher Bestätigung verwenden +- Umweltaussagen mit Blick auf die EmpCo-Regeln (ab 27.09.2026) prüfen lassen + +--- + +## Änderungen gegenüber der Fassung vom 31.08. + +- Die Abschnitte „Nachhaltigkeit mit konkreter Substanz" und „Greenline hält dem Vergleich stand" wurden zusammengeführt; der doppelte Satz „Nachhaltigkeit braucht keine großen Versprechen, sondern nachvollziehbare Fakten" steht nur noch einmal. diff --git a/dev/2026-08-28/archiv-2026-10-06/README.md b/dev/2026-08-28/archiv-2026-10-06/README.md new file mode 100644 index 00000000..46e2c803 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/README.md @@ -0,0 +1,47 @@ +# Archiv: tote Inhalte und Seiten (06.10.2026) + +Beim Aufräumen am 06.10.2026 (Nachtrag 22) wurde alles entfernt, was keine erreichbare Seite mehr +anzeigt. Hier liegen die Kopien. Nichts in diesem Ordner wird von der Anwendung geladen. + +## Was hier liegt + +| Datei / Ordner | Inhalt | +|---|---| +| `lang-de-sektionen.php`, `lang-en-sektionen.php` | Die 48 Sektionen, die aus `resources/lang/{de,en}/b2in.php` (`themes.b2in.*`) entfernt wurden | +| `cms-content-lokal-vollstaendig.json` | Kompletter Export aller CMS-Einträge (`cms_contents`, beide Sprachen) der lokalen Datenbank **vor** dem Aufräumen | +| `cms-content-geloescht-lokal.json` | Nur die 48 lokal gelöschten CMS-Einträge | +| `code/` | Gelöschte oder bereinigte Dateien im Originalzustand, Pfade wie im Projekt: alte Seiten-Views, Livewire-Komponenten, `NetzwerkPageCmsSeeder` samt Test, `config/content.php` (als `config-content.php`), `config/cms_section_map.php` und `routes/web.php` vorher, sowie die Blades mit auskommentierten Blöcken (Social Media im Kontaktformular, „Mehr laden“ im Magazin, „Artikel teilen“) | + +Auf dem Server schreibt `UnusedCmsContentCleanupSeeder` vor dem Löschen eine eigene Sicherung nach +`storage/app/private/cms-archiv/cms-content-geloescht-{Zeitstempel}.json`. + +## Was entfernt wurde + +- **Seiten**, die nur noch umleiten oder nie verlinkt waren: Netzwerk, Partner, Ecosystem, Interior, + Service, Portfolio, die alte Immobilien-Seite samt Projektseite, `b2in`, `home2`, `about_bak`, + `welcome_bak`. Die 301-Umleitungen bleiben. +- **Dev-Archivseiten** `/dev/immobilien-v1`, `/dev/interior-v1`, `/dev/partner-v1` mit ihren Routen. +- **19 Livewire-Sektionen**, die nur diese Seiten nutzten (BenefitsSection, BrokerSection, CardSection, + CommitmentSection, DarkStatsSection, DigitalCore, EcosystemHero, EcosystemStats, EndCustomerSection, + FinalCommitment, HeroImage, HeroTiles, LeadershipTeam, PartnerBenefits, PartnerHero, PartnerProcess, + Portfolio, SpotlightsSection, SupplierSection). +- **48 CMS-Sektionen** (Gruppe `netzwerk` bis auf den Abschluss der Über-uns-Seite, die Immobilien-Blöcke + der alten Seite, `home.synergie_section`, `home.ecosystem_core`, `home.brand_worlds`, + `home.integriertes_modell_b2in`, `about.leadership_team`). +- **Ungenutzte Felder** in aktiven Sektionen: `stats` (Abschluss Über uns), `social_media` (Kontakt), + `load_more` (Magazin-Übersichten), `share_article` (Magazin-Beitrag). +- **`config/content.php`** komplett – wurde nur vom `CmsContentSeeder` gelesen und dort vollständig von + den Lang-Dateien überdeckt. + +Die Projektdaten von Azizi Creek Views 4 (früher `immobilien_projects` in den Lang-Dateien) stehen jetzt +direkt im `CmsProjectSeeder`. + +Nicht angefasst: die Themes b2a, Stileigentum und Style2own (eigene Domains, eigene Views) samt der +Komponenten, die nur sie nutzen (`content-section`, `ecosystem-core`, `brand-worlds`). + +## Etwas zurückholen + +- Eine CMS-Sektion: Eintrag aus `cms-content-lokal-vollstaendig.json` mit Gruppe, Schlüssel und `value` + wieder anlegen und die Zeile in `config/cms_section_map.php` (alter Stand in `code/`) ergänzen. +- Eine Seite: View und Komponenten aus `code/` zurückkopieren, Route wieder eintragen, Sektionen wie oben. +- Oder per Git: der Stand vor dem Aufräumen ist der Commit vor Nachtrag 22. diff --git a/dev/2026-08-28/archiv-2026-10-06/cms-content-geloescht-lokal.json b/dev/2026-08-28/archiv-2026-10-06/cms-content-geloescht-lokal.json new file mode 100644 index 00000000..31ef5820 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/cms-content-geloescht-lokal.json @@ -0,0 +1,2780 @@ +[ + { + "group": "home", + "key": "synergie_section", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "best-of-two-worlds.jpg", + "title": "Zwei Welten. Ein Netzwerk.", + "image_alt": "Das B2in-Ökosystem – Immobilien und Einrichtung", + "paragraphs": [ + "Wir verbinden den Immobilienkauf mit der perfekten Einrichtung. Immobilien-Investoren profitieren von unserem exklusiven Möbel-Netzwerk – Projektentwickler von unserer deutschen Vertragssicherheit im Supply-Chain-Management." + ], + "image_caption": "Das B2in-Ökosystem" + }, + "en": { + "image": "b2in/best-of-two-worlds.jpg", + "title": "Two Worlds. One Network.", + "image_alt": "The B2in Ecosystem – Real Estate and Interior", + "paragraphs": [ + "We connect real estate purchases with the perfect furnishing. Real estate investors benefit from our exclusive furniture network – project developers from our German contractual reliability in supply chain management." + ], + "image_caption": "The B2in Ecosystem" + } + } + }, + { + "group": "home", + "key": "ecosystem_core", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Ein Ökosystem, drei Säulen", + "pillars": [ + { + "icon": "building-office-2", + "link": "/immobilien", + "title": "Immobilien & Investments", + "description": "Exklusive Off-Market-Projekte & High-Yield Renditeobjekte." + }, + { + "icon": "squares-2x2", + "link": "/netzwerk", + "title": "Local-for-Local Marktplatz", + "description": "Das Netzwerk für den regionalen Möbelfachhandel und Makler." + }, + { + "icon": "clipboard-document-check", + "link": "/netzwerk", + "title": "Supply-Chain-Management", + "description": "Deutsche Vertragssicherheit für internationale Immobilienentwickler." + } + ], + "subtitle": "" + }, + "en": { + "title": "One Ecosystem, Three Pillars", + "pillars": [ + { + "icon": "building-office-2", + "link": "/immobilien", + "title": "Real Estate & Investments", + "description": "Exclusive off-market projects & high-yield investment properties." + }, + { + "icon": "squares-2x2", + "link": "/netzwerk", + "title": "Local-for-Local Marketplace", + "description": "The network for regional furniture retailers and brokers." + }, + { + "icon": "clipboard-document-check", + "link": "/netzwerk", + "title": "Supply Chain Management", + "description": "German contractual reliability for international property developers." + } + ], + "subtitle": "" + } + } + }, + { + "group": "home", + "key": "brand_worlds", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Unsere Welten:
Design, Immobilien und internationaler Handel", + "worlds": [ + { + "link": "https://stileigentum.test", + "logo": "img/logos/stileigentum-logo-positiv.svg", + "image": "b2in/stileigentum.jpg", + "title": "Stileigentum", + "external": true, + "logo_width": "w-35", + "description": "Das Premium-Segment: Exklusive und hochwertige Einrichtungskonzepte für anspruchsvolle Kunden, die Qualität und Tradition schätzen." + }, + { + "link": "https://style2own.test", + "logo": "img/logos/style2own-logo-positiv.svg", + "image": "b2in/style2own.jpg", + "title": "Style2own", + "external": true, + "logo_width": "w-28", + "description": "Der Lifestyle-Kanal: Moderne Einrichtungskonzepte für Young Professionals und trend-orientierte Kunden – urban, flexibel, inspirierend." + }, + { + "link": "https://b2a.test", + "logo": "img/logos/b2a-logo-positiv.svg", + "image": "b2in/b2a.jpg", + "title": "B2A", + "external": true, + "logo_width": "w-18", + "description": "Unsere Logistik-Power für den transatlantischen Handel. Wir ermöglichen Herstellern den direkten Zugang zu internationalen Märkten." + } + ], + "subtitle": "Von internationalen Immobilien-Investments über exklusive Einrichtungskonzepte bis zum transatlantischen Handel – B2in verbindet die Welten, die zusammengehören." + }, + "en": { + "title": "Our Worlds:
Design, Real Estate, and International Trade", + "worlds": [ + { + "link": "https://stileigentum.test", + "logo": "img/logos/stileigentum-logo-positiv.svg", + "image": "b2in/stileigentum.jpg", + "title": "Stileigentum", + "external": true, + "logo_width": "w-35", + "description": "The premium segment: Exclusive and high-quality interior concepts for discerning clients who value quality and tradition." + }, + { + "link": "https://style2own.test", + "logo": "img/logos/style2own-logo-positiv.svg", + "image": "b2in/style2own.jpg", + "title": "Style2own", + "external": true, + "logo_width": "w-28", + "description": "The lifestyle channel: Modern interior concepts for young professionals and trend-oriented clients – urban, flexible, inspiring." + }, + { + "link": "https://b2a.test", + "logo": "img/logos/b2a-logo-positiv.svg", + "image": "b2in/b2a.jpg", + "title": "B2A", + "external": true, + "logo_width": "w-18", + "description": "Our logistics powerhouse for transatlantic trade. We enable manufacturers direct access to international markets." + } + ], + "subtitle": "From international real estate investments to exclusive interior concepts to transatlantic trade – B2in connects the worlds that belong together." + } + } + }, + { + "group": "home", + "key": "integriertes_modell_b2in", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "best-of-two-worlds.jpg", + "title": "Das Beste aus zwei Welten:
Immobilien und Einrichtung", + "image_alt": "Das Ergebnis für den Kunden – Immobilie und Einrichtung aus einer Hand", + "paragraphs": [ + "B2in verbindet, was zusammengehört: Wer eine Immobilie erwirbt, braucht die passende Einrichtung. Wer exklusiv einrichten möchte, findet über unser Netzwerk die besten lokalen Fachexperten – ergänzt durch das Sortiment europäischer Hersteller.", + "Das Ergebnis: Ein nahtloses Erlebnis für den Kunden und neue Ertragsquellen für unsere Partner – ob Makler, Händler oder Entwickler." + ], + "image_caption": "Immobilie und Einrichtung – aus einer Hand" + }, + "en": { + "image": "b2in/best-of-two-worlds.jpg", + "title": "The Best of Both Worlds:
Real Estate and Interior", + "image_alt": "The result for the customer – Property and interior from one source", + "paragraphs": [ + "B2in connects what belongs together: Those who acquire property need the right furnishing. Those who want exclusive interiors will find the best local specialists through our network – complemented by the range of European manufacturers.", + "The result: A seamless experience for the customer and new revenue streams for our partners – whether brokers, retailers, or developers." + ], + "image_caption": "Property and interior – from one source" + } + } + }, + { + "group": "immobilien", + "key": "hero", + "type": "json", + "order": 0, + "value": { + "de": { + "hub": { + "title": "B2in Immobilien", + "subtitle": "Exklusive internationale Investments" + }, + "image": "hero-immobilien.webp", + "stats": [ + "Off-Market Zugang", + "Persönliche Begleitung", + "Renditestarke Objekte" + ], + "title": "Investieren Sie in die Zukunft – Dubai, Lissabon & mehr.", + "features": [ + { + "icon": "lock-closed", + "title": "Off-Market", + "description": "Exklusive Projekte" + }, + { + "icon": "arrow-trending-up", + "title": "High-Yield", + "description": "Renditestarke Investments" + }, + { + "icon": "user", + "title": "Persönlich", + "description": "Begleitung durch Marcel Scheibe" + }, + { + "icon": "globe-alt", + "title": "International", + "description": "Dubai, Lissabon & mehr" + } + ], + "subtitle": "Exklusive Off-Market-Projekte und High-Yield-Investments. Persönlich kuratiert und begleitet von Marcel Scheibe.", + "card_text": "Exklusive internationale Investments", + "image_alt": "Internationale Immobilien-Investments", + "card_title": "B2in Immobilien" + }, + "en": { + "hub": { + "title": "B2in Real Estate", + "subtitle": "Exclusive International Investments" + }, + "image": "b2in/hero-immobilien.jpg", + "stats": [ + "Off-Market Access", + "Personal Guidance", + "High-Yield Properties" + ], + "title": "Invest in the Future – Dubai, Lisbon & More.", + "features": [ + { + "icon": "lock-closed", + "title": "Off-Market", + "description": "Exclusive Projects" + }, + { + "icon": "arrow-trending-up", + "title": "High-Yield", + "description": "High-Return Investments" + }, + { + "icon": "user", + "title": "Personal", + "description": "Guidance by Marcel Scheibe" + }, + { + "icon": "globe-alt", + "title": "International", + "description": "Dubai, Lisbon & More" + } + ], + "subtitle": "Exclusive off-market projects and high-yield investments. Personally curated and guided by Marcel Scheibe.", + "card_text": "Exclusive international investments", + "image_alt": "International Real Estate Investments", + "card_title": "B2in Real Estate" + } + } + }, + { + "group": "immobilien", + "key": "projects_meta", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Aktuelle Launches & Projekte", + "cta_link": "/contact", + "cta_text": "Jetzt Exposé & Verfügbarkeit anfragen", + "projects": { + "azizi-creek-views-4": { + "slug": "azizi-creek-views-4", + "image": "expose/a1/image-4.jpeg", + "title": "Azizi Developments: Creek Views 4", + "status": "NEW LAUNCH", + "contact": { + "title": "Sichern Sie sich eine der 132 Einheiten.", + "options": { + "": "Ich interessiere mich für...", + "1br": "1 Bedroom Apartment", + "general": "Allgemeine Beratung", + "3br_penthouse": "3BR Penthouse (Single Unit)" + }, + "subtitle": "Ihr Ansprechpartner: Marcel Scheibe" + }, + "gallery": [ + "expose/a1/image-4.jpeg", + "expose/a1/image-3.jpeg", + "expose/a1/image-2.jpeg", + "expose/a1/image-5.jpeg", + "expose/a1/image-6.jpeg", + "expose/a1/image-7.jpeg" + ], + "location": "Al Jaddaf, Dubai", + "highlights": [ + "Prime Waterfront Views", + "1BR: ab 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)", + "Exklusives 3BR Penthouse (Single Inventory)", + "High Rental Demand & Capital Appreciation" + ], + "price_from": "ab 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)", + "launch_date": "03.03.2026", + "quick_facts": [ + { + "icon": "home-modern", + "label": "Typen", + "value": "1BR & 3BR Penthouse" + }, + { + "icon": "squares-2x2", + "label": "Größe", + "value": "543 – 2.346 sqft" + }, + { + "icon": "building-office-2", + "label": "Einheiten", + "value": "Nur 132 (Limited)" + }, + { + "icon": "user", + "label": "Entwickler", + "value": "Azizi Developments" + } + ], + "location_info": { + "title": "Strategische Location: Al Jaddaf", + "points": [ + "Direkte Anbindung an Dubai Creek und Waterfront", + "Wenige Minuten bis Downtown Dubai & Burj Khalifa", + "Exzellente Infrastruktur und wachsender Stadtteil" + ], + "map_url": "https://maps.google.com/?q=Al+Jaddaf+Dubai" + }, + "investment_case": { + "text": "Creek Views 4 bietet eine strategische Top-Lage in Al Jaddaf. Die Kombination aus limitiertem Angebot (nur 132 Einheiten) und Premium-Ausstattung macht dieses Projekt zur idealen Wahl für Investoren, die auf Wertsteigerung (Capital Appreciation) und hohe Mietnachfrage abzielen.", + "title": "Starkes Investment, hohe Nachfrage.", + "views": [ + "Road View", + "Sitting & Play Area View", + "Neighbour View" + ] + } + } + }, + "subtitle": "Entdecken Sie unsere aktuellen Immobilien-Projekte auf internationalen Märkten." + }, + "en": { + "title": "Current Launches & Projects", + "cta_link": "/contact", + "cta_text": "Request Exposé & Availability Now", + "projects": { + "azizi-creek-views-4": { + "slug": "azizi-creek-views-4", + "image": "expose/a1/image-4.jpeg", + "title": "Azizi Developments: Creek Views 4", + "status": "NEW LAUNCH", + "contact": { + "title": "Secure one of the 132 units.", + "options": { + "": "I am interested in...", + "1br": "1 Bedroom Apartment", + "general": "General Consultation", + "3br_penthouse": "3BR Penthouse (Single Unit)" + }, + "subtitle": "Your contact: Marcel Scheibe" + }, + "gallery": [ + "expose/a1/image-4.jpeg", + "expose/a1/image-3.jpeg", + "expose/a1/image-2.jpeg", + "expose/a1/image-5.jpeg", + "expose/a1/image-6.jpeg", + "expose/a1/image-7.jpeg" + ], + "location": "Al Jaddaf, Dubai", + "highlights": [ + "Prime Waterfront Views", + "1BR: from 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)", + "Exclusive 3BR Penthouse (Single Inventory)", + "High Rental Demand & Capital Appreciation" + ], + "price_from": "from 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)", + "launch_date": "03.03.2026", + "quick_facts": [ + { + "icon": "home-modern", + "label": "Types", + "value": "1BR & 3BR Penthouse" + }, + { + "icon": "squares-2x2", + "label": "Size", + "value": "543 – 2,346 sqft" + }, + { + "icon": "building-office-2", + "label": "Units", + "value": "Only 132 (Limited)" + }, + { + "icon": "user", + "label": "Developer", + "value": "Azizi Developments" + } + ], + "location_info": { + "title": "Strategic Location: Al Jaddaf", + "points": [ + "Direct connection to Dubai Creek and Waterfront", + "Just minutes to Downtown Dubai & Burj Khalifa", + "Excellent infrastructure and growing district" + ], + "map_url": "https://maps.google.com/?q=Al+Jaddaf+Dubai" + }, + "investment_case": { + "text": "Creek Views 4 offers a strategic top location in Al Jaddaf. The combination of limited supply (only 132 units) and premium finishes makes this project the ideal choice for investors targeting capital appreciation and high rental demand.", + "title": "Strong Investment, High Demand.", + "views": [ + "Road View", + "Sitting & Play Area View", + "Neighbour View" + ] + } + } + }, + "subtitle": "Discover our current real estate projects in international markets." + } + } + }, + { + "group": "immobilien", + "key": "moebel_vorteil", + "type": "json", + "order": 0, + "value": { + "de": { + "text": "Als Käufer einer B2in-Immobilie erhalten Sie exklusiven Insider-Zugang zu unserem B2in-Möbelnetzwerk. Richten Sie Ihre Immobilie zu unschlagbaren Partner-Konditionen ein.", + "title": "Ihr Investment, Ihr Vorteil", + "button_link": "/netzwerk", + "button_text": "Mehr zum B2in-Netzwerk" + }, + "en": { + "text": "As a buyer of a B2in property, you receive exclusive insider access to our B2in furniture network. Furnish your property at unbeatable partner rates.", + "title": "Your Investment, Your Advantage", + "button_link": "/netzwerk", + "button_text": "Learn More About the B2in Network" + } + } + }, + { + "group": "immobilien", + "key": "trust", + "type": "json", + "order": 0, + "value": { + "de": { + "list": [ + { + "icon": "calendar", + "title": "Investor Evenings – Exklusive Quartals-Events im kleinen Kreis" + }, + { + "icon": "phone", + "title": "Direkter Draht – Persönliches Gespräch und Terminvereinbarung" + }, + { + "icon": "shield-check", + "title": "Transparenz – Von der Marktanalyse bis zum Closing begleitet" + } + ], + "image": "MS - Rollkragen und Jacket..png", + "title": "Persönliche Begleitung", + "image_alt": "Marcel Scheibe – Persönliche Investmentbegleitung", + "paragraphs": [ + "Hinter jedem B2in-Investment steht Marcel Scheibe als persönlicher Ansprechpartner. Keine anonyme Plattform – sondern ein Gesicht mit Expertise, Netzwerk und dem Anspruch, dass Ihr Investment in den besten Händen ist." + ], + "image_caption": "Marcel Scheibe, Gründer & CEO" + }, + "en": { + "list": [ + { + "icon": "calendar", + "title": "Investor Evenings – Exclusive quarterly events in an intimate setting" + }, + { + "icon": "phone", + "title": "Direct Line – Personal conversation and appointment scheduling" + }, + { + "icon": "shield-check", + "title": "Transparency – Guided from market analysis to closing" + } + ], + "image": "b2in/marcel-scheibe-about.jpg", + "title": "Personal Guidance", + "image_alt": "Marcel Scheibe – Personal Investment Guidance", + "paragraphs": [ + "Behind every B2in investment stands Marcel Scheibe as your personal contact. No anonymous platform – but a face with expertise, network, and the commitment that your investment is in the best hands." + ], + "image_caption": "Marcel Scheibe, Founder & CEO" + } + } + }, + { + "group": "immobilien", + "key": "hero_v2", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "hero-immobilien.webp", + "title": "Investieren in globale Dynamik. Mit deutscher Verlässlichkeit.", + "cta_link": "#projekte", + "cta_text": "Aktuelle Projekte ansehen", + "subtitle": "Exklusive Off-Market-Projekte, attraktive Renditen und eine Begleitung, die weit über den Kaufvertrag hinausgeht. Entdecken Sie den Immobilienmarkt in Dubai.", + "image_alt": "Dubai Skyline – Premium Immobilien-Investments" + }, + "en": { + "image": "b2in/hero-immobilien.jpg", + "title": "Investing in Global Dynamics. With German Reliability.", + "cta_link": "#projekte", + "cta_text": "View Current Projects", + "subtitle": "Exclusive off-market projects, attractive returns, and guidance that goes far beyond the purchase contract. Discover the real estate market in Dubai.", + "image_alt": "Dubai Skyline – Premium Real Estate Investments" + } + } + }, + { + "group": "immobilien", + "key": "warum_dubai", + "type": "json", + "order": 0, + "value": { + "de": { + "facts": [ + { + "icon": "banknotes", + "title": "0 % Steuern", + "description": "Keine Einkommensteuer auf Mieteinnahmen, keine Kapitalertragsteuer beim Verkauf." + }, + { + "icon": "arrow-trending-up", + "title": "Starke Renditen", + "description": "Attraktive Mietrenditen von historisch 6 % bis 9 % jährlich." + }, + { + "icon": "shield-check", + "title": "Hohe Sicherheit", + "description": "Ein staatlich regulierter Markt mit dem sicheren Escrow-Treuhand-System." + }, + { + "icon": "currency-dollar", + "title": "Stabile Währung", + "description": "Der Dirham (AED) ist fest an den US-Dollar gekoppelt." + }, + { + "icon": "identification", + "title": "Golden Visa", + "description": "Sichern Sie sich Aufenthaltsgenehmigungen über attraktive Investor-Programme." + }, + { + "icon": "globe-alt", + "title": "Hohe Nachfrage", + "description": "Internationale Zuwanderung und begrenztes Angebot treiben die Nachfrage nach Wohnraum stetig nach oben." + } + ], + "intro": "Dubai ist nicht nur eine finanzielle Entscheidung, sondern der Zugang zu einem der wachstumsstärksten Märkte der Welt. Investoren schätzen die klaren rechtlichen Strukturen und Rahmenbedingungen, die weltweit nahezu einzigartig sind:", + "title": "Warum sich ein Investment in Dubai lohnt" + }, + "en": { + "facts": [ + { + "icon": "banknotes", + "title": "0% Taxes", + "description": "No income tax on rental income, no capital gains tax on sale." + }, + { + "icon": "arrow-trending-up", + "title": "Strong Returns", + "description": "Attractive rental yields of historically 6% to 9% annually." + }, + { + "icon": "shield-check", + "title": "High Security", + "description": "A government-regulated market with a secure escrow trust system." + }, + { + "icon": "currency-dollar", + "title": "Stable Currency", + "description": "The Dirham (AED) is pegged to the US Dollar." + }, + { + "icon": "identification", + "title": "Golden Visa", + "description": "Secure residence permits through attractive investor programs." + }, + { + "icon": "globe-alt", + "title": "High Demand", + "description": "International immigration and limited supply continuously drive housing demand upward." + } + ], + "intro": "Dubai is not just a financial decision, but access to one of the world's fastest-growing markets. Investors value the clear legal structures and frameworks that are virtually unique worldwide:", + "title": "Why an Investment in Dubai Is Worth It" + } + } + }, + { + "group": "immobilien", + "key": "image_break", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "hero-immobilien.webp", + "quote": "Dubai hat sich zu einem der dynamischsten Immobilienmärkte der Welt entwickelt.", + "author": "Marcel Scheibe", + "image_alt": "Dubai Skyline – Immobilien-Investments" + }, + "en": { + "image": "b2in/hero-immobilien.jpg", + "quote": "Dubai has evolved into one of the most dynamic real estate markets in the world.", + "author": "Marcel Scheibe", + "image_alt": "Dubai Skyline – Real Estate Investments" + } + } + }, + { + "group": "immobilien", + "key": "kaufprozess", + "type": "json", + "order": 0, + "value": { + "de": { + "intro": "Der Markt in Dubai ist schneller, digitaler und projektbezogen organisiert. Jeder Schritt ist durch das staatliche Escrow-System (Treuhandkonten nach Baufortschritt) maximal abgesichert.", + "steps": [ + { + "title": "Reservierung (Booking Fee)", + "number": "1", + "description": "Mit einer Gebühr von ca. 3–10 % wird Ihre Wunsch-Einheit offiziell aus dem Verkauf genommen und für Sie blockiert." + }, + { + "title": "Anzahlung & Vertrag (SPA)", + "number": "2", + "description": "Nach einer ersten Anzahlung (meist 10 %) wird der offizielle Kaufvertrag, das Sales & Purchase Agreement (SPA), erstellt." + }, + { + "title": "Staatliche Registrierung (DLD)", + "number": "3", + "description": "Durch die Zahlung der Registrierungsgebühr (4 %) an das Dubai Land Department wird Ihr Eigentum offiziell im staatlichen Register verankert." + }, + { + "title": "Finaler Kaufvertrag", + "number": "4", + "description": "Ihr Eigentumsrecht ist offiziell gesichert. Die weiteren Zahlungen erfolgen streng nach Baufortschritt auf sichere Treuhandkonten." + } + ], + "title": "Klar strukturiert: Der Kaufprozess in Dubai" + }, + "en": { + "intro": "The market in Dubai is faster, more digital, and organized by project. Every step is maximally secured through the government escrow system (trust accounts based on construction progress).", + "steps": [ + { + "title": "Reservation (Booking Fee)", + "number": "1", + "description": "With a fee of approx. 3–10%, your desired unit is officially taken off the market and reserved for you." + }, + { + "title": "Down Payment & Contract (SPA)", + "number": "2", + "description": "After an initial down payment (usually 10%), the official Sales & Purchase Agreement (SPA) is drawn up." + }, + { + "title": "Government Registration (DLD)", + "number": "3", + "description": "By paying the registration fee (4%) to the Dubai Land Department, your ownership is officially recorded in the government register." + }, + { + "title": "Final Purchase Contract", + "number": "4", + "description": "Your ownership rights are officially secured. Further payments are made strictly according to construction progress into secure trust accounts." + } + ], + "title": "Clearly Structured: The Purchase Process in Dubai" + } + } + }, + { + "group": "immobilien", + "key": "bruecke", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "MS - Rollkragen und Jacket..png", + "title": "\"Der Markt spricht für sich. Meine Aufgabe ist eine andere.\"", + "cta_link": "/contact", + "cta_text": "Persönliches Beratungsgespräch vereinbaren", + "image_alt": "Marcel Scheibe – Persönliche Investmentbegleitung", + "paragraphs": [ + "Für viele deutsche Investoren wirkt der Immobilienkauf in Dubai zunächst ungewohnt. In Deutschland sind wir Notare, Grundbücher und hochbürokratische Prozesse gewohnt. Dubai ist dynamischer.", + "Ich bin nicht hier, um Ihnen den Markt zu verkaufen – die Qualität der Projekte spricht für sich. Meine Aufgabe ist es, Ihre Brücke zu sein. Als Investor, der selbst in Dubai gekauft hat, kenne ich die Praxis. Ich bin regelmäßig vor Ort, stehe im permanenten Austausch mit Bauträgern und begleite Sie durch den kompletten Prozess. Ich übersetze die internationale Geschwindigkeit in deutsche Verlässlichkeit." + ], + "image_caption": "Marcel Scheibe, Gründer & CEO", + "advantage_text": "Meine Begleitung endet nicht beim Kauf. Planen Sie die lukrative Kurzzeitvermietung (z.B. Airbnb)? Über unser B2in-Netzwerk und meine Wurzeln in der Möbelbranche realisieren wir für Sie komplette Einrichtungskonzepte – für maximale Rendite bei minimalem Aufwand.", + "advantage_title": "Ihr B2in-Vorteil" + }, + "en": { + "image": "b2in/marcel-scheibe-about.jpg", + "title": "\"The market speaks for itself. My role is a different one.\"", + "cta_link": "/contact", + "cta_text": "Schedule a Personal Consultation", + "image_alt": "Marcel Scheibe – Personal Investment Guidance", + "paragraphs": [ + "For many German investors, buying real estate in Dubai initially feels unfamiliar. In Germany, we are accustomed to notaries, land registries, and highly bureaucratic processes. Dubai is more dynamic.", + "I am not here to sell you the market – the quality of the projects speaks for itself. My role is to be your bridge. As an investor who has bought in Dubai myself, I know the practice. I am regularly on-site, in permanent contact with developers, and I guide you through the entire process. I translate international speed into German reliability." + ], + "image_caption": "Marcel Scheibe, Founder & CEO", + "advantage_text": "My guidance doesn't end with the purchase. Planning lucrative short-term rentals (e.g., Airbnb)? Through our B2in network and my roots in the furniture industry, we realize complete interior concepts for you – for maximum returns with minimum effort.", + "advantage_title": "Your B2in Advantage" + } + } + }, + { + "group": "immobilien", + "key": "mindset", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Sind Sie der richtige Investor für Dubai?", + "closing": "Der Schritt ist kleiner, als Sie denken. Lassen Sie uns gemeinsam herausfinden, ob ein Investment in Dubai in Ihre Strategie passt.", + "cta_link": "/contact", + "cta_text": "Unverbindliches Gespräch vereinbaren", + "text_negative": "Wenn Sie jedoch ein System bevorzugen, das auf langsamen Entscheidungswegen und maximaler Bürokratie aufbaut, wird dieser Markt nicht zu Ihren Erwartungen passen.", + "text_positive": "Dubai richtet sich an Menschen, die international denken. Der Staat priorisiert Effizienz, wirtschaftliche Entwicklung und enorme Geschwindigkeit. Wenn Sie an die Verschiebung weltweiter Wirtschaftszentren glauben und ein dynamisches System schätzen, ist Dubai der strategisch perfekte Baustein für Ihr Portfolio. Dann sind Sie bei uns genau richtig." + }, + "en": { + "title": "Are You the Right Investor for Dubai?", + "closing": "The step is smaller than you think. Let's find out together whether an investment in Dubai fits your strategy.", + "cta_link": "/contact", + "cta_text": "Schedule a Non-Binding Consultation", + "text_negative": "However, if you prefer a system built on slow decision-making and maximum bureaucracy, this market will not match your expectations.", + "text_positive": "Dubai is for people who think internationally. The government prioritizes efficiency, economic development, and tremendous speed. If you believe in the shift of global economic centers and value a dynamic system, Dubai is the strategically perfect building block for your portfolio. Then you are in the right place with us." + } + } + }, + { + "group": "netzwerk", + "key": "hero", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "b2in/ecosystem-hero.jpg", + "title": "Das B2in Netzwerk – regionale Fachexperten und starke Marken.", + "subtitle": "Wir verbinden Fachhändler aus der Region mit ausgewählten europäischen Herstellern – damit Sie vor Ort beraten werden und trotzdem Zugriff auf das gesamte Sortiment haben.", + "image_alt": "B2in Netzwerk – Einrichtung und regionale Fachexperten" + }, + "en": { + "image": "b2in/ecosystem-hero.jpg", + "title": "The B2in Ecosystem – Real Estate Meets Interior.", + "subtitle": "We are currently building the smartest local-for-local furnishing network. As a B2in real estate client, you will benefit exclusively from our closed shop in the future.", + "image_alt": "B2in Ecosystem – Interior and Real Estate" + } + } + }, + { + "group": "netzwerk", + "key": "image_break", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "b2in/ecosystem-hero.jpg", + "quote": "Wir verbinden, was zusammengehört: Immobilien und Einrichtung.", + "author": "Marcel Scheibe", + "image_alt": "B2in Netzwerk – Einrichtung und regionale Fachexperten" + }, + "en": { + "image": "b2in/ecosystem-hero.jpg", + "quote": "We connect what belongs together: real estate and interior.", + "author": "Marcel Scheibe", + "image_alt": "B2in Ecosystem – Interior and Real Estate" + } + } + }, + { + "group": "netzwerk", + "key": "teasers", + "type": "json", + "order": 0, + "value": { + "de": { + "cards": [ + { + "icon": "squares-2x2", + "title": "Einrichtungsnetzwerk", + "status": "In Entwicklung", + "description": "Persönliche Beratung durch lokale Fachexperten, kuratierte europäische Hersteller und exklusive Konditionen für B2in-Immobilienkunden. Einrichtung, die man anfassen kann – nicht nur online bestellen." + }, + { + "icon": "building-storefront", + "title": "Für Händler & Fachhändler", + "status": "Vorab-Registrierung möglich", + "description": "Sie sind lokaler Einrichtungsexperte und möchten Teil eines Premium-Netzwerks werden? Wir verbinden Sie mit Kunden, die persönliche Beratung und Qualität schätzen." + }, + { + "icon": "globe-alt", + "title": "Für Entwickler & Marken", + "status": "Vorab-Registrierung möglich", + "description": "Deutsche Vertragssicherheit für Objekte und Projektentwicklungen: Beschaffung aus einer Hand, mit Fokus auf Termintreue, Qualitätskontrolle und Durchsetzungskraft." + } + ], + "title": "Was wir aufbauen" + }, + "en": { + "cards": [ + { + "icon": "squares-2x2", + "title": "Interior Network", + "status": "In Development", + "description": "Personal consultation by local specialists, curated European manufacturers, and exclusive rates for B2in real estate clients. Furnishing you can touch – not just order online." + }, + { + "icon": "building-storefront", + "title": "For Retailers & Specialists", + "status": "Pre-Registration Available", + "description": "Are you a local interior specialist looking to join a premium network? We connect you with clients who value personal consultation and quality." + }, + { + "icon": "globe-alt", + "title": "For Developers & Brands", + "status": "Pre-Registration Available", + "description": "German contractual reliability for international property developers. Supply chain management focused on schedule adherence, quality control, and enforcement." + } + ], + "title": "What We Are Building" + } + } + }, + { + "group": "netzwerk", + "key": "cta", + "type": "json", + "order": 0, + "value": { + "de": { + "text": "Ob als Fachhändler, Hersteller, Makler oder Entwickler – kontaktieren Sie uns für eine Vorab-Registrierung und erfahren Sie als Erste, wenn unser Netzwerk live geht.", + "title": "Interesse an einer Partnerschaft?", + "button_link": "/contact", + "button_text": "Kontakt aufnehmen" + }, + "en": { + "text": "Whether as a specialist retailer, manufacturer, broker, or developer – contact us for pre-registration and be among the first to know when our network goes live.", + "title": "Interested in a Partnership?", + "button_link": "/contact", + "button_text": "Get in Touch" + } + } + }, + { + "group": "netzwerk", + "key": "interior_hero", + "type": "json", + "order": 0, + "value": { + "de": { + "hub": { + "title": "B2in Interior", + "subtitle": "Das Einrichtungsnetzwerk" + }, + "image": "ecosystem-hero.webp", + "stats": [ + "Lokale Fachexperten", + "Europäische Hersteller", + "Persönliche Beratung" + ], + "title": "Exklusive Einrichtung. Lokal gedacht, international vernetzt.", + "features": [ + { + "icon": "map-pin", + "title": "Local-for-Local", + "description": "Ihr Fachhändler vor Ort" + }, + { + "icon": "star", + "title": "Premium-Netzwerk", + "description": "Kuratierte Hersteller & Marken" + }, + { + "icon": "squares-2x2", + "title": "Zwei Marken", + "description": "stileigentum & style2own" + }, + { + "icon": "user", + "title": "Persönlich", + "description": "Beratung statt Algorithmus" + } + ], + "subtitle": "Das B2in-Einrichtungsnetzwerk verbindet lokale Fachexpertise mit internationalen Herstellern – persönlich, greifbar und in Ihrer Nähe.", + "card_text": "Local-for-Local Einrichtungsnetzwerk", + "image_alt": "B2in Einrichtungsnetzwerk – Local-for-Local", + "card_title": "B2in Interior" + }, + "en": { + "hub": { + "title": "B2in Interior", + "subtitle": "The Interior Network" + }, + "image": "b2in/ecosystem-hero.jpg", + "stats": [ + "Local Specialists", + "European Manufacturers", + "Personal Consultation" + ], + "title": "Exclusive Furnishing. Locally Conceived, Internationally Connected.", + "features": [ + { + "icon": "map-pin", + "title": "Local-for-Local", + "description": "Your specialist retailer nearby" + }, + { + "icon": "star", + "title": "Premium Network", + "description": "Curated manufacturers & brands" + }, + { + "icon": "squares-2x2", + "title": "Two Brands", + "description": "stileigentum & style2own" + }, + { + "icon": "user", + "title": "Personal", + "description": "Consultation over algorithms" + } + ], + "subtitle": "The B2in interior network connects local expertise with international manufacturers – personal, tangible, and in your area.", + "card_text": "Local-for-Local Interior Network", + "image_alt": "B2in Interior Network – Local-for-Local", + "card_title": "B2in Interior" + } + } + }, + { + "group": "netzwerk", + "key": "interior_concept", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "ecosystem_result.webp", + "title": "Was bedeutet Local-for-Local?", + "image_alt": "Local-for-Local – Persönliche Beratung statt anonyme Plattform", + "paragraphs": [ + "Unser Einrichtungsnetzwerk setzt auf das, was online nicht geht: echte Beratung, echtes Anfassen, echte Expertise. Statt anonymer Plattformen vermitteln wir den direkten Kontakt zu lokalen Fachhändlern – Menschen, die ihr Handwerk verstehen und Sie persönlich begleiten.", + "B2in verbindet diese lokalen Experten mit einem kuratierten Netzwerk europäischer Hersteller. Das Ergebnis: Zugang zu exklusiven Marken und Sortimenten, die Sie so nicht im Internet finden – aber mit der Beratungsqualität, die nur Ihr Fachhändler vor Ort bieten kann." + ], + "image_caption": "Persönliche Einrichtungsberatung vor Ort" + }, + "en": { + "image": "b2in/ecosystem_result.jpg", + "title": "What Does Local-for-Local Mean?", + "image_alt": "Local-for-Local – Personal consultation instead of anonymous platforms", + "paragraphs": [ + "Our interior network relies on what online cannot deliver: real consultation, real touch, real expertise. Instead of anonymous platforms, we facilitate direct contact with local specialist retailers – people who understand their craft and guide you personally.", + "B2in connects these local experts with a curated network of European manufacturers. The result: Access to exclusive brands and collections that you won't find online – but with the consultation quality that only your local specialist can offer." + ], + "image_caption": "Personal interior consultation on-site" + } + } + }, + { + "group": "netzwerk", + "key": "interior_brands", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Zwei Marken, ein Netzwerk", + "brands": [ + { + "link": "https://stileigentum.test", + "logo": "img/logos/stileigentum-logo-positiv.svg", + "name": "stileigentum", + "tagline": "Premium-Einrichtung", + "audience": "Für Kunden, die das Besondere suchen.", + "logo_width": "w-35", + "description": "Exklusive und hochwertige Einrichtungskonzepte für anspruchsvolle Kunden, die Qualität und Tradition schätzen. Handverlesene Hersteller, zeitlose Materialien, individuelle Beratung." + }, + { + "link": "https://style2own.test", + "logo": "img/logos/style2own-logo-positiv.svg", + "name": "style2own", + "tagline": "Design-Lifestyle", + "audience": "Für alle, die Design lieben.", + "logo_width": "w-28", + "description": "Moderne Einrichtungskonzepte für Young Professionals und trend-orientierte Kunden – urban, flexibel, inspirierend. Aktuelle Trends, smarte Lösungen, faire Preise." + } + ], + "subtitle": "Je nach Stil und Anspruch finden Sie Ihren Zugang über eine unserer zwei Einrichtungsmarken." + }, + "en": { + "title": "Two Brands, One Network", + "brands": [ + { + "link": "https://stileigentum.test", + "logo": "img/logos/stileigentum-logo-positiv.svg", + "name": "stileigentum", + "tagline": "Premium Interior", + "audience": "For clients seeking the extraordinary.", + "logo_width": "w-35", + "description": "Exclusive and high-quality interior concepts for discerning clients who value quality and tradition. Hand-selected manufacturers, timeless materials, individual consultation." + }, + { + "link": "https://style2own.test", + "logo": "img/logos/style2own-logo-positiv.svg", + "name": "style2own", + "tagline": "Design Lifestyle", + "audience": "For everyone who loves design.", + "logo_width": "w-28", + "description": "Modern interior concepts for young professionals and trend-oriented clients – urban, flexible, inspiring. Current trends, smart solutions, fair prices." + } + ], + "subtitle": "Depending on your style and standards, you can access our network through one of our two interior brands." + } + } + }, + { + "group": "netzwerk", + "key": "interior_zielgruppen", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Für wen ist das Einrichtungsnetzwerk?", + "groups": [ + { + "icon": "home", + "title": "Privatpersonen", + "description": "Sie richten Ihr neues Zuhause ein und wünschen sich persönliche Beratung statt endlosem Online-Scrollen? Über unser Netzwerk finden Sie lokale Fachexperten, die Ihren Stil verstehen." + }, + { + "icon": "building-office-2", + "title": "Immobilien-Investoren", + "description": "Sie haben über B2in ein Investment getätigt? Als Immobilienkäufer erhalten Sie exklusiven Zugang zu Partner-Konditionen für die komplette Einrichtung – aus einer Hand." + }, + { + "icon": "clipboard-document-check", + "title": "Entwickler & Makler", + "description": "Sie brauchen Mustereinrichtungen, Home-Staging oder eine schlüsselfertige Ausstattung für Ihre Projekte? B2in koordiniert von der Planung bis zur Lieferung." + } + ] + }, + "en": { + "title": "Who Is the Interior Network For?", + "groups": [ + { + "icon": "home", + "title": "Private Individuals", + "description": "Furnishing your new home and looking for personal consultation instead of endless online scrolling? Through our network, you'll find local specialists who understand your style." + }, + { + "icon": "building-office-2", + "title": "Real Estate Investors", + "description": "Have you made an investment through B2in? As a property buyer, you receive exclusive access to partner rates for complete furnishing – all from one source." + }, + { + "icon": "clipboard-document-check", + "title": "Developers & Brokers", + "description": "Need model furnishings, home staging, or turnkey outfitting for your projects? B2in coordinates from planning to delivery." + } + ] + } + } + }, + { + "group": "netzwerk", + "key": "interior_process", + "type": "json", + "order": 0, + "value": { + "de": { + "steps": [ + { + "title": "Beratung", + "number": "01", + "description": "Kontaktieren Sie uns oder besuchen Sie einen unserer lokalen Partner. Gemeinsam definieren wir Ihren Stil, Ihr Budget und Ihre Wünsche." + }, + { + "title": "Auswahl", + "number": "02", + "description": "Ihr Fachhändler zeigt Ihnen kuratierte Kollektionen europäischer Hersteller – zum Anfassen, nicht nur auf dem Bildschirm." + }, + { + "title": "Lieferung & Einrichtung", + "number": "03", + "description": "B2in koordiniert Logistik und Lieferung. Ihr lokaler Partner begleitet die Einrichtung bis zum letzten Detail." + } + ], + "title": "So einfach funktioniert es" + }, + "en": { + "steps": [ + { + "title": "Consultation", + "number": "01", + "description": "Contact us or visit one of our local partners. Together, we define your style, budget, and preferences." + }, + { + "title": "Selection", + "number": "02", + "description": "Your specialist retailer shows you curated collections from European manufacturers – to touch, not just on a screen." + }, + { + "title": "Delivery & Setup", + "number": "03", + "description": "B2in coordinates logistics and delivery. Your local partner accompanies the setup down to the last detail." + } + ], + "title": "It's That Simple" + } + } + }, + { + "group": "netzwerk", + "key": "interior_trust", + "type": "json", + "order": 0, + "value": { + "de": { + "list": [ + { + "icon": "map-pin", + "title": "Lokale Experten – Fachhändler in Ihrer Region, die Sie persönlich beraten" + }, + { + "icon": "star", + "title": "Kuratierte Hersteller – Nur geprüfte europäische Qualitätsmarken" + }, + { + "icon": "shield-check", + "title": "Transparente Preise – Faire Konditionen ohne versteckte Aufschläge" + } + ], + "image": "MS - Rollkragen und Jacket..png", + "title": "Persönlich statt anonym", + "image_alt": "Marcel Scheibe – Das Gesicht hinter dem Einrichtungsnetzwerk", + "paragraphs": [ + "Hinter dem B2in-Einrichtungsnetzwerk steht Marcel Scheibe mit der Überzeugung, dass gute Einrichtung persönliche Beratung braucht. Kein Algorithmus ersetzt das Gespräch mit einem Experten, der Materialien kennt, Räume versteht und Ihren Stil trifft." + ], + "image_caption": "Marcel Scheibe, Gründer & CEO" + }, + "en": { + "list": [ + { + "icon": "map-pin", + "title": "Local Experts – Specialist retailers in your region who advise you personally" + }, + { + "icon": "star", + "title": "Curated Manufacturers – Only verified European quality brands" + }, + { + "icon": "shield-check", + "title": "Transparent Pricing – Fair rates with no hidden markups" + } + ], + "image": "b2in/marcel-scheibe-about.jpg", + "title": "Personal Instead of Anonymous", + "image_alt": "Marcel Scheibe – The face behind the interior network", + "paragraphs": [ + "Behind the B2in interior network stands Marcel Scheibe with the conviction that great furnishing requires personal consultation. No algorithm replaces the conversation with an expert who knows materials, understands spaces, and matches your style." + ], + "image_caption": "Marcel Scheibe, Founder & CEO" + } + } + }, + { + "group": "netzwerk", + "key": "broker_section", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Lifetime Vergütung für Makler", + "benefits": [ + { + "icon": "trending-up", + "title": "Lifetime-Vergütungsmodell", + "description": "Kontinuierliche Provisionen durch langfristige Kundenbeziehungen und wiederkehrende Geschäfte" + }, + { + "icon": "clock", + "title": "Schnellere Vermarktung", + "description": "Durchdachte Wohnkonzepte reduzieren die Verkaufszeit und erhöhen die Erfolgschancen" + }, + { + "icon": "target", + "title": "Qualifizierte Leads", + "description": "Vorgefilterte, interessierte Kunden durch das B2in-Portal und Premium-Mitgliedschaften" + }, + { + "icon": "award", + "title": "Premium-Positioning", + "description": "Exklusive Vermarktung hochwertiger Wohnkonzepte für anspruchsvolle Zielgruppen" + } + ], + "subtitle": "Profitieren Sie von einem revolutionären Vergütungsmodell, das über den einmaligen Verkauf hinausgeht. Bauen Sie langfristige Kundenbeziehungen auf und generieren Sie kontinuierliche Erträge.", + "card_title": "Lifetime-Vergütung", + "compensation": { + "follow_up": "1.5%", + "initial_sale": "3.5%" + }, + "compensation_text": "Kontinuierliche Erträge über die gesamte Kundenbeziehung" + }, + "en": { + "title": "Lifetime Compensation for Brokers", + "benefits": [ + { + "icon": "trending-up", + "title": "Lifetime Compensation Model", + "description": "Continuous commissions through long-term client relationships and recurring business" + }, + { + "icon": "clock", + "title": "Faster Marketing", + "description": "Well-designed living concepts reduce sales time and increase success rates" + }, + { + "icon": "target", + "title": "Qualified Leads", + "description": "Pre-filtered, interested clients through the B2in portal and premium memberships" + }, + { + "icon": "award", + "title": "Premium Positioning", + "description": "Exclusive marketing of high-quality living concepts for discerning target groups" + } + ], + "subtitle": "Benefit from a revolutionary compensation model that goes beyond the one-time sale. Build long-term client relationships and generate continuous returns.", + "card_title": "Lifetime Compensation", + "compensation": { + "follow_up": "1.5%", + "initial_sale": "3.5%" + }, + "compensation_text": "Continuous returns throughout the entire client relationship" + } + } + }, + { + "group": "netzwerk", + "key": "commitment_section", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Das Vertrauen unserer Partner", + "subtitle": "Echte Meinungen von echten Partnern. Ihr Erfolg ist unser größter Ansporn.", + "testimonials": [ + { + "image": "b2in/testo-1.jpg", + "quote": "Die Zusammenarbeit mit B2in hat unsere Erwartungen übertroffen. Professionell, effizient und immer lösungsorientiert.", + "author": "Max Mustermann", + "rating": 5, + "author_title": "Möbelhersteller" + }, + { + "image": "b2in/testo-2.jpg", + "quote": "Dank der B2in-Plattform konnten wir unsere Reichweite signifikant erhöhen und neue Märkte erschließen.", + "author": "Erika Mustermann", + "rating": 5, + "author_title": "lokaler Möbelhändler" + }, + { + "image": "b2in/testo-3.jpg", + "quote": "Das B2in-Portal hat die Art, wie ich Immobilien vermarkte, revolutioniert. Das Staging wertet meine Objekte auf, und die Möbelprovision ist ein extrem attraktiver Zusatzverdienst.", + "author": "John Doe", + "rating": 5, + "author_title": "Immobilienmakler" + } + ] + }, + "en": { + "title": "The Trust of Our Partners", + "subtitle": "Real opinions from real partners. Your success is our greatest motivation.", + "testimonials": [ + { + "image": "b2in/testo-1.jpg", + "quote": "Working with B2in has exceeded our expectations. Professional, efficient, and always solution-oriented.", + "author": "Max Mustermann", + "rating": 5, + "author_title": "Furniture Manufacturer" + }, + { + "image": "b2in/testo-2.jpg", + "quote": "Thanks to the B2in platform, we were able to significantly increase our reach and tap into new markets.", + "author": "Erika Mustermann", + "rating": 5, + "author_title": "Local Furniture Retailer" + }, + { + "image": "b2in/testo-3.jpg", + "quote": "The B2in portal has revolutionized the way I market real estate. The staging enhances my properties, and the furniture commission is an extremely attractive additional income.", + "author": "John Doe", + "rating": 5, + "author_title": "Real Estate Broker" + } + ] + } + } + }, + { + "group": "netzwerk", + "key": "dark_stats_section", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "accommodation-2.webp", + "stats": [ + { + "text": "Years of Experience", + "number": "17+" + }, + { + "text": "Happy Guests", + "number": "2M" + } + ], + "title": "Economically Sound and Well-
Friendly Service for
Families and Their
Precious Belongings", + "features": [ + { + "title": "Top Consultation", + "subtitle": "Expert guidance" + }, + { + "title": "Finest Meal", + "subtitle": "Gourmet dining" + }, + { + "title": "Easy Tax Reduction", + "subtitle": "Cost-effective" + } + ], + "image_alt": "Luxury interior design", + "description": "We understand that every family is unique, which is why we offer personalized services tailored to meet your specific needs. From luxury amenities to budget-friendly options, we ensure every guest feels valued and comfortable." + }, + "en": { + "image": "b2in/accommodation-2.jpg", + "stats": [ + { + "text": "Years of Experience", + "number": "17+" + }, + { + "text": "Happy Guests", + "number": "2M" + } + ], + "title": "Economically Sound and Well-
Friendly Service for
Families and Their
Precious Belongings", + "features": [ + { + "title": "Top Consultation", + "subtitle": "Expert guidance" + }, + { + "title": "Finest Meal", + "subtitle": "Gourmet dining" + }, + { + "title": "Easy Tax Reduction", + "subtitle": "Cost-effective" + } + ], + "image_alt": "Luxury interior design", + "description": "We understand that every family is unique, which is why we offer personalized services tailored to meet your specific needs. From luxury amenities to budget-friendly options, we ensure every guest feels valued and comfortable." + } + } + }, + { + "group": "netzwerk", + "key": "ecosystem_hero", + "type": "json", + "order": 0, + "value": { + "de": { + "hub": { + "title": "B2in Portal", + "subtitle": "Die Technologie dahinter, die das Ökosystem ermöglicht" + }, + "image": "ecosystem-hero.webp", + "stats": [ + "Exklusive Auswahl", + "Persönlicher Service", + "Werte die bleiben" + ], + "title": "Wie unser Ökosystem Wachstum für alle Partner generiert", + "features": [ + { + "icon": "globe-alt", + "title": "Immobilien", + "description": "Internationale Investments" + }, + { + "icon": "cube-transparent", + "title": "Einrichtung", + "description": "Local for Local" + }, + { + "icon": "clipboard-document-check", + "title": "Supply Chain", + "description": "Beschaffung & Kontrolle" + }, + { + "icon": "cpu-chip", + "title": "Technologie", + "description": "Digitales Herzstück" + } + ], + "subtitle": "Ein intelligentes Netzwerk, das Immobilienkäufer, lokale Fachexperten, internationale Hersteller, Makler und Entwickler nahtlos miteinander verbindet – für außergewöhnliche Immobilien- und Einrichtungserlebnisse.", + "card_text": "Die Technologie dahinter, die das Ökosystem ermöglicht", + "image_alt": "Ecosystem Hero Image", + "card_title": "B2in Portal" + }, + "en": { + "hub": { + "title": "B2in Portal", + "subtitle": "The technology behind it that enables the ecosystem" + }, + "image": "b2in/ecosystem-hero.jpg", + "stats": [ + "Exclusive Selection", + "Personal Service", + "Lasting Values" + ], + "title": "How Our Ecosystem Generates Growth for All Partners", + "features": [ + { + "icon": "globe-alt", + "title": "Real Estate", + "description": "International Investments" + }, + { + "icon": "cube-transparent", + "title": "Interior", + "description": "Local for Local" + }, + { + "icon": "clipboard-document-check", + "title": "Supply Chain", + "description": "Procurement & Control" + }, + { + "icon": "cpu-chip", + "title": "Technology", + "description": "Digital Core" + } + ], + "subtitle": "An intelligent network that seamlessly connects property buyers, local specialists, international manufacturers, brokers, and developers – for extraordinary real estate and interior experiences.", + "card_text": "The technology behind it that enables the ecosystem", + "image_alt": "Ecosystem Hero Image", + "card_title": "B2in Portal" + } + } + }, + { + "group": "netzwerk", + "key": "ecosystem_stats", + "type": "json", + "order": 0, + "value": { + "de": { + "stats": [ + { + "label": "Partner & Experten im Netzwerk", + "number": "1,7K+", + "description": "Wachsende Community von Entwicklern, Maklern, Händlern und Herstellern" + }, + { + "label": "Realisierte Projekte", + "number": "510+", + "description": "Immobilien- und Einrichtungsprojekte durch unser Netzwerk" + }, + { + "label": "Partner-Zufriedenheit", + "number": "98%", + "description": "Zufriedenheit über alle Ecosystem-Teilnehmer hinweg" + }, + { + "label": "Partner-Support", + "number": "24/7", + "description": "Kontinuierliche Verfügbarkeit der digitalen Infrastruktur" + } + ], + "title": "Unser Ecosystem in Zahlen", + "subtitle": "Zahlen, die die Stärke und das Vertrauen in unser vernetztes Geschäftsmodell widerspiegeln." + }, + "en": { + "stats": [ + { + "label": "Partners & Experts in the Network", + "number": "1.7K+", + "description": "Growing community of developers, brokers, retailers, and manufacturers" + }, + { + "label": "Completed Projects", + "number": "510+", + "description": "Real estate and interior projects through our network" + }, + { + "label": "Partner Satisfaction", + "number": "98%", + "description": "Satisfaction across all ecosystem participants" + }, + { + "label": "Partner Support", + "number": "24/7", + "description": "Continuous availability of the digital infrastructure" + } + ], + "title": "Our Ecosystem in Numbers", + "subtitle": "Numbers that reflect the strength and trust in our connected business model." + } + } + }, + { + "group": "netzwerk", + "key": "ecosystem_start", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "ecosystem_start.webp", + "title": "Alles beginnt mit dem Moment of Need:", + "image_alt": "Der Einstieg ins Ökosystem – über den Immobilienkauf", + "paragraphs": [ + "Unser Ökosystem startet beim Kunden – genau dann, wenn er ihn braucht: beim Immobilienkauf.", + "Über den Makler erhält der Kunde Zugang zum B2in-Ökosystem. Unsere Marken style2own und stileigentum schaffen den passenden Rahmen – je nach Zielgruppe und Lebensstil." + ], + "image_caption": "Der Einstieg: Immobilienkauf als Trigger", + "image_description": "Eine stilisierte Grafik, die zeigt, wie der Immobilienkauf den Einstieg ins B2in-Ökosystem auslöst." + }, + "en": { + "image": "b2in/ecosystem_start.jpg", + "title": "Everything Begins with the Moment of Need:", + "image_alt": "The entry into the ecosystem – through the property purchase", + "paragraphs": [ + "Our ecosystem starts with the customer – exactly when they need it: at the property purchase.", + "Through the broker, the customer gains access to the B2in ecosystem. Our brands style2own and stileigentum create the right framework – tailored to the target group and lifestyle." + ], + "image_caption": "The Entry: Property Purchase as Trigger", + "image_description": "A stylized graphic showing how the property purchase triggers entry into the B2in ecosystem." + } + } + }, + { + "group": "netzwerk", + "key": "ecosystem_hub", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "ecosystem_hub.webp", + "title": "Im Hub trifft Local for Local auf internationale Expertise", + "image_alt": "Local for Local – lokale Expertise trifft internationale Beschaffung", + "paragraphs": [ + "Sobald ein Kunde seine Region wählt, spielt unsere Plattform ihre Stärke aus: Die \"Local First\"-Logik zeigt die Angebote der lokalen Fachexperten prominent an.", + "Ergänzt wird das Sortiment durch europäische Hersteller. Und für Immobilienentwickler liefern wir die operative Beschaffung gleich mit – vom Vertrag bis zur Qualitätskontrolle." + ], + "image_caption": "Local for Local: Lokale Expertise, internationale Reichweite", + "image_description": "Eine klare Infografik, die zeigt: [Lokales Angebot] + [Internationale Beschaffung] = Das B2in-Ökosystem." + }, + "en": { + "image": "b2in/ecosystem_hub.jpg", + "title": "In the Hub, Local for Local Meets International Expertise", + "image_alt": "Local for Local – Local expertise meets international procurement", + "paragraphs": [ + "Once a customer selects their region, our platform plays to its strengths: The \"Local First\" logic prominently displays the offerings of local specialists.", + "The range is complemented by European manufacturers. And for property developers, we deliver the operational procurement as well – from contract to quality control." + ], + "image_caption": "Local for Local: Local Expertise, International Reach", + "image_description": "A clear infographic showing: [Local Offering] + [International Procurement] = The B2in Ecosystem." + } + } + }, + { + "group": "netzwerk", + "key": "ecosystem_result", + "type": "json", + "order": 0, + "value": { + "de": { + "list": [ + { + "icon": "globe-alt", + "title": "Der Immobilienentwickler erhält einen verlässlichen Partner für Beschaffung und Qualitätskontrolle in Deutschland – transparent und termingerecht." + }, + { + "icon": "building-storefront", + "title": "Der lokale Händler gewinnt qualifizierte Kunden, die er alleine nicht erreicht hätte, und stärkt seine Position vor Ort." + }, + { + "icon": "home-modern", + "title": "Der Makler bietet seinen Kunden einen einzigartigen Mehrwert nach dem Abschluss und profitiert von attraktiven Zusatzprovisionen." + } + ], + "image": "ecosystem_result.webp", + "title": "Ein Kreislauf, in dem jeder gewinnt", + "image_alt": "Ihr Erfolg und die Partnerschaft mit B2in", + "paragraphs": [ + "In diesem Zusammenspiel entstehen klare Vorteile für jeden Teilnehmer:" + ], + "image_caption": "Ihr Erfolg und die Partnerschaft mit B2in", + "image_description": "Eine stilisierte Grafik, die zeigt, wie Ihr Erfolg und die Partnerschaft mit B2in zusammenhängen." + }, + "en": { + "list": [ + { + "icon": "globe-alt", + "title": "The property developer receives a reliable partner for procurement and quality control in Germany – transparent and on schedule." + }, + { + "icon": "building-storefront", + "title": "The local retailer gains qualified customers they couldn't have reached on their own, strengthening their local position." + }, + { + "icon": "home-modern", + "title": "The broker offers their clients a unique added value after closing and benefits from attractive additional commissions." + } + ], + "image": "b2in/ecosystem_result.jpg", + "title": "A Cycle Where Everyone Wins", + "image_alt": "Your success and the partnership with B2in", + "paragraphs": [ + "In this interplay, clear advantages emerge for every participant:" + ], + "image_caption": "Your Success and the Partnership with B2in", + "image_description": "A stylized graphic showing how your success and the partnership with B2in are interconnected." + } + } + }, + { + "group": "netzwerk", + "key": "end_customer_section", + "type": "json", + "order": 0, + "value": { + "de": { + "tag": "Für Endkunden", + "card": { + "title": "Login-Karte", + "subtitle": "Ihr Schlüssel zu exklusiven Immobilienerlebnissen", + "member_number": "B2IN-2024-VIP", + "member_number_label": "Mitgliedsnummer" + }, + "image": "end-customer-section.webp", + "title": "Exklusive Erlebnisse für Sie", + "benefits": [ + { + "icon": "credit-card", + "title": "Exklusive Login-Karte", + "description": "Personalisierter Zugang zu ausgewählten Immobilienerlebnissen und Premium-Services" + }, + { + "icon": "star", + "title": "Personalisierte Erlebniswelt", + "description": "Maßgeschneiderte Immobilienangebote basierend auf individuellen Präferenzen und Bedürfnissen" + }, + { + "icon": "home", + "title": "Kuratierte Wohnkonzepte", + "description": "Hochwertige, durchdachte Immobilienlösungen von verifizierten Partnern" + }, + { + "icon": "shield", + "title": "Qualitätsgarantie", + "description": "Geprüfte Anbieter und standardisierte Qualitätsprozesse für maximale Sicherheit" + } + ], + "subtitle": "Mit Ihrer persönlichen Login-Karte erhalten Sie Zugang zu einer einzigartigen Erlebniswelt, die speziell auf Ihre Wohnwünsche und Lebensstil abgestimmt ist. Entdecken Sie kuratierte Immobilien und Services, die sonst nicht verfügbar sind.", + "card_text": "Ihr Schlüssel zu exklusiven Immobilienerlebnissen", + "image_alt": "End Customer Section Image", + "card_title": "Login-Karte" + }, + "en": { + "tag": "For End Customers", + "card": { + "title": "Login Card", + "subtitle": "Your key to exclusive real estate experiences", + "member_number": "B2IN-2024-VIP", + "member_number_label": "Member Number" + }, + "image": "b2in/end-customer-section.jpg", + "title": "Exclusive Experiences for You", + "benefits": [ + { + "icon": "credit-card", + "title": "Exclusive Login Card", + "description": "Personalized access to selected real estate experiences and premium services" + }, + { + "icon": "star", + "title": "Personalized Experience World", + "description": "Tailored property offerings based on individual preferences and needs" + }, + { + "icon": "home", + "title": "Curated Living Concepts", + "description": "High-quality, well-designed property solutions from verified partners" + }, + { + "icon": "shield", + "title": "Quality Guarantee", + "description": "Verified providers and standardized quality processes for maximum security" + } + ], + "subtitle": "With your personal login card, you gain access to a unique world of experiences, specially tailored to your living preferences and lifestyle. Discover curated properties and services that are otherwise unavailable.", + "card_text": "Your key to exclusive real estate experiences", + "image_alt": "End Customer Section Image", + "card_title": "Login Card" + } + } + }, + { + "group": "netzwerk", + "key": "final_commitment", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Were committed to
your comfort and
satisfaction for
unforgettable
experiences", + "author": "Robert Wilson", + "author_title": "General Manager" + }, + "en": { + "title": "We're committed to
your comfort and
satisfaction for
unforgettable
experiences", + "author": "Robert Wilson", + "author_title": "General Manager" + } + } + }, + { + "group": "netzwerk", + "key": "digital_core", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Die Technologie, die diesen Kreislauf ermöglicht", + "features": [ + { + "icon": "cloud", + "title": "Maximale Zuverlässigkeit", + "icon_style": "solid", + "description": "Unsere Plattform ist jederzeit und von überall erreichbar. Sie wächst mit Ihrem Erfolg und garantiert einen stabilen Betrieb, auf den Sie sich verlassen können." + }, + { + "icon": "shield-check", + "title": "Kompromisslose Sicherheit", + "description": "Ihre Daten und die Ihrer Kunden sind unser höchstes Gut. Wir schützen sie mit modernsten Sicherheitsarchitekturen und garantieren vollsten Datenschutz." + }, + { + "icon": "squares-2x2", + "title": "Zukunftsfähige Integration", + "description": "Das B2in-Portal ist offen für die Zukunft. Es lässt sich nahtlos in andere Systeme integrieren und ist bereit für zukünftige Erweiterungen und Technologien." + }, + { + "icon": "chart-bar", + "title": "Datenbasierte Einblicke", + "icon_style": "solid", + "description": "Verfolgen Sie als Makler die Aktivitäten Ihrer Kunden oder als Lieferant die Performance Ihrer Produkte – alles in Echtzeit. Treffen Sie bessere Entscheidungen auf Basis valider Daten." + }, + { + "icon": "cpu-chip", + "title": "Intelligente Personalisierung", + "description": "Künstliche Intelligenz unterstützt Sie und Ihre Kunden – von personalisierten Einrichtungsvorschlägen bis zur Automatisierung von Prozessen für maximale Effizienz." + }, + { + "icon": "users", + "title": "Exzellente User Experience", + "icon_style": "solid", + "description": "Unsere Plattform ist für maximale Geschwindigkeit optimiert und bietet auf jedem Gerät – vom Desktop bis zum Smartphone – eine intuitive und flüssige Bedienung." + } + ], + "subtitle": "Unsere zentrale Plattform ist mehr als nur Technologie. Sie ist das digitale Herzstück für transparente Prozesse, datengestützte Entscheidungen und nahtlose Zusammenarbeit im gesamten Ökosystem." + }, + "en": { + "title": "The Technology That Enables This Cycle", + "features": [ + { + "icon": "cloud", + "title": "Maximum Reliability", + "icon_style": "solid", + "description": "Our platform is accessible anytime, anywhere. It grows with your success and guarantees stable operations you can rely on." + }, + { + "icon": "shield-check", + "title": "Uncompromising Security", + "description": "Your data and your clients' data are our highest priority. We protect them with state-of-the-art security architectures and guarantee complete data privacy." + }, + { + "icon": "squares-2x2", + "title": "Future-Proof Integration", + "description": "The B2in portal is open for the future. It integrates seamlessly with other systems and is ready for future expansions and technologies." + }, + { + "icon": "chart-bar", + "title": "Data-Driven Insights", + "icon_style": "solid", + "description": "Track your clients' activities as a broker or your products' performance as a supplier – all in real-time. Make better decisions based on valid data." + }, + { + "icon": "cpu-chip", + "title": "Intelligent Personalization", + "description": "Artificial intelligence supports you and your clients – from personalized interior suggestions to process automation for maximum efficiency." + }, + { + "icon": "users", + "title": "Excellent User Experience", + "icon_style": "solid", + "description": "Our platform is optimized for maximum speed and offers intuitive, fluid navigation on every device – from desktop to smartphone." + } + ], + "subtitle": "Our central platform is more than just technology. It is the digital core for transparent processes, data-driven decisions, and seamless collaboration across the entire ecosystem." + } + } + }, + { + "group": "netzwerk", + "key": "partner_benefits", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Warum Partner werden?", + "broker": { + "tag": "Für Makler", + "title": "Revolutionäres Provisionsmodell", + "benefits": [ + { + "icon": "trending-up", + "title": "Lifetime-Provisionsmodell", + "description": "Profitieren Sie von kontinuierlichen Einnahmen durch unser innovatives Vergütungssystem" + }, + { + "icon": "target", + "title": "Schnellere Vermarktung", + "description": "Durchdachte Wohnkonzepte verkürzen Vermarktungszeiten und erhöhen Ihre Erfolgsquote" + }, + { + "icon": "award", + "title": "Mehrwert für Ihre Kunden", + "description": "Bieten Sie Ihren Kunden exklusive, kuratierte Immobilienerlebnisse" + } + ], + "highlight": { + "text": "Erstprovision bis Lifetime-Vergütung", + "value": "3.5% - ∞" + } + }, + "subtitle": "Entdecken Sie die Vorteile einer Partnerschaft mit B2in und wie Sie von unserem innovativen Ecosystem profitieren können.", + "supplier": { + "tag": "Für Lieferanten", + "title": "Globale Marktchancen", + "benefits": [ + { + "icon": "globe", + "title": "Zugang zu internationalen Märkten", + "description": "Erweitern Sie Ihre Reichweite über Grenzen hinweg mit unserem globalen Netzwerk" + }, + { + "icon": "handshake", + "title": "Faire Konditionen", + "description": "Transparente und partnerschaftliche Geschäftsbedingungen für nachhaltigen Erfolg" + }, + { + "icon": "settings", + "title": "Einfache Produktverwaltung", + "description": "Intuitive Plattform für die Verwaltung und Präsentation Ihrer Produkte" + } + ], + "highlight": { + "alt": "Partner success visualization", + "text": "Erfolgreiche Partner", + "image": "b2in/accommodation-1.jpg", + "value": "500+" + } + } + }, + "en": { + "title": "Why Become a Partner?", + "broker": { + "tag": "For Brokers", + "title": "Revolutionary Commission Model", + "benefits": [ + { + "icon": "trending-up", + "title": "Lifetime Commission Model", + "description": "Benefit from continuous income through our innovative compensation system" + }, + { + "icon": "target", + "title": "Faster Marketing", + "description": "Well-designed living concepts shorten marketing times and increase your success rate" + }, + { + "icon": "award", + "title": "Added Value for Your Clients", + "description": "Offer your clients exclusive, curated real estate experiences" + } + ], + "highlight": { + "text": "Initial commission to lifetime compensation", + "value": "3.5% - ∞" + } + }, + "subtitle": "Discover the advantages of a partnership with B2in and how you can benefit from our innovative ecosystem.", + "supplier": { + "tag": "For Suppliers", + "title": "Global Market Opportunities", + "benefits": [ + { + "icon": "globe", + "title": "Access to International Markets", + "description": "Expand your reach across borders with our global network" + }, + { + "icon": "handshake", + "title": "Fair Terms", + "description": "Transparent and partnership-based business conditions for sustainable success" + }, + { + "icon": "settings", + "title": "Easy Product Management", + "description": "Intuitive platform for managing and presenting your products" + } + ], + "highlight": { + "alt": "Partner success visualization", + "text": "Successful Partners", + "image": "b2in/accommodation-1.jpg", + "value": "500+" + } + } + } + } + }, + { + "group": "netzwerk", + "key": "supply_chain_intro", + "type": "json", + "order": 0, + "value": { + "de": { + "list": [ + { + "icon": "document-check", + "title": "Vertragsmanagement – Ausarbeitung, Strukturierung und Absicherung von Lieferverträgen" + }, + { + "icon": "shield-check", + "title": "Vertragssicherung & Durchsetzung – Meilenstein-Überwachung, Eskalation, Nachverfolgung" + }, + { + "icon": "magnifying-glass-circle", + "title": "Tracking & Qualitätskontrolle – Laufende Überwachung, persönliche Kontrolle, termingerechte Lieferung" + } + ], + "image": "marcel-scheibe-about.webp", + "title": "Supply-Chain-Management: Ihr verlängerter Arm in Deutschland.", + "image_alt": "Marcel Scheibe – Supply-Chain-Management", + "paragraphs": [ + "Für Immobilienentwickler, die Möbel oder Innenausstattung aus Deutschland beziehen möchten, fungieren wir als verlängerter Arm vor Ort – mit klarem Fokus auf Vertragssicherheit, Termintreue und Durchsetzungskraft." + ], + "image_caption": "Marcel Scheibe, Gründer & CEO" + }, + "en": { + "list": [ + { + "icon": "document-check", + "title": "Contract Management – Drafting, structuring, and securing supply contracts" + }, + { + "icon": "shield-check", + "title": "Contract Enforcement – Milestone monitoring, escalation, follow-up" + }, + { + "icon": "magnifying-glass-circle", + "title": "Tracking & Quality Control – Ongoing monitoring, personal inspection, on-time delivery" + } + ], + "image": "b2in/marcel-scheibe-about.jpg", + "title": "Supply Chain Management: Your Extended Arm in Germany.", + "image_alt": "Marcel Scheibe – Supply Chain Management", + "paragraphs": [ + "For property developers looking to source furniture or interior fittings from Germany, we act as your extended arm on the ground – with a clear focus on contractual reliability, schedule adherence, and enforcement." + ], + "image_caption": "Marcel Scheibe, Founder & CEO" + } + } + }, + { + "group": "netzwerk", + "key": "partner_hero", + "type": "json", + "order": 0, + "value": { + "de": { + "hub": { + "title": "Partner Network", + "subtitle": "Werden Sie Teil unseres Ecosystems" + }, + "image": "partner-hero.webp", + "title": "Für Entwickler & Partner", + "subtitle": "Ob Immobilienentwickler, lokaler Einrichtungsexperte, europäische Marke oder Makler – B2in ist das Netzwerk, das Ihr Geschäft mit den richtigen Partnern und Kunden verbindet.", + "card_text": "Werden Sie Teil unseres Ecosystems", + "image_alt": "Partner Hero Image", + "card_title": "Partner Network", + "partner_types": [ + { + "icon": "globe-alt", + "title": "Immobilienentwickler", + "description": "Supply-Chain-Management aus Deutschland" + }, + { + "icon": "building-office-2", + "title": "Hersteller & Marken", + "description": "Kuratierter Marktzugang, intelligente Logistik" + }, + { + "icon": "building-storefront", + "title": "Lokale Händler", + "description": "Digitale Reichweite, exklusives Sortiment" + }, + { + "icon": "home-modern", + "title": "Makler & Bauträger", + "description": "Mehrwert für Kunden, Zusatzertrag für Sie" + } + ], + "connection_points": [ + { + "name": "Makler", + "subtext": "Lifetime-Modell" + }, + { + "name": "Lieferanten", + "subtext": "Global Markets" + }, + { + "name": "Erfolg", + "subtext": "Messbare Ziele" + }, + { + "name": "Qualität", + "subtext": "Premium Standards" + } + ] + }, + "en": { + "hub": { + "title": "Partner Network", + "subtitle": "Become Part of Our Ecosystem" + }, + "image": "b2in/partner-hero.jpg", + "title": "For Developers & Partners", + "subtitle": "Whether property developer, local interior specialist, European brand, or broker – B2in is the network that connects your business with the right partners and clients.", + "card_text": "Become Part of Our Ecosystem", + "image_alt": "Partner Hero Image", + "card_title": "Partner Network", + "partner_types": [ + { + "icon": "globe-alt", + "title": "Property Developers", + "description": "Supply chain management from Germany" + }, + { + "icon": "building-office-2", + "title": "Manufacturers & Brands", + "description": "Curated market access, intelligent logistics" + }, + { + "icon": "building-storefront", + "title": "Local Retailers", + "description": "Digital reach, exclusive product range" + }, + { + "icon": "home-modern", + "title": "Brokers & Developers", + "description": "Added value for clients, additional income for you" + } + ], + "connection_points": [ + { + "name": "Brokers", + "subtext": "Lifetime Model" + }, + { + "name": "Suppliers", + "subtext": "Global Markets" + }, + { + "name": "Success", + "subtext": "Measurable Goals" + }, + { + "name": "Quality", + "subtext": "Premium Standards" + } + ] + } + } + }, + { + "group": "netzwerk", + "key": "partner_card_section", + "type": "json", + "order": 0, + "value": { + "de": { + "cards": [ + { + "icon": "globe-alt", + "title": "Für Immobilienentwickler", + "button": "#partner-benefits-developer", + "button_text": "Ihre Vorteile als Entwickler", + "description": "Operative Steuerung Ihrer Beschaffung aus Deutschland – Vertragsmanagement, Qualitätskontrolle und termingerechte Lieferung." + }, + { + "icon": "building-storefront", + "title": "Für lokale Händler & Fachexperten", + "button": "#partner-benefits-retailer", + "button_text": "Ihre Vorteile als Händler", + "description": "Stärken Sie Ihr Geschäft vor Ort. Erhalten Sie Zugang zu Online-Kunden und einem exklusiven, überregionalen Sortiment." + }, + { + "icon": "building-office-2", + "title": "Für Hersteller & europäische Marken", + "button": "#partner-benefits-supplier", + "button_text": "Ihre Vorteile als Hersteller", + "description": "Erschließen Sie neue, kuratierte Vertriebskanäle in regionalen Märkten und profitieren Sie von unserer intelligenten Logistik." + }, + { + "icon": "home-modern", + "title": "Für Immobilienmakler & Bauträger", + "button": "#partner-benefits-broker", + "button_text": "Ihre Vorteile als Makler", + "description": "Bieten Sie Ihren Kunden einen einzigartigen Mehrwert, beschleunigen Sie die Vermarktung und sichern Sie sich attraktive Zusatzprovisionen." + } + ], + "title": "Welcher Partner-Typ sind Sie?", + "subtitle": "Entdecken Sie die Vorteile einer Partnerschaft mit B2in – ob im Bereich Immobilien, Einrichtung oder Supply Chain." + }, + "en": { + "cards": [ + { + "icon": "globe-alt", + "title": "For Property Developers", + "button": "#partner-benefits-developer", + "button_text": "Your Benefits as a Developer", + "description": "Operational management of your procurement from Germany – contract management, quality control, and on-time delivery." + }, + { + "icon": "building-storefront", + "title": "For Local Retailers & Specialists", + "button": "#partner-benefits-retailer", + "button_text": "Your Benefits as a Retailer", + "description": "Strengthen your local business. Gain access to online customers and an exclusive, supra-regional product range." + }, + { + "icon": "building-office-2", + "title": "For Manufacturers & European Brands", + "button": "#partner-benefits-supplier", + "button_text": "Your Benefits as a Manufacturer", + "description": "Open up new, curated distribution channels in regional markets and benefit from our intelligent logistics." + }, + { + "icon": "home-modern", + "title": "For Real Estate Brokers & Developers", + "button": "#partner-benefits-broker", + "button_text": "Your Benefits as a Broker", + "description": "Offer your clients unique added value, accelerate marketing, and secure attractive additional commissions." + } + ], + "title": "What Partner Type Are You?", + "subtitle": "Discover the benefits of a partnership with B2in – whether in real estate, interior, or supply chain." + } + } + }, + { + "group": "netzwerk", + "key": "partner_benefits_developer", + "type": "json", + "order": 0, + "value": { + "de": { + "id": "partner-benefits-developer", + "tag": "Ihre Vorteile als Immobilienentwickler", + "image": "partner-benefits-developer.webp", + "features": [ + { + "icon": "document-check", + "title": "Vertragsmanagement", + "description": "Unterstützung bei der Ausarbeitung und Strukturierung von Lieferverträgen. Definition klarer Leistungs- und Qualitätsparameter, Absicherung von Zahlungs- und Lieferbedingungen." + }, + { + "icon": "shield-check", + "title": "Vertragssicherung & Durchsetzung", + "description": "Aktive Überwachung der vereinbarten Meilensteine, Eskalation auf Managementebene bei Abweichungen und konsequente Nachverfolgung offener Punkte." + }, + { + "icon": "magnifying-glass-circle", + "title": "Tracking & Qualitätskontrolle", + "description": "Laufende Produktions- und Lieferüberwachung, persönliche Kontrolle bei Bedarf und Sicherstellung termingerechter Auslieferung." + }, + { + "icon": "link", + "title": "Netzwerk & Marktkenntnis", + "description": "Direkte Anbindung an Hersteller und Entscheider in Deutschland. Wir sorgen dafür, dass Vereinbarungen nicht nur auf dem Papier bestehen, sondern tatsächlich umgesetzt werden." + } + ], + "tag_icon": "globe-alt", + "highlight": { + "text": "Transparenz, Verlässlichkeit und planbare Lieferung – ohne operative Reibungsverluste", + "value": "100%" + }, + "image_alt": "Supply-Chain-Management für Immobilienentwickler", + "tag_title": "Ihr verlängerter Arm in Deutschland." + }, + "en": { + "id": "partner-benefits-developer", + "tag": "Your Benefits as a Property Developer", + "image": "b2in/partner-benefits-developer.jpg", + "features": [ + { + "icon": "document-check", + "title": "Contract Management", + "description": "Support in drafting and structuring supply contracts. Definition of clear performance and quality parameters, securing payment and delivery terms." + }, + { + "icon": "shield-check", + "title": "Contract Enforcement", + "description": "Active monitoring of agreed milestones, escalation to management level in case of deviations, and consistent follow-up of open items." + }, + { + "icon": "magnifying-glass-circle", + "title": "Tracking & Quality Control", + "description": "Ongoing production and delivery monitoring, personal inspection when needed, and ensuring on-time delivery." + }, + { + "icon": "link", + "title": "Network & Market Knowledge", + "description": "Direct connection to manufacturers and decision-makers in Germany. We ensure that agreements don't just exist on paper but are actually implemented." + } + ], + "tag_icon": "globe-alt", + "highlight": { + "text": "Transparency, reliability, and predictable delivery – without operational friction", + "value": "100%" + }, + "image_alt": "Supply Chain Management for Property Developers", + "tag_title": "Your Extended Arm in Germany." + } + } + }, + { + "group": "netzwerk", + "key": "partner_benefits_retailer", + "type": "json", + "order": 0, + "value": { + "de": { + "id": "partner-benefits-retailer", + "tag": "Ihre Vorteile als lokaler Händler", + "image": "partner-benefits-retailer.webp", + "features": [ + { + "icon": "signal", + "title": "Digitale Reichweite", + "description": "Wir bringen Ihnen die Online-Kunden, die Sie alleine nicht erreichen. Profitieren Sie von unseren reichweitenstarken Endkunden-Marken." + }, + { + "icon": "squares-plus", + "title": "Sortiments-Erweiterung", + "description": "Ergänzen Sie Ihr Angebot mit exklusiven Herstellermarken aus unserem Portfolio – ganz ohne eigenes Lagerrisiko." + }, + { + "icon": "shield-check", + "title": "Stärkung gegen Online-Riesen", + "description": "Mit \"Local First\" stärken wir gezielt Ihre Position im Markt. Der Kunde sieht Ihr Angebot immer zuerst." + }, + { + "icon": "scale", + "title": "Faire Konditionen", + "description": "Unser Provisionsmodell ist transparent und darauf ausgelegt, dass wir nur dann verdienen, wenn Sie es auch tun." + } + ], + "tag_icon": "building-storefront", + "highlight": { + "text": "Digitale Reichweite im ersten Jahr (Durchschnitt unserer Partner)", + "value": "+35%" + }, + "image_alt": "Partner Benefits Retailer", + "tag_title": "Werden Sie zum digitalen Champion in Ihrer Region." + }, + "en": { + "id": "partner-benefits-retailer", + "tag": "Your Benefits as a Local Retailer", + "image": "b2in/partner-benefits-retailer.jpg", + "features": [ + { + "icon": "signal", + "title": "Digital Reach", + "description": "We bring you the online customers you can't reach on your own. Benefit from our high-reach consumer brands." + }, + { + "icon": "squares-plus", + "title": "Product Range Extension", + "description": "Complement your offering with exclusive manufacturer brands from our portfolio – without any inventory risk." + }, + { + "icon": "shield-check", + "title": "Protection Against Online Giants", + "description": "With \"Local First,\" we specifically strengthen your market position. The customer always sees your offering first." + }, + { + "icon": "scale", + "title": "Fair Terms", + "description": "Our commission model is transparent and designed so that we only earn when you do too." + } + ], + "tag_icon": "building-storefront", + "highlight": { + "text": "Digital reach in the first year (average of our partners)", + "value": "+35%" + }, + "image_alt": "Partner Benefits Retailer", + "tag_title": "Become the Digital Champion in Your Region." + } + } + }, + { + "group": "netzwerk", + "key": "partner_benefits_supplier", + "type": "json", + "order": 0, + "value": { + "de": { + "id": "partner-benefits-supplier", + "tag": "Ihre Vorteile als Hersteller & Marke", + "image": "partner-benefits-supplier.webp", + "features": [ + { + "icon": "eye", + "title": "Kuratierter Vertriebskanal", + "description": "Statt sich im Rauschen großer Marktplätze zu verlieren, wird Ihre Marke gezielt designaffinen Kunden in kaufkräftigen Regionen präsentiert." + }, + { + "icon": "truck", + "title": "Effiziente Logistik", + "description": "Unsere Bündel-Logistik senkt Ihre Vertriebskosten. Wir managen den Sammeltransport und die komplette Abwicklung." + }, + { + "icon": "map-pin", + "title": "Direkter Marktzugang", + "description": "Überspringen Sie den klassischen Großhandel und bauen Sie eine direkte Beziehung zu regionalen Märkten und Endkunden auf." + }, + { + "icon": "chart-bar-square", + "title": "Skalierbares Wachstum", + "description": "Starten Sie mit uns in einer Region und wachsen Sie schrittweise in weitere europäische Hubs hinein." + } + ], + "tag_icon": "building-office-2", + "highlight": { + "text": "Kuratierte regionale Hubs als neue Vertriebskanäle in Europa", + "value": "> 20" + }, + "image_alt": "Partner Benefits Supplier", + "tag_title": "Erschließen Sie neue Märkte – intelligent und kuratiert." + }, + "en": { + "id": "partner-benefits-supplier", + "tag": "Your Benefits as a Manufacturer & Brand", + "image": "b2in/partner-benefits-supplier.jpg", + "features": [ + { + "icon": "eye", + "title": "Curated Distribution Channel", + "description": "Instead of getting lost in the noise of large marketplaces, your brand is presented to design-savvy customers in affluent regions." + }, + { + "icon": "truck", + "title": "Efficient Logistics", + "description": "Our bundled logistics reduce your distribution costs. We manage consolidated shipping and complete processing." + }, + { + "icon": "map-pin", + "title": "Direct Market Access", + "description": "Skip the traditional wholesale and build a direct relationship with regional markets and end customers." + }, + { + "icon": "chart-bar-square", + "title": "Scalable Growth", + "description": "Start with us in one region and gradually expand into further European hubs." + } + ], + "tag_icon": "building-office-2", + "highlight": { + "text": "Curated regional hubs as new distribution channels in Europe", + "value": "> 20" + }, + "image_alt": "Partner Benefits Supplier", + "tag_title": "Open Up New Markets – Intelligently and Curated." + } + } + }, + { + "group": "netzwerk", + "key": "partner_benefits_broker", + "type": "json", + "order": 0, + "value": { + "de": { + "id": "partner-benefits-broker", + "tag": "Ihre Vorteile als Makler & Immobilienprofi", + "image": "partner-benefits-broker.webp", + "features": [ + { + "icon": "rocket-launch", + "title": "Schnellere Vermarktung durch Home Staging", + "description": "Nutzen Sie unsere kuratierten Möbel-Pakete (stileigentum&style2own), um Ihre Immobilien professionell zu inszenieren. Beschleunigen Sie den Verkaufsprozess und erzielen Sie höhere Preise." + }, + { + "icon": "gift", + "title": "Einzigartiger Service nach dem Abschluss", + "description": "Bieten Sie Ihren Käufern oder Mietern nach Vertragsunterzeichnung über unsere exklusive Login-Karte direkten Zugang zu einem kompletten Einrichtungsservice." + }, + { + "icon": "currency-euro", + "title": "Attraktives Provisionsmodell", + "description": "Profitieren Sie doppelt: Neben Ihrer klassischen Courtage erhalten Sie eine faire, lebenslange Provision auf alle Möbelumsätze, die Ihre Kunden über die Plattform generieren." + }, + { + "icon": "finger-print", + "title": "Einfaches Handling", + "description": "Unser digitales Makler-Portal macht es Ihnen leicht: Kunden einladen, Aktivitäten verfolgen und Provisionen transparent einsehen." + } + ], + "tag_icon": "home-modern", + "highlight": { + "text": "Kürzere Vermarktungszeit für mit B2in inszenierte Objekte", + "value": "-25%" + }, + "image_alt": "Partner Benefits Broker", + "tag_title": "Mehrwert für Ihre Kunden – Mehr Ertrag für Sie." + }, + "en": { + "id": "partner-benefits-broker", + "tag": "Your Benefits as a Broker & Real Estate Professional", + "image": "b2in/partner-benefits-broker.jpg", + "features": [ + { + "icon": "rocket-launch", + "title": "Faster Marketing Through Home Staging", + "description": "Use our curated furniture packages (stileigentum & style2own) to professionally stage your properties. Accelerate the sales process and achieve higher prices." + }, + { + "icon": "gift", + "title": "Unique After-Closing Service", + "description": "Offer your buyers or tenants direct access to a complete furnishing service through our exclusive login card after contract signing." + }, + { + "icon": "currency-euro", + "title": "Attractive Commission Model", + "description": "Benefit twice: In addition to your classic brokerage fee, you receive a fair, lifetime commission on all furniture sales your clients generate through the platform." + }, + { + "icon": "finger-print", + "title": "Easy Handling", + "description": "Our digital broker portal makes it easy: invite clients, track activities, and view commissions transparently." + } + ], + "tag_icon": "home-modern", + "highlight": { + "text": "Shorter marketing time for properties staged with B2in", + "value": "-25%" + }, + "image_alt": "Partner Benefits Broker", + "tag_title": "Added Value for Your Clients – More Revenue for You." + } + } + }, + { + "group": "netzwerk", + "key": "partner_process", + "type": "json", + "order": 0, + "value": { + "de": { + "cta": { + "title": "Bereit für den nächsten Schritt?", + "subtitle": "Werden Sie noch heute Teil des B2in Ecosystems und profitieren Sie von innovativen Geschäftsmodellen und nachhaltigen Erfolgsstrategien.", + "button_link": "/contact", + "button_text": "Jetzt Partner werden" + }, + "steps": [ + { + "icon": "envelope", + "step": "1", + "image": "b2in/room-1.jpg", + "title": "Bewerben", + "description": "Erzählen Sie uns Ihre Geschichte. Füllen Sie unser kurzes Kontaktformular aus und zeigen Sie uns, was Ihre Produkte oder Ihr Geschäft auszeichnet." + }, + { + "icon": "check-circle", + "step": "2", + "image": "b2in/room-2.jpg", + "title": "Prüfung", + "description": "Wir prüfen jede Anfrage persönlich. Unser Ziel ist es, ein hochwertiges und komplementäres Netzwerk aufzubauen, von dem alle profitieren." + }, + { + "icon": "rocket-launch", + "step": "3", + "image": "b2in/room-3.jpg", + "title": "Onboarding", + "description": "Willkommen an Bord! Wir schulen Sie persönlich im Umgang mit unserem Partner-Portal und stellen sicher, dass Sie vom ersten Tag an erfolgreich sind." + } + ], + "title": "So werden Sie Partner", + "subtitle": "In nur drei einfachen Schritten werden Sie Teil des B2in Ecosystems und können von allen Vorteilen unserer Partnerschaft profitieren." + }, + "en": { + "cta": { + "title": "Ready for the Next Step?", + "subtitle": "Become part of the B2in ecosystem today and benefit from innovative business models and sustainable success strategies.", + "button_link": "/contact", + "button_text": "Become a Partner Now" + }, + "steps": [ + { + "icon": "envelope", + "step": "1", + "image": "b2in/room-1.jpg", + "title": "Apply", + "description": "Tell us your story. Fill out our short contact form and show us what sets your products or business apart." + }, + { + "icon": "check-circle", + "step": "2", + "image": "b2in/room-2.jpg", + "title": "Review", + "description": "We review every application personally. Our goal is to build a high-quality, complementary network that benefits everyone." + }, + { + "icon": "rocket-launch", + "step": "3", + "image": "b2in/room-3.jpg", + "title": "Onboarding", + "description": "Welcome aboard! We personally train you on using our partner portal and ensure you are successful from day one." + } + ], + "title": "How to Become a Partner", + "subtitle": "In just three simple steps, you become part of the B2in ecosystem and can benefit from all the advantages of our partnership." + } + } + }, + { + "group": "netzwerk", + "key": "supplier_section", + "type": "json", + "order": 0, + "value": { + "de": { + "tag": "Für Lieferanten", + "title": "Kuratierte Plattform für Anbieter", + "benefits": [ + { + "icon": "store", + "title": "Kuratierter Vertriebskanal", + "description": "Zugang zu einer exklusiven, vorqualifizierten Kundenbasis mit hohem Qualitätsanspruch" + }, + { + "icon": "settings", + "title": "Selbstverwaltung", + "description": "Vollständige Kontrolle über Produktpräsentation, Preisgestaltung und Verfügbarkeit" + }, + { + "icon": "check-circle", + "title": "Zentrale Qualitätssicherung", + "description": "Standardisierte Prozesse und Qualitätskontrollen für maximales Kundenvertrauen" + }, + { + "icon": "bar-chart", + "title": "Analytics & Insights", + "description": "Detaillierte Verkaufsanalysen und Markteinblicke für optimierte Geschäftsentscheidungen" + } + ], + "subtitle": "Werden Sie Teil eines exklusiven Netzwerks hochwertiger Anbieter. Präsentieren Sie Ihre Produkte und Services einer vorqualifizierten, kaufkräftigen Zielgruppe mit höchsten Qualitätsansprüchen.", + "dashboard": { + "stats": [ + { + "label": "Produktsichtbarkeit", + "value": "94%" + }, + { + "label": "Qualitätsbewertung", + "value": "98%" + } + ], + "title": "Anbieter-Dashboard" + } + }, + "en": { + "tag": "For Suppliers", + "title": "Curated Platform for Providers", + "benefits": [ + { + "icon": "store", + "title": "Curated Distribution Channel", + "description": "Access to an exclusive, pre-qualified customer base with high quality standards" + }, + { + "icon": "settings", + "title": "Self-Management", + "description": "Full control over product presentation, pricing, and availability" + }, + { + "icon": "check-circle", + "title": "Central Quality Assurance", + "description": "Standardized processes and quality controls for maximum customer trust" + }, + { + "icon": "bar-chart", + "title": "Analytics & Insights", + "description": "Detailed sales analytics and market insights for optimized business decisions" + } + ], + "subtitle": "Become part of an exclusive network of high-quality providers. Present your products and services to a pre-qualified, affluent audience with the highest quality standards.", + "dashboard": { + "stats": [ + { + "label": "Product Visibility", + "value": "94%" + }, + { + "label": "Quality Rating", + "value": "98%" + } + ], + "title": "Provider Dashboard" + } + } + } + }, + { + "group": "about", + "key": "leadership_team", + "type": "json", + "order": 0, + "value": { + "de": { + "team": [ + { + "name": "Marcel Scheibe", + "image": "b2in/marcel-scheibe.jpg", + "position": "Gründer & CEO", + "expertise": "Visionär für die digitale Zukunft des lokalen Handels und strategischer Brückenbauer zwischen den USA und Europa." + }, + { + "name": "Sarah Müller", + "image": "b2in/sarah-mueller.jpg", + "position": "Head of Operations", + "expertise": "Expertin für die Optimierung unserer europaweiten Logistikprozesse und die operative Exzellenz unserer regionalen Hubs." + }, + { + "name": "Thomas Weber", + "image": "b2in/thomas-weber.jpg", + "position": "Head of Technology", + "expertise": "Technologieführer mit Fokus auf eine intuitive, skalierbare Plattform-Architektur, die Händler und Hersteller nahtlos verbindet." + } + ], + "title": "Das Führungsteam", + "subtitle": "Unser erfahrenes Team bringt jahrzehntelange Expertise in den Bereichen Technologie, Operations und Geschäftsentwicklung mit.", + "team_tag": "B2IN TEAM" + }, + "en": { + "team": [ + { + "name": "Marcel Scheibe", + "image": "b2in/marcel-scheibe.jpg", + "position": "Founder & CEO", + "expertise": "Visionary for the digital future of local trade and strategic bridge-builder between the USA and Europe." + }, + { + "name": "Sarah Müller", + "image": "b2in/sarah-mueller.jpg", + "position": "Head of Operations", + "expertise": "Expert in optimizing our Europe-wide logistics processes and operational excellence of our regional hubs." + }, + { + "name": "Thomas Weber", + "image": "b2in/thomas-weber.jpg", + "position": "Head of Technology", + "expertise": "Technology leader focused on an intuitive, scalable platform architecture that seamlessly connects retailers and manufacturers." + } + ], + "title": "The Leadership Team", + "subtitle": "Our experienced team brings decades of expertise in technology, operations, and business development.", + "team_tag": "B2IN TEAM" + } + } + }, + { + "group": "netzwerk", + "key": "cabinet_partner", + "type": "json", + "order": 0, + "value": { + "de": { + "lead": "Maßgefertigte Exzellenz für höchste Ansprüche.", + "badge": "Premiumpartner", + "image": "b2in/cabinet_logo.png", + "title": "Unser Premiumpartner: CABINET Einbauschränke", + "image_alt": "CABINET Einbauschränke – Premiumpartner von B2in", + "paragraphs": [ + "Im B2in-Netzwerk setzen wir auf Qualität, die Bestand hat. Wir sind stolz darauf, CABINET als Premiumpartner in unserem Netzwerk zu präsentieren. Der CABINET Store in Bielefeld (unser physischer Ankerpunkt) steht für maßgefertigte Einbaulösungen, die Design, Funktionalität und handwerkliche Präzision perfekt vereinen.", + "Ob begehbare Kleiderschränke, smarte Raumlösungen oder exklusive Innenausbauten – CABINET liefert den Premium-Standard, den unsere Immobilien-Investoren und Entwickler für ihre High-End-Projekte fordern. Diese Partnerschaft ist ein lebendiger Beweis für unsere Philosophie: Wir verbinden internationale Immobilien mit deutscher Einrichtungsexzellenz." + ] + }, + "en": { + "lead": "Bespoke excellence for the highest standards.", + "badge": "Premium partner", + "image": "b2in/cabinet_logo.png", + "title": "Our premium partner: CABINET Built-In Wardrobes", + "image_alt": "CABINET built-in wardrobes – B2in premium partner", + "paragraphs": [ + "In the B2in ecosystem, we focus on lasting quality. We are proud to feature CABINET as a premium partner in our network. The CABINET store in Bielefeld (our physical anchor) stands for bespoke built-in solutions that unite design, functionality, and craftsmanship.", + "Whether walk-in wardrobes, smart room concepts, or exclusive interiors – CABINET delivers the premium standard our real estate investors and developers expect for high-end projects. This partnership reflects our philosophy: connecting international real estate with German interior excellence." + ] + } + } + }, + { + "group": "netzwerk", + "key": "immobilien_hint", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Schon jetzt verfügbar: Immobilien", + "button_link": "/immobilien", + "button_text": "Zu den Immobilien-Projekten", + "description": "Unser Immobilienbereich ist bereits aktiv. Entdecken Sie exklusive Off-Market-Projekte in Dubai mit persönlicher Begleitung durch Marcel Scheibe." + }, + "en": { + "title": "Already available: Real estate", + "button_link": "/immobilien", + "button_text": "View real estate projects", + "description": "Our real estate division is already active. Discover exclusive off-market projects in Dubai with personal guidance from Marcel Scheibe." + } + } + } +] \ No newline at end of file diff --git a/dev/2026-08-28/archiv-2026-10-06/cms-content-lokal-vollstaendig.json b/dev/2026-08-28/archiv-2026-10-06/cms-content-lokal-vollstaendig.json new file mode 100644 index 00000000..deccc3e6 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/cms-content-lokal-vollstaendig.json @@ -0,0 +1,4616 @@ +[ + { + "group": "about", + "key": "hero", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "b2in/about-hero.jpg", + "quote": "„Gute Einrichtung entsteht nicht im Katalog, sondern im Gespräch. Deshalb arbeiten wir mit wenigen ausgewählten Herstellern, die wir kennen – und mit Fachbetrieben aus der Region, für deren Arbeit wir geradestehen.

Mein Anspruch ist einfach: ein Ansprechpartner, vom ersten Aufmaß bis nach der Montage.“", + "title": "Über B2in: Unsere Mission", + "card_text": "Premium-Einrichtung. Persönlich gemacht.", + "image_alt": "Marcel Scheibe, Gründer und CEO von B2in", + "card_title": "B2in", + "founder_name": "Marcel Scheibe", + "founder_title": "Gründer & CEO, B2in" + }, + "en": { + "image": "b2in/about-hero.jpg", + "quote": "\"Good interiors are not created in a catalogue, but in conversation. That is why we work with a few selected manufacturers we know – and with specialist firms from the region whose work we stand behind.

My standard is simple: one point of contact, from the first measurement to after installation.\"", + "title": "About B2in: Our Mission", + "card_text": "Premium interiors. Made personal.", + "image_alt": "Marcel Scheibe, Founder and CEO of B2in", + "card_title": "B2in", + "founder_name": "Marcel Scheibe", + "founder_title": "Founder & CEO, B2in" + } + } + }, + { + "group": "about", + "key": "image_break", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "best-of-two-worlds.jpg", + "quote": "Regional verwurzelt, international vernetzt – das ist B2in.", + "author": "Marcel Scheibe", + "image_alt": "B2in – Immobilien und Einrichtung verbinden" + }, + "en": { + "image": "b2in/best-of-two-worlds.jpg", + "quote": "Locally rooted, internationally connected – that is B2in.", + "author": "Marcel Scheibe", + "image_alt": "B2in – Connecting Real Estate and Interior" + } + } + }, + { + "group": "about", + "key": "leadership_team", + "type": "json", + "order": 0, + "value": { + "de": { + "team": [ + { + "name": "Marcel Scheibe", + "image": "b2in/marcel-scheibe.jpg", + "position": "Gründer & CEO", + "expertise": "Visionär für die digitale Zukunft des lokalen Handels und strategischer Brückenbauer zwischen den USA und Europa." + }, + { + "name": "Sarah Müller", + "image": "b2in/sarah-mueller.jpg", + "position": "Head of Operations", + "expertise": "Expertin für die Optimierung unserer europaweiten Logistikprozesse und die operative Exzellenz unserer regionalen Hubs." + }, + { + "name": "Thomas Weber", + "image": "b2in/thomas-weber.jpg", + "position": "Head of Technology", + "expertise": "Technologieführer mit Fokus auf eine intuitive, skalierbare Plattform-Architektur, die Händler und Hersteller nahtlos verbindet." + } + ], + "title": "Das Führungsteam", + "subtitle": "Unser erfahrenes Team bringt jahrzehntelange Expertise in den Bereichen Technologie, Operations und Geschäftsentwicklung mit.", + "team_tag": "B2IN TEAM" + }, + "en": { + "team": [ + { + "name": "Marcel Scheibe", + "image": "b2in/marcel-scheibe.jpg", + "position": "Founder & CEO", + "expertise": "Visionary for the digital future of local trade and strategic bridge-builder between the USA and Europe." + }, + { + "name": "Sarah Müller", + "image": "b2in/sarah-mueller.jpg", + "position": "Head of Operations", + "expertise": "Expert in optimizing our Europe-wide logistics processes and operational excellence of our regional hubs." + }, + { + "name": "Thomas Weber", + "image": "b2in/thomas-weber.jpg", + "position": "Head of Technology", + "expertise": "Technology leader focused on an intuitive, scalable platform architecture that seamlessly connects retailers and manufacturers." + } + ], + "title": "The Leadership Team", + "subtitle": "Our experienced team brings decades of expertise in technology, operations, and business development.", + "team_tag": "B2IN TEAM" + } + } + }, + { + "group": "about", + "key": "our_story", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Unsere Geschichte", + "summary": "Aus der Idee, hochwertige Einrichtung wieder persönlich zu machen, ist ein Netzwerk aus starken Marken und regionalen Fachbetrieben geworden – mit Marcel Scheibe als Gesicht und festem Ansprechpartner.", + "timeline": [ + { + "icon": "light-bulb", + "title": "Die Idee", + "description": "2024 war der Ausgangspunkt eine einfache Beobachtung: Wer hochwertig einrichten will, findet online viele Kataloge – aber selten jemanden, der zuhört, aufmisst und am Ende auch dafür geradesteht." + }, + { + "icon": "rocket-launch", + "title": "Das Fundament", + "description": "Wir bauen das Netzwerk auf: ausgewählte Hersteller, Fachbetriebe und Handwerker aus der Region – verbunden durch dieselbe Grundhaltung: Zu Qualität gehört, Wort zu halten." + }, + { + "icon": "globe-alt", + "title": "Die Erweiterung", + "description": "2026 rückt die Einrichtung in den Mittelpunkt: CABINET, Rotpunkt Küchen, Febrü und Otterpohl Möbelservice bilden die Kernmarken, ergänzt um ein Netzwerk regionaler Fachexperten. Internationale Immobilien bleiben als zweiter Bereich bestehen." + }, + { + "icon": "star", + "title": "Die Vision", + "description": "B2in Interior wird in der Region die erste Adresse für hochwertige Einrichtung – vom einzelnen Einbauschrank bis zur vollständigen Ausstattung. Regional verwurzelt, international vernetzt." + } + ] + }, + "en": { + "title": "Our Story", + "summary": "What began as an idea – to make high-quality interiors personal again – is today a network of strong brands and regional specialists, with Marcel Scheibe as the face and fixed point of contact.", + "timeline": [ + { + "icon": "light-bulb", + "title": "The Idea", + "description": "In 2024 the starting point was a simple observation: anyone wanting a high-quality interior finds plenty of catalogues online – but rarely someone who listens, measures up and stands behind the result." + }, + { + "icon": "rocket-launch", + "title": "The Foundation", + "description": "We are building the network: selected manufacturers, specialist firms and craftspeople from the region – connected by the same conviction that quality and keeping your word belong together." + }, + { + "icon": "globe-alt", + "title": "The Expansion", + "description": "In 2026 interiors move to the centre: CABINET, Rotpunkt Küchen, Febrü and Otterpohl Möbelservice form the core, complemented by a network of regional specialists. International real estate remains as a second area." + }, + { + "icon": "star", + "title": "The Vision", + "description": "B2in Interior becomes the first address in the region for high-quality interiors – from a single fitted wardrobe to a complete fit-out. Locally rooted, internationally connected." + } + ] + } + } + }, + { + "group": "about", + "key": "our_values", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Unsere Werte", + "values": [ + { + "icon": "chat-bubble-left-right", + "title": "Beratung statt Verkauf", + "description": "Wir fragen zuerst, wie Sie Ihre Räume nutzen, und schlagen erst danach etwas vor. Manchmal ist die richtige Antwort ein kleineres Möbelstück als gedacht." + }, + { + "icon": "cube-transparent", + "title": "Maßarbeit", + "description": "Schrägen, Nischen und ungewöhnliche Höhen sind kein Problem, sondern der Grund für eine Maßanfertigung. Wir planen auch den Raum, den ein Standardmöbel ungenutzt lässt." + }, + { + "icon": "check-badge", + "title": "Ausgewählte Marken", + "description": "Lieber wenige Hersteller, die wir kennen, als ein beliebiges Sortiment. Für die Marken, die wir führen, stehen wir gerade." + }, + { + "icon": "map-pin", + "title": "Regional verwurzelt", + "description": "Wir arbeiten mit Fachbetrieben und Handwerkern aus der Region – Menschen, die wir kennen und die vor Ort sind, wenn es darauf ankommt." + }, + { + "icon": "user-group", + "title": "Ein Ansprechpartner", + "description": "Vom ersten Gespräch über das Aufmaß bis nach der Montage bleibt der Kontakt derselbe. Auch dann, wenn mehrere Gewerke beteiligt sind." + }, + { + "icon": "shield-check", + "title": "Verlässlichkeit", + "description": "Zusagen zu Terminen und Preisen halten wir ein. Wenn sich etwas verschiebt, sagen wir es, sobald wir es wissen – nicht erst am Liefertag." + } + ], + "subtitle": "Sechs Grundsätze, an denen wir uns messen lassen – in der Beratung, in der Planung und nach der Montage." + }, + "en": { + "title": "Our Values", + "values": [ + { + "icon": "chat-bubble-left-right", + "title": "Advice, not sales", + "description": "We first ask how you use your rooms and only then suggest something. Sometimes the right answer is a smaller piece than expected." + }, + { + "icon": "cube-transparent", + "title": "Bespoke work", + "description": "Slopes, niches and unusual heights are not a problem but the reason for bespoke furniture. We plan the space that standard furniture leaves behind." + }, + { + "icon": "check-badge", + "title": "Selected brands", + "description": "A few manufacturers we know, rather than an arbitrary range. We stand behind the brands we carry." + }, + { + "icon": "map-pin", + "title": "Regionally rooted", + "description": "We work with specialist firms and craftspeople from the region – people we know and who are on site when it matters." + }, + { + "icon": "user-group", + "title": "One point of contact", + "description": "From the first conversation through measuring up to after installation, the contact stays the same – including when several trades are involved." + }, + { + "icon": "shield-check", + "title": "Reliability", + "description": "We keep our commitments on dates and prices. If something shifts, we say so as soon as we know – not on the delivery date." + } + ], + "subtitle": "Six principles we want to be measured by – in the consultation, in the planning and after installation." + } + } + }, + { + "group": "contact", + "key": "contact_form", + "type": "json", + "order": 0, + "value": { + "de": { + "form": { + "labels": { + "email": "E-Mail *", + "phone": "Telefon (optional)", + "company": "Firma (optional)", + "message": "Ihre Nachricht *", + "subject": "Betreff *", + "last_name": "Nachname *", + "first_name": "Vorname *" + }, + "button_text": "Senden", + "placeholders": { + "message": "Ihre Nachricht..." + }, + "button_loading": "Wird gesendet...", + "subject_groups": { + "b2in": { + "label": "B2in", + "subjects": { + "press": "Presse", + "career": "Karriere", + "general": "Allgemeine Anfrage", + "partnership": "Zusammenarbeit im Netzwerk" + } + }, + "interior": { + "label": "Interior", + "subjects": { + "kueche": "Küchenplanung", + "beratung": "Beratungstermin", + "supply_chain": "Ausstattung für Projekte", + "massanfertigung": "Maßanfertigung für mein Zuhause" + } + }, + "immobilien": { + "label": "Immobilien", + "subjects": { + "expose": "Exposé und Verfügbarkeit", + "immobilien": "Beratung zum Investment", + "einrichtung": "Einrichtung nach dem Kauf", + "kaufprozess": "Fragen zum Kaufprozess" + } + } + }, + "success_message": "Vielen Dank für Ihre Nachricht! Wir werden uns schnellstmöglich bei Ihnen melden.", + "subject_placeholder": "Wählen Sie einen Betreff" + }, + "hero": { + "title": "Senden Sie uns eine
Nachricht.", + "subtitle": "Wir freuen uns auf Ihre Nachricht und werden uns schnellstmöglich bei Ihnen melden." + }, + "contact_info": [ + { + "icon": "map-pin", + "info": [ + "Rathausstraße 11", + "33602 Bielefeld" + ], + "title": "Unser Büro-Standort" + }, + { + "icon": "mail", + "info": [ + "info@b2in.eu" + ], + "title": "Unsere E-Mail-Adresse" + }, + { + "icon": "phone", + "info": [ + "+49 (0) 5221 9255055" + ], + "title": "Unser Kontakt-Nummer" + } + ], + "social_media": { + "title": "Follow for
exclusives", + "subtitle": "Bleiben Sie auf dem Laufenden mit exklusiven Angeboten und News.", + "platforms": [ + { + "url": "https://instagram.com/b2in_official", + "name": "Instagram", + "handle": "@b2in_official" + }, + { + "url": "https://youtube.com/@b2in", + "name": "Youtube", + "handle": "B2IN Channel" + }, + { + "url": "https://pinterest.com/b2in", + "name": "Pinterest", + "handle": "B2IN Inspiration" + }, + { + "url": "https://facebook.com/b2in", + "name": "Facebook", + "handle": "B2IN Deutschland" + }, + { + "url": "https://linkedin.com/company/b2in", + "name": "LinkedIn", + "handle": "B2IN Company" + } + ] + } + }, + "en": { + "form": { + "labels": { + "email": "Email *", + "phone": "Phone (optional)", + "company": "Company (optional)", + "message": "Your Message *", + "subject": "Subject *", + "last_name": "Last Name *", + "first_name": "First Name *" + }, + "button_text": "Send", + "placeholders": { + "message": "Your message..." + }, + "button_loading": "Sending...", + "subject_groups": { + "b2in": { + "label": "B2in", + "subjects": { + "press": "Press", + "career": "Career", + "general": "General Inquiry", + "partnership": "Working together in the network" + } + }, + "interior": { + "label": "Interior", + "subjects": { + "kueche": "Kitchen planning", + "beratung": "Consultation appointment", + "supply_chain": "Fitting out a project", + "massanfertigung": "Bespoke furniture for my home" + } + }, + "immobilien": { + "label": "Real Estate", + "subjects": { + "expose": "Exposé and availability", + "immobilien": "Investment consultation", + "einrichtung": "Furnishing after the purchase", + "kaufprozess": "Questions about the purchase process" + } + } + }, + "success_message": "Thank you for your message! We will get back to you as soon as possible.", + "subject_placeholder": "Select a subject" + }, + "hero": { + "title": "Send Us a
Message.", + "subtitle": "We look forward to your message and will get back to you as soon as possible." + }, + "contact_info": [ + { + "icon": "map-pin", + "info": [ + "Rathausstraße 11", + "33602 Bielefeld" + ], + "title": "Our Office Location" + }, + { + "icon": "mail", + "info": [ + "info@b2in.eu" + ], + "title": "Our Email Address" + }, + { + "icon": "phone", + "info": [ + "+49 (0) 5221 9255055" + ], + "title": "Our Phone Number" + } + ], + "social_media": { + "title": "Follow for
exclusives", + "subtitle": "Stay up to date with exclusive offers and news.", + "platforms": [ + { + "url": "https://instagram.com/b2in_official", + "name": "Instagram", + "handle": "@b2in_official" + }, + { + "url": "https://youtube.com/@b2in", + "name": "Youtube", + "handle": "B2IN Channel" + }, + { + "url": "https://pinterest.com/b2in", + "name": "Pinterest", + "handle": "B2IN Inspiration" + }, + { + "url": "https://facebook.com/b2in", + "name": "Facebook", + "handle": "B2IN Deutschland" + }, + { + "url": "https://linkedin.com/company/b2in", + "name": "LinkedIn", + "handle": "B2IN Company" + } + ] + } + } + } + }, + { + "group": "contact", + "key": "contact_form_immobilien", + "type": "json", + "order": 0, + "value": { + "de": { + "hero": { + "title": "Fragen zu einem
Projekt?", + "subtitle": "Ob Exposé, Kaufprozess oder Einrichtung nach dem Kauf – schreiben Sie uns. Marcel Scheibe meldet sich persönlich bei Ihnen." + } + }, + "en": { + "hero": { + "title": "Questions about a
project?", + "subtitle": "Exposé, purchase process or furnishing after the purchase – write to us. Marcel Scheibe will get back to you personally." + } + } + } + }, + { + "group": "faq", + "key": "faq", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Häufig gestellte Fragen", + "sections": [ + { + "icon": "home-modern", + "title": "Für Ihr Zuhause", + "questions": [ + { + "answer": "Nein. Viele Aufträge beginnen mit einem einzigen Möbelstück – einem Einbauschrank für die Dachschräge, einer neuen Küche, einem Arbeitsplatz. Ob daraus mehr wird, entscheiden Sie. Wir planen so, dass eine spätere Ergänzung passt und nicht wie ein Fremdkörper wirkt.", + "question": "Muss ich gleich die ganze Wohnung einrichten?" + }, + { + "answer": "Das hängt vom Raum, den Materialien und der Ausstattung ab – eine seriöse Zahl lässt sich erst nach dem Aufmaß nennen. Was sich sagen lässt: Maßanfertigung nutzt Flächen, die ein Standardmöbel liegen lässt – Schrägen, Nischen, ungewöhnliche Höhen. Sie zahlen für den Raum, den Sie sonst verschenken. Das Angebot bekommen Sie vor der Fertigung, verbindlich und aufgeschlüsselt.", + "question": "Was kostet eine Maßanfertigung im Vergleich zu Möbeln von der Stange?" + }, + { + "answer": "Ja. Lieferung und Montage laufen über uns beziehungsweise über Fachbetriebe aus unserem Netzwerk, mit denen wir regelmäßig arbeiten. Sie haben einen Ansprechpartner, der die Termine koordiniert – auch dann, wenn mehrere Gewerke beteiligt sind.", + "question": "Übernehmen Sie auch die Montage?" + }, + { + "answer": "Ja, im Showroom in Bielefeld lassen sich Oberflächen, Fronten und Beschläge in Ruhe anfassen und vergleichen. Fotos und Muster helfen bei der Vorauswahl, ersetzen aber nicht den direkten Eindruck. Vereinbaren Sie dafür am besten vorher einen Termin, damit wir uns Zeit nehmen können.", + "question": "Kann ich mir die Marken vorher ansehen?" + } + ] + }, + { + "icon": "briefcase", + "title": "Für Projekte und Objekte", + "questions": [ + { + "answer": "Eine feste Untergrenze gibt es nicht. Sinnvoll wird die Zusammenarbeit, sobald mehrere Einheiten oder mehrere Gewerke im Spiel sind und die Koordination zum eigentlichen Aufwand wird – bei Büroflächen, möblierten Wohneinheiten oder der Ausstattung eines ganzen Objekts.", + "question": "Ab welcher Größe lohnt sich eine Projektausstattung?" + }, + { + "answer": "Wir arbeiten mit festen Lieferverträgen, verfolgen die Meilensteine direkt beim Hersteller und melden Abweichungen, sobald sie sichtbar werden – nicht erst zum Liefertermin. Bei mehreren Gewerken übernehmen wir die Abstimmung untereinander, damit die Reihenfolge auf der Baustelle stimmt.", + "question": "Wie stellen Sie Termintreue sicher?" + }, + { + "answer": "Ja. Wir übernehmen bestehende Planungen und setzen sie um oder steigen früher ein, wenn Möblierung und Grundriss noch aufeinander abgestimmt werden müssen. Für Sonderlösungen sprechen wir direkt mit den Herstellern.", + "question": "Arbeiten Sie mit Architekten und Planungsbüros zusammen?" + }, + { + "answer": "Unser Netzwerk umfasst Fachbetriebe und Handwerker rund um die Einrichtung – von der Montage bis zu angrenzenden Gewerken. Wenn Sie Interesse haben, schreiben Sie uns über das Kontaktformular. Wir prüfen jede Zusammenarbeit einzeln, weil wir für die Arbeit unserer Partner geradestehen.", + "question": "Wie werde ich Partner im regionalen Netzwerk?" + } + ] + } + ], + "subtitle": "Antworten auf die Fragen, die uns am häufigsten gestellt werden – zur Beratung, zur Maßanfertigung und zur Ausstattung von Projekten.", + "questions": [ + { + "answer": "B2in Interior steht für hochwertige Einrichtung von starken Marken – CABINET, Rotpunkt Küchen und Febrü – ergänzt um ein Netzwerk regionaler Fachexperten. Wir begleiten Privatkunden von der einzelnen Maßanfertigung bis zur kompletten Einrichtung und statten Objekte, Büros und Projektentwicklungen vollständig aus. Darüber hinaus begleiten wir ausgewählte internationale Immobilienprojekte.", + "question": "Was ist B2in und welche Services bieten Sie an?" + }, + { + "answer": "Für Objekte, Büros und Projektentwicklungen übernehmen wir die vollständige Ausstattung – koordiniert aus einer Hand. Wir steuern die Beschaffung von Möbeln und Innenausstattung operativ und strategisch. Das bedeutet: Wir sichern Lieferverträge ab, überwachen Meilensteine direkt bei den Herstellern und eskalieren bei Abweichungen sofort auf Managementebene. Unser Ziel ist absolute Vertragssicherheit und termingerechte Lieferung ohne Reibungsverluste.", + "question": "Was bedeutet Projektausstattung bei B2in?" + }, + { + "answer": "Unser Netzwerk umfasst Fachbetriebe und Handwerker rund um die Einrichtung – von der Montage über das Aufmaß bis zu angrenzenden Gewerken. Wenn Sie Interesse an einer Zusammenarbeit haben, schreiben Sie uns über das Kontaktformular. Wir prüfen jede Partnerschaft einzeln, weil wir für die Arbeit unserer Partner geradestehen.", + "question": "Wie kann ich Partner bei B2in Interior werden?" + }, + { + "answer": "Am Anfang steht ein Gespräch – im Showroom, bei Ihnen zu Hause oder telefonisch. Wir schauen uns an, welche Räume es betrifft, wie Sie sie nutzen und was Ihnen wichtig ist. Danach folgt das Aufmaß vor Ort, anschließend die Planung. Sie sehen Ihre Lösung, bevor etwas gefertigt wird. Termine vereinbaren Sie über das Formular auf dieser Seite oder direkt telefonisch.", + "question": "Wie läuft eine Beratung bei Ihnen ab?" + }, + { + "answer": "Wir arbeiten mit einer überschaubaren Zahl ausgewählter Hersteller statt mit beliebigen Katalogen – und stehen für deren Arbeit gerade. Hinter B2in Interior steht mit Marcel Scheibe ein Gesicht und ein fester Ansprechpartner, vom ersten Gespräch bis nach der Montage. Für die Gewerke rund um die Einrichtung arbeiten wir mit Fachbetrieben aus der Region zusammen, die wir kennen.", + "question": "Was macht B2in Interior zu einem verlässlichen Partner?" + } + ] + }, + "en": { + "title": "Frequently Asked Questions", + "sections": [ + { + "icon": "home-modern", + "title": "For your home", + "questions": [ + { + "answer": "No. Many projects start with a single piece – a fitted wardrobe under a sloping ceiling, a new kitchen, a workspace. Whether more follows is up to you. We plan in a way that lets a later addition fit in rather than look bolted on.", + "question": "Do I have to furnish the whole flat at once?" + }, + { + "answer": "That depends on the room, the materials and the fittings – a serious figure is only possible after measuring up. What can be said: bespoke uses the space standard furniture leaves behind – slopes, niches, unusual heights. You pay for the space you would otherwise give away. You receive the quote before anything is made, binding and itemised.", + "question": "What does bespoke cost compared to off-the-shelf furniture?" + }, + { + "answer": "Yes. Delivery and installation run through us or through specialist firms from our network that we work with regularly. You have one point of contact who coordinates the appointments – including when several trades are involved.", + "question": "Do you handle installation as well?" + }, + { + "answer": "Yes, in the showroom in Bielefeld you can take your time with surfaces, fronts and fittings. Photos and samples help with a pre-selection, but they do not replace the direct impression. It is best to arrange an appointment so we can take the time.", + "question": "Can I see the brands beforehand?" + } + ] + }, + { + "icon": "briefcase", + "title": "For projects and properties", + "questions": [ + { + "answer": "There is no fixed lower limit. Working together makes sense as soon as several units or several trades are involved and coordination becomes the actual effort – for office space, furnished residential units or fitting out an entire property.", + "question": "From what size is a project fit-out worthwhile?" + }, + { + "answer": "We work with binding supply contracts, track milestones directly with the manufacturer and report deviations as soon as they become visible – not just on the delivery date. Where several trades are involved, we handle the coordination between them so the sequence on site works.", + "question": "How do you ensure delivery dates are met?" + }, + { + "answer": "Yes. We take on existing plans and implement them, or come in earlier when furniture and floor plan still need to be matched up. For special solutions we talk directly to the manufacturers.", + "question": "Do you work with architects and planning offices?" + }, + { + "answer": "Our network covers specialist firms and craftspeople around interiors – from installation to adjacent trades. If you are interested, write to us using the contact form. We review every collaboration individually, because we stand behind the work of our partners.", + "question": "How do I join the regional network?" + } + ] + } + ], + "subtitle": "Answers to the questions we are asked most often – about advice, bespoke furniture and fitting out projects.", + "questions": [ + { + "answer": "B2in Interior stands for high-quality interiors from strong brands – CABINET, Rotpunkt Küchen and Febrü – complemented by a network of regional specialists. We support private customers from a single bespoke piece to a complete interior, and fit out properties, offices and developments in full. In addition, we accompany selected international real estate projects.", + "question": "What is B2in Interior and what do you offer?" + }, + { + "answer": "For properties, offices and developments we take on the complete fit-out, coordinated from a single source. We manage the procurement of furniture and interiors both operationally and strategically: we secure supply contracts, monitor milestones directly with the manufacturers and escalate deviations immediately. The goal is contractual reliability and on-time delivery without friction.", + "question": "What does fitting out a project involve?" + }, + { + "answer": "Our network covers specialist firms and craftspeople around interiors – from installation to adjacent trades. If you are interested, write to us using the contact form. We review every collaboration individually, because we stand behind the work of our partners.", + "question": "How can I become a partner?" + }, + { + "answer": "It starts with a conversation – in the showroom, at your home or by phone. We look at the rooms involved, how you use them and what matters to you. Measuring up on site follows, then the planning. You see your solution before anything is made. Appointments can be arranged through the form on this page or by phone.", + "question": "How does a consultation work?" + }, + { + "answer": "We work with a manageable number of selected manufacturers instead of arbitrary catalogues – and we stand behind their work. Behind B2in Interior there is a face and a fixed point of contact in Marcel Scheibe, from the first conversation to after installation. For the trades around the interior we work with specialist firms from the region that we know.", + "question": "What makes B2in Interior a reliable partner?" + } + ] + } + } + }, + { + "group": "faq", + "key": "faq_immobilien", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Häufige Fragen zu Immobilien", + "sections": [ + { + "icon": "home-modern", + "title": "Für Immobilien-Investoren", + "questions": [ + { + "answer": "Nein, der gesamte Kaufprozess kann vollständig digital und rechtsverbindlich aus der Ferne abgewickelt werden. Das Dubai Land Department bietet hierfür sichere Prozesse. Wir empfehlen unseren Investoren zwar, sich vor Ort ein Bild von der Stadt zu machen – für den rechtssicheren Erwerb ist Ihre Anwesenheit jedoch nicht erforderlich.", + "question": "Muss ich für den Immobilienkauf persönlich nach Dubai reisen?" + }, + { + "answer": "Genau hier liegt der Vorteil von B2in. Unser Service endet nicht mit dem Kaufvertrag. Wir unterstützen Sie dabei, Ihre Immobilie schlüsselfertig („Turnkey“) und renditeorientiert mit Qualitätsmöbeln auszustatten – die Grundlage für eine erfolgreiche Vermietung.", + "question": "Was passiert nach dem Immobilienkauf? Helfen Sie bei der Einrichtung?" + }, + { + "answer": "Dubai bietet ein besonderes wirtschaftliches Umfeld: Es fallen weder Einkommensteuer auf Mieteinnahmen noch Kapitalertragsteuer beim Verkauf der Immobilie an. In Kombination mit den Mietrenditen macht das den Standort für internationale Anleger interessant. Bitte lassen Sie Ihre persönliche steuerliche Situation von einem Steuerberater prüfen.", + "question": "Welche steuerlichen Vorteile bietet ein Investment in Dubai?" + } + ] + } + ], + "subtitle": "Antworten zu Investments in Dubai, zum Kaufprozess und dazu, wie B2in Sie dabei begleitet.", + "questions": [ + { + "answer": "Wir vermitteln nicht nur, wir begleiten Sie. Marcel Scheibe ist Ihr persönlicher Berater, der den Markt in Dubai aus eigener Investorensicht kennt. Nach einer Bedarfsanalyse stellen wir Ihnen ausgewählte Projekte vor, etwa von Azizi Developments. Der Kaufprozess selbst ist durch das staatliche Escrow-System in Dubai abgesichert. Ihr Vorteil als B2in-Kunde: Im Anschluss richten wir Ihre Immobilie schlüsselfertig und renditeorientiert ein.", + "question": "Wie funktioniert das Immobilien-Investment über B2in?" + }, + { + "answer": "Vertrauen entsteht durch Transparenz und eigene Markterfahrung. B2in-Gründer Marcel Scheibe investiert selbst in die Märkte, die wir anbieten, und ist regelmäßig vor Ort, um Baufortschritte zu prüfen. Wir verbinden die Dynamik internationaler Märkte mit deutscher Verlässlichkeit und einem persönlichen Ansprechpartner, der Ihre Interessen vertritt.", + "question": "Was macht B2in zu einem vertrauenswürdigen Partner?" + } + ] + }, + "en": { + "title": "Frequently Asked Questions about Real Estate", + "sections": [ + { + "icon": "home-modern", + "title": "For Real Estate Investors", + "questions": [ + { + "answer": "No, the entire purchase process can be completed digitally and legally binding from a distance. The Dubai Land Department provides secure processes for this. We do recommend that investors get a picture of the city on site – but your presence is not required for a legally secure purchase.", + "question": "Do I need to travel to Dubai personally for the property purchase?" + }, + { + "answer": "This is exactly where the B2in advantage lies. Our service does not end with the purchase contract. We help you furnish your property turnkey and with the return in mind using quality furniture – the basis for a successful rental.", + "question": "What happens after the property purchase? Do you help with furnishing?" + }, + { + "answer": "Dubai offers a special economic environment: there is neither income tax on rental income nor capital gains tax on the sale of the property. Combined with the rental yields, this makes the location attractive for international investors. Please have your personal tax situation checked by a tax advisor.", + "question": "What tax advantages does an investment in Dubai offer?" + } + ] + } + ], + "subtitle": "Answers about investments in Dubai, the purchase process and how B2in accompanies you.", + "questions": [ + { + "answer": "We do not just broker, we accompany you. Marcel Scheibe is your personal advisor who knows the Dubai market from his own investor perspective. After a needs analysis, we present selected projects, for example by Azizi Developments. The purchase process itself is secured by the government escrow system in Dubai. Your advantage as a B2in client: afterwards we furnish your property turnkey and with the return in mind.", + "question": "How does real estate investment through B2in work?" + }, + { + "answer": "Trust comes from transparency and first-hand market experience. B2in founder Marcel Scheibe invests in the markets we offer himself and is regularly on site to check construction progress. We combine the dynamics of international markets with German reliability and a personal contact who represents your interests.", + "question": "What makes B2in a trustworthy partner?" + } + ] + } + } + }, + { + "group": "global", + "key": "announcement_bar", + "type": "json", + "order": 0, + "value": { + "de": { + "id": "interior-rotpunkt-2026", + "text": "Rotpunkt Küchen jetzt bei B2in Interior – jetzt Beratungstermin sichern", + "badge": "NEU", + "enabled": true, + "link_url": "/contact", + "link_text": "Termin anfragen" + }, + "en": { + "id": "interior-rotpunkt-2026", + "text": "Rotpunkt Küchen now available at B2in Interior – book your consultation", + "badge": "NEW", + "enabled": true, + "link_url": "/contact", + "link_text": "Request an appointment" + } + } + }, + { + "group": "global", + "key": "announcement_bar_immobilien", + "type": "json", + "order": 0, + "value": { + "de": { + "id": "azizi-creek-views-4-2026", + "text": "Azizi Creek Views 4 – Off-Market-Projekt in Dubai ab 1.125.000 AED", + "badge": "NEU", + "enabled": true, + "link_url": "/immobilien/azizi-creek-views-4", + "link_text": "Exposé ansehen" + }, + "en": { + "id": "azizi-creek-views-4-2026", + "text": "Azizi Creek Views 4 – Off-Market Project in Dubai from AED 1,125,000", + "badge": "NEW", + "enabled": true, + "link_url": "/immobilien/azizi-creek-views-4", + "link_text": "View Exposé" + } + } + }, + { + "group": "global", + "key": "contact", + "type": "json", + "order": 0, + "value": { + "de": { + "whatsapp": "+49 521 98620100" + }, + "en": { + "whatsapp": "+49 521 98620100" + } + } + }, + { + "group": "global", + "key": "cta_section", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Ihr nächster Schritt", + "subtitle": "Ob einzelnes Möbelstück, komplette Einrichtung oder Projektausstattung – sprechen Sie mit uns. Persönlich, unkompliziert, verbindlich.", + "button_link": "/contact", + "button_text": "Termin anfragen" + }, + "en": { + "title": "Your Next Step", + "subtitle": "Whether a single piece of furniture, a complete interior or a project fit-out – talk to us. Personal, straightforward, reliable.", + "button_link": "/contact", + "button_text": "Request an appointment" + } + } + }, + { + "group": "global", + "key": "cta_section_immobilien", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Ihr nächster Schritt", + "subtitle": "Ob Exposé, Kaufprozess oder Einrichtung nach dem Kauf – sprechen Sie mit uns. Persönlich, unkompliziert, verbindlich.", + "button_link": "/immobilien/kontakt", + "button_text": "Gespräch anfragen" + }, + "en": { + "title": "Your next step", + "subtitle": "Exposé, purchase process or furnishing after the purchase – talk to us. Personal, straightforward, reliable.", + "button_link": "/immobilien/kontakt", + "button_text": "Request a conversation" + } + } + }, + { + "group": "global", + "key": "footer", + "type": "json", + "order": 0, + "value": { + "de": { + "claim": "Premium-Einrichtung. Persönlich gemacht.", + "links": [ + { + "url": "/faq", + "label": "Häufige Fragen" + }, + { + "url": "/privacy", + "label": "Datenschutz" + }, + { + "url": "/terms", + "label": "AGB" + }, + { + "url": "/cookie-policy", + "label": "Cookie-Richtlinie" + }, + { + "url": "/impressum", + "label": "Impressum" + } + ], + "byline": "Marcel Scheibe" + }, + "en": { + "claim": "Premium interiors. Personally delivered.", + "links": [ + { + "url": "/faq", + "label": "FAQ" + }, + { + "url": "/privacy", + "label": "Privacy Policy" + }, + { + "url": "/terms", + "label": "Terms of Service" + }, + { + "url": "/cookie-policy", + "label": "Cookie Policy" + }, + { + "url": "/impressum", + "label": "Legal Notice" + } + ], + "byline": "Marcel Scheibe" + } + } + }, + { + "group": "global", + "key": "header", + "type": "json", + "order": 0, + "value": { + "de": { + "navigation": [ + { + "url": "/", + "label": "Home" + }, + { + "url": "/marken", + "label": "Marken" + }, + { + "url": "/referenzen", + "label": "Referenzen" + }, + { + "url": "/magazin", + "label": "Magazin" + }, + { + "url": "/about", + "label": "Über B2in" + } + ], + "portal_login": "Partner-Login" + }, + "en": { + "navigation": [ + { + "url": "/", + "label": "Home" + }, + { + "url": "/marken", + "label": "Brands" + }, + { + "url": "/referenzen", + "label": "References" + }, + { + "url": "/magazin", + "label": "Magazine" + }, + { + "url": "/about", + "label": "About B2in" + } + ], + "portal_login": "Partner Login" + } + } + }, + { + "group": "global", + "key": "header_immobilien", + "type": "json", + "order": 0, + "value": { + "de": { + "navigation": [ + { + "url": "/immobilien", + "label": "Immobilien" + }, + { + "url": "/immobilien#projekte", + "label": "Projekte" + }, + { + "url": "/immobilien/magazin", + "label": "Magazin" + }, + { + "url": "/immobilien/ueber-b2in", + "label": "Über B2in" + } + ], + "portal_login": "Partner-Login" + }, + "en": { + "navigation": [ + { + "url": "/immobilien", + "label": "Real Estate" + }, + { + "url": "/immobilien#projekte", + "label": "Projects" + }, + { + "url": "/immobilien/magazin", + "label": "Magazine" + }, + { + "url": "/immobilien/ueber-b2in", + "label": "About B2in" + } + ], + "portal_login": "Partner Login" + } + } + }, + { + "group": "home", + "key": "audience_switch", + "type": "json", + "order": 0, + "value": { + "de": { + "cards": [ + { + "icon": "home", + "title": "Einrichtung für Ihr Zuhause", + "button_link": "/contact", + "button_text": "Beratung anfragen", + "description": "Einzelne Möbelstücke, maßgefertigte Einbaulösungen oder die komplette Einrichtung: Unsere Kernmarken und unser Fachhandels-Netzwerk begleiten Sie von der ersten Idee bis zur Montage. Besuchen Sie unsere Showrooms oder vereinbaren Sie eine persönliche Beratung." + }, + { + "icon": "building-office-2", + "title": "Ausstattung für Ihr Projekt", + "button_link": "/contact", + "button_text": "Projekt besprechen", + "description": "Vollständige Einrichtung für Objekte, Büros und Projektentwicklungen. Koordiniert aus einer Hand, von der Küche bis zur letzten Blume. Mit einem zentralen deutschen Vertragspartner und einem eingespielten Herstellernetzwerk." + } + ], + "title": "Für Ihr Zuhause. Für Ihr Projekt.", + "subtitle": "Ob einzelnes Möbelstück oder komplette Ausstattung – wir begleiten Sie mit denselben Marken, demselben Anspruch und einem persönlichen Ansprechpartner." + }, + "en": { + "cards": [ + { + "icon": "home", + "title": "Furnishing for your home", + "button_link": "/contact", + "button_text": "Request a consultation", + "description": "Single pieces, bespoke built-in solutions or a complete interior: our core brands and our specialist retail network accompany you from the first idea to installation. Visit our showrooms or arrange a personal consultation." + }, + { + "icon": "building-office-2", + "title": "Fit-out for your project", + "button_link": "/contact", + "button_text": "Discuss your project", + "description": "Complete furnishing for properties, offices and developments. Coordinated from a single source, from the kitchen to the last flower. With a single German contract partner and an established manufacturer network." + } + ], + "title": "For your home. For your project.", + "subtitle": "Whether a single piece of furniture or a complete fit-out – we accompany you with the same brands, the same standards and one personal contact." + } + } + }, + { + "group": "home", + "key": "brand_worlds", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Unsere Welten:
Design, Immobilien und internationaler Handel", + "worlds": [ + { + "link": "https://stileigentum.test", + "logo": "img/logos/stileigentum-logo-positiv.svg", + "image": "b2in/stileigentum.jpg", + "title": "Stileigentum", + "external": true, + "logo_width": "w-35", + "description": "Das Premium-Segment: Exklusive und hochwertige Einrichtungskonzepte für anspruchsvolle Kunden, die Qualität und Tradition schätzen." + }, + { + "link": "https://style2own.test", + "logo": "img/logos/style2own-logo-positiv.svg", + "image": "b2in/style2own.jpg", + "title": "Style2own", + "external": true, + "logo_width": "w-28", + "description": "Der Lifestyle-Kanal: Moderne Einrichtungskonzepte für Young Professionals und trend-orientierte Kunden – urban, flexibel, inspirierend." + }, + { + "link": "https://b2a.test", + "logo": "img/logos/b2a-logo-positiv.svg", + "image": "b2in/b2a.jpg", + "title": "B2A", + "external": true, + "logo_width": "w-18", + "description": "Unsere Logistik-Power für den transatlantischen Handel. Wir ermöglichen Herstellern den direkten Zugang zu internationalen Märkten." + } + ], + "subtitle": "Von internationalen Immobilien-Investments über exklusive Einrichtungskonzepte bis zum transatlantischen Handel – B2in verbindet die Welten, die zusammengehören." + }, + "en": { + "title": "Our Worlds:
Design, Real Estate, and International Trade", + "worlds": [ + { + "link": "https://stileigentum.test", + "logo": "img/logos/stileigentum-logo-positiv.svg", + "image": "b2in/stileigentum.jpg", + "title": "Stileigentum", + "external": true, + "logo_width": "w-35", + "description": "The premium segment: Exclusive and high-quality interior concepts for discerning clients who value quality and tradition." + }, + { + "link": "https://style2own.test", + "logo": "img/logos/style2own-logo-positiv.svg", + "image": "b2in/style2own.jpg", + "title": "Style2own", + "external": true, + "logo_width": "w-28", + "description": "The lifestyle channel: Modern interior concepts for young professionals and trend-oriented clients – urban, flexible, inspiring." + }, + { + "link": "https://b2a.test", + "logo": "img/logos/b2a-logo-positiv.svg", + "image": "b2in/b2a.jpg", + "title": "B2A", + "external": true, + "logo_width": "w-18", + "description": "Our logistics powerhouse for transatlantic trade. We enable manufacturers direct access to international markets." + } + ], + "subtitle": "From international real estate investments to exclusive interior concepts to transatlantic trade – B2in connects the worlds that belong together." + } + } + }, + { + "group": "home", + "key": "core_brands", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Unsere Kernmarken", + "brands": [ + { + "logo": "", + "name": "CABINET", + "image": "", + "teaser": "Maßgefertigte Schranklösungen, geplant bis auf den Millimeter – gefertigt für Räume, in denen Standard nicht genügt. Erleben Sie die Möglichkeiten in unserem Showroom in Bielefeld.", + "tagline": "Einbauschränke nach Maß.", + "link_text": "Mehr zu CABINET" + }, + { + "logo": "", + "name": "Rotpunkt Küchen", + "image": "", + "teaser": "Premium-Küchen aus deutscher Fertigung – individuell geplant, nachhaltig gedacht und gebaut für den Mittelpunkt Ihres Zuhauses. Beratung und Planung in unserem Küchenstudio.", + "tagline": "Küchen, die Haltung zeigen.", + "link_text": "Mehr zu Rotpunkt" + }, + { + "logo": "", + "name": "Febrü", + "image": "", + "teaser": "Möbel für konzentriertes Arbeiten – vom durchdachten Home-Office bis zur kompletten Büroeinrichtung. Ergonomie und Design für Zuhause und fürs Unternehmen.", + "tagline": "Arbeiten, wo man gerne ist.", + "link_text": "Mehr zu Febrü" + } + ], + "subtitle": "Wir arbeiten nicht mit beliebigen Katalogen, sondern mit ausgewählten Herstellern, hinter denen wir stehen – jede Marke ein Spezialist auf ihrem Gebiet." + }, + "en": { + "title": "Our core brands", + "brands": [ + { + "logo": "", + "name": "CABINET", + "image": "", + "teaser": "Bespoke wardrobe solutions, planned to the millimetre – built for rooms where standard will not do. Experience the possibilities in our Bielefeld showroom.", + "tagline": "Fitted wardrobes made to measure.", + "link_text": "More about CABINET" + }, + { + "logo": "", + "name": "Rotpunkt Küchen", + "image": "", + "teaser": "Premium kitchens made in Germany – individually planned, sustainably conceived and built for the heart of your home. Consultation and planning in our kitchen studio.", + "tagline": "Kitchens with character.", + "link_text": "More about Rotpunkt" + }, + { + "logo": "", + "name": "Febrü", + "image": "", + "teaser": "Furniture for focused work – from a well-considered home office to a complete office fit-out. Ergonomics and design for home and company alike.", + "tagline": "Work where you like to be.", + "link_text": "More about Febrü" + } + ], + "subtitle": "We do not work with arbitrary catalogues, but with selected manufacturers we stand behind – each brand a specialist in its field." + } + } + }, + { + "group": "home", + "key": "ecosystem_core", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Ein Ökosystem, drei Säulen", + "pillars": [ + { + "icon": "building-office-2", + "link": "/immobilien", + "title": "Immobilien & Investments", + "description": "Exklusive Off-Market-Projekte & High-Yield Renditeobjekte." + }, + { + "icon": "squares-2x2", + "link": "/netzwerk", + "title": "Local-for-Local Marktplatz", + "description": "Das Netzwerk für den regionalen Möbelfachhandel und Makler." + }, + { + "icon": "clipboard-document-check", + "link": "/netzwerk", + "title": "Supply-Chain-Management", + "description": "Deutsche Vertragssicherheit für internationale Immobilienentwickler." + } + ], + "subtitle": "" + }, + "en": { + "title": "One Ecosystem, Three Pillars", + "pillars": [ + { + "icon": "building-office-2", + "link": "/immobilien", + "title": "Real Estate & Investments", + "description": "Exclusive off-market projects & high-yield investment properties." + }, + { + "icon": "squares-2x2", + "link": "/netzwerk", + "title": "Local-for-Local Marketplace", + "description": "The network for regional furniture retailers and brokers." + }, + { + "icon": "clipboard-document-check", + "link": "/netzwerk", + "title": "Supply Chain Management", + "description": "German contractual reliability for international property developers." + } + ], + "subtitle": "" + } + } + }, + { + "group": "home", + "key": "founder_bar", + "type": "json", + "order": 0, + "value": { + "de": { + "name": "Marcel Scheibe", + "image": "marcel-scheibe-quardat.png", + "title": "Gründer & CEO, B2in", + "statement": "B2in by Marcel Scheibe – Ihr persönlicher Partner für hochwertige Einrichtung und starke Marken." + }, + "en": { + "name": "Marcel Scheibe", + "image": "b2in/marcel-scheibe.jpg", + "title": "Founder & CEO, B2in", + "statement": "B2in by Marcel Scheibe – Your personal partner for high-quality furnishing and strong brands." + } + } + }, + { + "group": "home", + "key": "hero", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "b2in/hero-room.jpg", + "stats": [ + "Premium-Marken", + "Maßgefertigte Lösungen", + "Persönliche Beratung" + ], + "title": "Räume aus einer Hand.
Mit starken Marken und persönlichen Lösungen.", + "subtitle": "Von der einzelnen Maßanfertigung bis zur vollständigen Ausstattung – mit CABINET, Rotpunkt Küchen, Febrü und einem Netzwerk regionaler Fachexperten.", + "card_text": "Einrichtung, die bleibt.", + "cta1_link": "/marken", + "cta1_text": "Unsere Marken entdecken", + "image_alt": "B2in Interior – Premium-Einrichtung von starken Marken", + "card_title": "B2in Interior" + }, + "en": { + "image": "b2in/hero-room.jpg", + "stats": [ + "Premium brands", + "Bespoke solutions", + "Personal consulting" + ], + "title": "Spaces from a single source.
With strong brands and personal solutions.", + "subtitle": "From a single bespoke piece to a complete fit-out – with CABINET, Rotpunkt Küchen, Febrü and a network of regional specialists.", + "card_text": "Interiors that last.", + "cta1_link": "/marken", + "cta1_text": "Discover our brands", + "image_alt": "B2in Interior – Premium furnishing from strong brands", + "card_title": "B2in Interior" + } + } + }, + { + "group": "home", + "key": "immobilien_teaser", + "type": "json", + "order": 0, + "value": { + "de": { + "text": "Neben der Einrichtung begleiten wir ausgewählte internationale Immobilienprojekte – persönlich kuratiert und mit klarem Blick auf Substanz.", + "title": "Außerdem: Internationale Immobilien", + "link_url": "/immobilien", + "link_text": "Zu den Immobilien" + }, + "en": { + "text": "Alongside interiors, we accompany selected international real estate projects – personally curated and with a clear eye for substance.", + "title": "Also: international real estate", + "link_url": "/immobilien", + "link_text": "To the properties" + } + } + }, + { + "group": "home", + "key": "integriertes_modell_b2in", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "best-of-two-worlds.jpg", + "title": "Das Beste aus zwei Welten:
Immobilien und Einrichtung", + "image_alt": "Das Ergebnis für den Kunden – Immobilie und Einrichtung aus einer Hand", + "paragraphs": [ + "B2in verbindet, was zusammengehört: Wer eine Immobilie erwirbt, braucht die passende Einrichtung. Wer exklusiv einrichten möchte, findet über unser Netzwerk die besten lokalen Fachexperten – ergänzt durch das Sortiment europäischer Hersteller.", + "Das Ergebnis: Ein nahtloses Erlebnis für den Kunden und neue Ertragsquellen für unsere Partner – ob Makler, Händler oder Entwickler." + ], + "image_caption": "Immobilie und Einrichtung – aus einer Hand" + }, + "en": { + "image": "b2in/best-of-two-worlds.jpg", + "title": "The Best of Both Worlds:
Real Estate and Interior", + "image_alt": "The result for the customer – Property and interior from one source", + "paragraphs": [ + "B2in connects what belongs together: Those who acquire property need the right furnishing. Those who want exclusive interiors will find the best local specialists through our network – complemented by the range of European manufacturers.", + "The result: A seamless experience for the customer and new revenue streams for our partners – whether brokers, retailers, or developers." + ], + "image_caption": "Property and interior – from one source" + } + } + }, + { + "group": "home", + "key": "origin_section", + "type": "json", + "order": 0, + "value": { + "de": { + "hub": { + "x": 400, + "y": 175, + "city": "Bielefeld", + "role": "B2in Interior · Beratung, Planung, Showrooms" + }, + "steps": [ + { + "title": "Beratung und Planung in Bielefeld", + "description": "Im CABINET Store nehmen wir Maß, planen bis ins Detail und stimmen jede Front und jede Innenaufteilung mit Ihnen ab." + }, + { + "title": "Fertigung in Köln", + "description": "CABINET fertigt Ihren Schrank in der eigenen Manufaktur – nach den Maßen aus der Planung." + }, + { + "title": "Aufbau vor Ort, Sonderwünsche inklusive", + "description": "Unsere Tischlerei baut auf und ergänzt, was der Raum zusätzlich braucht: Blenden, Anschlüsse, Sonderlösungen." + } + ], + "title": "Aus der Region gefertigt", + "map_alt": "Schematische Karte: Bielefeld als Ausgangspunkt, Fertigung in Bünde, Herford, Rheda-Wiedenbrück und Köln", + "subtitle": "Vier deutsche Manufakturen, drei davon in Ostwestfalen. Kurze Wege, Menschen, die wir kennen, und Qualität, die man besuchen kann.", + "steps_text": "Am Beispiel CABINET: Die Möbel entstehen in der Kölner Fertigung. Beraten, aufgemessen und geplant wird bei uns im CABINET Store Bielefeld. Aufgebaut wird vor Ort – mit unserer Tischlerei, die auf Wunsch auch das umsetzt, was im Katalog nicht steht.", + "steps_title": "Gefertigt in Köln, geplant in Bielefeld", + "region_label": "Ostwestfalen", + "distance_suffix": "von Bielefeld" + }, + "en": { + "hub": { + "x": 400, + "y": 175, + "city": "Bielefeld", + "role": "B2in Interior · consulting, planning, showrooms" + }, + "steps": [ + { + "title": "Consulting and planning in Bielefeld", + "description": "At the CABINET Store we take measurements, plan down to the last detail and agree every front and interior layout with you." + }, + { + "title": "Production in Cologne", + "description": "CABINET builds your wardrobe in its own manufactory – to the measurements from the planning." + }, + { + "title": "Assembly on site, special requests included", + "description": "Our joinery assembles and adds what the room needs beyond that: panels, connections, custom solutions." + } + ], + "title": "Made in the region", + "map_alt": "Schematic map: Bielefeld as the starting point, production in Bünde, Herford, Rheda-Wiedenbrück and Cologne", + "subtitle": "Four German manufactories, three of them in East Westphalia. Short distances, people we know, and quality you can go and see.", + "steps_text": "Take CABINET: the furniture is made in Cologne. Consulting, measuring and planning happen with us at the CABINET Store Bielefeld. Assembly takes place on site – with our joinery, which on request also builds what the catalogue does not offer.", + "steps_title": "Made in Cologne, planned in Bielefeld", + "region_label": "East Westphalia", + "distance_suffix": "from Bielefeld" + } + } + }, + { + "group": "home", + "key": "sponsoring", + "type": "json", + "order": 0, + "value": { + "de": { + "logos": [ + { + "name": "DSC Arminia Bielefeld", + "text": "Traditionsverein aus Bielefeld – der Stadt, in der wir zu Hause sind.", + "image": "sponsoring/arminia-bielefeld.png" + }, + { + "name": "TC Bad Waldliesborn-Horn", + "text": "Tennisclub aus Bad Waldliesborn. Vereinssport, der Menschen vor Ort zusammenbringt.", + "image": "sponsoring/tc-bad-waldliesborn-horn.jpg" + }, + { + "name": "TC Hövelhof", + "text": "Tennisclub aus Hövelhof – Breitensport im Kreis Paderborn.", + "image": "sponsoring/tc-hoevelhof.png" + } + ], + "title": "Regional verbunden", + "subtitle": "Wir unterstützen Vereine und Organisationen aus der Region – weil Verwurzelung mehr ist als eine Adresse." + }, + "en": { + "logos": [ + { + "name": "DSC Arminia Bielefeld", + "text": "A long-standing club from Bielefeld – the city we call home.", + "image": "sponsoring/arminia-bielefeld.png" + }, + { + "name": "TC Bad Waldliesborn-Horn", + "text": "Tennis club in Bad Waldliesborn. Club sport that brings people together locally.", + "image": "sponsoring/tc-bad-waldliesborn-horn.jpg" + }, + { + "name": "TC Hövelhof", + "text": "Tennis club in Hövelhof – grassroots sport in the Paderborn district.", + "image": "sponsoring/tc-hoevelhof.png" + } + ], + "title": "Rooted in the region", + "subtitle": "We support clubs and organisations from our region – because being rooted is more than an address." + } + } + }, + { + "group": "home", + "key": "synergie_section", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "best-of-two-worlds.jpg", + "title": "Zwei Welten. Ein Netzwerk.", + "image_alt": "Das B2in-Ökosystem – Immobilien und Einrichtung", + "paragraphs": [ + "Wir verbinden den Immobilienkauf mit der perfekten Einrichtung. Immobilien-Investoren profitieren von unserem exklusiven Möbel-Netzwerk – Projektentwickler von unserer deutschen Vertragssicherheit im Supply-Chain-Management." + ], + "image_caption": "Das B2in-Ökosystem" + }, + "en": { + "image": "b2in/best-of-two-worlds.jpg", + "title": "Two Worlds. One Network.", + "image_alt": "The B2in Ecosystem – Real Estate and Interior", + "paragraphs": [ + "We connect real estate purchases with the perfect furnishing. Real estate investors benefit from our exclusive furniture network – project developers from our German contractual reliability in supply chain management." + ], + "image_caption": "The B2in Ecosystem" + } + } + }, + { + "group": "home", + "key": "vision_section", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "IMG_9982.PNG", + "title": "Gebaut auf Expertise und Vertrauen", + "image_alt": "Marcel Scheibe, Gründer und CEO von B2in", + "paragraphs": [ + "B2in stand ursprünglich für Bridges to International. Heute steht es ebenso für Bridges to Interior: hochwertige Einrichtung mit persönlicher Handschrift. Als Ihr Ansprechpartner verbinde ich ausgewählte Hersteller, regionale Fachexperten und ein verlässliches Netzwerk – damit aus Räumen Orte werden, die bleiben.", + "Ob maßgefertigter Einbauschrank, neue Küche oder die vollständige Ausstattung eines Objekts: Bei B2in laufen alle Fäden zusammen. Und wer über die Einrichtung hinausdenkt, findet bei uns auch den Zugang zu internationalen Immobilien.", + "Regional verwurzelt, international vernetzt – das ist B2in." + ], + "image_caption": "Marcel Scheibe, Gründer & CEO" + }, + "en": { + "image": "b2in/marcel-scheibe-about.jpg", + "title": "Built on Expertise and Trust", + "image_alt": "Marcel Scheibe, Founder and CEO of B2in", + "paragraphs": [ + "B2in originally stood for Bridges to International. Today it stands just as much for Bridges to Interior: high-quality furnishing with a personal signature. As your contact, I connect selected manufacturers, regional specialists and a dependable network – so that rooms become places that last.", + "Whether a bespoke fitted wardrobe, a new kitchen or the complete fit-out of a property: at B2in, everything comes together. And anyone thinking beyond the interior will also find access to international real estate here.", + "Locally rooted, internationally connected – that is B2in." + ], + "image_caption": "Marcel Scheibe, Founder & CEO" + } + } + }, + { + "group": "immobilien", + "key": "about_hero", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "b2in/about-hero.jpg", + "quote": "\"Meine Mission ist es, zwei Welten zu verbinden, die zusammengehören: internationale Immobilien und hochwertige Einrichtung. B2in begleitet Investoren persönlich beim Kauf – und richtet die Immobilie anschließend aus einer Hand ein.

Wir bauen Brücken – zwischen europäischem Design, internationalen Märkten und dem Zuhause der Menschen.\"", + "title": "B2in Immobilien: Unsere Mission", + "card_text": "Connecting Design and Property", + "image_alt": "Marcel Scheibe, Gründer und CEO von B2in", + "card_title": "B2in Immobilien", + "founder_name": "Marcel Scheibe", + "founder_title": "Gründer & CEO, B2in" + }, + "en": { + "image": "b2in/about-hero.jpg", + "quote": "\"My mission is to connect two worlds that belong together: international real estate and high-quality interiors. B2in accompanies investors personally through the purchase – and then furnishes the property from a single source.

We build bridges – between European design, international markets, and people's homes.\"", + "title": "B2in Real Estate: Our Mission", + "card_text": "Connecting Design and Property", + "image_alt": "Marcel Scheibe, Founder and CEO of B2in", + "card_title": "B2in Real Estate", + "founder_name": "Marcel Scheibe", + "founder_title": "Founder & CEO, B2in" + } + } + }, + { + "group": "immobilien", + "key": "about_image_break", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "b2in/best-of-two-worlds.jpg", + "quote": "Regional verwurzelt, international vernetzt – das ist B2in.", + "author": "Marcel Scheibe", + "image_alt": "B2in – Immobilien und Einrichtung verbinden" + }, + "en": { + "image": "b2in/best-of-two-worlds.jpg", + "quote": "Locally rooted, internationally connected – that is B2in.", + "author": "Marcel Scheibe", + "image_alt": "B2in – Connecting Real Estate and Interior" + } + } + }, + { + "group": "immobilien", + "key": "bruecke", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "MS - Rollkragen und Jacket..png", + "title": "\"Der Markt spricht für sich. Meine Aufgabe ist eine andere.\"", + "cta_link": "/contact", + "cta_text": "Persönliches Beratungsgespräch vereinbaren", + "image_alt": "Marcel Scheibe – Persönliche Investmentbegleitung", + "paragraphs": [ + "Für viele deutsche Investoren wirkt der Immobilienkauf in Dubai zunächst ungewohnt. In Deutschland sind wir Notare, Grundbücher und hochbürokratische Prozesse gewohnt. Dubai ist dynamischer.", + "Ich bin nicht hier, um Ihnen den Markt zu verkaufen – die Qualität der Projekte spricht für sich. Meine Aufgabe ist es, Ihre Brücke zu sein. Als Investor, der selbst in Dubai gekauft hat, kenne ich die Praxis. Ich bin regelmäßig vor Ort, stehe im permanenten Austausch mit Bauträgern und begleite Sie durch den kompletten Prozess. Ich übersetze die internationale Geschwindigkeit in deutsche Verlässlichkeit." + ], + "image_caption": "Marcel Scheibe, Gründer & CEO", + "advantage_text": "Meine Begleitung endet nicht beim Kauf. Planen Sie die lukrative Kurzzeitvermietung (z.B. Airbnb)? Über unser B2in-Netzwerk und meine Wurzeln in der Möbelbranche realisieren wir für Sie komplette Einrichtungskonzepte – für maximale Rendite bei minimalem Aufwand.", + "advantage_title": "Ihr B2in-Vorteil" + }, + "en": { + "image": "b2in/marcel-scheibe-about.jpg", + "title": "\"The market speaks for itself. My role is a different one.\"", + "cta_link": "/contact", + "cta_text": "Schedule a Personal Consultation", + "image_alt": "Marcel Scheibe – Personal Investment Guidance", + "paragraphs": [ + "For many German investors, buying real estate in Dubai initially feels unfamiliar. In Germany, we are accustomed to notaries, land registries, and highly bureaucratic processes. Dubai is more dynamic.", + "I am not here to sell you the market – the quality of the projects speaks for itself. My role is to be your bridge. As an investor who has bought in Dubai myself, I know the practice. I am regularly on-site, in permanent contact with developers, and I guide you through the entire process. I translate international speed into German reliability." + ], + "image_caption": "Marcel Scheibe, Founder & CEO", + "advantage_text": "My guidance doesn't end with the purchase. Planning lucrative short-term rentals (e.g., Airbnb)? Through our B2in network and my roots in the furniture industry, we realize complete interior concepts for you – for maximum returns with minimum effort.", + "advantage_title": "Your B2in Advantage" + } + } + }, + { + "group": "immobilien", + "key": "hero", + "type": "json", + "order": 0, + "value": { + "de": { + "hub": { + "title": "B2in Immobilien", + "subtitle": "Exklusive internationale Investments" + }, + "image": "hero-immobilien.webp", + "stats": [ + "Off-Market Zugang", + "Persönliche Begleitung", + "Renditestarke Objekte" + ], + "title": "Investieren Sie in die Zukunft – Dubai, Lissabon & mehr.", + "features": [ + { + "icon": "lock-closed", + "title": "Off-Market", + "description": "Exklusive Projekte" + }, + { + "icon": "arrow-trending-up", + "title": "High-Yield", + "description": "Renditestarke Investments" + }, + { + "icon": "user", + "title": "Persönlich", + "description": "Begleitung durch Marcel Scheibe" + }, + { + "icon": "globe-alt", + "title": "International", + "description": "Dubai, Lissabon & mehr" + } + ], + "subtitle": "Exklusive Off-Market-Projekte und High-Yield-Investments. Persönlich kuratiert und begleitet von Marcel Scheibe.", + "card_text": "Exklusive internationale Investments", + "image_alt": "Internationale Immobilien-Investments", + "card_title": "B2in Immobilien" + }, + "en": { + "hub": { + "title": "B2in Real Estate", + "subtitle": "Exclusive International Investments" + }, + "image": "b2in/hero-immobilien.jpg", + "stats": [ + "Off-Market Access", + "Personal Guidance", + "High-Yield Properties" + ], + "title": "Invest in the Future – Dubai, Lisbon & More.", + "features": [ + { + "icon": "lock-closed", + "title": "Off-Market", + "description": "Exclusive Projects" + }, + { + "icon": "arrow-trending-up", + "title": "High-Yield", + "description": "High-Return Investments" + }, + { + "icon": "user", + "title": "Personal", + "description": "Guidance by Marcel Scheibe" + }, + { + "icon": "globe-alt", + "title": "International", + "description": "Dubai, Lisbon & More" + } + ], + "subtitle": "Exclusive off-market projects and high-yield investments. Personally curated and guided by Marcel Scheibe.", + "card_text": "Exclusive international investments", + "image_alt": "International Real Estate Investments", + "card_title": "B2in Real Estate" + } + } + }, + { + "group": "immobilien", + "key": "hero_v2", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "hero-immobilien.webp", + "title": "Investieren in globale Dynamik. Mit deutscher Verlässlichkeit.", + "cta_link": "#projekte", + "cta_text": "Aktuelle Projekte ansehen", + "subtitle": "Exklusive Off-Market-Projekte, attraktive Renditen und eine Begleitung, die weit über den Kaufvertrag hinausgeht. Entdecken Sie den Immobilienmarkt in Dubai.", + "image_alt": "Dubai Skyline – Premium Immobilien-Investments" + }, + "en": { + "image": "b2in/hero-immobilien.jpg", + "title": "Investing in Global Dynamics. With German Reliability.", + "cta_link": "#projekte", + "cta_text": "View Current Projects", + "subtitle": "Exclusive off-market projects, attractive returns, and guidance that goes far beyond the purchase contract. Discover the real estate market in Dubai.", + "image_alt": "Dubai Skyline – Premium Real Estate Investments" + } + } + }, + { + "group": "immobilien", + "key": "image_break", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "hero-immobilien.webp", + "quote": "Dubai hat sich zu einem der dynamischsten Immobilienmärkte der Welt entwickelt.", + "author": "Marcel Scheibe", + "image_alt": "Dubai Skyline – Immobilien-Investments" + }, + "en": { + "image": "b2in/hero-immobilien.jpg", + "quote": "Dubai has evolved into one of the most dynamic real estate markets in the world.", + "author": "Marcel Scheibe", + "image_alt": "Dubai Skyline – Real Estate Investments" + } + } + }, + { + "group": "immobilien", + "key": "kaufprozess", + "type": "json", + "order": 0, + "value": { + "de": { + "intro": "Der Markt in Dubai ist schneller, digitaler und projektbezogen organisiert. Jeder Schritt ist durch das staatliche Escrow-System (Treuhandkonten nach Baufortschritt) maximal abgesichert.", + "steps": [ + { + "title": "Reservierung (Booking Fee)", + "number": "1", + "description": "Mit einer Gebühr von ca. 3–10 % wird Ihre Wunsch-Einheit offiziell aus dem Verkauf genommen und für Sie blockiert." + }, + { + "title": "Anzahlung & Vertrag (SPA)", + "number": "2", + "description": "Nach einer ersten Anzahlung (meist 10 %) wird der offizielle Kaufvertrag, das Sales & Purchase Agreement (SPA), erstellt." + }, + { + "title": "Staatliche Registrierung (DLD)", + "number": "3", + "description": "Durch die Zahlung der Registrierungsgebühr (4 %) an das Dubai Land Department wird Ihr Eigentum offiziell im staatlichen Register verankert." + }, + { + "title": "Finaler Kaufvertrag", + "number": "4", + "description": "Ihr Eigentumsrecht ist offiziell gesichert. Die weiteren Zahlungen erfolgen streng nach Baufortschritt auf sichere Treuhandkonten." + } + ], + "title": "Klar strukturiert: Der Kaufprozess in Dubai" + }, + "en": { + "intro": "The market in Dubai is faster, more digital, and organized by project. Every step is maximally secured through the government escrow system (trust accounts based on construction progress).", + "steps": [ + { + "title": "Reservation (Booking Fee)", + "number": "1", + "description": "With a fee of approx. 3–10%, your desired unit is officially taken off the market and reserved for you." + }, + { + "title": "Down Payment & Contract (SPA)", + "number": "2", + "description": "After an initial down payment (usually 10%), the official Sales & Purchase Agreement (SPA) is drawn up." + }, + { + "title": "Government Registration (DLD)", + "number": "3", + "description": "By paying the registration fee (4%) to the Dubai Land Department, your ownership is officially recorded in the government register." + }, + { + "title": "Final Purchase Contract", + "number": "4", + "description": "Your ownership rights are officially secured. Further payments are made strictly according to construction progress into secure trust accounts." + } + ], + "title": "Clearly Structured: The Purchase Process in Dubai" + } + } + }, + { + "group": "immobilien", + "key": "magazin_list", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "B2in Immobilien-Magazin", + "subtitle": "Marktanalysen und Praxiswissen rund um Immobilien-Investments in Dubai – Kaufprozess, Stadtteile und die Rolle der Einrichtung für die Rendite.", + "load_more": "Weitere Artikel laden", + "read_more": "Weiterlesen" + }, + "en": { + "title": "B2in Real Estate Magazine", + "subtitle": "Market analyses and practical knowledge about real estate investments in Dubai – purchase process, districts and the role of interiors for the return.", + "load_more": "Load More Articles", + "read_more": "Read More" + } + } + }, + { + "group": "immobilien", + "key": "mindset", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Sind Sie der richtige Investor für Dubai?", + "closing": "Der Schritt ist kleiner, als Sie denken. Lassen Sie uns gemeinsam herausfinden, ob ein Investment in Dubai in Ihre Strategie passt.", + "cta_link": "/contact", + "cta_text": "Unverbindliches Gespräch vereinbaren", + "text_negative": "Wenn Sie jedoch ein System bevorzugen, das auf langsamen Entscheidungswegen und maximaler Bürokratie aufbaut, wird dieser Markt nicht zu Ihren Erwartungen passen.", + "text_positive": "Dubai richtet sich an Menschen, die international denken. Der Staat priorisiert Effizienz, wirtschaftliche Entwicklung und enorme Geschwindigkeit. Wenn Sie an die Verschiebung weltweiter Wirtschaftszentren glauben und ein dynamisches System schätzen, ist Dubai der strategisch perfekte Baustein für Ihr Portfolio. Dann sind Sie bei uns genau richtig." + }, + "en": { + "title": "Are You the Right Investor for Dubai?", + "closing": "The step is smaller than you think. Let's find out together whether an investment in Dubai fits your strategy.", + "cta_link": "/contact", + "cta_text": "Schedule a Non-Binding Consultation", + "text_negative": "However, if you prefer a system built on slow decision-making and maximum bureaucracy, this market will not match your expectations.", + "text_positive": "Dubai is for people who think internationally. The government prioritizes efficiency, economic development, and tremendous speed. If you believe in the shift of global economic centers and value a dynamic system, Dubai is the strategically perfect building block for your portfolio. Then you are in the right place with us." + } + } + }, + { + "group": "immobilien", + "key": "moebel_vorteil", + "type": "json", + "order": 0, + "value": { + "de": { + "text": "Als Käufer einer B2in-Immobilie erhalten Sie exklusiven Insider-Zugang zu unserem B2in-Möbelnetzwerk. Richten Sie Ihre Immobilie zu unschlagbaren Partner-Konditionen ein.", + "title": "Ihr Investment, Ihr Vorteil", + "button_link": "/netzwerk", + "button_text": "Mehr zum B2in-Netzwerk" + }, + "en": { + "text": "As a buyer of a B2in property, you receive exclusive insider access to our B2in furniture network. Furnish your property at unbeatable partner rates.", + "title": "Your Investment, Your Advantage", + "button_link": "/netzwerk", + "button_text": "Learn More About the B2in Network" + } + } + }, + { + "group": "immobilien", + "key": "our_story", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Unsere Geschichte", + "summary": "Was als Vision begann, den regionalen Handel zu stärken, ist heute ein Netzwerk, das Immobilien und Einrichtung verbindet. B2in schließt die Lücke zwischen internationalen Investments und lokaler Expertise – mit Marcel Scheibe als Gesicht und Ansprechpartner.", + "timeline": [ + { + "icon": "light-bulb", + "title": "Die Idee", + "description": "2024 erkannten wir eine entscheidende Lücke: Immobilienkäufer suchen nach nahtlosen Einrichtungslösungen, und der Fachhandel vor Ort braucht Sichtbarkeit. Diese beiden Welten gehören zusammen." + }, + { + "icon": "rocket-launch", + "title": "Das Fundament", + "description": "Wir bauen B2in als Netzwerk auf: Einrichtungsexperten aus der Region, europäische Hersteller und Immobilienprofis – fair, transparent und mit einem persönlichen Ansprechpartner." + }, + { + "icon": "globe-alt", + "title": "Die Erweiterung", + "description": "2025/2026 kommen internationale Immobilien dazu: ausgewählte Projekte in Dubai, aus eigener Investorensicht geprüft und persönlich begleitet. Die Einrichtung bleibt der Kern – beide Bereiche ergänzen sich." + }, + { + "icon": "star", + "title": "Die Vision", + "description": "B2in verbindet Design und Immobilien – regional verwurzelt, international vernetzt. In jeder Region der verlässliche Partner für Immobilien-Investments und exklusive Einrichtungskonzepte." + } + ] + }, + "en": { + "title": "Our Story", + "summary": "What began as a vision to strengthen regional trade is today a network that connects real estate and interiors. B2in bridges the gap between international investments and local expertise – with Marcel Scheibe as the face and point of contact.", + "timeline": [ + { + "icon": "light-bulb", + "title": "The Idea", + "description": "In 2024, we identified a crucial gap: property buyers are looking for seamless furnishing solutions, and local retailers need visibility. These two worlds belong together." + }, + { + "icon": "rocket-launch", + "title": "The Foundation", + "description": "We build B2in as a network: regional interior specialists, European manufacturers and real estate professionals – fair, transparent and with a personal point of contact." + }, + { + "icon": "globe-alt", + "title": "The Expansion", + "description": "2025/2026 adds international real estate: selected projects in Dubai, reviewed from an investor's perspective and accompanied personally. Interiors remain the core – both areas complement each other." + }, + { + "icon": "star", + "title": "The Vision", + "description": "B2in connects design and property – locally rooted, internationally connected. In every region, the reliable partner for real estate investments and exclusive interior concepts." + } + ] + } + } + }, + { + "group": "immobilien", + "key": "our_values", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Unsere Werte", + "values": [ + { + "icon": "light-bulb", + "title": "Persönliche Begleitung", + "description": "Vom ersten Gespräch über den Kaufprozess bis zur eingerichteten Immobilie: ein Ansprechpartner, der die Märkte aus eigener Investorensicht kennt." + }, + { + "icon": "globe-alt", + "title": "Konnektivität", + "description": "Wir verbinden internationale Immobilienmärkte mit lokaler Expertise und europäische Manufakturen mit den Menschen, die ihre Produkte schätzen." + }, + { + "icon": "check-badge", + "title": "Qualität", + "description": "Kompromisslose Standards – bei der Auswahl der Projekte, der Prüfung der Entwickler und der Kuration der Einrichtung." + }, + { + "icon": "user-group", + "title": "Vertrauen", + "description": "Transparente Modelle und verlässliche Partnerschaften sind unser Fundament. Hinter B2in steht ein Gesicht – und das Versprechen, dass wir liefern, was wir zusagen." + }, + { + "icon": "arrow-path", + "title": "Verlässlichkeit", + "description": "Deutsche Vertragssicherheit trifft auf die Dynamik internationaler Märkte: klare Abläufe, geprüfte Partner, abgesicherte Zahlungswege." + }, + { + "icon": "cube-transparent", + "title": "Design-Exzellenz", + "description": "Design ist der Kern unserer Wertschöpfung – von internationaler Architektur bis zur kuratierten Einrichtung, die aus einer Immobilie ein Zuhause macht." + } + ], + "subtitle": "Diese sechs Grundpfeiler leiten unser tägliches Handeln und definieren, wer wir als Unternehmen sind und wofür wir stehen." + }, + "en": { + "title": "Our Values", + "values": [ + { + "icon": "light-bulb", + "title": "Personal Guidance", + "description": "From the first conversation through the purchase process to the furnished property: one point of contact who knows the markets from an investor's perspective." + }, + { + "icon": "globe-alt", + "title": "Connectivity", + "description": "We connect international real estate markets with local expertise and European manufacturers with the people who value their products." + }, + { + "icon": "check-badge", + "title": "Quality", + "description": "Uncompromising standards – in the selection of projects, the review of developers and the curation of interiors." + }, + { + "icon": "user-group", + "title": "Trust", + "description": "Transparent models and reliable partnerships are our foundation. Behind B2in stands a face – and the promise that we deliver what we commit to." + }, + { + "icon": "arrow-path", + "title": "Reliability", + "description": "German contractual certainty meets the dynamics of international markets: clear processes, vetted partners, secured payment routes." + }, + { + "icon": "cube-transparent", + "title": "Design Excellence", + "description": "Design is the core of our value creation – from international architecture to curated interiors that turn a property into a home." + } + ], + "subtitle": "These six pillars guide our daily actions and define who we are as a company and what we stand for." + } + } + }, + { + "group": "immobilien", + "key": "projects_meta", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Aktuelle Launches & Projekte", + "cta_link": "/contact", + "cta_text": "Jetzt Exposé & Verfügbarkeit anfragen", + "projects": { + "azizi-creek-views-4": { + "slug": "azizi-creek-views-4", + "image": "expose/a1/image-4.jpeg", + "title": "Azizi Developments: Creek Views 4", + "status": "NEW LAUNCH", + "contact": { + "title": "Sichern Sie sich eine der 132 Einheiten.", + "options": { + "": "Ich interessiere mich für...", + "1br": "1 Bedroom Apartment", + "general": "Allgemeine Beratung", + "3br_penthouse": "3BR Penthouse (Single Unit)" + }, + "subtitle": "Ihr Ansprechpartner: Marcel Scheibe" + }, + "gallery": [ + "expose/a1/image-4.jpeg", + "expose/a1/image-3.jpeg", + "expose/a1/image-2.jpeg", + "expose/a1/image-5.jpeg", + "expose/a1/image-6.jpeg", + "expose/a1/image-7.jpeg" + ], + "location": "Al Jaddaf, Dubai", + "highlights": [ + "Prime Waterfront Views", + "1BR: ab 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)", + "Exklusives 3BR Penthouse (Single Inventory)", + "High Rental Demand & Capital Appreciation" + ], + "price_from": "ab 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)", + "launch_date": "03.03.2026", + "quick_facts": [ + { + "icon": "home-modern", + "label": "Typen", + "value": "1BR & 3BR Penthouse" + }, + { + "icon": "squares-2x2", + "label": "Größe", + "value": "543 – 2.346 sqft" + }, + { + "icon": "building-office-2", + "label": "Einheiten", + "value": "Nur 132 (Limited)" + }, + { + "icon": "user", + "label": "Entwickler", + "value": "Azizi Developments" + } + ], + "location_info": { + "title": "Strategische Location: Al Jaddaf", + "points": [ + "Direkte Anbindung an Dubai Creek und Waterfront", + "Wenige Minuten bis Downtown Dubai & Burj Khalifa", + "Exzellente Infrastruktur und wachsender Stadtteil" + ], + "map_url": "https://maps.google.com/?q=Al+Jaddaf+Dubai" + }, + "investment_case": { + "text": "Creek Views 4 bietet eine strategische Top-Lage in Al Jaddaf. Die Kombination aus limitiertem Angebot (nur 132 Einheiten) und Premium-Ausstattung macht dieses Projekt zur idealen Wahl für Investoren, die auf Wertsteigerung (Capital Appreciation) und hohe Mietnachfrage abzielen.", + "title": "Starkes Investment, hohe Nachfrage.", + "views": [ + "Road View", + "Sitting & Play Area View", + "Neighbour View" + ] + } + } + }, + "subtitle": "Entdecken Sie unsere aktuellen Immobilien-Projekte auf internationalen Märkten." + }, + "en": { + "title": "Current Launches & Projects", + "cta_link": "/contact", + "cta_text": "Request Exposé & Availability Now", + "projects": { + "azizi-creek-views-4": { + "slug": "azizi-creek-views-4", + "image": "expose/a1/image-4.jpeg", + "title": "Azizi Developments: Creek Views 4", + "status": "NEW LAUNCH", + "contact": { + "title": "Secure one of the 132 units.", + "options": { + "": "I am interested in...", + "1br": "1 Bedroom Apartment", + "general": "General Consultation", + "3br_penthouse": "3BR Penthouse (Single Unit)" + }, + "subtitle": "Your contact: Marcel Scheibe" + }, + "gallery": [ + "expose/a1/image-4.jpeg", + "expose/a1/image-3.jpeg", + "expose/a1/image-2.jpeg", + "expose/a1/image-5.jpeg", + "expose/a1/image-6.jpeg", + "expose/a1/image-7.jpeg" + ], + "location": "Al Jaddaf, Dubai", + "highlights": [ + "Prime Waterfront Views", + "1BR: from 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)", + "Exclusive 3BR Penthouse (Single Inventory)", + "High Rental Demand & Capital Appreciation" + ], + "price_from": "from 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)", + "launch_date": "03.03.2026", + "quick_facts": [ + { + "icon": "home-modern", + "label": "Types", + "value": "1BR & 3BR Penthouse" + }, + { + "icon": "squares-2x2", + "label": "Size", + "value": "543 – 2,346 sqft" + }, + { + "icon": "building-office-2", + "label": "Units", + "value": "Only 132 (Limited)" + }, + { + "icon": "user", + "label": "Developer", + "value": "Azizi Developments" + } + ], + "location_info": { + "title": "Strategic Location: Al Jaddaf", + "points": [ + "Direct connection to Dubai Creek and Waterfront", + "Just minutes to Downtown Dubai & Burj Khalifa", + "Excellent infrastructure and growing district" + ], + "map_url": "https://maps.google.com/?q=Al+Jaddaf+Dubai" + }, + "investment_case": { + "text": "Creek Views 4 offers a strategic top location in Al Jaddaf. The combination of limited supply (only 132 units) and premium finishes makes this project the ideal choice for investors targeting capital appreciation and high rental demand.", + "title": "Strong Investment, High Demand.", + "views": [ + "Road View", + "Sitting & Play Area View", + "Neighbour View" + ] + } + } + }, + "subtitle": "Discover our current real estate projects in international markets." + } + } + }, + { + "group": "immobilien", + "key": "trust", + "type": "json", + "order": 0, + "value": { + "de": { + "list": [ + { + "icon": "calendar", + "title": "Investor Evenings – Exklusive Quartals-Events im kleinen Kreis" + }, + { + "icon": "phone", + "title": "Direkter Draht – Persönliches Gespräch und Terminvereinbarung" + }, + { + "icon": "shield-check", + "title": "Transparenz – Von der Marktanalyse bis zum Closing begleitet" + } + ], + "image": "MS - Rollkragen und Jacket..png", + "title": "Persönliche Begleitung", + "image_alt": "Marcel Scheibe – Persönliche Investmentbegleitung", + "paragraphs": [ + "Hinter jedem B2in-Investment steht Marcel Scheibe als persönlicher Ansprechpartner. Keine anonyme Plattform – sondern ein Gesicht mit Expertise, Netzwerk und dem Anspruch, dass Ihr Investment in den besten Händen ist." + ], + "image_caption": "Marcel Scheibe, Gründer & CEO" + }, + "en": { + "list": [ + { + "icon": "calendar", + "title": "Investor Evenings – Exclusive quarterly events in an intimate setting" + }, + { + "icon": "phone", + "title": "Direct Line – Personal conversation and appointment scheduling" + }, + { + "icon": "shield-check", + "title": "Transparency – Guided from market analysis to closing" + } + ], + "image": "b2in/marcel-scheibe-about.jpg", + "title": "Personal Guidance", + "image_alt": "Marcel Scheibe – Personal Investment Guidance", + "paragraphs": [ + "Behind every B2in investment stands Marcel Scheibe as your personal contact. No anonymous platform – but a face with expertise, network, and the commitment that your investment is in the best hands." + ], + "image_caption": "Marcel Scheibe, Founder & CEO" + } + } + }, + { + "group": "immobilien", + "key": "warum_dubai", + "type": "json", + "order": 0, + "value": { + "de": { + "facts": [ + { + "icon": "banknotes", + "title": "0 % Steuern", + "description": "Keine Einkommensteuer auf Mieteinnahmen, keine Kapitalertragsteuer beim Verkauf." + }, + { + "icon": "arrow-trending-up", + "title": "Starke Renditen", + "description": "Attraktive Mietrenditen von historisch 6 % bis 9 % jährlich." + }, + { + "icon": "shield-check", + "title": "Hohe Sicherheit", + "description": "Ein staatlich regulierter Markt mit dem sicheren Escrow-Treuhand-System." + }, + { + "icon": "currency-dollar", + "title": "Stabile Währung", + "description": "Der Dirham (AED) ist fest an den US-Dollar gekoppelt." + }, + { + "icon": "identification", + "title": "Golden Visa", + "description": "Sichern Sie sich Aufenthaltsgenehmigungen über attraktive Investor-Programme." + }, + { + "icon": "globe-alt", + "title": "Hohe Nachfrage", + "description": "Internationale Zuwanderung und begrenztes Angebot treiben die Nachfrage nach Wohnraum stetig nach oben." + } + ], + "intro": "Dubai ist nicht nur eine finanzielle Entscheidung, sondern der Zugang zu einem der wachstumsstärksten Märkte der Welt. Investoren schätzen die klaren rechtlichen Strukturen und Rahmenbedingungen, die weltweit nahezu einzigartig sind:", + "title": "Warum sich ein Investment in Dubai lohnt" + }, + "en": { + "facts": [ + { + "icon": "banknotes", + "title": "0% Taxes", + "description": "No income tax on rental income, no capital gains tax on sale." + }, + { + "icon": "arrow-trending-up", + "title": "Strong Returns", + "description": "Attractive rental yields of historically 6% to 9% annually." + }, + { + "icon": "shield-check", + "title": "High Security", + "description": "A government-regulated market with a secure escrow trust system." + }, + { + "icon": "currency-dollar", + "title": "Stable Currency", + "description": "The Dirham (AED) is pegged to the US Dollar." + }, + { + "icon": "identification", + "title": "Golden Visa", + "description": "Secure residence permits through attractive investor programs." + }, + { + "icon": "globe-alt", + "title": "High Demand", + "description": "International immigration and limited supply continuously drive housing demand upward." + } + ], + "intro": "Dubai is not just a financial decision, but access to one of the world's fastest-growing markets. Investors value the clear legal structures and frameworks that are virtually unique worldwide:", + "title": "Why an Investment in Dubai Is Worth It" + } + } + }, + { + "group": "legal", + "key": "cookie_policy", + "type": "json", + "order": 3, + "value": { + "de": { + "title": "Cookie-Richtlinie", + "content": "\n
\n

1. Verantwortlicher

\n

\n Verantwortlich für die Cookie-Nutzung auf dieser Website ist:\n

\n

\n B2In GmbH
\n Feldstraße 59
\n 32120 Hiddenhausen
\n Telefon: +49 (0) 5221 9255055
\n E-Mail: info@b2in.eu\n

\n
\n\n
\n

2. Was sind Cookies?

\n

\n Cookies sind kleine Textdateien, die Ihr Browser automatisch erstellt und die auf Ihrem Endgerät (Computer, Tablet, Smartphone) gespeichert werden. Sie dienen dazu, die Nutzung der Website zu erleichtern und bestimmte Funktionen zu ermöglichen.\n

\n
\n\n
\n

3. Welche Cookies verwenden wir?

\n

\n Wir unterscheiden zwischen zwei Kategorien von Cookies:\n

\n
    \n
  • Technisch notwendige Cookies: Diese sind erforderlich, um den Betrieb der Website zu gewährleisten (z. B. das Speichern Ihrer Consent-Einstellungen). Sie können nicht deaktiviert werden. Die Rechtsgrundlage hierfür ist Art. 6 Abs. 1 lit. f DSGVO.
  • \n
  • Analyse- und Marketing-Cookies: Diese Cookies (z. B. Google Analytics) werden nur gesetzt, wenn Sie uns zuvor Ihre ausdrückliche Einwilligung über unser Cookie-Consent-Banner erteilt haben. Die Rechtsgrundlage ist Art. 6 Abs. 1 lit. a DSGVO sowie § 25 Abs. 1 TTDSG/TDDDG.
  • \n
\n

\n Sie können Ihre Einwilligung jederzeit widerrufen oder anpassen, indem Sie die Cookie-Einstellungen über den folgenden Link aufrufen:\n Cookie-Einstellungen ändern\n

\n
\n\n
\n

4. Google Analytics

\n

\n Soweit Sie Ihre Einwilligung erklärt haben, wird auf dieser Website Google Analytics eingesetzt, ein Webanalysedienst der Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland („Google\").\n Google Analytics verwendet Cookies, die eine Analyse der Benutzung der Website durch Sie ermöglichen. Die dadurch erzeugten Informationen werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert.\n

\n

\n IP-Anonymisierung: Wir haben auf dieser Website die Funktion IP-Anonymisierung aktiviert. Dadurch wird Ihre IP-Adresse von Google innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum vor der Übermittlung in die USA gekürzt.\n

\n

\n Datenübermittlung in die USA: Datenübertragungen in die USA stützen sich auf den Angemessenheitsbeschluss der EU-Kommission (EU-US Data Privacy Framework), unter dem Google LLC zertifiziert ist, sowie auf Standardvertragsklauseln.\n

\n

\n Widerruf: Sie können Ihre Einwilligung jederzeit mit Wirkung für die Zukunft über unsere\n Cookie-Einstellungen\n widerrufen. Zudem können Sie die Erfassung durch Google Analytics verhindern, indem Sie das Browser-Plugin unter\n https://tools.google.com/dlpage/gaoptout?hl=de\n herunterladen und installieren.\n

\n
\n\n
\n

5. Speicherdauer

\n

\n Session-Cookies werden beim Schließen des Browsers gelöscht. Ihre Cookie-Einwilligung (Consent-Einstellungen) wird als persistentes Cookie für maximal 12 Monate gespeichert. Analyse-Cookies von Google Analytics haben typischerweise eine Speicherdauer von bis zu 2 Jahren.\n

\n
\n\n
\n

6. Ihre Wahl

\n

\n Sie können Ihren Browser so einstellen, dass Sie über das Setzen von Cookies informiert werden und diese einzeln erlauben oder ablehnen. Die Deaktivierung technisch notwendiger Cookies kann die Funktionalität unserer Website einschränken.\n

\n
\n\n
\n

7. Weitere Informationen

\n

\n Ausführliche Informationen zum Datenschutz, zu Ihren Rechten und zur Datenverarbeitung finden Sie in unserer\n Datenschutzerklärung.\n

\n
\n ", + "subtitle": "Stand: 13.03.2026", + "back_link": "← Zurück", + "meta_title": "Cookie-Richtlinie" + }, + "en": { + "title": "Cookie Policy", + "content": "\n
\n

1. Data Controller

\n

\n Responsible for cookie usage on this website is:\n

\n

\n B2in GmbH
\n Feldstraße 59
\n 32120 Hiddenhausen, Germany
\n Phone: +49 (0) 5221 9255055
\n Email: info@b2in.eu\n

\n
\n\n
\n

2. What Are Cookies?

\n

\n Cookies are small text files that your browser automatically creates and stores on your device (computer, tablet, smartphone). They are used to facilitate the use of the website and to enable certain functions.\n

\n
\n\n
\n

3. What Cookies Do We Use?

\n

\n We distinguish between two categories of cookies:\n

\n
    \n
  • Technically necessary cookies: These are required to ensure the operation of the website (e.g., saving your consent settings). They cannot be deactivated. The legal basis for this is Art. 6 Para. 1 lit. f GDPR.
  • \n
  • Analytics and marketing cookies: These cookies (e.g., Google Analytics) are only set if you have previously given us your explicit consent via our cookie consent banner. The legal basis is Art. 6 Para. 1 lit. a GDPR and § 25 Para. 1 TTDSG/TDDDG.
  • \n
\n

\n You can revoke or adjust your consent at any time by accessing the cookie settings via the following link:\n Change Cookie Settings\n

\n
\n\n
\n

4. Google Analytics

\n

\n Insofar as you have given your consent, Google Analytics is used on this website, a web analytics service provided by Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Ireland (\"Google\").\n Google Analytics uses cookies that enable an analysis of your use of the website. The information generated is usually transmitted to a Google server in the USA and stored there.\n

\n

\n IP Anonymization: We have activated the IP anonymization function on this website. This means that your IP address is truncated by Google within member states of the European Union or in other contracting states of the Agreement on the European Economic Area before being transmitted to the USA.\n

\n

\n Data Transfer to the USA: Data transfers to the USA are based on the adequacy decision of the EU Commission (EU-US Data Privacy Framework), under which Google LLC is certified, as well as on Standard Contractual Clauses.\n

\n

\n Revocation: You can revoke your consent at any time with future effect via our\n Cookie Settings.\n You can also prevent data collection by Google Analytics by downloading and installing the browser plugin at\n https://tools.google.com/dlpage/gaoptout.\n

\n
\n\n
\n

5. Storage Duration

\n

\n Session cookies are deleted when the browser is closed. Your cookie consent settings are stored as a persistent cookie for a maximum of 12 months. Analytics cookies from Google Analytics typically have a storage duration of up to 2 years.\n

\n
\n\n
\n

6. Your Choice

\n

\n You can configure your browser to inform you about the setting of cookies and to allow or reject them individually. Deactivating technically necessary cookies may limit the functionality of our website.\n

\n
\n\n
\n

7. Further Information

\n

\n For detailed information about data protection, your rights, and data processing, please refer to our\n Privacy Policy.\n

\n
\n ", + "subtitle": "Last updated: 13 March 2026", + "back_link": "← Back", + "meta_title": "Cookie Policy" + } + } + }, + { + "group": "legal", + "key": "impressum", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Impressum", + "content": "\n
\n

Anbieter

\n

\n B2in GmbH
\n Feldstraße 59
\n 32120 Hiddenhausen\n

\n
\n\n
\n

Vertreten durch

\n

Marcel Scheibe – Geschäftsführer

\n
\n\n
\n

Kontakt

\n

\n E-Mail: info@b2in.eu
\n Telefon: +49 (0) 5221 9255055\n

\n
\n\n
\n

Registereintrag

\n

\n Eintragung im Handelsregister.
\n Registergericht: Amtsg. Bad Oeynhausen
\n Registernummer: HRB 13068\n

\n
\n\n
\n

Umsatzsteuer-ID

\n

\n Umsatzsteuer-Identifikationsnummer gemäß § 27a Umsatzsteuergesetz:
\n DE283859321\n

\n
\n\n
\n

Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV

\n

\n Marcel Scheibe
\n Feldstraße 59
\n 32120 Hiddenhausen\n

\n
\n\n
\n

EU-Streitschlichtung

\n

\n Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.\n

\n
\n\n
\n

Haftung für Inhalte

\n

\n Als Diensteanbieter sind wir gemäß § 7 Abs. 1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.\n

\n

\n Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.\n

\n
\n\n
\n

Haftung für Links

\n

\n Unser Angebot enthält Links zu externen Websites Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich.\n

\n
\n\n
\n

Urheberrecht

\n

\n Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet.\n

\n

\n Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.\n

\n
\n\n
\n

Konzeption, Design und Realisation

\n

\n adametz.media, Bielefeld\n

\n
\n ", + "subtitle": "Angaben gemäß § 5 TMG", + "back_link": "← Zurück", + "meta_title": "Impressum" + }, + "en": { + "title": "Legal Notice", + "content": "\n
\n

Provider

\n

\n B2in GmbH
\n Feldstraße 59
\n 32120 Hiddenhausen, Germany\n

\n
\n\n
\n

Represented by

\n

Marcel Scheibe – Managing Director

\n
\n\n
\n

Contact

\n

\n Email: info@b2in.de
\n Phone: +49 (0) 5221 9255055\n

\n
\n\n
\n

Commercial Register

\n

\n Registered in the Commercial Register.
\n Register Court: Amtsg. Bad Oeynhausen
\n Register Number: HRB 13068\n

\n
\n\n
\n

VAT ID

\n

\n VAT Identification Number pursuant to § 27a of the German VAT Act:
\n DE283859321\n

\n
\n\n
\n

Responsible for Content pursuant to § 55 Para. 2 RStV

\n

\n Marcel Scheibe
\n Feldstraße 59
\n 32120 Hiddenhausen, Germany\n

\n
\n\n
\n

EU Dispute Resolution

\n

\n We are neither willing nor obliged to participate in dispute resolution proceedings before a consumer arbitration board.\n

\n
\n\n
\n

Liability for Content

\n

\n As a service provider, we are responsible for our own content on these pages in accordance with general legislation pursuant to § 7 Para. 1 TMG. However, pursuant to §§ 8 to 10 TMG, we are not obligated as a service provider to monitor transmitted or stored third-party information or to investigate circumstances that indicate illegal activity.\n

\n

\n Obligations to remove or block the use of information under general law remain unaffected. However, liability in this regard is only possible from the point in time at which a concrete infringement of the law becomes known. If we become aware of any such infringements, we will remove this content immediately.\n

\n
\n\n
\n

Liability for Links

\n

\n Our website contains links to external third-party websites over whose content we have no influence. Therefore, we cannot assume any liability for this third-party content. The respective provider or operator of the linked pages is always responsible for the content of the linked pages.\n

\n
\n\n
\n

Copyright

\n

\n The content and works created by the site operators on these pages are subject to German copyright law. Duplication, processing, distribution, and any kind of exploitation beyond the limits of copyright require the written consent of the respective author or creator. Downloads and copies of this page are only permitted for private, non-commercial use.\n

\n

\n Insofar as the content on this page was not created by the operator, the copyrights of third parties are respected. In particular, third-party content is identified as such. Should you nevertheless become aware of a copyright infringement, please inform us accordingly. If we become aware of any infringements, we will remove such content immediately.\n

\n
\n\n
\n

Concept, Design and Implementation

\n

\n adametz.media, Bielefeld\n

\n
\n ", + "subtitle": "Information pursuant to § 5 TMG (German Telemedia Act)", + "back_link": "← Back", + "meta_title": "Legal Notice" + } + } + }, + { + "group": "legal", + "key": "privacy", + "type": "json", + "order": 1, + "value": { + "de": { + "title": "Datenschutzerklärung", + "content": "\n
\n

1. Verantwortlicher

\n

\n Verantwortlich für die Datenverarbeitung auf dieser Website im Sinne der Datenschutz-Grundverordnung (DSGVO) ist:\n

\n

\n B2in GmbH
\n Feldstraße 59
\n 32120 Hiddenhausen
\n Telefon: +49 (0) 5221 9255055
\n E-Mail: info@b2in.eu\n

\n
\n\n
\n

2. Datenerfassung auf unserer Website (Server-Log-Dateien)

\n

\n Beim Aufruf unserer Website werden durch den auf Ihrem Endgerät zum Einsatz kommenden Browser automatisch Informationen an den Server unserer Website gesendet. Diese Informationen werden temporär in einem sogenannten Logfile gespeichert. Folgende Informationen werden dabei ohne Ihr Zutun erfasst und bis zur automatisierten Löschung gespeichert:\n

\n
    \n
  • IP-Adresse des anfragenden Rechners
  • \n
  • Datum und Uhrzeit des Zugriffs
  • \n
  • Name und URL der abgerufenen Datei
  • \n
  • Website, von der aus der Zugriff erfolgt (Referrer-URL)
  • \n
  • Verwendeter Browser und ggf. das Betriebssystem Ihres Rechners sowie der Name Ihres Access-Providers
  • \n
\n

\n Zweck und Rechtsgrundlage: Die Verarbeitung erfolgt zur Gewährleistung eines reibungslosen Verbindungsaufbaus der Website, zur Auswertung der Systemsicherheit und -stabilität sowie zu weiteren administrativen Zwecken. Die Rechtsgrundlage hierfür ist Art. 6 Abs. 1 lit. f DSGVO. Unser berechtigtes Interesse folgt aus den oben aufgelisteten Zwecken zur Datenerhebung.\n

\n
\n\n
\n

3. Kontaktformular und E-Mail-Kontakt

\n

\n Wenn Sie uns per Kontaktformular oder E-Mail Anfragen zukommen lassen, werden Ihre Angaben aus dem Anfrageformular inklusive der von Ihnen dort angegebenen Kontaktdaten (wie Name, E-Mail-Adresse, Telefonnummer) zwecks Bearbeitung der Anfrage und für den Fall von Anschlussfragen bei uns gespeichert. Diese Daten geben wir nicht ohne Ihre Einwilligung weiter.\n

\n

\n Die Verarbeitung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1 lit. b DSGVO, sofern Ihre Anfrage mit der Erfüllung eines Vertrags zusammenhängt oder zur Durchführung vorvertraglicher Maßnahmen (z. B. Immobilien-Investment oder Supply-Chain-Management) erforderlich ist. In allen übrigen Fällen beruht die Verarbeitung auf unserem berechtigten Interesse an der effektiven Bearbeitung der an uns gerichteten Anfragen (Art. 6 Abs. 1 lit. f DSGVO) oder auf Ihrer Einwilligung (Art. 6 Abs. 1 lit. a DSGVO), sofern diese abgefragt wurde.\n

\n

\n Die von Ihnen im Kontaktformular eingegebenen Daten verbleiben bei uns, bis Sie uns zur Löschung auffordern, Ihre Einwilligung zur Speicherung widerrufen oder der Zweck für die Datenspeicherung entfällt (z. B. nach abgeschlossener Bearbeitung Ihrer Anfrage). Zwingende gesetzliche Bestimmungen – insbesondere Aufbewahrungsfristen – bleiben unberührt.\n

\n
\n\n
\n

4. Cookies

\n

\n Unsere Website verwendet Cookies. Das sind kleine Textdateien, die Ihr Browser automatisch erstellt und die auf Ihrem Endgerät gespeichert werden.\n

\n
    \n
  • Technisch notwendige Cookies: Diese sind erforderlich, um den Betrieb der Website zu gewährleisten (z. B. das Speichern Ihrer Consent-Einstellungen). Die Rechtsgrundlage hierfür ist Art. 6 Abs. 1 lit. f DSGVO.
  • \n
  • Analyse- und Marketing-Cookies: Diese Cookies (z. B. Google Analytics) werden nur gesetzt, wenn Sie uns zuvor Ihre ausdrückliche Einwilligung über unser Cookie-Consent-Banner erteilt haben (Art. 6 Abs. 1 lit. a DSGVO).
  • \n
\n

\n Sie können Ihre Einwilligung jederzeit widerrufen oder anpassen, indem Sie die Cookie-Einstellungen über den folgenden Link aufrufen:\n Cookie-Einstellungen ändern\n

\n
\n\n
\n

5. Google Analytics

\n

\n Soweit Sie Ihre Einwilligung erklärt haben, wird auf dieser Website Google Analytics eingesetzt, ein Webanalysedienst der Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland („Google\").\n Google Analytics verwendet Cookies, die eine Analyse der Benutzung der Website durch Sie ermöglichen. Die dadurch erzeugten Informationen werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert.\n

\n

\n IP-Anonymisierung: Wir haben auf dieser Website die Funktion IP-Anonymisierung aktiviert. Dadurch wird Ihre IP-Adresse von Google innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum vor der Übermittlung in die USA gekürzt.\n

\n

\n Zweck und Rechtsgrundlage: In unserem Auftrag wird Google diese Informationen benutzen, um Ihre Nutzung der Website auszuwerten, um Reports über die Websiteaktivitäten zusammenzustellen und um weitere mit der Websitenutzung und der Internetnutzung verbundene Dienstleistungen gegenüber dem Websitebetreiber zu erbringen.\n Die Rechtsgrundlage für den Einsatz von Google Analytics ist Ihre freiwillig erteilte Einwilligung gemäß Art. 6 Abs. 1 lit. a DSGVO sowie § 25 Abs. 1 TTDSG/TDDDG.\n

\n

\n Datenübermittlung in die USA: Datenübertragungen in die USA stützen sich auf den Angemessenheitsbeschluss der EU-Kommission (EU-US Data Privacy Framework), unter dem Google LLC zertifiziert ist, sowie auf Standardvertragsklauseln.\n

\n

\n Widerruf / Widerspruch: Sie können Ihre Einwilligung jederzeit mit Wirkung für die Zukunft über unsere\n Cookie-Einstellungen\n widerrufen. Sie können die Erfassung durch Google Analytics zudem verhindern, indem Sie das unter dem folgenden Link verfügbare Browser-Plugin herunterladen und installieren:\n https://tools.google.com/dlpage/gaoptout?hl=de.\n

\n
\n\n
\n

6. Externe Links (z. B. Google Maps)

\n

\n Auf unserer Website finden Sie Links zu externen Diensten, wie beispielsweise zu Google Maps, um Ihnen Standorte (z. B. Immobilien-Projekte) zu visualisieren. Wir binden diese Dienste nicht direkt auf unserer Seite ein, sondern verlinken lediglich darauf. Wenn Sie auf einen solchen Link klicken, verlassen Sie unsere Website und werden auf die Server des jeweiligen Anbieters (z. B. Google) weitergeleitet. Erst dort werden Ihre Daten (wie z. B. Ihre IP-Adresse) durch den externen Anbieter erfasst. Es gilt die Datenschutzerklärung des jeweiligen Anbieters.\n

\n
\n\n
\n

7. SSL- bzw. TLS-Verschlüsselung

\n

\n Diese Seite nutzt aus Sicherheitsgründen und zum Schutz der Übertragung vertraulicher Inhalte, wie zum Beispiel Anfragen, die Sie an uns als Seitenbetreiber senden, eine SSL- bzw. TLS-Verschlüsselung. Eine verschlüsselte Verbindung erkennen Sie daran, dass die Adresszeile des Browsers von „http://\" auf „https://\" wechselt und an dem Schloss-Symbol in Ihrer Browserzeile. Wenn die Verschlüsselung aktiviert ist, können die Daten, die Sie an uns übermitteln, nicht von Dritten mitgelesen werden.\n

\n
\n\n
\n

8. Ihre Rechte als betroffene Person

\n

\n Sie haben das Recht:\n

\n
    \n
  • gemäß Art. 15 DSGVO Auskunft über Ihre von uns verarbeiteten personenbezogenen Daten zu verlangen.
  • \n
  • gemäß Art. 16 DSGVO unverzüglich die Berichtigung unrichtiger oder Vervollständigung Ihrer bei uns gespeicherten Daten zu verlangen.
  • \n
  • gemäß Art. 17 DSGVO die Löschung Ihrer bei uns gespeicherten Daten zu verlangen, soweit nicht die Verarbeitung zur Ausübung des Rechts auf freie Meinungsäußerung, zur Erfüllung einer rechtlichen Verpflichtung oder zur Geltendmachung von Rechtsansprüchen erforderlich ist.
  • \n
  • gemäß Art. 18 DSGVO die Einschränkung der Verarbeitung Ihrer Daten zu verlangen.
  • \n
  • gemäß Art. 20 DSGVO Ihre Daten in einem strukturierten, gängigen und maschinenlesebaren Format zu erhalten (Datenübertragbarkeit).
  • \n
  • gemäß Art. 7 Abs. 3 DSGVO Ihre einmal erteilte Einwilligung jederzeit gegenüber uns zu widerrufen.
  • \n
  • gemäß Art. 21 DSGVO Widerspruch gegen die Verarbeitung einzulegen, sofern Ihre Daten auf Grundlage von berechtigten Interessen verarbeitet werden.
  • \n
\n

\n Möchten Sie von Ihren Rechten Gebrauch machen, genügt eine E-Mail an: info@b2in.eu.\n

\n

\n Sie haben zudem das Recht, sich bei einer Datenschutz-Aufsichtsbehörde zu beschweren (Art. 77 DSGVO).\n

\n
\n ", + "subtitle": "Stand: 13.03.2026", + "back_link": "← Zurück", + "meta_title": "Datenschutzerklärung" + }, + "en": { + "title": "Privacy Policy", + "content": "\n
\n

1. Data Controller

\n

\n The data controller responsible for data processing on this website within the meaning of the General Data Protection Regulation (GDPR) is:\n

\n

\n B2in GmbH
\n Feldstraße 59
\n 32120 Hiddenhausen, Germany
\n Phone: +49 (0) 5221 9255055
\n Email: info@b2in.eu\n

\n
\n\n
\n

2. Data Collection on Our Website (Server Log Files)

\n

\n When you access our website, your browser automatically sends information to our website's server. This information is temporarily stored in a so-called log file. The following information is collected without your intervention and stored until automated deletion:\n

\n
    \n
  • IP address of the requesting device
  • \n
  • Date and time of access
  • \n
  • Name and URL of the retrieved file
  • \n
  • Website from which access is made (referrer URL)
  • \n
  • Browser used and, if applicable, the operating system of your device and the name of your access provider
  • \n
\n

\n Purpose and Legal Basis: Processing is carried out to ensure a smooth connection to the website, to evaluate system security and stability, and for other administrative purposes. The legal basis for this is Art. 6 Para. 1 lit. f GDPR. Our legitimate interest follows from the purposes listed above for data collection.\n

\n
\n\n
\n

3. Contact Form and Email Contact

\n

\n If you send us inquiries via the contact form or email, your details from the inquiry form, including the contact data you provided (such as name, email address, phone number), will be stored by us for the purpose of processing the inquiry and in case of follow-up questions. We do not share this data without your consent.\n

\n

\n The processing of this data is based on Art. 6 Para. 1 lit. b GDPR, insofar as your inquiry is related to the performance of a contract or is necessary for the implementation of pre-contractual measures (e.g., real estate investment or supply chain management). In all other cases, the processing is based on our legitimate interest in the effective processing of inquiries addressed to us (Art. 6 Para. 1 lit. f GDPR) or on your consent (Art. 6 Para. 1 lit. a GDPR), if this was requested.\n

\n

\n The data you enter in the contact form will remain with us until you request deletion, revoke your consent to storage, or the purpose for data storage no longer applies (e.g., after your inquiry has been fully processed). Mandatory statutory provisions – in particular retention periods – remain unaffected.\n

\n
\n\n
\n

4. Cookies

\n

\n Our website uses cookies. These are small text files that your browser automatically creates and stores on your device.\n

\n
    \n
  • Technically necessary cookies: These are required to ensure the operation of the website (e.g., saving your consent settings). The legal basis for this is Art. 6 Para. 1 lit. f GDPR.
  • \n
  • Analytics and marketing cookies: These cookies (e.g., Google Analytics) are only set if you have previously given us your explicit consent via our cookie consent banner (Art. 6 Para. 1 lit. a GDPR).
  • \n
\n

\n You can revoke or adjust your consent at any time by accessing the cookie settings via the following link:\n Change Cookie Settings\n

\n
\n\n
\n

5. Google Analytics

\n

\n Insofar as you have given your consent, Google Analytics is used on this website, a web analytics service provided by Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Ireland (\"Google\").\n Google Analytics uses cookies that enable an analysis of your use of the website. The information generated is usually transmitted to a Google server in the USA and stored there.\n

\n

\n IP Anonymization: We have activated the IP anonymization function on this website. This means that your IP address is truncated by Google within member states of the European Union or in other contracting states of the Agreement on the European Economic Area before being transmitted to the USA.\n

\n

\n Purpose and Legal Basis: On our behalf, Google will use this information to evaluate your use of the website, to compile reports on website activity, and to provide other services related to website use and internet usage to the website operator.\n The legal basis for the use of Google Analytics is your voluntarily given consent pursuant to Art. 6 Para. 1 lit. a GDPR and § 25 Para. 1 TTDSG/TDDDG.\n

\n

\n Data Transfer to the USA: Data transfers to the USA are based on the adequacy decision of the EU Commission (EU-US Data Privacy Framework), under which Google LLC is certified, as well as on Standard Contractual Clauses.\n

\n

\n Revocation / Objection: You can revoke your consent at any time with future effect via our\n Cookie Settings.\n You can also prevent data collection by Google Analytics by downloading and installing the browser plugin available at the following link:\n https://tools.google.com/dlpage/gaoptout.\n

\n
\n\n
\n

6. External Links (e.g., Google Maps)

\n

\n On our website, you will find links to external services, such as Google Maps, to visualize locations (e.g., real estate projects) for you. We do not directly embed these services on our site but merely link to them. When you click on such a link, you leave our website and are redirected to the servers of the respective provider (e.g., Google). Only there will your data (such as your IP address) be collected by the external provider. The privacy policy of the respective provider applies.\n

\n
\n\n
\n

7. SSL/TLS Encryption

\n

\n This site uses SSL or TLS encryption for security reasons and to protect the transmission of confidential content, such as inquiries you send to us as the site operator. You can recognize an encrypted connection by the browser's address bar changing from \"http://\" to \"https://\" and by the lock icon in your browser bar. When encryption is activated, the data you transmit to us cannot be read by third parties.\n

\n
\n\n
\n

8. Your Rights as a Data Subject

\n

\n You have the right:\n

\n
    \n
  • pursuant to Art. 15 GDPR, to request information about your personal data processed by us.
  • \n
  • pursuant to Art. 16 GDPR, to immediately request the correction of inaccurate or completion of your data stored by us.
  • \n
  • pursuant to Art. 17 GDPR, to request the deletion of your data stored by us, unless processing is necessary for exercising the right of freedom of expression, for compliance with a legal obligation, or for the establishment of legal claims.
  • \n
  • pursuant to Art. 18 GDPR, to request the restriction of processing of your data.
  • \n
  • pursuant to Art. 20 GDPR, to receive your data in a structured, commonly used, and machine-readable format (data portability).
  • \n
  • pursuant to Art. 7 Para. 3 GDPR, to revoke your consent at any time.
  • \n
  • pursuant to Art. 21 GDPR, to object to the processing, insofar as your data is processed on the basis of legitimate interests.
  • \n
\n

\n To exercise your rights, simply send an email to: info@b2in.eu.\n

\n

\n You also have the right to lodge a complaint with a data protection supervisory authority (Art. 77 GDPR).\n

\n
\n ", + "subtitle": "Last updated: 13 March 2026", + "back_link": "← Back", + "meta_title": "Privacy Policy" + } + } + }, + { + "group": "legal", + "key": "terms", + "type": "json", + "order": 2, + "value": { + "de": { + "title": "Nutzungsbedingungen", + "content": "\n
\n

1. Geltungsbereich

\n

\n Diese Nutzungsbedingungen gelten für die Nutzung der öffentlich zugänglichen Website und der damit verbundenen Informationsdienste der B2in GmbH („B2in\", „wir\", „uns\"). Mit dem Aufruf und der Nutzung unserer Website erklären Sie sich mit diesen Bedingungen einverstanden.\n

\n
\n\n
\n

2. Leistungsbeschreibung

\n

\n B2in ist das Netzwerk, das exklusives Design und internationale Immobilien verbindet („Connecting Design and Property\"). Über unsere Website bieten wir unverbindliche Informationen zu unseren Dienstleistungen, Immobilienprojekten (z. B. in Dubai oder Lissabon), Supply-Chain-Management und unserem Einrichtungsnetzwerk an. Die konkrete Leistungserbringung, Vermittlung oder Beschaffung erfolgt nicht über die Website, sondern ausschließlich auf Basis gesonderter, individueller Verträge.\n

\n
\n\n
\n

3. Unverbindlichkeit von Immobilien- und Investmentinformationen (WICHTIG!)

\n

\n Die auf der Website dargestellten Immobilienprojekte, Exposés, Preisangaben, Grundrisse und Renditeprognosen (z. B. erwartete Mietrenditen) dienen ausschließlich der allgemeinen Information und Inspiration.\n

\n

\n Keine Anlageberatung: Die bereitgestellten Inhalte stellen keine Finanz-, Steuer- oder Anlageberatung dar und sind kein bindendes Vertragsangebot.\n

\n

\n Änderungsvorbehalt: Da wir mit internationalen Bauträgern und Projektentwicklern zusammenarbeiten, können sich Preise, Verfügbarkeiten (z. B. von limitierten Einheiten), Baufortschritte und Übergabetermine jederzeit ändern. B2in übernimmt keine Gewähr für die zukünftige Wertentwicklung oder das Eintreten der prognostizierten Renditen.\n

\n
\n\n
\n

4. Partner-Portal und geschlossene Netzwerke

\n

\n Für bestimmte Zielgruppen (z. B. Makler, Immobilienentwickler, Händler) bietet B2in den Zugang zu einem geschlossenen Portal bzw. Partner-Netzwerk an. Der Zugang zu diesen passwortgeschützten Bereichen unterliegt einer vorherigen Registrierung und Freigabe durch B2in. Für die Nutzung dieser geschlossenen Bereiche gelten gesonderte Allgemeine Geschäftsbedingungen (AGB) bzw. Partnerverträge.\n

\n
\n\n
\n

5. Urheber- und Nutzungsrechte

\n

\n Die auf dieser Website bereitgestellten Inhalte (insbesondere Texte, Exposé-Bilder, Grafiken, Logos und Videos) sind urheberrechtlich geschützt. Eine Vervielfältigung, Bearbeitung, Verbreitung oder jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedarf der vorherigen schriftlichen Zustimmung von B2in oder des jeweiligen Rechteinhabers (z. B. Bauträger).\n

\n
\n\n
\n

6. Haftungsausschluss

\n

\n Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte (insbesondere Projektbeschreibungen von Drittanbietern) können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs. 1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Wir sind jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen.\n

\n
\n\n
\n

7. Externe Links

\n

\n Unser Angebot enthält Links zu externen Websites Dritter (z. B. Google Maps oder Partner-Websites), auf deren Inhalte wir keinen Einfluss haben. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.\n

\n
\n\n
\n

8. Änderungen der Nutzungsbedingungen

\n

\n Wir behalten uns vor, diese Nutzungsbedingungen jederzeit und ohne Nennung von Gründen zu ändern. Die aktuelle Version ist stets auf dieser Seite abrufbar. Mit der fortgesetzten Nutzung der Website nach einer Änderung akzeptieren Sie die geänderten Bedingungen.\n

\n
\n\n
\n

9. Schlussbestimmungen

\n

\n Es gilt das Recht der Bundesrepublik Deutschland unter Ausschluss des UN-Kaufrechts. Sofern es sich beim Nutzer um einen Kaufmann, eine juristische Person des öffentlichen Rechts oder um ein öffentlich-rechtliches Sondervermögen handelt, ist der Gerichtsstand für alle Streitigkeiten aus Nutzungsverhältnissen der Sitz der B2in GmbH.\n

\n
\n ", + "subtitle": "Stand: 13.03.2026", + "back_link": "← Zurück", + "meta_title": "Nutzungsbedingungen" + }, + "en": { + "title": "Terms of Use", + "content": "\n
\n

1. Scope

\n

\n These Terms of Use apply to the use of the publicly accessible website and associated information services of B2in GmbH (\"B2in\", \"we\", \"us\"). By accessing and using our website, you agree to these terms.\n

\n
\n\n
\n

2. Description of Services

\n

\n B2in is the network that connects exclusive design and international real estate (\"Connecting Design and Property\"). Through our website, we provide non-binding information about our services, real estate projects (e.g., in Dubai or Lisbon), supply chain management, and our interior network. The actual provision of services, brokerage, or procurement does not take place through the website, but exclusively on the basis of separate, individual contracts.\n

\n
\n\n
\n

3. Non-Binding Nature of Real Estate and Investment Information (IMPORTANT!)

\n

\n The real estate projects, exposés, pricing information, floor plans, and return forecasts (e.g., expected rental yields) presented on the website are intended solely for general information and inspiration.\n

\n

\n No Investment Advice: The content provided does not constitute financial, tax, or investment advice and is not a binding contractual offer.\n

\n

\n Subject to Change: As we work with international developers and project builders, prices, availability (e.g., of limited units), construction progress, and handover dates may change at any time. B2in assumes no warranty for future value development or the achievement of projected returns.\n

\n
\n\n
\n

4. Partner Portal and Closed Networks

\n

\n For certain target groups (e.g., brokers, property developers, retailers), B2in offers access to a closed portal or partner network. Access to these password-protected areas requires prior registration and approval by B2in. Separate General Terms and Conditions (GTC) or partner contracts apply to the use of these closed areas.\n

\n
\n\n
\n

5. Copyright and Usage Rights

\n

\n The content provided on this website (in particular texts, exposé images, graphics, logos, and videos) is protected by copyright. Any reproduction, processing, distribution, or any kind of exploitation beyond the limits of copyright requires the prior written consent of B2in or the respective rights holder (e.g., developer).\n

\n
\n\n
\n

6. Disclaimer

\n

\n The contents of our pages have been created with the utmost care. However, we cannot guarantee the accuracy, completeness, and timeliness of the content (particularly project descriptions from third-party providers). As a service provider, we are responsible for our own content on these pages in accordance with general legislation pursuant to § 7 Para. 1 TMG. However, we are not obligated to monitor transmitted or stored third-party information.\n

\n
\n\n
\n

7. External Links

\n

\n Our website contains links to external third-party websites (e.g., Google Maps or partner websites) over whose content we have no influence. The respective provider or operator of the linked pages is always responsible for the content of the linked pages. A permanent content review of the linked pages is not reasonable without concrete evidence of a legal violation. If we become aware of any legal violations, we will remove such links immediately.\n

\n
\n\n
\n

8. Changes to the Terms of Use

\n

\n We reserve the right to change these Terms of Use at any time and without stating reasons. The current version is always available on this page. By continuing to use the website after a change, you accept the modified terms.\n

\n
\n\n
\n

9. Final Provisions

\n

\n The law of the Federal Republic of Germany shall apply, excluding the UN Convention on Contracts for the International Sale of Goods. If the user is a merchant, a legal entity under public law, or a special fund under public law, the place of jurisdiction for all disputes arising from the usage relationship shall be the registered office of B2in GmbH.\n

\n
\n ", + "subtitle": "Last updated: 13 March 2026", + "back_link": "← Back", + "meta_title": "Terms of Use" + } + } + }, + { + "group": "magazin", + "key": "detail", + "type": "json", + "order": 0, + "value": { + "de": { + "cta_title": "Entdecken Sie mehr über Immobilien-Investments und das B2in-Ökosystem.", + "cta_button": "Weitere Artikel entdecken", + "share_article": "Artikel teilen", + "back_to_magazine": "Zurück zum Magazin" + }, + "en": { + "cta_title": "Discover more about real estate investments and the B2in ecosystem.", + "cta_button": "Discover More Articles", + "share_article": "Share Article", + "back_to_magazine": "Back to Magazine" + } + } + }, + { + "group": "magazin", + "key": "list", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "B2in Magazin", + "subtitle": "Praxiswissen rund ums Einrichten: Maßanfertigung, Küchenplanung, Marken und der Möbelhandel aus der Region.", + "load_more": "Weitere Artikel laden", + "read_more": "Weiterlesen" + }, + "en": { + "title": "B2in Magazine", + "subtitle": "Practical knowledge about interiors: custom-made furniture, kitchen planning, brands and the regional furniture trade.", + "load_more": "Load More Articles", + "read_more": "Read More" + } + } + }, + { + "group": "marken", + "key": "cta", + "type": "json", + "order": 0, + "value": { + "de": { + "text": "Am besten dort, wo Sie sie anfassen können: in unseren Showrooms. Vereinbaren Sie einen unverbindlichen Beratungstermin – wir nehmen uns Zeit.", + "title": "Lernen Sie unsere Marken kennen", + "button_link": "/contact", + "button_text": "Termin anfragen", + "whatsapp_text": "Per WhatsApp schreiben" + }, + "en": { + "text": "Ideally where you can touch them: in our showrooms. Arrange a no-obligation consultation – we take our time.", + "title": "Get to know our brands", + "button_link": "/contact", + "button_text": "Request an appointment", + "whatsapp_text": "Message us on WhatsApp" + } + } + }, + { + "group": "marken", + "key": "growth", + "type": "json", + "order": 0, + "value": { + "de": { + "text": "Wir erweitern unser Portfolio laufend um Hersteller, die zu unserem Anspruch passen. Sie vermissen eine bestimmte Marke oder haben einen konkreten Wunsch? Sprechen Sie uns an – oft finden wir über unser Netzwerk genau das Richtige.", + "title": "Unsere Markenwelt wächst", + "enabled": true + }, + "en": { + "text": "We continuously extend our portfolio with manufacturers that match our standards. Missing a particular brand or have a specific wish? Talk to us – our network often turns up exactly the right thing.", + "title": "Our brand world is growing", + "enabled": true + } + } + }, + { + "group": "marken", + "key": "hero", + "type": "json", + "order": 0, + "value": { + "de": { + "text": "Wir arbeiten nicht mit beliebigen Katalogen, sondern mit ausgewählten Herstellern, hinter denen wir stehen. Jede Marke ist Spezialist auf ihrem Gebiet – und jede bringt mit, was gute Einrichtung ausmacht: Qualität, die man sieht, und Beratung, die zuhört.", + "image": "b2in/b2a.jpg", + "title": "Unsere Marken", + "image_alt": "B2in Interior – unsere Kernmarken" + }, + "en": { + "text": "We do not work with arbitrary catalogues, but with selected manufacturers we stand behind. Each brand is a specialist in its field – and each brings what good interiors are made of: visible quality and advice that listens.", + "image": "b2in/b2a.jpg", + "title": "Our brands", + "image_alt": "B2in Interior – our core brands" + } + } + }, + { + "group": "marken", + "key": "network", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Mehr als Marken: unser Netzwerk", + "points": [ + { + "icon": "pencil-square", + "title": "Aufmaß & Planung", + "description": "Wir kommen zu Ihnen, nehmen Maß und planen mit Ihnen gemeinsam." + }, + { + "icon": "wrench-screwdriver", + "title": "Montage durch Fachbetriebe", + "description": "Handwerker aus der Region, die wir persönlich kennen." + }, + { + "icon": "user", + "title": "Ein Ansprechpartner", + "description": "Von der ersten Idee bis zur Übergabe koordiniert aus einer Hand." + } + ], + "paragraphs": [ + "Gute Einrichtung endet nicht beim Möbelstück. Deshalb arbeiten wir mit Fachbetrieben und Handwerkern aus der Region zusammen – von der Aufmaß-Erstellung über die Montage bis zu angrenzenden Gewerken.", + "Für Sie bedeutet das: ein Ansprechpartner, der die Fäden zusammenhält, statt vieler Einzelgespräche. Und Partner, die wir kennen und für deren Arbeit wir geradestehen." + ] + }, + "en": { + "title": "More than brands: our network", + "points": [ + { + "icon": "pencil-square", + "title": "Measuring & planning", + "description": "We come to you, measure up and plan together with you." + }, + { + "icon": "wrench-screwdriver", + "title": "Installation by specialists", + "description": "Craftspeople from the region whom we know personally." + }, + { + "icon": "user", + "title": "One point of contact", + "description": "Coordinated from a single source, from first idea to handover." + } + ], + "paragraphs": [ + "Good interiors do not end with the furniture. That is why we work with specialist firms and craftspeople from the region – from measuring up and installation to adjacent trades.", + "For you that means one point of contact who keeps things together, instead of many separate conversations. And partners we know and whose work we stand behind." + ] + } + } + }, + { + "group": "netzwerk", + "key": "broker_section", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Lifetime Vergütung für Makler", + "benefits": [ + { + "icon": "trending-up", + "title": "Lifetime-Vergütungsmodell", + "description": "Kontinuierliche Provisionen durch langfristige Kundenbeziehungen und wiederkehrende Geschäfte" + }, + { + "icon": "clock", + "title": "Schnellere Vermarktung", + "description": "Durchdachte Wohnkonzepte reduzieren die Verkaufszeit und erhöhen die Erfolgschancen" + }, + { + "icon": "target", + "title": "Qualifizierte Leads", + "description": "Vorgefilterte, interessierte Kunden durch das B2in-Portal und Premium-Mitgliedschaften" + }, + { + "icon": "award", + "title": "Premium-Positioning", + "description": "Exklusive Vermarktung hochwertiger Wohnkonzepte für anspruchsvolle Zielgruppen" + } + ], + "subtitle": "Profitieren Sie von einem revolutionären Vergütungsmodell, das über den einmaligen Verkauf hinausgeht. Bauen Sie langfristige Kundenbeziehungen auf und generieren Sie kontinuierliche Erträge.", + "card_title": "Lifetime-Vergütung", + "compensation": { + "follow_up": "1.5%", + "initial_sale": "3.5%" + }, + "compensation_text": "Kontinuierliche Erträge über die gesamte Kundenbeziehung" + }, + "en": { + "title": "Lifetime Compensation for Brokers", + "benefits": [ + { + "icon": "trending-up", + "title": "Lifetime Compensation Model", + "description": "Continuous commissions through long-term client relationships and recurring business" + }, + { + "icon": "clock", + "title": "Faster Marketing", + "description": "Well-designed living concepts reduce sales time and increase success rates" + }, + { + "icon": "target", + "title": "Qualified Leads", + "description": "Pre-filtered, interested clients through the B2in portal and premium memberships" + }, + { + "icon": "award", + "title": "Premium Positioning", + "description": "Exclusive marketing of high-quality living concepts for discerning target groups" + } + ], + "subtitle": "Benefit from a revolutionary compensation model that goes beyond the one-time sale. Build long-term client relationships and generate continuous returns.", + "card_title": "Lifetime Compensation", + "compensation": { + "follow_up": "1.5%", + "initial_sale": "3.5%" + }, + "compensation_text": "Continuous returns throughout the entire client relationship" + } + } + }, + { + "group": "netzwerk", + "key": "cabinet_partner", + "type": "json", + "order": 0, + "value": { + "de": { + "lead": "Maßgefertigte Exzellenz für höchste Ansprüche.", + "badge": "Premiumpartner", + "image": "b2in/cabinet_logo.png", + "title": "Unser Premiumpartner: CABINET Einbauschränke", + "image_alt": "CABINET Einbauschränke – Premiumpartner von B2in", + "paragraphs": [ + "Im B2in-Netzwerk setzen wir auf Qualität, die Bestand hat. Wir sind stolz darauf, CABINET als Premiumpartner in unserem Netzwerk zu präsentieren. Der CABINET Store in Bielefeld (unser physischer Ankerpunkt) steht für maßgefertigte Einbaulösungen, die Design, Funktionalität und handwerkliche Präzision perfekt vereinen.", + "Ob begehbare Kleiderschränke, smarte Raumlösungen oder exklusive Innenausbauten – CABINET liefert den Premium-Standard, den unsere Immobilien-Investoren und Entwickler für ihre High-End-Projekte fordern. Diese Partnerschaft ist ein lebendiger Beweis für unsere Philosophie: Wir verbinden internationale Immobilien mit deutscher Einrichtungsexzellenz." + ] + }, + "en": { + "lead": "Bespoke excellence for the highest standards.", + "badge": "Premium partner", + "image": "b2in/cabinet_logo.png", + "title": "Our premium partner: CABINET Built-In Wardrobes", + "image_alt": "CABINET built-in wardrobes – B2in premium partner", + "paragraphs": [ + "In the B2in ecosystem, we focus on lasting quality. We are proud to feature CABINET as a premium partner in our network. The CABINET store in Bielefeld (our physical anchor) stands for bespoke built-in solutions that unite design, functionality, and craftsmanship.", + "Whether walk-in wardrobes, smart room concepts, or exclusive interiors – CABINET delivers the premium standard our real estate investors and developers expect for high-end projects. This partnership reflects our philosophy: connecting international real estate with German interior excellence." + ] + } + } + }, + { + "group": "netzwerk", + "key": "commitment_section", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Das Vertrauen unserer Partner", + "subtitle": "Echte Meinungen von echten Partnern. Ihr Erfolg ist unser größter Ansporn.", + "testimonials": [ + { + "image": "b2in/testo-1.jpg", + "quote": "Die Zusammenarbeit mit B2in hat unsere Erwartungen übertroffen. Professionell, effizient und immer lösungsorientiert.", + "author": "Max Mustermann", + "rating": 5, + "author_title": "Möbelhersteller" + }, + { + "image": "b2in/testo-2.jpg", + "quote": "Dank der B2in-Plattform konnten wir unsere Reichweite signifikant erhöhen und neue Märkte erschließen.", + "author": "Erika Mustermann", + "rating": 5, + "author_title": "lokaler Möbelhändler" + }, + { + "image": "b2in/testo-3.jpg", + "quote": "Das B2in-Portal hat die Art, wie ich Immobilien vermarkte, revolutioniert. Das Staging wertet meine Objekte auf, und die Möbelprovision ist ein extrem attraktiver Zusatzverdienst.", + "author": "John Doe", + "rating": 5, + "author_title": "Immobilienmakler" + } + ] + }, + "en": { + "title": "The Trust of Our Partners", + "subtitle": "Real opinions from real partners. Your success is our greatest motivation.", + "testimonials": [ + { + "image": "b2in/testo-1.jpg", + "quote": "Working with B2in has exceeded our expectations. Professional, efficient, and always solution-oriented.", + "author": "Max Mustermann", + "rating": 5, + "author_title": "Furniture Manufacturer" + }, + { + "image": "b2in/testo-2.jpg", + "quote": "Thanks to the B2in platform, we were able to significantly increase our reach and tap into new markets.", + "author": "Erika Mustermann", + "rating": 5, + "author_title": "Local Furniture Retailer" + }, + { + "image": "b2in/testo-3.jpg", + "quote": "The B2in portal has revolutionized the way I market real estate. The staging enhances my properties, and the furniture commission is an extremely attractive additional income.", + "author": "John Doe", + "rating": 5, + "author_title": "Real Estate Broker" + } + ] + } + } + }, + { + "group": "netzwerk", + "key": "cta", + "type": "json", + "order": 0, + "value": { + "de": { + "text": "Ob als Fachhändler, Hersteller, Makler oder Entwickler – kontaktieren Sie uns für eine Vorab-Registrierung und erfahren Sie als Erste, wenn unser Netzwerk live geht.", + "title": "Interesse an einer Partnerschaft?", + "button_link": "/contact", + "button_text": "Kontakt aufnehmen" + }, + "en": { + "text": "Whether as a specialist retailer, manufacturer, broker, or developer – contact us for pre-registration and be among the first to know when our network goes live.", + "title": "Interested in a Partnership?", + "button_link": "/contact", + "button_text": "Get in Touch" + } + } + }, + { + "group": "netzwerk", + "key": "dark_stats_section", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "accommodation-2.webp", + "stats": [ + { + "text": "Years of Experience", + "number": "17+" + }, + { + "text": "Happy Guests", + "number": "2M" + } + ], + "title": "Economically Sound and Well-
Friendly Service for
Families and Their
Precious Belongings", + "features": [ + { + "title": "Top Consultation", + "subtitle": "Expert guidance" + }, + { + "title": "Finest Meal", + "subtitle": "Gourmet dining" + }, + { + "title": "Easy Tax Reduction", + "subtitle": "Cost-effective" + } + ], + "image_alt": "Luxury interior design", + "description": "We understand that every family is unique, which is why we offer personalized services tailored to meet your specific needs. From luxury amenities to budget-friendly options, we ensure every guest feels valued and comfortable." + }, + "en": { + "image": "b2in/accommodation-2.jpg", + "stats": [ + { + "text": "Years of Experience", + "number": "17+" + }, + { + "text": "Happy Guests", + "number": "2M" + } + ], + "title": "Economically Sound and Well-
Friendly Service for
Families and Their
Precious Belongings", + "features": [ + { + "title": "Top Consultation", + "subtitle": "Expert guidance" + }, + { + "title": "Finest Meal", + "subtitle": "Gourmet dining" + }, + { + "title": "Easy Tax Reduction", + "subtitle": "Cost-effective" + } + ], + "image_alt": "Luxury interior design", + "description": "We understand that every family is unique, which is why we offer personalized services tailored to meet your specific needs. From luxury amenities to budget-friendly options, we ensure every guest feels valued and comfortable." + } + } + }, + { + "group": "netzwerk", + "key": "digital_core", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Die Technologie, die diesen Kreislauf ermöglicht", + "features": [ + { + "icon": "cloud", + "title": "Maximale Zuverlässigkeit", + "icon_style": "solid", + "description": "Unsere Plattform ist jederzeit und von überall erreichbar. Sie wächst mit Ihrem Erfolg und garantiert einen stabilen Betrieb, auf den Sie sich verlassen können." + }, + { + "icon": "shield-check", + "title": "Kompromisslose Sicherheit", + "description": "Ihre Daten und die Ihrer Kunden sind unser höchstes Gut. Wir schützen sie mit modernsten Sicherheitsarchitekturen und garantieren vollsten Datenschutz." + }, + { + "icon": "squares-2x2", + "title": "Zukunftsfähige Integration", + "description": "Das B2in-Portal ist offen für die Zukunft. Es lässt sich nahtlos in andere Systeme integrieren und ist bereit für zukünftige Erweiterungen und Technologien." + }, + { + "icon": "chart-bar", + "title": "Datenbasierte Einblicke", + "icon_style": "solid", + "description": "Verfolgen Sie als Makler die Aktivitäten Ihrer Kunden oder als Lieferant die Performance Ihrer Produkte – alles in Echtzeit. Treffen Sie bessere Entscheidungen auf Basis valider Daten." + }, + { + "icon": "cpu-chip", + "title": "Intelligente Personalisierung", + "description": "Künstliche Intelligenz unterstützt Sie und Ihre Kunden – von personalisierten Einrichtungsvorschlägen bis zur Automatisierung von Prozessen für maximale Effizienz." + }, + { + "icon": "users", + "title": "Exzellente User Experience", + "icon_style": "solid", + "description": "Unsere Plattform ist für maximale Geschwindigkeit optimiert und bietet auf jedem Gerät – vom Desktop bis zum Smartphone – eine intuitive und flüssige Bedienung." + } + ], + "subtitle": "Unsere zentrale Plattform ist mehr als nur Technologie. Sie ist das digitale Herzstück für transparente Prozesse, datengestützte Entscheidungen und nahtlose Zusammenarbeit im gesamten Ökosystem." + }, + "en": { + "title": "The Technology That Enables This Cycle", + "features": [ + { + "icon": "cloud", + "title": "Maximum Reliability", + "icon_style": "solid", + "description": "Our platform is accessible anytime, anywhere. It grows with your success and guarantees stable operations you can rely on." + }, + { + "icon": "shield-check", + "title": "Uncompromising Security", + "description": "Your data and your clients' data are our highest priority. We protect them with state-of-the-art security architectures and guarantee complete data privacy." + }, + { + "icon": "squares-2x2", + "title": "Future-Proof Integration", + "description": "The B2in portal is open for the future. It integrates seamlessly with other systems and is ready for future expansions and technologies." + }, + { + "icon": "chart-bar", + "title": "Data-Driven Insights", + "icon_style": "solid", + "description": "Track your clients' activities as a broker or your products' performance as a supplier – all in real-time. Make better decisions based on valid data." + }, + { + "icon": "cpu-chip", + "title": "Intelligent Personalization", + "description": "Artificial intelligence supports you and your clients – from personalized interior suggestions to process automation for maximum efficiency." + }, + { + "icon": "users", + "title": "Excellent User Experience", + "icon_style": "solid", + "description": "Our platform is optimized for maximum speed and offers intuitive, fluid navigation on every device – from desktop to smartphone." + } + ], + "subtitle": "Our central platform is more than just technology. It is the digital core for transparent processes, data-driven decisions, and seamless collaboration across the entire ecosystem." + } + } + }, + { + "group": "netzwerk", + "key": "ecosystem_hero", + "type": "json", + "order": 0, + "value": { + "de": { + "hub": { + "title": "B2in Portal", + "subtitle": "Die Technologie dahinter, die das Ökosystem ermöglicht" + }, + "image": "ecosystem-hero.webp", + "stats": [ + "Exklusive Auswahl", + "Persönlicher Service", + "Werte die bleiben" + ], + "title": "Wie unser Ökosystem Wachstum für alle Partner generiert", + "features": [ + { + "icon": "globe-alt", + "title": "Immobilien", + "description": "Internationale Investments" + }, + { + "icon": "cube-transparent", + "title": "Einrichtung", + "description": "Local for Local" + }, + { + "icon": "clipboard-document-check", + "title": "Supply Chain", + "description": "Beschaffung & Kontrolle" + }, + { + "icon": "cpu-chip", + "title": "Technologie", + "description": "Digitales Herzstück" + } + ], + "subtitle": "Ein intelligentes Netzwerk, das Immobilienkäufer, lokale Fachexperten, internationale Hersteller, Makler und Entwickler nahtlos miteinander verbindet – für außergewöhnliche Immobilien- und Einrichtungserlebnisse.", + "card_text": "Die Technologie dahinter, die das Ökosystem ermöglicht", + "image_alt": "Ecosystem Hero Image", + "card_title": "B2in Portal" + }, + "en": { + "hub": { + "title": "B2in Portal", + "subtitle": "The technology behind it that enables the ecosystem" + }, + "image": "b2in/ecosystem-hero.jpg", + "stats": [ + "Exclusive Selection", + "Personal Service", + "Lasting Values" + ], + "title": "How Our Ecosystem Generates Growth for All Partners", + "features": [ + { + "icon": "globe-alt", + "title": "Real Estate", + "description": "International Investments" + }, + { + "icon": "cube-transparent", + "title": "Interior", + "description": "Local for Local" + }, + { + "icon": "clipboard-document-check", + "title": "Supply Chain", + "description": "Procurement & Control" + }, + { + "icon": "cpu-chip", + "title": "Technology", + "description": "Digital Core" + } + ], + "subtitle": "An intelligent network that seamlessly connects property buyers, local specialists, international manufacturers, brokers, and developers – for extraordinary real estate and interior experiences.", + "card_text": "The technology behind it that enables the ecosystem", + "image_alt": "Ecosystem Hero Image", + "card_title": "B2in Portal" + } + } + }, + { + "group": "netzwerk", + "key": "ecosystem_hub", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "ecosystem_hub.webp", + "title": "Im Hub trifft Local for Local auf internationale Expertise", + "image_alt": "Local for Local – lokale Expertise trifft internationale Beschaffung", + "paragraphs": [ + "Sobald ein Kunde seine Region wählt, spielt unsere Plattform ihre Stärke aus: Die \"Local First\"-Logik zeigt die Angebote der lokalen Fachexperten prominent an.", + "Ergänzt wird das Sortiment durch europäische Hersteller. Und für Immobilienentwickler liefern wir die operative Beschaffung gleich mit – vom Vertrag bis zur Qualitätskontrolle." + ], + "image_caption": "Local for Local: Lokale Expertise, internationale Reichweite", + "image_description": "Eine klare Infografik, die zeigt: [Lokales Angebot] + [Internationale Beschaffung] = Das B2in-Ökosystem." + }, + "en": { + "image": "b2in/ecosystem_hub.jpg", + "title": "In the Hub, Local for Local Meets International Expertise", + "image_alt": "Local for Local – Local expertise meets international procurement", + "paragraphs": [ + "Once a customer selects their region, our platform plays to its strengths: The \"Local First\" logic prominently displays the offerings of local specialists.", + "The range is complemented by European manufacturers. And for property developers, we deliver the operational procurement as well – from contract to quality control." + ], + "image_caption": "Local for Local: Local Expertise, International Reach", + "image_description": "A clear infographic showing: [Local Offering] + [International Procurement] = The B2in Ecosystem." + } + } + }, + { + "group": "netzwerk", + "key": "ecosystem_result", + "type": "json", + "order": 0, + "value": { + "de": { + "list": [ + { + "icon": "globe-alt", + "title": "Der Immobilienentwickler erhält einen verlässlichen Partner für Beschaffung und Qualitätskontrolle in Deutschland – transparent und termingerecht." + }, + { + "icon": "building-storefront", + "title": "Der lokale Händler gewinnt qualifizierte Kunden, die er alleine nicht erreicht hätte, und stärkt seine Position vor Ort." + }, + { + "icon": "home-modern", + "title": "Der Makler bietet seinen Kunden einen einzigartigen Mehrwert nach dem Abschluss und profitiert von attraktiven Zusatzprovisionen." + } + ], + "image": "ecosystem_result.webp", + "title": "Ein Kreislauf, in dem jeder gewinnt", + "image_alt": "Ihr Erfolg und die Partnerschaft mit B2in", + "paragraphs": [ + "In diesem Zusammenspiel entstehen klare Vorteile für jeden Teilnehmer:" + ], + "image_caption": "Ihr Erfolg und die Partnerschaft mit B2in", + "image_description": "Eine stilisierte Grafik, die zeigt, wie Ihr Erfolg und die Partnerschaft mit B2in zusammenhängen." + }, + "en": { + "list": [ + { + "icon": "globe-alt", + "title": "The property developer receives a reliable partner for procurement and quality control in Germany – transparent and on schedule." + }, + { + "icon": "building-storefront", + "title": "The local retailer gains qualified customers they couldn't have reached on their own, strengthening their local position." + }, + { + "icon": "home-modern", + "title": "The broker offers their clients a unique added value after closing and benefits from attractive additional commissions." + } + ], + "image": "b2in/ecosystem_result.jpg", + "title": "A Cycle Where Everyone Wins", + "image_alt": "Your success and the partnership with B2in", + "paragraphs": [ + "In this interplay, clear advantages emerge for every participant:" + ], + "image_caption": "Your Success and the Partnership with B2in", + "image_description": "A stylized graphic showing how your success and the partnership with B2in are interconnected." + } + } + }, + { + "group": "netzwerk", + "key": "ecosystem_start", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "ecosystem_start.webp", + "title": "Alles beginnt mit dem Moment of Need:", + "image_alt": "Der Einstieg ins Ökosystem – über den Immobilienkauf", + "paragraphs": [ + "Unser Ökosystem startet beim Kunden – genau dann, wenn er ihn braucht: beim Immobilienkauf.", + "Über den Makler erhält der Kunde Zugang zum B2in-Ökosystem. Unsere Marken style2own und stileigentum schaffen den passenden Rahmen – je nach Zielgruppe und Lebensstil." + ], + "image_caption": "Der Einstieg: Immobilienkauf als Trigger", + "image_description": "Eine stilisierte Grafik, die zeigt, wie der Immobilienkauf den Einstieg ins B2in-Ökosystem auslöst." + }, + "en": { + "image": "b2in/ecosystem_start.jpg", + "title": "Everything Begins with the Moment of Need:", + "image_alt": "The entry into the ecosystem – through the property purchase", + "paragraphs": [ + "Our ecosystem starts with the customer – exactly when they need it: at the property purchase.", + "Through the broker, the customer gains access to the B2in ecosystem. Our brands style2own and stileigentum create the right framework – tailored to the target group and lifestyle." + ], + "image_caption": "The Entry: Property Purchase as Trigger", + "image_description": "A stylized graphic showing how the property purchase triggers entry into the B2in ecosystem." + } + } + }, + { + "group": "netzwerk", + "key": "ecosystem_stats", + "type": "json", + "order": 0, + "value": { + "de": { + "stats": [ + { + "label": "Partner & Experten im Netzwerk", + "number": "1,7K+", + "description": "Wachsende Community von Entwicklern, Maklern, Händlern und Herstellern" + }, + { + "label": "Realisierte Projekte", + "number": "510+", + "description": "Immobilien- und Einrichtungsprojekte durch unser Netzwerk" + }, + { + "label": "Partner-Zufriedenheit", + "number": "98%", + "description": "Zufriedenheit über alle Ecosystem-Teilnehmer hinweg" + }, + { + "label": "Partner-Support", + "number": "24/7", + "description": "Kontinuierliche Verfügbarkeit der digitalen Infrastruktur" + } + ], + "title": "Unser Ecosystem in Zahlen", + "subtitle": "Zahlen, die die Stärke und das Vertrauen in unser vernetztes Geschäftsmodell widerspiegeln." + }, + "en": { + "stats": [ + { + "label": "Partners & Experts in the Network", + "number": "1.7K+", + "description": "Growing community of developers, brokers, retailers, and manufacturers" + }, + { + "label": "Completed Projects", + "number": "510+", + "description": "Real estate and interior projects through our network" + }, + { + "label": "Partner Satisfaction", + "number": "98%", + "description": "Satisfaction across all ecosystem participants" + }, + { + "label": "Partner Support", + "number": "24/7", + "description": "Continuous availability of the digital infrastructure" + } + ], + "title": "Our Ecosystem in Numbers", + "subtitle": "Numbers that reflect the strength and trust in our connected business model." + } + } + }, + { + "group": "netzwerk", + "key": "end_customer_section", + "type": "json", + "order": 0, + "value": { + "de": { + "tag": "Für Endkunden", + "card": { + "title": "Login-Karte", + "subtitle": "Ihr Schlüssel zu exklusiven Immobilienerlebnissen", + "member_number": "B2IN-2024-VIP", + "member_number_label": "Mitgliedsnummer" + }, + "image": "end-customer-section.webp", + "title": "Exklusive Erlebnisse für Sie", + "benefits": [ + { + "icon": "credit-card", + "title": "Exklusive Login-Karte", + "description": "Personalisierter Zugang zu ausgewählten Immobilienerlebnissen und Premium-Services" + }, + { + "icon": "star", + "title": "Personalisierte Erlebniswelt", + "description": "Maßgeschneiderte Immobilienangebote basierend auf individuellen Präferenzen und Bedürfnissen" + }, + { + "icon": "home", + "title": "Kuratierte Wohnkonzepte", + "description": "Hochwertige, durchdachte Immobilienlösungen von verifizierten Partnern" + }, + { + "icon": "shield", + "title": "Qualitätsgarantie", + "description": "Geprüfte Anbieter und standardisierte Qualitätsprozesse für maximale Sicherheit" + } + ], + "subtitle": "Mit Ihrer persönlichen Login-Karte erhalten Sie Zugang zu einer einzigartigen Erlebniswelt, die speziell auf Ihre Wohnwünsche und Lebensstil abgestimmt ist. Entdecken Sie kuratierte Immobilien und Services, die sonst nicht verfügbar sind.", + "card_text": "Ihr Schlüssel zu exklusiven Immobilienerlebnissen", + "image_alt": "End Customer Section Image", + "card_title": "Login-Karte" + }, + "en": { + "tag": "For End Customers", + "card": { + "title": "Login Card", + "subtitle": "Your key to exclusive real estate experiences", + "member_number": "B2IN-2024-VIP", + "member_number_label": "Member Number" + }, + "image": "b2in/end-customer-section.jpg", + "title": "Exclusive Experiences for You", + "benefits": [ + { + "icon": "credit-card", + "title": "Exclusive Login Card", + "description": "Personalized access to selected real estate experiences and premium services" + }, + { + "icon": "star", + "title": "Personalized Experience World", + "description": "Tailored property offerings based on individual preferences and needs" + }, + { + "icon": "home", + "title": "Curated Living Concepts", + "description": "High-quality, well-designed property solutions from verified partners" + }, + { + "icon": "shield", + "title": "Quality Guarantee", + "description": "Verified providers and standardized quality processes for maximum security" + } + ], + "subtitle": "With your personal login card, you gain access to a unique world of experiences, specially tailored to your living preferences and lifestyle. Discover curated properties and services that are otherwise unavailable.", + "card_text": "Your key to exclusive real estate experiences", + "image_alt": "End Customer Section Image", + "card_title": "Login Card" + } + } + }, + { + "group": "netzwerk", + "key": "final_commitment", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Were committed to
your comfort and
satisfaction for
unforgettable
experiences", + "author": "Robert Wilson", + "author_title": "General Manager" + }, + "en": { + "title": "We're committed to
your comfort and
satisfaction for
unforgettable
experiences", + "author": "Robert Wilson", + "author_title": "General Manager" + } + } + }, + { + "group": "netzwerk", + "key": "hero", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "b2in/ecosystem-hero.jpg", + "title": "Das B2in Netzwerk – regionale Fachexperten und starke Marken.", + "subtitle": "Wir verbinden Fachhändler aus der Region mit ausgewählten europäischen Herstellern – damit Sie vor Ort beraten werden und trotzdem Zugriff auf das gesamte Sortiment haben.", + "image_alt": "B2in Netzwerk – Einrichtung und regionale Fachexperten" + }, + "en": { + "image": "b2in/ecosystem-hero.jpg", + "title": "The B2in Ecosystem – Real Estate Meets Interior.", + "subtitle": "We are currently building the smartest local-for-local furnishing network. As a B2in real estate client, you will benefit exclusively from our closed shop in the future.", + "image_alt": "B2in Ecosystem – Interior and Real Estate" + } + } + }, + { + "group": "netzwerk", + "key": "image_break", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "b2in/ecosystem-hero.jpg", + "quote": "Wir verbinden, was zusammengehört: Immobilien und Einrichtung.", + "author": "Marcel Scheibe", + "image_alt": "B2in Netzwerk – Einrichtung und regionale Fachexperten" + }, + "en": { + "image": "b2in/ecosystem-hero.jpg", + "quote": "We connect what belongs together: real estate and interior.", + "author": "Marcel Scheibe", + "image_alt": "B2in Ecosystem – Interior and Real Estate" + } + } + }, + { + "group": "netzwerk", + "key": "immobilien_hint", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Schon jetzt verfügbar: Immobilien", + "button_link": "/immobilien", + "button_text": "Zu den Immobilien-Projekten", + "description": "Unser Immobilienbereich ist bereits aktiv. Entdecken Sie exklusive Off-Market-Projekte in Dubai mit persönlicher Begleitung durch Marcel Scheibe." + }, + "en": { + "title": "Already available: Real estate", + "button_link": "/immobilien", + "button_text": "View real estate projects", + "description": "Our real estate division is already active. Discover exclusive off-market projects in Dubai with personal guidance from Marcel Scheibe." + } + } + }, + { + "group": "netzwerk", + "key": "interior_brands", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Zwei Marken, ein Netzwerk", + "brands": [ + { + "link": "https://stileigentum.test", + "logo": "img/logos/stileigentum-logo-positiv.svg", + "name": "stileigentum", + "tagline": "Premium-Einrichtung", + "audience": "Für Kunden, die das Besondere suchen.", + "logo_width": "w-35", + "description": "Exklusive und hochwertige Einrichtungskonzepte für anspruchsvolle Kunden, die Qualität und Tradition schätzen. Handverlesene Hersteller, zeitlose Materialien, individuelle Beratung." + }, + { + "link": "https://style2own.test", + "logo": "img/logos/style2own-logo-positiv.svg", + "name": "style2own", + "tagline": "Design-Lifestyle", + "audience": "Für alle, die Design lieben.", + "logo_width": "w-28", + "description": "Moderne Einrichtungskonzepte für Young Professionals und trend-orientierte Kunden – urban, flexibel, inspirierend. Aktuelle Trends, smarte Lösungen, faire Preise." + } + ], + "subtitle": "Je nach Stil und Anspruch finden Sie Ihren Zugang über eine unserer zwei Einrichtungsmarken." + }, + "en": { + "title": "Two Brands, One Network", + "brands": [ + { + "link": "https://stileigentum.test", + "logo": "img/logos/stileigentum-logo-positiv.svg", + "name": "stileigentum", + "tagline": "Premium Interior", + "audience": "For clients seeking the extraordinary.", + "logo_width": "w-35", + "description": "Exclusive and high-quality interior concepts for discerning clients who value quality and tradition. Hand-selected manufacturers, timeless materials, individual consultation." + }, + { + "link": "https://style2own.test", + "logo": "img/logos/style2own-logo-positiv.svg", + "name": "style2own", + "tagline": "Design Lifestyle", + "audience": "For everyone who loves design.", + "logo_width": "w-28", + "description": "Modern interior concepts for young professionals and trend-oriented clients – urban, flexible, inspiring. Current trends, smart solutions, fair prices." + } + ], + "subtitle": "Depending on your style and standards, you can access our network through one of our two interior brands." + } + } + }, + { + "group": "netzwerk", + "key": "interior_concept", + "type": "json", + "order": 0, + "value": { + "de": { + "image": "ecosystem_result.webp", + "title": "Was bedeutet Local-for-Local?", + "image_alt": "Local-for-Local – Persönliche Beratung statt anonyme Plattform", + "paragraphs": [ + "Unser Einrichtungsnetzwerk setzt auf das, was online nicht geht: echte Beratung, echtes Anfassen, echte Expertise. Statt anonymer Plattformen vermitteln wir den direkten Kontakt zu lokalen Fachhändlern – Menschen, die ihr Handwerk verstehen und Sie persönlich begleiten.", + "B2in verbindet diese lokalen Experten mit einem kuratierten Netzwerk europäischer Hersteller. Das Ergebnis: Zugang zu exklusiven Marken und Sortimenten, die Sie so nicht im Internet finden – aber mit der Beratungsqualität, die nur Ihr Fachhändler vor Ort bieten kann." + ], + "image_caption": "Persönliche Einrichtungsberatung vor Ort" + }, + "en": { + "image": "b2in/ecosystem_result.jpg", + "title": "What Does Local-for-Local Mean?", + "image_alt": "Local-for-Local – Personal consultation instead of anonymous platforms", + "paragraphs": [ + "Our interior network relies on what online cannot deliver: real consultation, real touch, real expertise. Instead of anonymous platforms, we facilitate direct contact with local specialist retailers – people who understand their craft and guide you personally.", + "B2in connects these local experts with a curated network of European manufacturers. The result: Access to exclusive brands and collections that you won't find online – but with the consultation quality that only your local specialist can offer." + ], + "image_caption": "Personal interior consultation on-site" + } + } + }, + { + "group": "netzwerk", + "key": "interior_hero", + "type": "json", + "order": 0, + "value": { + "de": { + "hub": { + "title": "B2in Interior", + "subtitle": "Das Einrichtungsnetzwerk" + }, + "image": "ecosystem-hero.webp", + "stats": [ + "Lokale Fachexperten", + "Europäische Hersteller", + "Persönliche Beratung" + ], + "title": "Exklusive Einrichtung. Lokal gedacht, international vernetzt.", + "features": [ + { + "icon": "map-pin", + "title": "Local-for-Local", + "description": "Ihr Fachhändler vor Ort" + }, + { + "icon": "star", + "title": "Premium-Netzwerk", + "description": "Kuratierte Hersteller & Marken" + }, + { + "icon": "squares-2x2", + "title": "Zwei Marken", + "description": "stileigentum & style2own" + }, + { + "icon": "user", + "title": "Persönlich", + "description": "Beratung statt Algorithmus" + } + ], + "subtitle": "Das B2in-Einrichtungsnetzwerk verbindet lokale Fachexpertise mit internationalen Herstellern – persönlich, greifbar und in Ihrer Nähe.", + "card_text": "Local-for-Local Einrichtungsnetzwerk", + "image_alt": "B2in Einrichtungsnetzwerk – Local-for-Local", + "card_title": "B2in Interior" + }, + "en": { + "hub": { + "title": "B2in Interior", + "subtitle": "The Interior Network" + }, + "image": "b2in/ecosystem-hero.jpg", + "stats": [ + "Local Specialists", + "European Manufacturers", + "Personal Consultation" + ], + "title": "Exclusive Furnishing. Locally Conceived, Internationally Connected.", + "features": [ + { + "icon": "map-pin", + "title": "Local-for-Local", + "description": "Your specialist retailer nearby" + }, + { + "icon": "star", + "title": "Premium Network", + "description": "Curated manufacturers & brands" + }, + { + "icon": "squares-2x2", + "title": "Two Brands", + "description": "stileigentum & style2own" + }, + { + "icon": "user", + "title": "Personal", + "description": "Consultation over algorithms" + } + ], + "subtitle": "The B2in interior network connects local expertise with international manufacturers – personal, tangible, and in your area.", + "card_text": "Local-for-Local Interior Network", + "image_alt": "B2in Interior Network – Local-for-Local", + "card_title": "B2in Interior" + } + } + }, + { + "group": "netzwerk", + "key": "interior_process", + "type": "json", + "order": 0, + "value": { + "de": { + "steps": [ + { + "title": "Beratung", + "number": "01", + "description": "Kontaktieren Sie uns oder besuchen Sie einen unserer lokalen Partner. Gemeinsam definieren wir Ihren Stil, Ihr Budget und Ihre Wünsche." + }, + { + "title": "Auswahl", + "number": "02", + "description": "Ihr Fachhändler zeigt Ihnen kuratierte Kollektionen europäischer Hersteller – zum Anfassen, nicht nur auf dem Bildschirm." + }, + { + "title": "Lieferung & Einrichtung", + "number": "03", + "description": "B2in koordiniert Logistik und Lieferung. Ihr lokaler Partner begleitet die Einrichtung bis zum letzten Detail." + } + ], + "title": "So einfach funktioniert es" + }, + "en": { + "steps": [ + { + "title": "Consultation", + "number": "01", + "description": "Contact us or visit one of our local partners. Together, we define your style, budget, and preferences." + }, + { + "title": "Selection", + "number": "02", + "description": "Your specialist retailer shows you curated collections from European manufacturers – to touch, not just on a screen." + }, + { + "title": "Delivery & Setup", + "number": "03", + "description": "B2in coordinates logistics and delivery. Your local partner accompanies the setup down to the last detail." + } + ], + "title": "It's That Simple" + } + } + }, + { + "group": "netzwerk", + "key": "interior_trust", + "type": "json", + "order": 0, + "value": { + "de": { + "list": [ + { + "icon": "map-pin", + "title": "Lokale Experten – Fachhändler in Ihrer Region, die Sie persönlich beraten" + }, + { + "icon": "star", + "title": "Kuratierte Hersteller – Nur geprüfte europäische Qualitätsmarken" + }, + { + "icon": "shield-check", + "title": "Transparente Preise – Faire Konditionen ohne versteckte Aufschläge" + } + ], + "image": "MS - Rollkragen und Jacket..png", + "title": "Persönlich statt anonym", + "image_alt": "Marcel Scheibe – Das Gesicht hinter dem Einrichtungsnetzwerk", + "paragraphs": [ + "Hinter dem B2in-Einrichtungsnetzwerk steht Marcel Scheibe mit der Überzeugung, dass gute Einrichtung persönliche Beratung braucht. Kein Algorithmus ersetzt das Gespräch mit einem Experten, der Materialien kennt, Räume versteht und Ihren Stil trifft." + ], + "image_caption": "Marcel Scheibe, Gründer & CEO" + }, + "en": { + "list": [ + { + "icon": "map-pin", + "title": "Local Experts – Specialist retailers in your region who advise you personally" + }, + { + "icon": "star", + "title": "Curated Manufacturers – Only verified European quality brands" + }, + { + "icon": "shield-check", + "title": "Transparent Pricing – Fair rates with no hidden markups" + } + ], + "image": "b2in/marcel-scheibe-about.jpg", + "title": "Personal Instead of Anonymous", + "image_alt": "Marcel Scheibe – The face behind the interior network", + "paragraphs": [ + "Behind the B2in interior network stands Marcel Scheibe with the conviction that great furnishing requires personal consultation. No algorithm replaces the conversation with an expert who knows materials, understands spaces, and matches your style." + ], + "image_caption": "Marcel Scheibe, Founder & CEO" + } + } + }, + { + "group": "netzwerk", + "key": "interior_zielgruppen", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Für wen ist das Einrichtungsnetzwerk?", + "groups": [ + { + "icon": "home", + "title": "Privatpersonen", + "description": "Sie richten Ihr neues Zuhause ein und wünschen sich persönliche Beratung statt endlosem Online-Scrollen? Über unser Netzwerk finden Sie lokale Fachexperten, die Ihren Stil verstehen." + }, + { + "icon": "building-office-2", + "title": "Immobilien-Investoren", + "description": "Sie haben über B2in ein Investment getätigt? Als Immobilienkäufer erhalten Sie exklusiven Zugang zu Partner-Konditionen für die komplette Einrichtung – aus einer Hand." + }, + { + "icon": "clipboard-document-check", + "title": "Entwickler & Makler", + "description": "Sie brauchen Mustereinrichtungen, Home-Staging oder eine schlüsselfertige Ausstattung für Ihre Projekte? B2in koordiniert von der Planung bis zur Lieferung." + } + ] + }, + "en": { + "title": "Who Is the Interior Network For?", + "groups": [ + { + "icon": "home", + "title": "Private Individuals", + "description": "Furnishing your new home and looking for personal consultation instead of endless online scrolling? Through our network, you'll find local specialists who understand your style." + }, + { + "icon": "building-office-2", + "title": "Real Estate Investors", + "description": "Have you made an investment through B2in? As a property buyer, you receive exclusive access to partner rates for complete furnishing – all from one source." + }, + { + "icon": "clipboard-document-check", + "title": "Developers & Brokers", + "description": "Need model furnishings, home staging, or turnkey outfitting for your projects? B2in coordinates from planning to delivery." + } + ] + } + } + }, + { + "group": "netzwerk", + "key": "partner_benefits", + "type": "json", + "order": 0, + "value": { + "de": { + "title": "Warum Partner werden?", + "broker": { + "tag": "Für Makler", + "title": "Revolutionäres Provisionsmodell", + "benefits": [ + { + "icon": "trending-up", + "title": "Lifetime-Provisionsmodell", + "description": "Profitieren Sie von kontinuierlichen Einnahmen durch unser innovatives Vergütungssystem" + }, + { + "icon": "target", + "title": "Schnellere Vermarktung", + "description": "Durchdachte Wohnkonzepte verkürzen Vermarktungszeiten und erhöhen Ihre Erfolgsquote" + }, + { + "icon": "award", + "title": "Mehrwert für Ihre Kunden", + "description": "Bieten Sie Ihren Kunden exklusive, kuratierte Immobilienerlebnisse" + } + ], + "highlight": { + "text": "Erstprovision bis Lifetime-Vergütung", + "value": "3.5% - ∞" + } + }, + "subtitle": "Entdecken Sie die Vorteile einer Partnerschaft mit B2in und wie Sie von unserem innovativen Ecosystem profitieren können.", + "supplier": { + "tag": "Für Lieferanten", + "title": "Globale Marktchancen", + "benefits": [ + { + "icon": "globe", + "title": "Zugang zu internationalen Märkten", + "description": "Erweitern Sie Ihre Reichweite über Grenzen hinweg mit unserem globalen Netzwerk" + }, + { + "icon": "handshake", + "title": "Faire Konditionen", + "description": "Transparente und partnerschaftliche Geschäftsbedingungen für nachhaltigen Erfolg" + }, + { + "icon": "settings", + "title": "Einfache Produktverwaltung", + "description": "Intuitive Plattform für die Verwaltung und Präsentation Ihrer Produkte" + } + ], + "highlight": { + "alt": "Partner success visualization", + "text": "Erfolgreiche Partner", + "image": "b2in/accommodation-1.jpg", + "value": "500+" + } + } + }, + "en": { + "title": "Why Become a Partner?", + "broker": { + "tag": "For Brokers", + "title": "Revolutionary Commission Model", + "benefits": [ + { + "icon": "trending-up", + "title": "Lifetime Commission Model", + "description": "Benefit from continuous income through our innovative compensation system" + }, + { + "icon": "target", + "title": "Faster Marketing", + "description": "Well-designed living concepts shorten marketing times and increase your success rate" + }, + { + "icon": "award", + "title": "Added Value for Your Clients", + "description": "Offer your clients exclusive, curated real estate experiences" + } + ], + "highlight": { + "text": "Initial commission to lifetime compensation", + "value": "3.5% - ∞" + } + }, + "subtitle": "Discover the advantages of a partnership with B2in and how you can benefit from our innovative ecosystem.", + "supplier": { + "tag": "For Suppliers", + "title": "Global Market Opportunities", + "benefits": [ + { + "icon": "globe", + "title": "Access to International Markets", + "description": "Expand your reach across borders with our global network" + }, + { + "icon": "handshake", + "title": "Fair Terms", + "description": "Transparent and partnership-based business conditions for sustainable success" + }, + { + "icon": "settings", + "title": "Easy Product Management", + "description": "Intuitive platform for managing and presenting your products" + } + ], + "highlight": { + "alt": "Partner success visualization", + "text": "Successful Partners", + "image": "b2in/accommodation-1.jpg", + "value": "500+" + } + } + } + } + }, + { + "group": "netzwerk", + "key": "partner_benefits_broker", + "type": "json", + "order": 0, + "value": { + "de": { + "id": "partner-benefits-broker", + "tag": "Ihre Vorteile als Makler & Immobilienprofi", + "image": "partner-benefits-broker.webp", + "features": [ + { + "icon": "rocket-launch", + "title": "Schnellere Vermarktung durch Home Staging", + "description": "Nutzen Sie unsere kuratierten Möbel-Pakete (stileigentum&style2own), um Ihre Immobilien professionell zu inszenieren. Beschleunigen Sie den Verkaufsprozess und erzielen Sie höhere Preise." + }, + { + "icon": "gift", + "title": "Einzigartiger Service nach dem Abschluss", + "description": "Bieten Sie Ihren Käufern oder Mietern nach Vertragsunterzeichnung über unsere exklusive Login-Karte direkten Zugang zu einem kompletten Einrichtungsservice." + }, + { + "icon": "currency-euro", + "title": "Attraktives Provisionsmodell", + "description": "Profitieren Sie doppelt: Neben Ihrer klassischen Courtage erhalten Sie eine faire, lebenslange Provision auf alle Möbelumsätze, die Ihre Kunden über die Plattform generieren." + }, + { + "icon": "finger-print", + "title": "Einfaches Handling", + "description": "Unser digitales Makler-Portal macht es Ihnen leicht: Kunden einladen, Aktivitäten verfolgen und Provisionen transparent einsehen." + } + ], + "tag_icon": "home-modern", + "highlight": { + "text": "Kürzere Vermarktungszeit für mit B2in inszenierte Objekte", + "value": "-25%" + }, + "image_alt": "Partner Benefits Broker", + "tag_title": "Mehrwert für Ihre Kunden – Mehr Ertrag für Sie." + }, + "en": { + "id": "partner-benefits-broker", + "tag": "Your Benefits as a Broker & Real Estate Professional", + "image": "b2in/partner-benefits-broker.jpg", + "features": [ + { + "icon": "rocket-launch", + "title": "Faster Marketing Through Home Staging", + "description": "Use our curated furniture packages (stileigentum & style2own) to professionally stage your properties. Accelerate the sales process and achieve higher prices." + }, + { + "icon": "gift", + "title": "Unique After-Closing Service", + "description": "Offer your buyers or tenants direct access to a complete furnishing service through our exclusive login card after contract signing." + }, + { + "icon": "currency-euro", + "title": "Attractive Commission Model", + "description": "Benefit twice: In addition to your classic brokerage fee, you receive a fair, lifetime commission on all furniture sales your clients generate through the platform." + }, + { + "icon": "finger-print", + "title": "Easy Handling", + "description": "Our digital broker portal makes it easy: invite clients, track activities, and view commissions transparently." + } + ], + "tag_icon": "home-modern", + "highlight": { + "text": "Shorter marketing time for properties staged with B2in", + "value": "-25%" + }, + "image_alt": "Partner Benefits Broker", + "tag_title": "Added Value for Your Clients – More Revenue for You." + } + } + }, + { + "group": "netzwerk", + "key": "partner_benefits_developer", + "type": "json", + "order": 0, + "value": { + "de": { + "id": "partner-benefits-developer", + "tag": "Ihre Vorteile als Immobilienentwickler", + "image": "partner-benefits-developer.webp", + "features": [ + { + "icon": "document-check", + "title": "Vertragsmanagement", + "description": "Unterstützung bei der Ausarbeitung und Strukturierung von Lieferverträgen. Definition klarer Leistungs- und Qualitätsparameter, Absicherung von Zahlungs- und Lieferbedingungen." + }, + { + "icon": "shield-check", + "title": "Vertragssicherung & Durchsetzung", + "description": "Aktive Überwachung der vereinbarten Meilensteine, Eskalation auf Managementebene bei Abweichungen und konsequente Nachverfolgung offener Punkte." + }, + { + "icon": "magnifying-glass-circle", + "title": "Tracking & Qualitätskontrolle", + "description": "Laufende Produktions- und Lieferüberwachung, persönliche Kontrolle bei Bedarf und Sicherstellung termingerechter Auslieferung." + }, + { + "icon": "link", + "title": "Netzwerk & Marktkenntnis", + "description": "Direkte Anbindung an Hersteller und Entscheider in Deutschland. Wir sorgen dafür, dass Vereinbarungen nicht nur auf dem Papier bestehen, sondern tatsächlich umgesetzt werden." + } + ], + "tag_icon": "globe-alt", + "highlight": { + "text": "Transparenz, Verlässlichkeit und planbare Lieferung – ohne operative Reibungsverluste", + "value": "100%" + }, + "image_alt": "Supply-Chain-Management für Immobilienentwickler", + "tag_title": "Ihr verlängerter Arm in Deutschland." + }, + "en": { + "id": "partner-benefits-developer", + "tag": "Your Benefits as a Property Developer", + "image": "b2in/partner-benefits-developer.jpg", + "features": [ + { + "icon": "document-check", + "title": "Contract Management", + "description": "Support in drafting and structuring supply contracts. Definition of clear performance and quality parameters, securing payment and delivery terms." + }, + { + "icon": "shield-check", + "title": "Contract Enforcement", + "description": "Active monitoring of agreed milestones, escalation to management level in case of deviations, and consistent follow-up of open items." + }, + { + "icon": "magnifying-glass-circle", + "title": "Tracking & Quality Control", + "description": "Ongoing production and delivery monitoring, personal inspection when needed, and ensuring on-time delivery." + }, + { + "icon": "link", + "title": "Network & Market Knowledge", + "description": "Direct connection to manufacturers and decision-makers in Germany. We ensure that agreements don't just exist on paper but are actually implemented." + } + ], + "tag_icon": "globe-alt", + "highlight": { + "text": "Transparency, reliability, and predictable delivery – without operational friction", + "value": "100%" + }, + "image_alt": "Supply Chain Management for Property Developers", + "tag_title": "Your Extended Arm in Germany." + } + } + }, + { + "group": "netzwerk", + "key": "partner_benefits_retailer", + "type": "json", + "order": 0, + "value": { + "de": { + "id": "partner-benefits-retailer", + "tag": "Ihre Vorteile als lokaler Händler", + "image": "partner-benefits-retailer.webp", + "features": [ + { + "icon": "signal", + "title": "Digitale Reichweite", + "description": "Wir bringen Ihnen die Online-Kunden, die Sie alleine nicht erreichen. Profitieren Sie von unseren reichweitenstarken Endkunden-Marken." + }, + { + "icon": "squares-plus", + "title": "Sortiments-Erweiterung", + "description": "Ergänzen Sie Ihr Angebot mit exklusiven Herstellermarken aus unserem Portfolio – ganz ohne eigenes Lagerrisiko." + }, + { + "icon": "shield-check", + "title": "Stärkung gegen Online-Riesen", + "description": "Mit \"Local First\" stärken wir gezielt Ihre Position im Markt. Der Kunde sieht Ihr Angebot immer zuerst." + }, + { + "icon": "scale", + "title": "Faire Konditionen", + "description": "Unser Provisionsmodell ist transparent und darauf ausgelegt, dass wir nur dann verdienen, wenn Sie es auch tun." + } + ], + "tag_icon": "building-storefront", + "highlight": { + "text": "Digitale Reichweite im ersten Jahr (Durchschnitt unserer Partner)", + "value": "+35%" + }, + "image_alt": "Partner Benefits Retailer", + "tag_title": "Werden Sie zum digitalen Champion in Ihrer Region." + }, + "en": { + "id": "partner-benefits-retailer", + "tag": "Your Benefits as a Local Retailer", + "image": "b2in/partner-benefits-retailer.jpg", + "features": [ + { + "icon": "signal", + "title": "Digital Reach", + "description": "We bring you the online customers you can't reach on your own. Benefit from our high-reach consumer brands." + }, + { + "icon": "squares-plus", + "title": "Product Range Extension", + "description": "Complement your offering with exclusive manufacturer brands from our portfolio – without any inventory risk." + }, + { + "icon": "shield-check", + "title": "Protection Against Online Giants", + "description": "With \"Local First,\" we specifically strengthen your market position. The customer always sees your offering first." + }, + { + "icon": "scale", + "title": "Fair Terms", + "description": "Our commission model is transparent and designed so that we only earn when you do too." + } + ], + "tag_icon": "building-storefront", + "highlight": { + "text": "Digital reach in the first year (average of our partners)", + "value": "+35%" + }, + "image_alt": "Partner Benefits Retailer", + "tag_title": "Become the Digital Champion in Your Region." + } + } + }, + { + "group": "netzwerk", + "key": "partner_benefits_supplier", + "type": "json", + "order": 0, + "value": { + "de": { + "id": "partner-benefits-supplier", + "tag": "Ihre Vorteile als Hersteller & Marke", + "image": "partner-benefits-supplier.webp", + "features": [ + { + "icon": "eye", + "title": "Kuratierter Vertriebskanal", + "description": "Statt sich im Rauschen großer Marktplätze zu verlieren, wird Ihre Marke gezielt designaffinen Kunden in kaufkräftigen Regionen präsentiert." + }, + { + "icon": "truck", + "title": "Effiziente Logistik", + "description": "Unsere Bündel-Logistik senkt Ihre Vertriebskosten. Wir managen den Sammeltransport und die komplette Abwicklung." + }, + { + "icon": "map-pin", + "title": "Direkter Marktzugang", + "description": "Überspringen Sie den klassischen Großhandel und bauen Sie eine direkte Beziehung zu regionalen Märkten und Endkunden auf." + }, + { + "icon": "chart-bar-square", + "title": "Skalierbares Wachstum", + "description": "Starten Sie mit uns in einer Region und wachsen Sie schrittweise in weitere europäische Hubs hinein." + } + ], + "tag_icon": "building-office-2", + "highlight": { + "text": "Kuratierte regionale Hubs als neue Vertriebskanäle in Europa", + "value": "> 20" + }, + "image_alt": "Partner Benefits Supplier", + "tag_title": "Erschließen Sie neue Märkte – intelligent und kuratiert." + }, + "en": { + "id": "partner-benefits-supplier", + "tag": "Your Benefits as a Manufacturer & Brand", + "image": "b2in/partner-benefits-supplier.jpg", + "features": [ + { + "icon": "eye", + "title": "Curated Distribution Channel", + "description": "Instead of getting lost in the noise of large marketplaces, your brand is presented to design-savvy customers in affluent regions." + }, + { + "icon": "truck", + "title": "Efficient Logistics", + "description": "Our bundled logistics reduce your distribution costs. We manage consolidated shipping and complete processing." + }, + { + "icon": "map-pin", + "title": "Direct Market Access", + "description": "Skip the traditional wholesale and build a direct relationship with regional markets and end customers." + }, + { + "icon": "chart-bar-square", + "title": "Scalable Growth", + "description": "Start with us in one region and gradually expand into further European hubs." + } + ], + "tag_icon": "building-office-2", + "highlight": { + "text": "Curated regional hubs as new distribution channels in Europe", + "value": "> 20" + }, + "image_alt": "Partner Benefits Supplier", + "tag_title": "Open Up New Markets – Intelligently and Curated." + } + } + }, + { + "group": "netzwerk", + "key": "partner_card_section", + "type": "json", + "order": 0, + "value": { + "de": { + "cards": [ + { + "icon": "globe-alt", + "title": "Für Immobilienentwickler", + "button": "#partner-benefits-developer", + "button_text": "Ihre Vorteile als Entwickler", + "description": "Operative Steuerung Ihrer Beschaffung aus Deutschland – Vertragsmanagement, Qualitätskontrolle und termingerechte Lieferung." + }, + { + "icon": "building-storefront", + "title": "Für lokale Händler & Fachexperten", + "button": "#partner-benefits-retailer", + "button_text": "Ihre Vorteile als Händler", + "description": "Stärken Sie Ihr Geschäft vor Ort. Erhalten Sie Zugang zu Online-Kunden und einem exklusiven, überregionalen Sortiment." + }, + { + "icon": "building-office-2", + "title": "Für Hersteller & europäische Marken", + "button": "#partner-benefits-supplier", + "button_text": "Ihre Vorteile als Hersteller", + "description": "Erschließen Sie neue, kuratierte Vertriebskanäle in regionalen Märkten und profitieren Sie von unserer intelligenten Logistik." + }, + { + "icon": "home-modern", + "title": "Für Immobilienmakler & Bauträger", + "button": "#partner-benefits-broker", + "button_text": "Ihre Vorteile als Makler", + "description": "Bieten Sie Ihren Kunden einen einzigartigen Mehrwert, beschleunigen Sie die Vermarktung und sichern Sie sich attraktive Zusatzprovisionen." + } + ], + "title": "Welcher Partner-Typ sind Sie?", + "subtitle": "Entdecken Sie die Vorteile einer Partnerschaft mit B2in – ob im Bereich Immobilien, Einrichtung oder Supply Chain." + }, + "en": { + "cards": [ + { + "icon": "globe-alt", + "title": "For Property Developers", + "button": "#partner-benefits-developer", + "button_text": "Your Benefits as a Developer", + "description": "Operational management of your procurement from Germany – contract management, quality control, and on-time delivery." + }, + { + "icon": "building-storefront", + "title": "For Local Retailers & Specialists", + "button": "#partner-benefits-retailer", + "button_text": "Your Benefits as a Retailer", + "description": "Strengthen your local business. Gain access to online customers and an exclusive, supra-regional product range." + }, + { + "icon": "building-office-2", + "title": "For Manufacturers & European Brands", + "button": "#partner-benefits-supplier", + "button_text": "Your Benefits as a Manufacturer", + "description": "Open up new, curated distribution channels in regional markets and benefit from our intelligent logistics." + }, + { + "icon": "home-modern", + "title": "For Real Estate Brokers & Developers", + "button": "#partner-benefits-broker", + "button_text": "Your Benefits as a Broker", + "description": "Offer your clients unique added value, accelerate marketing, and secure attractive additional commissions." + } + ], + "title": "What Partner Type Are You?", + "subtitle": "Discover the benefits of a partnership with B2in – whether in real estate, interior, or supply chain." + } + } + }, + { + "group": "netzwerk", + "key": "partner_cta", + "type": "json", + "order": 0, + "value": { + "de": { + "stats": [ + { + "label": "Aktive Partner", + "number": "500+" + }, + { + "label": "Zufriedenheitsrate", + "number": "98%" + }, + { + "label": "Partner-Support", + "number": "24/7" + } + ], + "title": "Wachsen Sie mit uns", + "subtitle": "Werden Sie Teil des B2in-Netzwerks – ob als Immobilienentwickler, Einrichtungsexperte, Hersteller oder Makler. Wir verbinden die Welten, die zusammengehören.", + "small_text": "Entdecken Sie die Vorteile einer strategischen Partnerschaft mit B2in", + "button_link": "/contact", + "button_text": "Werden Sie B2in-Partner" + }, + "en": { + "stats": [ + { + "label": "Active Partners", + "number": "500+" + }, + { + "label": "Satisfaction Rate", + "number": "98%" + }, + { + "label": "Partner Support", + "number": "24/7" + } + ], + "title": "Grow With Us", + "subtitle": "Become part of the B2in network – whether as a property developer, interior specialist, manufacturer, or broker. We connect the worlds that belong together.", + "small_text": "Discover the benefits of a strategic partnership with B2in", + "button_link": "/contact", + "button_text": "Become a B2in Partner" + } + } + }, + { + "group": "netzwerk", + "key": "partner_hero", + "type": "json", + "order": 0, + "value": { + "de": { + "hub": { + "title": "Partner Network", + "subtitle": "Werden Sie Teil unseres Ecosystems" + }, + "image": "partner-hero.webp", + "title": "Für Entwickler & Partner", + "subtitle": "Ob Immobilienentwickler, lokaler Einrichtungsexperte, europäische Marke oder Makler – B2in ist das Netzwerk, das Ihr Geschäft mit den richtigen Partnern und Kunden verbindet.", + "card_text": "Werden Sie Teil unseres Ecosystems", + "image_alt": "Partner Hero Image", + "card_title": "Partner Network", + "partner_types": [ + { + "icon": "globe-alt", + "title": "Immobilienentwickler", + "description": "Supply-Chain-Management aus Deutschland" + }, + { + "icon": "building-office-2", + "title": "Hersteller & Marken", + "description": "Kuratierter Marktzugang, intelligente Logistik" + }, + { + "icon": "building-storefront", + "title": "Lokale Händler", + "description": "Digitale Reichweite, exklusives Sortiment" + }, + { + "icon": "home-modern", + "title": "Makler & Bauträger", + "description": "Mehrwert für Kunden, Zusatzertrag für Sie" + } + ], + "connection_points": [ + { + "name": "Makler", + "subtext": "Lifetime-Modell" + }, + { + "name": "Lieferanten", + "subtext": "Global Markets" + }, + { + "name": "Erfolg", + "subtext": "Messbare Ziele" + }, + { + "name": "Qualität", + "subtext": "Premium Standards" + } + ] + }, + "en": { + "hub": { + "title": "Partner Network", + "subtitle": "Become Part of Our Ecosystem" + }, + "image": "b2in/partner-hero.jpg", + "title": "For Developers & Partners", + "subtitle": "Whether property developer, local interior specialist, European brand, or broker – B2in is the network that connects your business with the right partners and clients.", + "card_text": "Become Part of Our Ecosystem", + "image_alt": "Partner Hero Image", + "card_title": "Partner Network", + "partner_types": [ + { + "icon": "globe-alt", + "title": "Property Developers", + "description": "Supply chain management from Germany" + }, + { + "icon": "building-office-2", + "title": "Manufacturers & Brands", + "description": "Curated market access, intelligent logistics" + }, + { + "icon": "building-storefront", + "title": "Local Retailers", + "description": "Digital reach, exclusive product range" + }, + { + "icon": "home-modern", + "title": "Brokers & Developers", + "description": "Added value for clients, additional income for you" + } + ], + "connection_points": [ + { + "name": "Brokers", + "subtext": "Lifetime Model" + }, + { + "name": "Suppliers", + "subtext": "Global Markets" + }, + { + "name": "Success", + "subtext": "Measurable Goals" + }, + { + "name": "Quality", + "subtext": "Premium Standards" + } + ] + } + } + }, + { + "group": "netzwerk", + "key": "partner_process", + "type": "json", + "order": 0, + "value": { + "de": { + "cta": { + "title": "Bereit für den nächsten Schritt?", + "subtitle": "Werden Sie noch heute Teil des B2in Ecosystems und profitieren Sie von innovativen Geschäftsmodellen und nachhaltigen Erfolgsstrategien.", + "button_link": "/contact", + "button_text": "Jetzt Partner werden" + }, + "steps": [ + { + "icon": "envelope", + "step": "1", + "image": "b2in/room-1.jpg", + "title": "Bewerben", + "description": "Erzählen Sie uns Ihre Geschichte. Füllen Sie unser kurzes Kontaktformular aus und zeigen Sie uns, was Ihre Produkte oder Ihr Geschäft auszeichnet." + }, + { + "icon": "check-circle", + "step": "2", + "image": "b2in/room-2.jpg", + "title": "Prüfung", + "description": "Wir prüfen jede Anfrage persönlich. Unser Ziel ist es, ein hochwertiges und komplementäres Netzwerk aufzubauen, von dem alle profitieren." + }, + { + "icon": "rocket-launch", + "step": "3", + "image": "b2in/room-3.jpg", + "title": "Onboarding", + "description": "Willkommen an Bord! Wir schulen Sie persönlich im Umgang mit unserem Partner-Portal und stellen sicher, dass Sie vom ersten Tag an erfolgreich sind." + } + ], + "title": "So werden Sie Partner", + "subtitle": "In nur drei einfachen Schritten werden Sie Teil des B2in Ecosystems und können von allen Vorteilen unserer Partnerschaft profitieren." + }, + "en": { + "cta": { + "title": "Ready for the Next Step?", + "subtitle": "Become part of the B2in ecosystem today and benefit from innovative business models and sustainable success strategies.", + "button_link": "/contact", + "button_text": "Become a Partner Now" + }, + "steps": [ + { + "icon": "envelope", + "step": "1", + "image": "b2in/room-1.jpg", + "title": "Apply", + "description": "Tell us your story. Fill out our short contact form and show us what sets your products or business apart." + }, + { + "icon": "check-circle", + "step": "2", + "image": "b2in/room-2.jpg", + "title": "Review", + "description": "We review every application personally. Our goal is to build a high-quality, complementary network that benefits everyone." + }, + { + "icon": "rocket-launch", + "step": "3", + "image": "b2in/room-3.jpg", + "title": "Onboarding", + "description": "Welcome aboard! We personally train you on using our partner portal and ensure you are successful from day one." + } + ], + "title": "How to Become a Partner", + "subtitle": "In just three simple steps, you become part of the B2in ecosystem and can benefit from all the advantages of our partnership." + } + } + }, + { + "group": "netzwerk", + "key": "supplier_section", + "type": "json", + "order": 0, + "value": { + "de": { + "tag": "Für Lieferanten", + "title": "Kuratierte Plattform für Anbieter", + "benefits": [ + { + "icon": "store", + "title": "Kuratierter Vertriebskanal", + "description": "Zugang zu einer exklusiven, vorqualifizierten Kundenbasis mit hohem Qualitätsanspruch" + }, + { + "icon": "settings", + "title": "Selbstverwaltung", + "description": "Vollständige Kontrolle über Produktpräsentation, Preisgestaltung und Verfügbarkeit" + }, + { + "icon": "check-circle", + "title": "Zentrale Qualitätssicherung", + "description": "Standardisierte Prozesse und Qualitätskontrollen für maximales Kundenvertrauen" + }, + { + "icon": "bar-chart", + "title": "Analytics & Insights", + "description": "Detaillierte Verkaufsanalysen und Markteinblicke für optimierte Geschäftsentscheidungen" + } + ], + "subtitle": "Werden Sie Teil eines exklusiven Netzwerks hochwertiger Anbieter. Präsentieren Sie Ihre Produkte und Services einer vorqualifizierten, kaufkräftigen Zielgruppe mit höchsten Qualitätsansprüchen.", + "dashboard": { + "stats": [ + { + "label": "Produktsichtbarkeit", + "value": "94%" + }, + { + "label": "Qualitätsbewertung", + "value": "98%" + } + ], + "title": "Anbieter-Dashboard" + } + }, + "en": { + "tag": "For Suppliers", + "title": "Curated Platform for Providers", + "benefits": [ + { + "icon": "store", + "title": "Curated Distribution Channel", + "description": "Access to an exclusive, pre-qualified customer base with high quality standards" + }, + { + "icon": "settings", + "title": "Self-Management", + "description": "Full control over product presentation, pricing, and availability" + }, + { + "icon": "check-circle", + "title": "Central Quality Assurance", + "description": "Standardized processes and quality controls for maximum customer trust" + }, + { + "icon": "bar-chart", + "title": "Analytics & Insights", + "description": "Detailed sales analytics and market insights for optimized business decisions" + } + ], + "subtitle": "Become part of an exclusive network of high-quality providers. Present your products and services to a pre-qualified, affluent audience with the highest quality standards.", + "dashboard": { + "stats": [ + { + "label": "Product Visibility", + "value": "94%" + }, + { + "label": "Quality Rating", + "value": "98%" + } + ], + "title": "Provider Dashboard" + } + } + } + }, + { + "group": "netzwerk", + "key": "supply_chain_intro", + "type": "json", + "order": 0, + "value": { + "de": { + "list": [ + { + "icon": "document-check", + "title": "Vertragsmanagement – Ausarbeitung, Strukturierung und Absicherung von Lieferverträgen" + }, + { + "icon": "shield-check", + "title": "Vertragssicherung & Durchsetzung – Meilenstein-Überwachung, Eskalation, Nachverfolgung" + }, + { + "icon": "magnifying-glass-circle", + "title": "Tracking & Qualitätskontrolle – Laufende Überwachung, persönliche Kontrolle, termingerechte Lieferung" + } + ], + "image": "marcel-scheibe-about.webp", + "title": "Supply-Chain-Management: Ihr verlängerter Arm in Deutschland.", + "image_alt": "Marcel Scheibe – Supply-Chain-Management", + "paragraphs": [ + "Für Immobilienentwickler, die Möbel oder Innenausstattung aus Deutschland beziehen möchten, fungieren wir als verlängerter Arm vor Ort – mit klarem Fokus auf Vertragssicherheit, Termintreue und Durchsetzungskraft." + ], + "image_caption": "Marcel Scheibe, Gründer & CEO" + }, + "en": { + "list": [ + { + "icon": "document-check", + "title": "Contract Management – Drafting, structuring, and securing supply contracts" + }, + { + "icon": "shield-check", + "title": "Contract Enforcement – Milestone monitoring, escalation, follow-up" + }, + { + "icon": "magnifying-glass-circle", + "title": "Tracking & Quality Control – Ongoing monitoring, personal inspection, on-time delivery" + } + ], + "image": "b2in/marcel-scheibe-about.jpg", + "title": "Supply Chain Management: Your Extended Arm in Germany.", + "image_alt": "Marcel Scheibe – Supply Chain Management", + "paragraphs": [ + "For property developers looking to source furniture or interior fittings from Germany, we act as your extended arm on the ground – with a clear focus on contractual reliability, schedule adherence, and enforcement." + ], + "image_caption": "Marcel Scheibe, Founder & CEO" + } + } + }, + { + "group": "netzwerk", + "key": "teasers", + "type": "json", + "order": 0, + "value": { + "de": { + "cards": [ + { + "icon": "squares-2x2", + "title": "Einrichtungsnetzwerk", + "status": "In Entwicklung", + "description": "Persönliche Beratung durch lokale Fachexperten, kuratierte europäische Hersteller und exklusive Konditionen für B2in-Immobilienkunden. Einrichtung, die man anfassen kann – nicht nur online bestellen." + }, + { + "icon": "building-storefront", + "title": "Für Händler & Fachhändler", + "status": "Vorab-Registrierung möglich", + "description": "Sie sind lokaler Einrichtungsexperte und möchten Teil eines Premium-Netzwerks werden? Wir verbinden Sie mit Kunden, die persönliche Beratung und Qualität schätzen." + }, + { + "icon": "globe-alt", + "title": "Für Entwickler & Marken", + "status": "Vorab-Registrierung möglich", + "description": "Deutsche Vertragssicherheit für Objekte und Projektentwicklungen: Beschaffung aus einer Hand, mit Fokus auf Termintreue, Qualitätskontrolle und Durchsetzungskraft." + } + ], + "title": "Was wir aufbauen" + }, + "en": { + "cards": [ + { + "icon": "squares-2x2", + "title": "Interior Network", + "status": "In Development", + "description": "Personal consultation by local specialists, curated European manufacturers, and exclusive rates for B2in real estate clients. Furnishing you can touch – not just order online." + }, + { + "icon": "building-storefront", + "title": "For Retailers & Specialists", + "status": "Pre-Registration Available", + "description": "Are you a local interior specialist looking to join a premium network? We connect you with clients who value personal consultation and quality." + }, + { + "icon": "globe-alt", + "title": "For Developers & Brands", + "status": "Pre-Registration Available", + "description": "German contractual reliability for international property developers. Supply chain management focused on schedule adherence, quality control, and enforcement." + } + ], + "title": "What We Are Building" + } + } + }, + { + "group": "referenzen", + "key": "display_feed", + "type": "json", + "order": 0, + "value": { + "de": { + "note": "Der Inhalt wechselt automatisch.", + "text": "Was gerade auf dem Bildschirm im Showroom läuft, sehen Sie hier live – dieselbe Ansicht, derselbe Stand.", + "title": "Aktuelles aus unserem Showroom", + "link_url": "/referenzen", + "link_text": "Zu den Referenzen", + "display_id": "", + "iframe_title": "Live-Ansicht des Showroom-Displays" + }, + "en": { + "note": "The content changes automatically.", + "text": "Whatever is currently running on the screen in the showroom is shown here live – the same view, the same state.", + "title": "Live from our showroom", + "link_url": "/referenzen", + "link_text": "See the references", + "display_id": "", + "iframe_title": "Live view of the showroom display" + } + } + }, + { + "group": "referenzen", + "key": "hero", + "type": "json", + "order": 0, + "value": { + "de": { + "text": "Hier zeigen wir Projekte, die wir tatsächlich ausgeführt haben – keine Entwürfe und keine Visualisierungen. Der Bereich wächst mit jedem Auftrag, den wir zeigen dürfen.", + "image": "", + "title": "Unsere Referenzen", + "image_alt": "B2in Interior – realisierte Projekte" + }, + "en": { + "text": "Here we show projects we have actually carried out – no drafts and no visualisations. The section grows with every project we are allowed to show.", + "image": "", + "title": "Our references", + "image_alt": "B2in Interior – completed projects" + } + } + }, + { + "group": "referenzen", + "key": "projects", + "type": "json", + "order": 0, + "value": { + "de": { + "text": "Ausgeführte Arbeiten aus unseren Aufträgen, sortiert nach Marke. Entwürfe und Visualisierungen finden Sie bewusst getrennt davon auf den Markenseiten.", + "empty": "Die ersten Projekte sind in Arbeit und erscheinen hier, sobald wir sie zeigen dürfen. Bis dahin schauen wir uns gern gemeinsam an, was für Ihre Räume möglich ist.", + "title": "Realisierte Projekte" + }, + "en": { + "text": "Work carried out for our clients, sorted by brand. Drafts and visualisations are deliberately kept separate, on the brand pages.", + "empty": "The first projects are under way and will appear here as soon as we are allowed to show them. Until then, we are happy to look at what is possible for your rooms.", + "title": "Completed projects" + } + } + } +] \ No newline at end of file diff --git a/app/Livewire/Web/Components/Sections/BenefitsSection.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/BenefitsSection.php similarity index 100% rename from app/Livewire/Web/Components/Sections/BenefitsSection.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/BenefitsSection.php diff --git a/app/Livewire/Web/Components/Sections/BrokerSection.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/BrokerSection.php similarity index 100% rename from app/Livewire/Web/Components/Sections/BrokerSection.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/BrokerSection.php diff --git a/app/Livewire/Web/Components/Sections/CardSection.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/CardSection.php similarity index 100% rename from app/Livewire/Web/Components/Sections/CardSection.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/CardSection.php diff --git a/app/Livewire/Web/Components/Sections/CommitmentSection.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/CommitmentSection.php similarity index 100% rename from app/Livewire/Web/Components/Sections/CommitmentSection.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/CommitmentSection.php diff --git a/app/Livewire/Web/Components/Sections/DarkStatsSection.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/DarkStatsSection.php similarity index 100% rename from app/Livewire/Web/Components/Sections/DarkStatsSection.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/DarkStatsSection.php diff --git a/app/Livewire/Web/Components/Sections/DigitalCore.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/DigitalCore.php similarity index 100% rename from app/Livewire/Web/Components/Sections/DigitalCore.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/DigitalCore.php diff --git a/app/Livewire/Web/Components/Sections/EcosystemHero.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/EcosystemHero.php similarity index 100% rename from app/Livewire/Web/Components/Sections/EcosystemHero.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/EcosystemHero.php diff --git a/app/Livewire/Web/Components/Sections/EcosystemStats.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/EcosystemStats.php similarity index 100% rename from app/Livewire/Web/Components/Sections/EcosystemStats.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/EcosystemStats.php diff --git a/app/Livewire/Web/Components/Sections/EndCustomerSection.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/EndCustomerSection.php similarity index 100% rename from app/Livewire/Web/Components/Sections/EndCustomerSection.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/EndCustomerSection.php diff --git a/app/Livewire/Web/Components/Sections/FinalCommitment.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/FinalCommitment.php similarity index 100% rename from app/Livewire/Web/Components/Sections/FinalCommitment.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/FinalCommitment.php diff --git a/app/Livewire/Web/Components/Sections/HeroImage.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/HeroImage.php similarity index 100% rename from app/Livewire/Web/Components/Sections/HeroImage.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/HeroImage.php diff --git a/app/Livewire/Web/Components/Sections/HeroTiles.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/HeroTiles.php similarity index 100% rename from app/Livewire/Web/Components/Sections/HeroTiles.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/HeroTiles.php diff --git a/app/Livewire/Web/Components/Sections/LeadershipTeam.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/LeadershipTeam.php similarity index 100% rename from app/Livewire/Web/Components/Sections/LeadershipTeam.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/LeadershipTeam.php diff --git a/app/Livewire/Web/Components/Sections/PartnerBenefits.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/PartnerBenefits.php similarity index 100% rename from app/Livewire/Web/Components/Sections/PartnerBenefits.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/PartnerBenefits.php diff --git a/app/Livewire/Web/Components/Sections/PartnerHero.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/PartnerHero.php similarity index 100% rename from app/Livewire/Web/Components/Sections/PartnerHero.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/PartnerHero.php diff --git a/app/Livewire/Web/Components/Sections/PartnerProcess.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/PartnerProcess.php similarity index 100% rename from app/Livewire/Web/Components/Sections/PartnerProcess.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/PartnerProcess.php diff --git a/app/Livewire/Web/Components/Sections/Portfolio.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/Portfolio.php similarity index 100% rename from app/Livewire/Web/Components/Sections/Portfolio.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/Portfolio.php diff --git a/app/Livewire/Web/Components/Sections/SpotlightsSection.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/SpotlightsSection.php similarity index 100% rename from app/Livewire/Web/Components/Sections/SpotlightsSection.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/SpotlightsSection.php diff --git a/app/Livewire/Web/Components/Sections/SupplierSection.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/SupplierSection.php similarity index 100% rename from app/Livewire/Web/Components/Sections/SupplierSection.php rename to dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Sections/SupplierSection.php diff --git a/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Ui/ContactForm.php b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Ui/ContactForm.php new file mode 100644 index 00000000..46b0df84 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/code/app/Livewire/Web/Components/Ui/ContactForm.php @@ -0,0 +1,211 @@ + */ + public array $content = []; + + /** Farbwelt der Seite (`interior` | `immobilien`). */ + public string $world = 'interior'; + + public function mount(string $world = 'interior'): void + { + $this->world = $world === 'immobilien' ? 'immobilien' : 'interior'; + $this->content = $this->loadContent(); + $this->formLoadedAt = time(); + } + + /** + * Inhalte der Welt. Die Immobilien-Welt liegt als Overlay über der Interior-Sektion: + * `contact_form_immobilien` trägt nur, was abweicht (Einstieg, Betreffe) – Adresse, + * Beschriftungen und Social Media erbt sie von `contact_form`. + * + * @return array + */ + private function loadContent(): array + { + $base = cms_theme_section('contact_form'); + $base = is_array($base) ? $base : []; + + if ($this->world !== 'immobilien') { + return $base; + } + + $overlay = cms_theme_section('contact_form_immobilien'); + + if (! is_array($overlay)) { + return $base; + } + + return array_replace_recursive($base, $overlay); + } + + /** + * Betreffe in Gruppen: Interior (mit den gepflegten Kernmarken vorneweg), Immobilien, B2in. + * Die Welt der Seite bestimmt die Reihenfolge – ihre Gruppe steht oben. + * + * Ohne `subject_groups` (aeltere CMS-Staende) faellt das Formular auf die flache Liste zurueck. + * + * @return array}> + */ + public function getSubjectGroupsProperty(): array + { + $groups = $this->content['form']['subject_groups'] ?? null; + + if (! is_array($groups) || $groups === []) { + $flat = $this->content['form']['subjects'] ?? []; + unset($flat['']); + + return $flat === [] ? [] : ['all' => ['label' => '', 'subjects' => $flat]]; + } + + $brands = []; + + foreach (CmsBrand::forFrontend() as $slug => $brand) { + $brands[$slug] = (string) ($brand['name'] ?? $slug); + } + + $out = []; + + foreach ($groups as $key => $group) { + $subjects = is_array($group['subjects'] ?? null) ? $group['subjects'] : []; + + if ($key === 'interior') { + $subjects = $brands + $subjects; + } + + $out[$key] = [ + 'label' => (string) ($group['label'] ?? ''), + 'subjects' => $subjects, + ]; + } + + $first = $this->world === 'immobilien' ? 'immobilien' : 'interior'; + + if (isset($out[$first])) { + $out = [$first => $out[$first]] + $out; + } + + return $out; + } + + /** + * Alle waehlbaren Betreffe als flache Liste (Schluessel → Beschriftung). + * + * @return array + */ + public function getSubjectsProperty(): array + { + $flat = []; + + foreach ($this->getSubjectGroupsProperty() as $group) { + $flat += $group['subjects']; + } + + return $flat; + } + + public function getSubjectPlaceholderProperty(): string + { + return (string) ($this->content['form']['subjects'][''] ?? $this->content['form']['subject_placeholder'] ?? __('ui.contact_form.subject_placeholder')); + } + + /** @return array> */ + public function getContactInfoProperty(): array + { + return $this->content['contact_info'] ?? []; + } + + /** @return array> */ + public function getSocialMediaProperty(): array + { + return $this->content['social_media']['platforms'] ?? []; + } + + public function submit(ContactFormService $service): void + { + $this->validate([ + 'firstName' => ['required', 'string', 'max:255'], + 'lastName' => ['required', 'string', 'max:255'], + 'email' => ['required', 'email:rfc', 'max:255'], + 'subject' => ['required', 'string', Rule::in(array_keys($this->subjects))], + 'message' => ['required', 'string', 'max:2000'], + 'company' => ['nullable', 'string', 'max:255'], + 'phone' => ['nullable', 'string', 'max:255'], + 'privacy' => ['accepted'], + 'website' => ['nullable', 'string', 'max:0'], + ]); + + $spamDetector = SpamDetector::fromConfig(); + $payload = [ + 'first_name' => $this->firstName, + 'last_name' => $this->lastName, + 'email' => $this->email, + 'subject' => $this->subject, + 'message' => $this->message, + 'company' => $this->company, + 'phone' => $this->phone, + 'website' => $this->website, + 'ip' => request()->ip(), + 'user_agent' => request()->userAgent(), + 'is_spam' => false, + ]; + + $payload['is_spam'] = $spamDetector->detect($payload, $this->formLoadedAt); + + $subjectLabel = $this->getSubjectsProperty()[$this->subject] ?? $this->subject; + $prefix = $this->world === 'immobilien' ? 'Kontaktanfrage B2in Immobilien' : 'Kontaktanfrage B2in'; + $subjectLine = $subjectLabel + ? $prefix.': '.$subjectLabel + : __('contact-form::contact-form.default_subject'); + $service->handle($payload, $subjectLine, 'contact-form'); + + $this->success = true; + $this->firstName = ''; + $this->lastName = ''; + $this->company = ''; + $this->email = ''; + $this->phone = ''; + $this->subject = ''; + $this->message = ''; + $this->privacy = false; + $this->website = ''; + $this->formLoadedAt = time(); + } + + public function render(): \Illuminate\View\View + { + return view('livewire.web.components.ui.contact-form'); + } +} diff --git a/dev/2026-08-28/archiv-2026-10-06/code/config-cms_section_map.php b/dev/2026-08-28/archiv-2026-10-06/code/config-cms_section_map.php new file mode 100644 index 00000000..9ac818b4 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/code/config-cms_section_map.php @@ -0,0 +1,123 @@ + [ + 'card_section' => 'partner_card_section', + ], + + 'sections' => [ + 'announcement_bar' => ['global', 'announcement_bar'], + 'announcement_bar_immobilien' => ['global', 'announcement_bar_immobilien'], + 'header' => ['global', 'header'], + 'hero_slider' => ['home', 'hero_slider'], + 'footer' => ['global', 'footer'], + 'cta_section' => ['global', 'cta_section'], + 'cta_section_immobilien' => ['global', 'cta_section_immobilien'], + 'appointment_widget' => ['global', 'appointment_widget'], + 'cta_section_portfolio' => ['global', 'cta_section_portfolio'], + + 'hero' => ['home', 'hero'], + 'audience_switch' => ['home', 'audience_switch'], + 'core_brands' => ['home', 'core_brands'], + 'origin_section' => ['home', 'origin_section'], + + 'marken_hero' => ['marken', 'hero'], + 'marken_network' => ['marken', 'network'], + 'marken_growth' => ['marken', 'growth'], + 'marken_cta' => ['marken', 'cta'], + 'brand_craft' => ['marken', 'craft'], + + 'referenzen_hero' => ['referenzen', 'hero'], + 'reference_projects' => ['referenzen', 'projects'], + 'display_feed' => ['referenzen', 'display_feed'], + 'sponsoring' => ['home', 'sponsoring'], + 'immobilien_teaser' => ['home', 'immobilien_teaser'], + 'founder_bar' => ['home', 'founder_bar'], + 'synergie_section' => ['home', 'synergie_section'], + 'ecosystem_core' => ['home', 'ecosystem_core'], + 'vision_section' => ['home', 'vision_section'], + 'brand_worlds' => ['home', 'brand_worlds'], + 'integriertes_modell_b2in' => ['home', 'integriertes_modell_b2in'], + + 'immobilien_hero' => ['immobilien', 'hero'], + 'immobilien_hero_v2' => ['immobilien', 'hero_v2'], + 'immobilien_projects' => ['immobilien', 'projects_meta'], + 'immobilien_moebel_vorteil' => ['immobilien', 'moebel_vorteil'], + 'immobilien_trust' => ['immobilien', 'trust'], + 'immobilien_warum_dubai' => ['immobilien', 'warum_dubai'], + 'immobilien_image_break' => ['immobilien', 'image_break'], + 'immobilien_kaufprozess' => ['immobilien', 'kaufprozess'], + 'immobilien_bruecke' => ['immobilien', 'bruecke'], + 'immobilien_mindset' => ['immobilien', 'mindset'], + 'portfolio' => ['immobilien', 'portfolio'], + + 'netzwerk_hero' => ['netzwerk', 'hero'], + 'netzwerk_image_break' => ['netzwerk', 'image_break'], + 'netzwerk_teasers' => ['netzwerk', 'teasers'], + 'netzwerk_cta' => ['netzwerk', 'cta'], + 'netzwerk_cabinet_partner' => ['netzwerk', 'cabinet_partner'], + 'netzwerk_immobilien_hint' => ['netzwerk', 'immobilien_hint'], + + 'interior_hero' => ['netzwerk', 'interior_hero'], + 'interior_concept' => ['netzwerk', 'interior_concept'], + 'interior_brands' => ['netzwerk', 'interior_brands'], + 'interior_zielgruppen' => ['netzwerk', 'interior_zielgruppen'], + 'interior_process' => ['netzwerk', 'interior_process'], + 'interior_trust' => ['netzwerk', 'interior_trust'], + + 'faq' => ['faq', 'faq'], + 'faq_immobilien' => ['faq', 'faq_immobilien'], + + // Immobilien-Welt: eigene Navigation, eigenes Magazin, eigene Ueber-uns-Seite + 'header_immobilien' => ['global', 'header_immobilien'], + 'magazin_list_immobilien' => ['immobilien', 'magazin_list'], + 'immobilien_about_hero' => ['immobilien', 'about_hero'], + 'immobilien_our_story' => ['immobilien', 'our_story'], + 'immobilien_about_image_break' => ['immobilien', 'about_image_break'], + 'immobilien_our_values' => ['immobilien', 'our_values'], + + 'contact_form' => ['contact', 'contact_form'], + 'contact_form_immobilien' => ['contact', 'contact_form_immobilien'], + + 'about_hero' => ['about', 'hero'], + 'our_story' => ['about', 'our_story'], + 'about_image_break' => ['about', 'image_break'], + 'our_values' => ['about', 'our_values'], + 'leadership_team' => ['about', 'leadership_team'], + + 'broker_section' => ['netzwerk', 'broker_section'], + 'commitment_section' => ['netzwerk', 'commitment_section'], + 'dark_stats_section' => ['netzwerk', 'dark_stats_section'], + 'ecosystem_hero' => ['netzwerk', 'ecosystem_hero'], + 'ecosystem_stats' => ['netzwerk', 'ecosystem_stats'], + 'ecosystem_start' => ['netzwerk', 'ecosystem_start'], + 'ecosystem_hub' => ['netzwerk', 'ecosystem_hub'], + 'ecosystem_result' => ['netzwerk', 'ecosystem_result'], + 'end_customer_section' => ['netzwerk', 'end_customer_section'], + 'final_commitment' => ['netzwerk', 'final_commitment'], + 'digital_core' => ['netzwerk', 'digital_core'], + 'supply_chain_intro' => ['netzwerk', 'supply_chain_intro'], + + 'partner_hero' => ['netzwerk', 'partner_hero'], + 'partner_benefits' => ['netzwerk', 'partner_benefits'], + 'partner_cta' => ['netzwerk', 'partner_cta'], + 'partner_card_section' => ['netzwerk', 'partner_card_section'], + 'card_section' => ['netzwerk', 'partner_card_section'], + 'partner_benefits_developer' => ['netzwerk', 'partner_benefits_developer'], + 'partner_benefits_retailer' => ['netzwerk', 'partner_benefits_retailer'], + 'partner_benefits_supplier' => ['netzwerk', 'partner_benefits_supplier'], + 'partner_benefits_broker' => ['netzwerk', 'partner_benefits_broker'], + 'partner_process' => ['netzwerk', 'partner_process'], + 'supplier_section' => ['netzwerk', 'supplier_section'], + + 'magazin_detail' => ['magazin', 'detail'], + 'magazin_list' => ['magazin', 'list'], + ], +]; diff --git a/config/content.php b/dev/2026-08-28/archiv-2026-10-06/code/config-content.php similarity index 100% rename from config/content.php rename to dev/2026-08-28/archiv-2026-10-06/code/config-content.php diff --git a/database/seeders/NetzwerkPageCmsSeeder.php b/dev/2026-08-28/archiv-2026-10-06/code/database/seeders/NetzwerkPageCmsSeeder.php similarity index 100% rename from database/seeders/NetzwerkPageCmsSeeder.php rename to dev/2026-08-28/archiv-2026-10-06/code/database/seeders/NetzwerkPageCmsSeeder.php diff --git a/dev/2026-08-28/archiv-2026-10-06/code/immobilien-azizi-vor-lektorat.json b/dev/2026-08-28/archiv-2026-10-06/code/immobilien-azizi-vor-lektorat.json new file mode 100644 index 00000000..e4521252 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/code/immobilien-azizi-vor-lektorat.json @@ -0,0 +1,2201 @@ +{ + "meta": { + "title": "Dubai Immobilien von Azizi - kuratiert von B2in", + "description": "63 Azizi-Projekte in Dubai - persönlich für deutsche Käufer eingeordnet: Lage, Status, Preise, Zahlungsplan und Exit-Logik. Kuratiert von Marcel Scheibe." + }, + "ui": { + "intro_eyebrow": "Kuratiert statt katalogisiert", + "featured_label": "Headline-Projekt", + "featured_marcel_heading": "Marcels Einschätzung", + "featured_stat_price": "Preis", + "featured_stat_handover": "Übergabe", + "featured_cta_detail": ":title im Detail ansehen", + "featured_default_alt": "Headline-Projekt", + "districts_eyebrow": "Stadtteil-Kontext", + "grid_eyebrow": "Projektübersicht", + "grid_title": ":count Projekte im Vergleich", + "grid_intro": "Das wichtigste Projekt steht oben. Alle weiteren Adressen können Sie nach Käuferprofil oder Stadtteil sortieren - damit aus 63 Projekten schnell eine relevante Auswahl wird.", + "filter_categories": "Kategorien", + "filter_districts": "Stadtteile", + "filter_summary": ":categories Kategorien · :districts Stadtteil-Cluster", + "filter_count": ":count Projekte", + "card_label_buyer": "Geeignet für", + "card_label_price": "Preis / Verfügbarkeit", + "card_label_unit": "Typ", + "card_cta": "Details ansehen", + "card_aria_open": "Details zu :title öffnen", + "back_to_top": "Zurück zum Anfang der Projektübersicht", + "back_to_top_short": "Zurück zum Anfang", + "mindset_positive_pill": "Passt gut", + "mindset_negative_pill": "Lieber vorsichtig", + "mindset_positive_title": "Dubai als Wachstumsentscheidung", + "mindset_negative_title": "Dubai braucht Entscheidungskraft", + "sidebar": { + "toggle_open": "Sektionsübersicht öffnen", + "toggle_close": "Sektionsübersicht schließen", + "progress_label": "Lesefortschritt", + "sections": [ + { + "id": "intro", + "label": "Marcels Einordnung" + }, + { + "id": "featured", + "label": "Headline-Projekt" + }, + { + "id": "stadtteile", + "label": "Stadtteile" + }, + { + "id": "projekte", + "label": "Projekte" + }, + { + "id": "markt", + "label": "Marktkontext" + }, + { + "id": "prozess", + "label": "Kaufprozess" + }, + { + "id": "mindset", + "label": "Mindset-Check" + }, + { + "id": "einrichtung", + "label": "Einrichtung" + }, + { + "id": "kontakt", + "label": "Kontakt" + } + ] + }, + "modal": { + "header": "Projektdetails", + "close": "Projektfenster schließen", + "stat_price": "Preis / Verfügbarkeit", + "stat_handover": "Übergabe", + "stat_units": "Einheiten", + "section_investment": "Investment-Einordnung", + "official_description_label": "Aus dem offiziellen Azizi-Exposé (übersetzt)", + "gallery_heading": "Galerie", + "gallery_count_word": "Bilder", + "gallery_image_word": "Galerie Bild", + "gallery_zoom_suffix": "groß ansehen", + "for_whom": "Für wen eignet sich das Projekt?", + "hard_facts": "Wichtige Eckpunkte", + "source_heading": "Projektquelle", + "source_text": "Die offizielle Azizi-Projektseite dient als Quelle. Preise, Verfügbarkeit und Zahlungspläne prüfen wir vor jeder Beratung aktuell.", + "azizi_link": "Azizi-Projektseite", + "seo_link": "Projektseite öffnen", + "next_step_heading": "Nächster Schritt", + "next_step_text": "Marcel prüft aktive Einheiten, aktuellen Zahlungsplan, Floor Plans und ob Resale oder Off-Plan für Ihre Strategie sinnvoller ist. Nutzen Sie dafür die Anfrage direkt unterhalb dieser Detailansicht.", + "request_eyebrow": "Direkte Anfrage", + "request_heading": "Verfügbarkeit prüfen lassen", + "request_text": "Senden Sie Ihre Anfrage direkt zu diesem Projekt. Wir prüfen Verfügbarkeit, Zahlungsplan und passende Einheit.", + "request_submit": "Anfrage absenden" + }, + "lightbox": { + "label": "Galeriebild groß ansehen", + "close": "Galerie schließen", + "previous": "Vorheriges Bild", + "next": "Nächstes Bild" + }, + "show_page": { + "default_meta_description": "Kuratierte Dubai-Immobilie von Azizi Developments.", + "default_title": "Projekt", + "back_to_overview": "Zurück zur Projektübersicht", + "stat_price": "Preis / Verfügbarkeit", + "stat_price_fallback": "Auf Anfrage", + "stat_handover": "Übergabe", + "stat_handover_fallback": "Phase abhängig", + "stat_units": "Einheiten", + "stat_units_fallback": "Aktuell prüfen", + "stat_data_confidence": "Datenstand", + "stat_data_confidence_fallback": "Prüfen", + "section_investment": "Investment-Einordnung", + "for_whom": "Für wen eignet sich das Projekt?", + "hard_facts": "Wichtige Eckpunkte", + "source_heading": "Projektquelle", + "source_text": "Die offizielle Azizi-Projektseite dient als Quelle. Preise, Verfügbarkeit und Zahlungspläne prüfen wir vor jeder Beratung aktuell.", + "azizi_link": "Azizi-Projektseite", + "next_step_heading": "Nächster Schritt", + "next_step_text": "Marcel prüft aktive Einheiten, aktuellen Zahlungsplan, Floor Plans und ob Resale oder Off-Plan für Ihre Strategie sinnvoller ist.", + "request_cta": "Verfügbarkeit anfragen", + "process_title": "Wie B2in dieses Projekt prüft", + "process_intro": "Diese Preview trennt redaktionelle Einordnung von beweglichen Vertriebsdaten. Der Live-Stand wird immer vor einer konkreten Empfehlung geprüft.", + "process_steps": [ + { + "title": "1. Strategische Passung", + "text": "Cashflow, Eigennutzung, Wertzuwachs oder Trophy Asset." + }, + { + "title": "2. Aktive Verfügbarkeit", + "text": "Einheiten, Etagen, Views, Zahlungsplan und Resale-Angebote." + }, + { + "title": "3. Exit-Logik", + "text": "Vermietbarkeit, Haltezeit, Zielgruppe und Wiederverkauf." + } + ], + "interest_heading": "Interesse an :title?", + "interest_default_title": "diesem Projekt", + "interest_text": "Fragen Sie keine Broschüre an. Fragen Sie eine Einordnung an: Passt dieses Projekt zu Ihrer Strategie, Ihrem Budget und Ihrem Zeithorizont?", + "interest_cta_consult": "Beratung anfragen", + "interest_cta_more": "Weitere Projekte ansehen" + }, + "status_labels": { + "ready": "Sofort verfügbar", + "construction": "Im Bau", + "offplan": "Off-Plan" + }, + "confidence_labels": { + "green": "Direkt belegt", + "yellow": "Vor Livegang final prüfen", + "red": "Nur als Anfragewert nutzen" + }, + "fallbacks": { + "handover": "Phase abhängig", + "project_default": "Projekt" + } + }, + "hero": { + "eyebrow": "Dubai Immobilien", + "title": "63 Azizi-Projekte in Dubai. Persönlich eingeordnet statt nur gelistet.", + "subtitle": "Vom fertigen Al-Furjan-Bestand bis zum neuen Creek-Launch: Marcel ordnet die Azizi-Projekte nach Strategie, Bauphase, Lage und Vermietbarkeit ein. So sehen Sie nicht nur schöne Renderings, sondern die Optionen, die zu Ihrem Ziel passen.", + "image": "b2in/hero-immobilien.jpg", + "cta_primary": "Projekte entdecken", + "cta_secondary": "Beratung anfragen", + "microcopy": "Sofort verfügbar, im Bau, Off-Plan: drei klare Status-Kategorien für 63 Projekte - statt einer endlosen Liste." + }, + "intro": { + "title": "Marcel sortiert den Markt, bevor Sie entscheiden.", + "image": "b2in/marcel-scheibe.jpg", + "quote": "Dubai ist kein Markt für Bauchgefühl. Entscheidend ist, ob Lage, Status, Zahlungsplan und Exit zur eigenen Strategie passen.", + "paragraphs": [ + "Viele Projektseiten sehen auf den ersten Blick gleich aus: Renderings, Pools, Skyline, große Versprechen. Für deutsche Käufer ist aber nicht das schönste Bild entscheidend, sondern die Frage, welches Projekt zur eigenen Situation passt.", + "Diese Auswahl trennt Bestandsobjekte, Near-Handover-Projekte und langfristige Off-Plan-Thesen bewusst voneinander. So entsteht kein Katalog, sondern eine Entscheidungsarchitektur." + ] + }, + "featured": { + "slug": "azizi-creek-views-4", + "title": "Azizi Creek Views 4", + "location": "Al Jaddaf, Dubai", + "status": "NEW LAUNCH (03.03.2026)", + "price_from": "ab AED 1.125.000", + "handover": "Übergabe wird aktuell geprüft", + "image": "immobile/dubai/azizi-creek-views-4/image/05_kcP9jhA785EDzdKfsUmsGYUrRSq4GLrDxfFKnTqc.webp", + "headline": "Aktueller Launch in Al Jaddaf am Dubai Creek.", + "text": "Nur 132 Einheiten, 1-BR Apartments und ein einzelnes 3-BR Penthouse direkt am Dubai Creek. Limitiertes Angebot mit Premium-Ausstattung in einer Lage mit klarer Vermietungsstärke.", + "marcel_take": "Creek Views 4 ist mein aktueller Off-Market-Launch in Dubai. Wer einen kontrollierten, planbaren Einstieg sucht, profitiert von limitiertem Angebot, klarer Lagenlogik am Creek und kurzer Distanz zu Downtown und DXB. Ich begleite die Verfügbarkeit pro Einheit persönlich.", + "facts": [ + "Prime Waterfront Lage am Dubai Creek", + "1-BR Apartments ab AED 1.125.000", + "Einmalig verfügbare 3-BR-Penthouse-Einheit", + "Nur 132 Einheiten - bewusst limitiert", + "543 - 2.346 sqft Wohnfläche", + "Entwickler: Azizi Developments" + ] + }, + "map": { + "title": "Dubai im Überblick", + "subtitle": "Lagecluster, Status und Käuferlogik in einem Bild: Wo welche Adresse hingehört und was sie für Cashflow, Eigennutzung oder langfristigen Wertzuwachs leistet.", + "pins": [ + { + "slug": "mina", + "x": 28, + "y": 45 + }, + { + "slug": "royal-bay", + "x": 31, + "y": 47 + }, + { + "slug": "creek-views", + "x": 63, + "y": 41 + }, + { + "slug": "creek-views-ii", + "x": 65, + "y": 42 + }, + { + "slug": "azizi-riviera", + "x": 56, + "y": 55 + }, + { + "slug": "riviera-reve", + "x": 58, + "y": 57 + }, + { + "slug": "riviera-beachfront", + "x": 60, + "y": 56 + }, + { + "slug": "park-avenue", + "x": 53, + "y": 58 + }, + { + "slug": "star", + "x": 38, + "y": 68 + }, + { + "slug": "roy-mediterranean", + "x": 36, + "y": 70 + }, + { + "slug": "farishta", + "x": 40, + "y": 71 + }, + { + "slug": "azizi-grand", + "x": 46, + "y": 77 + }, + { + "slug": "beach-oasis", + "x": 51, + "y": 75 + }, + { + "slug": "azizi-creek-views-4", + "x": 64, + "y": 42 + }, + { + "slug": "monaco-mansions", + "x": 31, + "y": 86 + }, + { + "slug": "azizi-venice", + "x": 34, + "y": 87 + }, + { + "slug": "azizi-milan", + "x": 49, + "y": 63 + }, + { + "slug": "azizi-wasel", + "x": 73, + "y": 28 + }, + { + "slug": "creek-views-iii", + "x": 67, + "y": 43 + }, + { + "slug": "azizi-emerald", + "x": 66, + "y": 40 + }, + { + "slug": "azizi-vista", + "x": 53, + "y": 74 + }, + { + "slug": "azizi-ruby", + "x": 48, + "y": 63 + }, + { + "slug": "azizi-aura", + "x": 33, + "y": 62 + }, + { + "slug": "azizi-arian", + "x": 35, + "y": 61 + }, + { + "slug": "al-furjan-ready", + "x": 37, + "y": 69 + } + ] + }, + "districts": { + "title": "Stadtteile, in denen Azizi entwickelt", + "subtitle": "Bevor Sie über ein einzelnes Projekt sprechen, lohnt der Blick auf den Stadtteil: Lage und Mietmarkt entscheiden bei Dubai-Investments mehr als das einzelne Rendering. Hier finden Sie die Cluster, in die wir die Azizi-Adressen einordnen.", + "items": [ + { + "name": "Dubai South", + "projects": "Azizi Venice, Monaco Mansions", + "description": "Dubai South ist die langfristige Airport- und Quartierswette: Lagune, Villen, Mansions, Luxus-Apartments, Boutiquen, internationale Gastronomie und Opera House in einem Masterplan. Wer hier kauft, setzt auf das wachsende Quartier rund um den neuen Airport-Standort, nicht auf einen sofort fertigen Mietmarkt." + }, + { + "name": "Dubailand / Azizi Milan", + "projects": "Azizi Milan", + "description": "Azizi Milan ist eine italienisch inspirierte Fashion- und Lifestyle-Adresse nahe IMG Worlds und Global Village. Schwerpunkt sind Grünflächen, Einkaufsstraßen, Retail, Hospitality und ein langfristig angelegter Masterplan. Damit ein Lifestyle- statt reiner Yield-Case." + }, + { + "name": "Dubai Healthcare City / Al Jaddaf", + "projects": "Creek Views I, II, III, Azizi Emerald", + "description": "Al Jaddaf zwischen DXB, Dubai Festival City, Downtown und Dubai Creek hat den klassischen Vorteil zentraler Mietnachfrage. Die Creek-Views-Reihe und Azizi Emerald positionieren sich hier als moderner, zentral angebundener Wohncluster - relevant vor allem für Cashflow- und Vermietungs-Strategien." + }, + { + "name": "Dubai Studio City", + "projects": "Azizi Beach Oasis, Azizi Vista", + "description": "Studio City ist der zugänglichere Lifestyle-Cluster mit Beach-Oasis-Lagune, künstlichem Strand, zeitgenössischer Architektur und Grünflächen. Für Käufer, die ein bezahlbareres Einstiegssegment mit klarer Mietzielgruppe suchen, ohne auf Lifestyle-Charakter zu verzichten." + }, + { + "name": "Meydan", + "projects": "Azizi Riviera, Park Avenue", + "description": "Riviera ist die französisch inspirierte Waterfront-Community mit Crystal Lagoon, Promenade, zentralem Boulevard, Restaurants, Sport und Freizeit. Stärke der Lage: Community-Größe und kurze Distanz zu Downtown. Park Avenue ergänzt die Cluster-Logik mit kleineren Boutique-Adressen." + }, + { + "name": "Palm Jumeirah", + "projects": "Azizi Mina, Royal Bay", + "description": "Mina liegt auf dem östlichen Halbmond der Palm Jumeirah, in unmittelbarer Nähe zu Fünf-Sterne-Hotels und Resorts. Wer hier kauft, kauft eine etablierte Beachfront-Adresse mit Prestige und gewachsenem Resale-Markt - keine spekulative Off-Plan-These." + }, + { + "name": "Al Furjan", + "projects": "Al-Furjan-Bestand, Star, ROY Mediterranean, Farishta", + "description": "Al Furjan ist der fertige, gut angebundene Yield-Cluster: Metro-Achse, MBZ Road, Nähe zu Al Maktoum International Airport, Expo City, Jebel Ali und Dubai Marina. Studios und 1- bis 2-BR-Apartments mit etabliertem Mietmarkt - vor allem für Cashflow-Käufer interessant." + }, + { + "name": "Dubai Islands", + "projects": "Azizi Wasel", + "description": "Dubai Islands ist eine frühe Lagewette: neue Inselpositionierung mit Premium- und Waterfront-Potenzial, aber ohne fertigen Mietmarkt. Für Käufer, die bewusst die langfristige Stadtentwicklung mitspielen wollen." + }, + { + "name": "Jebel Ali", + "projects": "Azizi Aura, Azizi Arian", + "description": "Jebel Ali ist der südwestliche Wachstumskorridor entlang der Achse Richtung Dubai South. Entscheidend sind Anbindung, Nähe zu JAFZA und Business-Mieter - klassisches Yield-Segment, kein Lifestyle-Cluster." + }, + { + "name": "Jumeirah Village Circle", + "projects": "Azizi Ruby", + "description": "JVC ist ein etablierter Wohnkreis im mittleren Dubai mit breitem Mietermarkt und urbaner Alltagslogik. Über Azizi Ruby in der Auswahl vertreten - eher für Cashflow als für Trophy-Asset-Positionierung." + } + ] + }, + "categories": [ + { + "key": "ready-prestige", + "title": "Sofort verfügbar - Luxus & Prestige", + "intro": "Fertiggestellte Adressen für Käufer, die nicht auf Baufortschritt warten wollen. Verfügbarkeit läuft über den Resale-Markt." + }, + { + "key": "meydan", + "title": "Flaggschiff Meydan - Riviera & MBR City", + "intro": "Master-Planned Communities und kleinere MBR-City-Adressen rund um Crystal Lagoon, Downtown-Nähe und Lifestyle-Vermietung." + }, + { + "key": "al-furjan-yield", + "title": "Sofort vermietbar - Al-Furjan-Klassiker", + "intro": "Etablierte Bestandsobjekte mit Metro- und Straßenanbindung für klassische Yield-Strategien." + }, + { + "key": "near-handover", + "title": "Bald bezugsfertig - kurze Wartezeit bis Cashflow", + "intro": "Fortgeschrittene Bauphasen für Käufer, die Off-Plan-Vorteile mit schnellerer Vermietbarkeit verbinden wollen." + }, + { + "key": "healthcare-city", + "title": "Dubai Healthcare City - Creek & Commercial", + "intro": "Zentrale Creek-nahe Projekte zwischen Healthcare City, Downtown, Festival City und Flughafen - inklusive Commercial-Position Azizi Emerald." + }, + { + "key": "studio-city", + "title": "Dubai Studio City - Lifestyle-Einstieg", + "intro": "Beach-, Lagoon- und Studio-City-Logik für Käufer, die ein bezahlbareres Lifestyle-Segment mit klarer Mietzielgruppe suchen." + }, + { + "key": "growth-corridors", + "title": "Weitere Wachstumskorridore Dubais", + "intro": "Wachstumskorridore in Jebel Ali, JVC und Al Furjan: Lagen, die jenseits der etablierten Cluster zusätzliche Standortoptionen mit Anbindung an die großen Verkehrsachsen eröffnen." + }, + { + "key": "mega-communities", + "title": "Mega-Communities & Trophy Assets", + "intro": "Langfristige Off-Plan-Thesen: Skyline, neue Stadtteile, Dubai South, Dubai Islands und große Masterpläne." + } + ], + "projects": [ + { + "slug": "mina", + "title": "Mina", + "category": "ready-prestige", + "location": "Palm Jumeirah", + "status": "Fertiggestellt / Resale", + "status_group": "ready", + "buyer_profile": "Eigennutzer mit Palm-Präferenz, Bestandsinvestoren", + "price_from": "From AED 3.12M", + "handover": "Fertiggestellt 2021", + "units": "178 Apartments + 4 Penthouses", + "image": "immobile/dubai/mina/overview-thumbnail/mina-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/palm-jumeirah/mina", + "short": "Etablierte Palm-Adresse mit starker Lagenlogik statt klassischer Off-Plan-Wette.", + "marcel_take": "Mina ist vor allem eine Lagenentscheidung: Wer auf der Palm wohnen oder vermieten will, kauft hier eine etablierte Adresse mit Prestige und nachvollziehbarer Resale-Logik.", + "highlights": [ + "Preis: From AED 3.12M", + "Palm Jumeirah, östlicher Halbmond", + "Bestandsobjekt mit Verfügbarkeit auf Anfrage", + "Prestige-Lage für Eigennutzung oder Vermietung" + ], + "data_confidence": "yellow", + "overview_bedrooms": "1, 2 Bedrooms & 3 Bedroom Penthouse", + "official_headline": "DISCOVER THE BEAUTY OF THE ARABIAN-GULF AT MINA", + "official_description": "Revel in beachfront luxury at Mina's contemporary-designed residences, where you can savor breathtaking views from your room and feel the refreshing sea breeze.", + "official_unit_type": "1, 2 BEDROOMS & 3 BEDROOM PENTHOUSE", + "official_starting_price": "From AED 3.12M", + "official_description_de": "Erleben Sie Beachfront-Luxus in den modern gestalteten Residenzen von Mina, mit weiten Ausblicken aus jedem Zimmer und der frischen Meeresbrise direkt vor der Tür." + }, + { + "slug": "azizi-creek-views-4", + "title": "Azizi Creek Views 4", + "category": "healthcare-city", + "location": "Al Jaddaf, Dubai", + "status": "NEW LAUNCH (03.03.2026)", + "status_group": "offplan", + "buyer_profile": "Investoren mit Fokus auf Capital Appreciation und planbarem Off-Market-Einstieg", + "price_from": "ab AED 1.125.000", + "handover": "Übergabe wird aktuell geprüft", + "units": "Nur 132 Einheiten (limitiert) - 1-BR und ein 3-BR Penthouse", + "image": "immobile/dubai/azizi-creek-views-4/overview-thumbnail/azizi-creek-views-4-overview-thumbnail.webp", + "official_url": "/immobilien/azizi-creek-views-4", + "short": "Aktueller Off-Market-Launch am Dubai Creek mit nur 132 Einheiten.", + "marcel_take": "Creek Views 4 ist mein aktueller Launch in Dubai. Limitiertes Angebot, klare Lagenlogik am Creek und kurze Distanz zu Downtown und DXB. Ich begleite Verfügbarkeit und Auswahl pro Einheit persönlich.", + "highlights": [ + "Prime Waterfront Lage am Dubai Creek", + "1-BR Apartments ab AED 1.125.000", + "Einmalig verfügbare 3-BR-Penthouse-Einheit", + "Nur 132 Einheiten - bewusst limitiert", + "543 - 2.346 sqft Wohnfläche", + "Wenige Minuten bis Downtown Dubai und Burj Khalifa", + "Entwickler: Azizi Developments" + ], + "data_confidence": "green" + }, + { + "slug": "royal-bay", + "title": "Royal Bay", + "category": "ready-prestige", + "location": "Palm Jumeirah", + "status": "Fertiggestellt / Resale", + "status_group": "ready", + "buyer_profile": "Eigennutzer mit Wunsch nach Privatheit", + "price_from": "From AED 2.50M", + "handover": "Fertiggestellt", + "units": "90 Apartments + 2 Penthouses", + "image": "immobile/dubai/royal-bay/overview-thumbnail/royal-bay-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/palm-jumeirah/royal-bay", + "short": "Kleinere, privatere Palm-Jumeirah-Adresse gegenüber Mina.", + "marcel_take": "Royal Bay ist interessant, wenn Sie die Palm wollen, aber keine große Anlage. Das Projekt wirkt intimer und spricht eher Eigennutzer an.", + "highlights": [ + "Preis: From AED 2.50M", + "Palm Jumeirah", + "Bewusst kleinere Hausgemeinschaft", + "Resale-Verfügbarkeit individuell prüfen" + ], + "data_confidence": "yellow", + "overview_bedrooms": "1 & 3 BEDROOMS", + "official_headline": "A TRANQUIL HAVEN", + "official_description": "Bask in the warmth of the sun in your sanctuary at Royal Bay in Palm Jumeirah, a place cleverly angled at 45 degrees with spectacular views of the city’s skyline, the Atlantis Hotel and the Arabian Sea, designed to maximize light and provide stunning views from every room.", + "official_unit_type": "1 & 3 BEDROOMS", + "official_starting_price": "From AED 2.50M", + "official_description_de": "Royal Bay auf der Palm Jumeirah ist bewusst um 45 Grad gedreht: Das Gebäude maximiert Tageslicht und gibt aus jedem Raum einen klaren Blick auf die Skyline der Stadt, das Atlantis Hotel und das Arabische Meer frei." + }, + { + "slug": "creek-views-iii", + "title": "Creek Views III", + "category": "healthcare-city", + "location": "Dubai Healthcare City / Al Jaddaf", + "status": "Im Bau / Creek-Cluster", + "status_group": "construction", + "buyer_profile": "Käufer mit Fokus auf zentrale Creek-Lage und neuere Bauphase", + "price_from": "From AED 1.48M", + "handover": "Übergabe wird aktuell geprüft", + "units": "290 Apartments", + "image": "immobile/dubai/creek-views-iii/overview-thumbnail/creek-views-iii-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-healthcare-city/creek-views-III", + "short": "Weitere Creek-Views-Phase in zentraler Lage am Dubai Creek.", + "marcel_take": "Creek Views III ergänzt die bestehende Creek-Views-Logik um eine weitere Bauphase. Für die Beratung ist wichtig, die konkrete Verfügbarkeit und den Baufortschritt gegen Creek Views I und II abzugleichen.", + "highlights": [ + "Preis: From AED 1.48M", + "Dubai Healthcare City / Al Jaddaf", + "290 Apartments", + "Gebäudehöhe UG+B+G+2P+19", + "Nahe Dubai Creek, Downtown, Festival City und DXB" + ], + "data_confidence": "green", + "overview_bedrooms": "STUDIO, 1 & 2 BEDROOMS", + "official_headline": "ENCHANTMENT BETWEEN THE SKYLINE AND THE HORIZON", + "official_description": "Poised on the edge of the mesmerizing Dubai Creek, Creek Views III unveils a world where tradition meets modernity—offering panoramic vistas that weave Dubai's timeless charm with its futuristic skyline. Situated in the heart of Dubai Healthcare City, this residence seamlessly merges a connected lifestyle with every contemporary comfort, all cradled by nature's tranquility.", + "official_unit_type": "STUDIO, 1 & 2 BEDROOMS", + "official_starting_price": "From AED 1.48M", + "official_description_de": "Creek Views III liegt direkt am Dubai Creek im Herzen der Dubai Healthcare City und verbindet panoramaartige Ausblicke mit zentraler Anbindung. Eine Adresse, an der traditionelle Creek-Atmosphäre und die moderne Skyline der Stadt zusammentreffen." + }, + { + "slug": "azizi-emerald", + "title": "Azizi Emerald", + "category": "healthcare-city", + "location": "Dubai Healthcare City", + "status": "Commercial / Projektübersicht", + "status_group": "offplan", + "buyer_profile": "Commercial-Investoren und Käufer mit Retail-/Office-These", + "price_from": "From AED 5.28M", + "handover": "Übergabe wird aktuell geprüft", + "units": "96 Units", + "image": "immobile/dubai/azizi-emerald/overview-thumbnail/azizi-emerald-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-healthcare-city/azizi-emerald", + "short": "Commercial-Position im Healthcare-City-Cluster.", + "marcel_take": "Emerald fällt bewusst aus der Wohnlogik heraus: Es geht um Office- und Retail-Flächen in Healthcare City, also um ein anderes Nutzungs- und Risikoprofil als bei klassischen Apartments.", + "highlights": [ + "Preis: From AED 5.28M", + "Commercial-Kategorie", + "96 Units", + "Dubai Healthcare City", + "Als eigener Beratungsfall statt normale Wohnkarte behandeln" + ], + "data_confidence": "green", + "overview_bedrooms": "COMMERCIAL SPACES", + "official_headline": "YOUR GATEWAY TO SUCCESS IN DUBAI’S DYNAMIC HUB", + "official_description": "Azizi Emerald, the first exclusively commercial building from Azizi, is ideally situated in the heart of Dubai Healthcare City. This remarkable environment seamlessly combines luxury with practicality, fostering innovation and collaboration. With its strategic location, Azizi Emerald serves as a vibrant hub where businesses can thrive in a constantly evolving market. It is a premier destination that elevates your business experience to exceptional heights.", + "official_unit_type": "COMMERCIAL SPACES", + "official_starting_price": "From AED 5.28M", + "official_description_de": "Azizi Emerald ist Azizis erstes rein kommerzielles Gebäude und liegt zentral in der Dubai Healthcare City. Office- und Retail-Flächen mit strategischer Positionierung in einem etablierten Geschäftsstandort - eine Adresse für Käufer mit Commercial-These statt klassischer Wohnnutzung." + }, + { + "slug": "creek-views", + "title": "Creek Views", + "category": "ready-prestige", + "location": "Al Jaddaf / Dubai Healthcare City", + "status": "Fertiggestellt / Bestand", + "status_group": "ready", + "buyer_profile": "Cashflow-orientierte Investoren", + "price_from": "From AED 873K", + "handover": "Fertiggestellt", + "units": "634 Einheiten", + "image": "immobile/dubai/creek-views/overview-thumbnail/creek-views-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-healthcare-city/creek-views", + "short": "Zentrale Creek-Lage mit schneller Erreichbarkeit von Downtown und Flughafen.", + "marcel_take": "Creek Views ist weniger Storytelling, mehr Substanz: zentrale Lage, bestehende Nachfrage und keine lange Wartezeit bis zur Nutzung oder Vermietung.", + "highlights": [ + "Preis: From AED 873K", + "Dubai Creek ca. 2 Minuten", + "Downtown Dubai und DXB ca. 7 Minuten", + "Studios, 1- und 2-Bedroom-Apartments" + ], + "data_confidence": "green", + "overview_bedrooms": "STUDIO, 1 & 2 BEDROOMS", + "official_headline": "DISCOVER MODERN LIVING WHERE DUBAI’S PAST AND FUTURE MEET", + "official_description": "Nestled on the banks of the iconic Dubai Creek, Creek Views lays out all the capital has to offer—with panoramic views that connect Dubai’s traditional vista with its futuristic cityscape. Located close to downtown Dubai, the residence harmoniously blends a connected lifestyle with every modern convenience, all wrapped in the calm of nature’s embrace.", + "official_unit_type": "STUDIO, 1 & 2 BEDROOMS", + "official_starting_price": "From AED 873K", + "official_description_de": "Creek Views liegt direkt an den Ufern des Dubai Creek, in unmittelbarer Nähe zu Downtown Dubai. Die Wohnungen verbinden moderne Ausstattung und gute Anbindung mit dem ruhigeren Charakter der Creek-Lage - panoramaartige Sichtachsen zwischen traditionellem Creek und moderner Skyline inklusive." + }, + { + "slug": "creek-views-ii", + "title": "Creek Views II", + "category": "ready-prestige", + "location": "Al Jaddaf / Dubai Healthcare City", + "status": "Kürzlich übergeben / Bestand", + "status_group": "ready", + "buyer_profile": "Yield-Investoren und Erstkäufer", + "price_from": "From AED 914K", + "handover": "Kürzlich übergeben", + "units": "Teil des Creek-Views-Ensembles", + "image": "immobile/dubai/creek-views-ii/overview-thumbnail/creek-views-ii-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-healthcare-city/creek-views-ii", + "short": "Jüngere Ergänzung der bewährten Creek-Views-Logik.", + "marcel_take": "Gleiche Standortthese wie Creek Views, aber jünger im Bau. Für konservative Investoren ist das eine sehr nachvollziehbare Variante.", + "highlights": [ + "Preis: From AED 914K", + "DHCC und Dubai Creek", + "Bestehende Vermietungsnachfrage", + "Jüngeres Gebäude als Creek Views" + ], + "data_confidence": "green", + "overview_bedrooms": "STUDIO, 1 & 2 BEDROOMS", + "official_headline": "SETTING THE NEW BENCHMARK FOR MODERN LIVING", + "official_description": "Experience the next level of convenience, practicality, and modernism in one stunning package at Creek Views II, where every detail is meticulously crafted to redefine your living experience. Elevate your lifestyle and revel in a new standard of luxury living. Are you ready to embrace the extraordinary life at Creek Views II?", + "official_unit_type": "STUDIO, 1 & 2 BEDROOMS", + "official_starting_price": "From AED 914K", + "official_description_de": "Creek Views II setzt das Konzept der ersten Phase fort und legt den Schwerpunkt auf Komfort, durchdachte Grundrisse und zeitgemäßes Design - eine konsequente Weiterentwicklung der Creek-Views-Linie für Bewohner, die zentrale Anbindung mit moderner Wohnqualität verbinden wollen." + }, + { + "slug": "azizi-riviera", + "title": "Azizi Riviera", + "category": "meydan", + "location": "MBR City / Meydan", + "status": "Phasenweise fertiggestellt / aktiv", + "status_group": "construction", + "buyer_profile": "Renditeorientierte Erstkäufer und Lifestyle-Familien", + "price_from": "From AED 1.22M", + "handover": "Phase abhängig", + "units": "12.285 Apartments", + "image": "immobile/dubai/azizi-riviera/overview-thumbnail/azizi-riviera-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/meydan/riviera", + "short": "Azizis größte Master-Planned Community mit Crystal Lagoon.", + "marcel_take": "Riviera funktioniert doppelt: als Lifestyle-Adresse und als Renditeobjekt. Wer innerhalb der Community mehr Exklusivität will, schaut auf Beachfront oder Rêve.", + "highlights": [ + "Preis: From AED 1.22M", + "12.285 Apartments", + "2,7 km schwimmbare Crystal Lagoon", + "Downtown- und Meydan-Nähe", + "Mehrere Phasen und Produktlinien" + ], + "data_confidence": "yellow", + "overview_bedrooms": "STUDIO, 1 & 3 BEDROOMS", + "official_headline": "EVOKE THE MEDITERRANEAN EVERY DAY", + "official_description": "Embodying coastal charm, Azizi Riviera offers a unique blend of city life and waterside living. This contemporary haven hosts a wealth of amenities amidst beautifully landscaped spaces. Set against the iconic Dubai skyline, experience Azizi Riviera's cosmopolitan living harmoniously intertwined with tranquil natural beauty.", + "official_unit_type": "STUDIO, 1 & 3 BEDROOMS", + "official_starting_price": "From AED 1.22M", + "official_description_de": "Azizi Riviera verbindet Stadt- und Wasserlage in einer Großcommunity. Eine breite Palette an Annehmlichkeiten, gepflegte Außenflächen und die Sichtachse zur Skyline machen Riviera zu einer der größten zusammenhängenden Wohnentwicklungen der Region." + }, + { + "slug": "riviera-reve", + "title": "Riviera Rêve", + "category": "meydan", + "location": "MBR City / Meydan", + "status": "Off-Plan / Ultra-Luxus", + "status_group": "offplan", + "buyer_profile": "Käufer mit Wunsch nach Community plus Exklusivität", + "price_from": "From AED 2.35M", + "handover": "Phase abhängig", + "units": "5.061 Homes in 24 Gebäuden", + "image": "immobile/dubai/riviera-reve/overview-thumbnail/riviera-reve-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/meydan/riviera-reve", + "short": "Die gehobenere Linie innerhalb der Riviera-Community.", + "marcel_take": "Rêve ist sinnvoll, wenn Sie Riviera grundsätzlich überzeugt, aber nicht in einem Standardturm wohnen wollen.", + "highlights": [ + "Preis: From AED 2.35M", + "24 Ultra-Luxus-Gebäude", + "Studios bis Duplex-Penthouses", + "Premium-Positionierung innerhalb Riviera" + ], + "data_confidence": "yellow", + "overview_bedrooms": "1 & 3 BEDROOMS", + "official_headline": "EXPERIENCE LUXURY LIVING IN A DREAMLIKE LANDSCAPE", + "official_description": "More than a residence, Riviera Rêve is a destination—one that creates a five-star getaway feel through high-end, hotel-inspired design. Beyond your abode, the amenities promise to tend to your every need. And, because location is everything, this oasis of calm places Dubai’s beating heart right at your fingertips.", + "official_unit_type": "1 & 3 BEDROOMS", + "official_starting_price": "From AED 2.35M", + "official_description_de": "Riviera Rêve ist nicht nur eine Wohnadresse, sondern eine Adresse mit Hotel-Charakter: hochwertige Ausstattung, Resort-orientierte Annehmlichkeiten und die zentrale Lage in Meydan, mit kurzer Distanz zum Herzen der Stadt." + }, + { + "slug": "riviera-beachfront", + "title": "Riviera Beachfront", + "category": "meydan", + "location": "MBR City / Meydan", + "status": "Im Bau / Near Handover", + "status_group": "construction", + "buyer_profile": "Lifestyle-Käufer und Premium-Mieter-Fokus", + "price_from": "From AED 1.26M", + "handover": "Q4 2025", + "units": "555 Einheiten in drei Entwicklungen", + "image": "immobile/dubai/riviera-beachfront/overview-thumbnail/riviera-beachfront-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/meydan/riviera-beachfront", + "short": "Premium-Linie direkt am Crystal-Lagoon-Walk.", + "marcel_take": "Beachfront ist der seltene Fall: Premium-Lage innerhalb einer großen Community und gleichzeitig relativ kurze Zeit bis zur Vermietbarkeit.", + "highlights": [ + "Preis: From AED 1.26M", + "Direkte Lagoon-Lage", + "Studios, 1BR, 2BR und Retail", + "Pools, Gym, BBQ und Yoga-Spaces" + ], + "data_confidence": "yellow", + "overview_bedrooms": "1 & 2 BEDROOMS", + "official_headline": "GET BEACHFRONT LIVING IN THE CITY", + "official_description": "Amplify the resort-like ambiance with our top-tier amenities and services. Fully embrace the feeling of the French coast-inspired life with exclusive access to the pristine beaches of the crystal lagoon. Play a variety of sports, enjoy the leisure facilities and children's play areas. For your convenience, a wide selection of retail outlets, cafes, and restaurants are all within walking distance.", + "official_unit_type": "1 & 2 BEDROOMS", + "official_starting_price": "From AED 1.26M", + "official_description_de": "Riviera Beachfront verstärkt den Resort-Charakter der Riviera-Community: exklusiver Zugang zur Crystal Lagoon, Sport- und Freizeitbereiche, Spielflächen für Kinder, dazu Retail, Cafés und Restaurants in Geh-Distanz." + }, + { + "slug": "park-avenue", + "title": "Park Avenue", + "category": "meydan", + "location": "Meydan / MBR City", + "status": "Fertiggestellt / Resale", + "status_group": "ready", + "buyer_profile": "Eigennutzer und Resale-Investoren", + "price_from": "From AED 1.32M", + "handover": "2023/2024", + "units": "274 Apartments", + "image": "immobile/dubai/park-avenue/overview-thumbnail/park-avenue-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/meydan/park-avenue", + "short": "Boutique-Community in MBR City, ruhiger als Riviera.", + "marcel_take": "Park Avenue ist für Käufer spannend, die MBR City wollen, aber bewusst keine Großanlage suchen.", + "highlights": [ + "Preis: From AED 1.32M", + "274 Apartments", + "Meydan Avenue / MBR City", + "Ruhigere Community-Logik in MBR City" + ], + "data_confidence": "yellow", + "overview_bedrooms": "STUDIO, 1 & 3 BEDROOMS", + "official_headline": "EXPERIENCE URBAN LIVING AT ITS BEST", + "official_description": "Like its Manhattan namesake, Park Avenue is contemporary, sleek, and offers all the conveniences of modern-day life. This unique residence also gives you the best of both worlds—immersive community living within a beautifully landscaped space located in the heart of city life. The natural design esthetic houses a wide range of facilities backed by the iconic Dubai skyline.", + "official_unit_type": "STUDIO, 1 & 3 BEDROOMS", + "official_starting_price": "From AED 1.32M", + "official_description_de": "Park Avenue ist - wie die Manhattan-Namensgeberin - bewusst urban und schlank gehalten: zeitgemäße Architektur, gepflegte Community-Flächen und Skyline-Sichtachsen in einer der zentralsten Lagen Dubais." + }, + { + "slug": "star", + "title": "Star", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Fertiggestellt / Resale", + "status_group": "ready", + "buyer_profile": "Yield-Investoren", + "price_from": "Verfügbarkeit auf Anfrage", + "handover": "Fertiggestellt", + "units": "310 Studios, 46 1BR, 102 2BR", + "image": "immobile/dubai/star/overview-thumbnail/star-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/star", + "short": "Al-Furjan-Klassiker mit Metro-Nähe und breiter Mietzielgruppe.", + "marcel_take": "Star ist kein Spekulationsobjekt, sondern ein etablierter Al-Furjan-Case: Lage, Mietmarkt und verschiedene Wohnungstypen sind bereits greifbar.", + "highlights": [ + "Metro ca. 1 Minute", + "Dubai Marina und JBR ca. 10 Minuten", + "Pool, Gym, Sauna und Parking" + ], + "data_confidence": "green", + "official_headline": "VENTURE OUT ON A JOURNEY TO THE STARS", + "official_description": "Embark on a journey of privacy at Star in Al-Furjan, where every element of a seamless life is just moments away, featuring a choice of 310 studios, 46 one-bedroom, and 102 two-bedroom apartments.", + "official_description_de": "Star liegt im Al-Furjan-Cluster und bietet 310 Studios, 46 Ein-Zimmer- und 102 Zwei-Zimmer-Apartments. Eine Adresse mit konzentrierter Yield-Logik und etablierter Mietnachfrage." + }, + { + "slug": "roy-mediterranean", + "title": "ROY Mediterranean", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Fertiggestellt / Resale", + "status_group": "ready", + "buyer_profile": "Volumeninvestoren und Yield-Fokus", + "price_from": "Verfügbarkeit auf Anfrage", + "handover": "Fertiggestellt", + "units": "271 Apartments + Retail", + "image": "immobile/dubai/roy-mediterranean/overview-thumbnail/roy-mediterranean-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/roy-mediterranean", + "short": "Etablierte Al-Furjan-Adresse mit Retail im Erdgeschoss.", + "marcel_take": "Wenn Sie in Dubai Volumen und Liquidität im Resale-Markt suchen, gehört ROY Mediterranean zu den nachvollziehbaren Bestandsadressen.", + "highlights": [ + "Al Furjan", + "Ground-Floor-Retail", + "Bestand mit Vermietungslogik" + ], + "data_confidence": "yellow", + "official_headline": "THE CHARM OF NATURAL LIVING OR A REALM OF NATURAL WONDERS", + "official_description": "Discover the charm of natural living at Roy Mediterranean in Al-Furjan, and awaken your senses with an inspired nature-centric lifestyle and a choice of 224 studios & 47 one-bedroom apartments.", + "official_description_de": "Roy Mediterranean kombiniert in Al Furjan 224 Studios und 47 Ein-Zimmer-Apartments mit einem natur-orientierten Ambiente - klassisches Studio-Yield-Konzept in einer eingespielten Wohngegend." + }, + { + "slug": "farishta", + "title": "Farishta", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Fertiggestellt / Resale", + "status_group": "ready", + "buyer_profile": "Erstinvestoren mit niedrigem Risikoappetit", + "price_from": "Verfügbarkeit auf Anfrage", + "handover": "Fertiggestellt 2020", + "units": "Studios, 1BR, 2BR und Penthouses", + "image": "immobile/dubai/farishta/overview-thumbnail/farishta-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/farishta", + "short": "Einfacher Einstieg in eine etablierte Al-Furjan-Lage.", + "marcel_take": "Farishta ist für Erstinvestoren interessant, weil hier wenig erklärt werden muss: fertig, angebunden, bestehender Mietmarkt.", + "highlights": [ + "Zwischen SZR und SMBZ Road", + "Route-2020-/Metro-Logik", + "SharePoint mit Completion Photos und Floor Plans" + ], + "data_confidence": "green", + "official_headline": "EXPERIENCE THE UNCONVENTIONAL LIFESTYLE OF FARISHTA", + "official_description": "It's time to embrace the modern lifestyle you deserve at Azizi Farishta. Explore our selection of high-end residential apartments, featuring 137 studios, 124 one-bedroom, and 23 two-bedroom options. Each unit embodies modern living with its contemporary design and craftsmanship, offering a luxurious yet comfortable living experience.", + "official_description_de": "Azizi Farishta bietet 137 Studios, 124 Ein-Zimmer- und 23 Zwei-Zimmer-Apartments. Modernes Design und ausgewogene Ausstattung machen das Haus zu einer typischen Al-Furjan-Bestandsadresse mit etabliertem Mietmarkt." + }, + { + "slug": "azizi-grand", + "title": "Azizi Grand", + "category": "near-handover", + "location": "Dubai Sports City", + "status": "Im Bau / Near Handover", + "status_group": "construction", + "buyer_profile": "Investoren mit kurzem Anlagehorizont", + "price_from": "Aktuelle Verfügbarkeit prüfen", + "handover": "Q1 2026", + "units": "411 Apartments", + "image": "immobile/dubai/azizi-grand/overview-thumbnail/azizi-grand-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-sports-city/azizi-grand", + "short": "Fortgeschrittener Bau in Dubai Sports City.", + "marcel_take": "Grand ist interessant, weil die Wartezeit bis zur ersten Mieteinnahme überschaubar ist. Die Lage spricht Sport-, Bildungs- und Familienzielgruppen an.", + "highlights": [ + "411 Apartments", + "B+G+3P+14", + "Baufortschritt 57-67 Prozent in 2025-Updates", + "Gym, zwei Pools, Kinderspielbereiche, BBQ" + ], + "data_confidence": "yellow", + "overview_bedrooms": "STUDIO, 1 & 2 BEDROOMS" + }, + { + "slug": "beach-oasis", + "title": "Beach Oasis", + "category": "near-handover", + "location": "Dubai Studio City", + "status": "Im Bau / Phase abhängig", + "status_group": "construction", + "buyer_profile": "Junge Investoren und lifestyle-orientierte Erstkäufer", + "price_from": "From AED 881K", + "handover": "Phase abhängig", + "units": "1.416 Apartments", + "image": "immobile/dubai/beach-oasis/overview-thumbnail/beach-oasis-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/studio-city/beach-oasis", + "short": "Studio-City-Einstieg mit Lagunen- und Beach-Feeling.", + "marcel_take": "Beach Oasis bringt Lifestyle in ein bezahlbares Einstiegssegment. Wichtig ist, Studio City nicht mit Jaddaf Beach Oasis zu verwechseln.", + "highlights": [ + "Preis: From AED 881K", + "1.416 Apartments", + "Vier Residential Buildings", + "Dubai Studio City", + "Lagoon-style Pool und man-made beach" + ], + "data_confidence": "yellow", + "overview_bedrooms": "STUDIO, 1 & 2 BEDROOMS", + "official_headline": "WHERE BEACH-OASIS TRANQUILITY MEETS URBAN CHIC", + "official_description": "Unveil serene living at Beach Oasis in Studio City, where the allure of a beach-inspired retreat seamlessly merges with the vibrancy of city life, offering a contemporary haven designed for modern living with the perfect blend of tranquility and urban chic", + "official_unit_type": "STUDIO, 1 & 2 BEDROOMS", + "official_starting_price": "From AED 881K", + "official_description_de": "Beach Oasis in Studio City verbindet die Atmosphäre eines Beach-Retreats mit dem urbanen Alltag - eine zeitgenössische Wohnadresse, die Lifestyle und ruhigere Wohnatmosphäre zugleich bedient." + }, + { + "slug": "azizi-vista", + "title": "Azizi Vista", + "category": "studio-city", + "location": "Dubai Studio City", + "status": "Residential / Projektübersicht", + "status_group": "construction", + "buyer_profile": "Lifestyle-orientierte Käufer mit Studio-City-Fokus", + "price_from": "From AED 1.17M", + "handover": "Übergabe wird aktuell geprüft", + "units": "163 Apartments", + "image": "immobile/dubai/azizi-vista/overview-thumbnail/vista-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/studio-city/vista", + "short": "Kompakter Studio-City-Baustein neben Beach Oasis.", + "marcel_take": "Vista gehört in die gleiche Standortlogik wie Beach Oasis, aber mit kleinerem Volumen. Für Käufer ist der direkte Vergleich beider Studio-City-Optionen wichtiger als ein isolierter Blick auf Renderings.", + "highlights": [ + "Preis: From AED 1.17M", + "163 Apartments", + "Dubai Studio City", + "Gebäudehöhe 2B+G+8", + "Ergänzt den Beach-Oasis-Cluster" + ], + "data_confidence": "green", + "overview_bedrooms": "1 & 2 BEDROOMS", + "official_headline": "LIVE AT THE FOREFRONT OF DUBAI’S EVOLUTION", + "official_description": "A vista into the future, this residence in the heart of Dubai Studio City welcomes you. Get access to one of the capital’s fast-flourishing business hubs, a growing home for the creative industry, and the perfect haven for families and professionals who want to balance sleek serenity with connected living.", + "official_unit_type": "1 & 2 BEDROOMS", + "official_starting_price": "From AED 1.17M", + "official_description_de": "Azizi Vista liegt im Herzen der Dubai Studio City - einem stark wachsenden Business-Hub für Kreativ- und Medienindustrie. Der Cluster spricht Familien und Berufstätige an, die ruhige Wohnumgebung und gute Anbindung kombinieren wollen." + }, + { + "slug": "monaco-mansions", + "title": "Monaco Mansions", + "category": "mega-communities", + "location": "Dubai South / Azizi Venice", + "status": "Im Bau / Off-Plan", + "status_group": "offplan", + "buyer_profile": "HNI-Käufer, Familien, Trophy-Asset-Investoren", + "price_from": "From AED 45 M", + "handover": "Q4 2026, final prüfen", + "units": "109 Villas/Mansions im Azizi-Venice-Kontext", + "image": "immobile/dubai/monaco-mansions/overview-thumbnail/monaco-mansions-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-south/monaco-mansions", + "short": "Das Villen- und Mansion-Segment innerhalb der Venice-These.", + "marcel_take": "Monaco Mansions ist kein breites Investmentprodukt. Das ist eine Trophy-Asset-These für Käufer, die Venice verstehen und im obersten Segment einsteigen wollen.", + "highlights": [ + "Preis: From AED 45M", + "109 Villas/Mansions im Venice-Kontext", + "6-, 7- und 8-Bedroom Mansions", + "Teil der Azizi-Venice-Community", + "Dubai-South-Wachstumsthese" + ], + "data_confidence": "yellow", + "overview_bedrooms": "Villas", + "official_headline": "MONACO MANSIONS", + "official_description": "Introducing Monaco Mansions, where the narrative of lavishness is not merely told; it is vibrantly lived. Here, architectural grandeur marries the tranquil waves of the lagoon, crafting an existence where every moment is celebrated in royal splendour.", + "official_unit_type": "VILLAS", + "official_starting_price": "From AED 45M", + "official_description_de": "Monaco Mansions setzt auf großzügige Architektur direkt an der Lagune: eine Adresse, die bewusst auf Größe, Wasserlage und gehobenes Design ausgerichtet ist." + }, + { + "slug": "azizi-ruby", + "title": "Azizi Ruby", + "category": "growth-corridors", + "location": "Jumeirah Village Circle", + "status": "Residential / Projektübersicht", + "status_group": "construction", + "buyer_profile": "Käufer mit Fokus auf etablierten Mietermarkt und JVC-Alltagslage", + "price_from": "From AED 592K", + "handover": "Übergabe wird aktuell geprüft", + "units": "260 Apartments", + "image": "immobile/dubai/azizi-ruby/overview-thumbnail/azizi-ruby-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/jumeirah-village-circle/ruby", + "short": "JVC-Adresse mit breitem Mietermarkt im mittleren Dubai.", + "marcel_take": "Ruby bringt JVC in die Auswahl. Das ist weniger Skyline-Erzählung und mehr Alltagsmarkt: ein etablierter Wohnkreis mit breiter Mietzielgruppe und guter Vergleichbarkeit.", + "highlights": [ + "Preis: From AED 592K", + "260 Apartments", + "Jumeirah Village Circle", + "Gebäudehöhe 3B+G+5P+14", + "Als eigener Standortfilter für JVC relevant" + ], + "data_confidence": "green", + "overview_bedrooms": "STUDIO, 1, 2 & 3 BEDROOMS", + "official_headline": "A GRACEFUL PLACE TO CALL HOME", + "official_description": "Ruby adds to the vibrancy of Dubai's renowned JVC community. This modern residence embodies all the richness of this booming residential hub, complemented by excellent amenities and exceptional convenience of living. The location along the metro line is an added benefit, making it more attractive to residents for easy commute while at a desirable distance from the city", + "official_unit_type": "STUDIO, 1, 2 & 3 BEDROOMS", + "official_starting_price": "From AED 592K", + "official_description_de": "Azizi Ruby liegt im etablierten Wohnkreis JVC mit guter Metro-Anbindung und breitem Mietermarkt - eine moderne Wohnadresse für klassische Yield-Strategien im mittleren Dubai." + }, + { + "slug": "azizi-aura", + "title": "Azizi Aura", + "category": "growth-corridors", + "location": "Jebel Ali", + "status": "Residential / Projektübersicht", + "status_group": "ready", + "buyer_profile": "Käufer mit Fokus auf südwestliche Anbindung, Jebel Ali und Expo-/DWC-Achse", + "price_from": "From AED 1.33M", + "handover": "Übergabe wird aktuell geprüft", + "units": "479 Apartments", + "image": "immobile/dubai/azizi-aura/overview-thumbnail/azizi-aura-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/jebel-ali/aura", + "short": "Jebel-Ali-Wohnposition auf der Achse Richtung Dubai South.", + "marcel_take": "Aura ist ein Standortcase für Käufer, die nicht nur Downtown denken. Jebel Ali, JAFZA, Expo City und die südwestliche Wachstumsachse können für Vermietung und Alltag relevanter sein als ein klassischer Touristenblick.", + "highlights": [ + "Preis: From AED 1.33M", + "479 Apartments", + "Jebel Ali", + "Gebäudehöhe B+G+2P+17", + "Relevant für JAFZA-/Dubai-South-Achse" + ], + "data_confidence": "green", + "overview_bedrooms": "1 & 2 BEDROOMS", + "official_headline": "MIX BUSINESS WITH LEISURE, ELEGANTLY", + "official_description": "You split your life across two worlds and you need a home that helps you do so with finesse. Welcome to Aura—a game changer of a residence. This beacon of elevated living, nestled in the vibrant heart of Dubai’s JAFZA effortlessly combines comfort and adventure. With every corner echoing sophistication, Aura is more than a residence—it's the meeting point of work and leisure that ensures you thrive.", + "official_unit_type": "1 & 2 BEDROOMS", + "official_starting_price": "From AED 1.33M", + "official_description_de": "Aura liegt mitten in der JAFZA in Jebel Ali - dort, wo Arbeit und Wohnen ineinandergreifen. Eine Adresse für Käufer, deren Mieter- oder Eigennutzung an den Business-Cluster der Free Zone gebunden ist." + }, + { + "slug": "azizi-arian", + "title": "Azizi Arian", + "category": "growth-corridors", + "location": "Jebel Ali", + "status": "Residential / Projektübersicht", + "status_group": "construction", + "buyer_profile": "Investoren mit Fokus auf Jebel Ali und südwestliche Dubai-Entwicklung", + "price_from": "From AED 571K", + "handover": "Übergabe wird aktuell geprüft", + "units": "623 Apartments", + "image": "immobile/dubai/azizi-arian/overview-thumbnail/azizi-arian-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/jebel-ali/arian", + "short": "Größere Jebel-Ali-Adresse auf der Achse Richtung Dubai South.", + "marcel_take": "Arian ist im Vergleich zu Aura der größere Jebel-Ali-Case. Für B2in sollte hier besonders geprüft werden, welche Einheitstypen aktiv verfügbar sind und wie stark die Mietnachfrage aus JAFZA, Expo City und DWC wirkt.", + "highlights": [ + "Preis: From AED 571K", + "623 Apartments", + "Jebel Ali", + "Gebäudehöhe 3B+G+M+5P+17", + "Südwestlicher Wachstumskorridor" + ], + "data_confidence": "green", + "overview_bedrooms": "STUDIO, 1, 2 & 3 BEDROOMS", + "official_headline": "ASPIRATIONAL LIVING AMID DYNAMIC POSSIBILITIES", + "official_description": "Welcome to Arian, where aspirational living meets endless possibilities in one of the few freehold residential properties within JAFZA. Strategically located in Jebel Ali, the UAE’s flagship integrated business hub, Arian places you at the heart of the world’s largest matured free zone and the Middle East’s biggest port. This unparalleled location offers seamless connectivity to Dubai’s prime business, leisure, and retail destinations, supported by outstanding highway and metro access.", + "official_unit_type": "STUDIO, 1, 2 & 3 BEDROOMS", + "official_starting_price": "From AED 571K", + "official_description_de": "Arian ist eine der wenigen Freehold-Adressen direkt in der JAFZA - der größten und etabliertesten Free Zone der Region. Strategisch positioniert in Jebel Ali mit direkter Anbindung an Highway und Metro, prädestiniert für Mieter und Käufer mit Bezug zum Geschäftsstandort." + }, + { + "slug": "al-furjan-ready", + "title": "Al Furjan Ready-to-Move Portfolio", + "category": "growth-corridors", + "location": "Al Furjan", + "status": "Ready to Move In / Portfolio", + "status_group": "ready", + "buyer_profile": "Bestandskäufer mit Yield-Fokus und Bedarf an konkreter Verfügbarkeitsprüfung", + "price_from": "Verfügbarkeit auf Anfrage", + "handover": "Fertiggestellt / Ready to Move In", + "units": "5.172 Apartments", + "image": "b2in/accommodation-1.jpg", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan", + "short": "Überblick über Azizis fertige Al-Furjan-Bestandsprojekte.", + "marcel_take": "Al Furjan steht hier nicht nur für ein einzelnes Gebäude, sondern für einen fertigen Bestandscluster. Star, ROY Mediterranean und Farishta bleiben konkrete Beispiele; dieser Eintrag ordnet den gesamten Al-Furjan-Bestand ein.", + "highlights": [ + "5.172 Apartments", + "Ready to Move In", + "Nahe Metro, MBZ Road, Jebel Ali, Dubai Marina, Expo City und Al Maktoum International Airport", + "Portfolio-Logik für mehrere fertige Al-Furjan-Projekte" + ], + "data_confidence": "green" + }, + { + "slug": "azizi-venice", + "title": "Azizi Venice", + "category": "mega-communities", + "location": "Dubai South", + "status": "Im Bau / Mega-Community", + "status_group": "offplan", + "buyer_profile": "Off-Plan-Investoren mit Wachstumsthese", + "price_from": "From AED 758K", + "handover": "Phasenweise ab 2026", + "units": "34.795+ Apartments, 102 Apartment Buildings, 109 Villas", + "image": "immobile/dubai/azizi-venice/overview-thumbnail/azizi-venice-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-south/azizi-venice", + "short": "Großes Dubai-South-Quartier mit Lagoon, Cultural District und Airport-These.", + "marcel_take": "Venice ist eine langfristige Quartierswette. Wer früh einsteigt, investiert nicht nur in ein Gebäude, sondern in die Entwicklung eines neuen Dubai-South-Clusters.", + "highlights": [ + "Preis: From AED 758K", + "34.795+ Apartments", + "102 Apartment Buildings und 109 Villas", + "Crystal Lagoon, Opera House, Retail Boulevard und Hotels", + "Nahe Al Maktoum International Airport" + ], + "data_confidence": "yellow", + "overview_bedrooms": "STUDIO, 1, 2 & 3 BEDROOMS", + "official_headline": "AN OASIS OF DREAMS", + "official_description": "Dive into a world of unparalleled water-inspired living, unlike anything you've ever experienced, at Dubai's forthcoming legacy - a truly unparalleled luxury Crystal Lagoon community. Brace yourself to embark on a journey where opulence knows no boundaries, as you step into a haven of lavishness that stretches the limits of imagination. This is not just another destination it's an uncharted masterpiece, waiting to be discovered.", + "official_unit_type": "STUDIO, 1, 2 & 3 BEDROOMS", + "official_starting_price": "From AED 758K", + "official_description_de": "Azizi Venice ist eine wasserorientierte Lagunen-Community mit Fokus auf Crystal Lagoon, Strandzugang und einer durchgängig geplanten Master-Architektur. Eine langfristig angelegte Adresse mit klarem Lifestyle-Fokus." + }, + { + "slug": "azizi-milan", + "title": "Azizi Milan", + "category": "mega-communities", + "location": "Sheikh Mohammed Bin Zayed Road", + "status": "Im Bau / Masterplan", + "status_group": "offplan", + "buyer_profile": "Strategische Investoren und Portfoliodiversifikation", + "price_from": "From AED 624K", + "handover": "Phase abhängig", + "units": "100 Buildings und 80.000 Apartments", + "image": "immobile/dubai/azizi-milan/overview-thumbnail/azizi-milan-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-land/azizi-milan", + "short": "Groß angelegter Masterplan mit italienischer Design- und Fashion-Positionierung.", + "marcel_take": "Milan ist eine Quartiersentwicklung, kein schneller Flip. Der Wert entsteht über Jahre, wenn Infrastruktur, Retail und Hospitality zusammenwachsen.", + "highlights": [ + "Preis: From AED 624K", + "100 Buildings", + "80.000 Apartments", + "AED 75 Mrd. Masterplan", + "Mixed Use: Wohnen, Retail, Hospitality, Lifestyle" + ], + "data_confidence": "green", + "overview_bedrooms": "STUDIO, 1, 2 & 3 BEDROOMS", + "official_headline": "A STATEMENT OF STYLE AND AESTHETIC FLAIR", + "official_description": "Immerse yourself in the enchanting Milanese charm of Dubai's most dynamic districts. Dive into a world where rich greenery and high fashion intertwine, creating a paradise where style harmonizes with nature. Experience a destination that captivates your senses with elegance, inviting you to embark on a chic lifestyle among retail boulevards and botanical gardens. Azizi Milan is not just a residence; it’s an everlasting splendor that enriches every moment.", + "official_unit_type": "STUDIO, 1, 2 & 3 BEDROOMS", + "official_starting_price": "From AED 624K", + "official_description_de": "Azizi Milan setzt mit italienischer Inspiration auf eine Mischung aus Retail, Mode und Wohnen. Boulevards, botanische Gärten und Lifestyle-Charakter prägen den Cluster - eher Lifestyle-Adresse als reiner Yield-Case." + }, + { + "slug": "azizi-wasel", + "title": "Azizi Wasel", + "category": "mega-communities", + "location": "Dubai Islands", + "status": "Off-Plan / New Launch", + "status_group": "offplan", + "buyer_profile": "Off-Plan-Investoren mit Insel-These", + "price_from": "From AED 1.68M", + "handover": "Q2 2027 bis Q1 2028 je Quelle, final prüfen", + "units": "221 Apartments", + "image": "immobile/dubai/azizi-wasel/overview-thumbnail/azizi-wasel-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-islands/azizi-wasel", + "short": "Früher Einstieg in Dubai Islands als neue Premium-Inseldestination.", + "marcel_take": "Wasel ist eine bewusste Lagewette. Wer Dubai Islands früh versteht, kauft nicht Mainstream, sondern Entwicklungsfantasie mit Inselpositionierung.", + "highlights": [ + "Preis: From AED 1.68M", + "221 Apartments", + "3B+G+13", + "Dubai Islands / Deira Waterfront", + "Studios bis 3BR und Penthouses" + ], + "data_confidence": "yellow", + "overview_bedrooms": "STUDIO, 1, 2, 3 BEDROOMS & PENTHOUSE", + "official_headline": "AN OCEANIC RETREAT ALONG THE SHORES OF THE DUBAI ISLANDS", + "official_description": "Azizi’s newest residential marvel, Azizi Wasel on Dubai Islands, offers breathtaking sea views paired with a glimpse of Dubai’s iconic skyline. Immerse yourself in the vibrant culture of the city while enjoying the serenity of waterfront living. Designed for modern comfort and convenience, Azizi Wasel combines elegance with seamless access to Dubai’s major attractions, creating a perfect balance of urban energy and coastal tranquility.", + "official_unit_type": "STUDIO, 1, 2, 3 BEDROOMS & PENTHOUSE", + "official_starting_price": "From AED 1.68M", + "official_description_de": "Azizi Wasel ist Azizis Adresse auf den neuen Dubai Islands. Direkter Meerblick und Skyline-Sichtachsen kombinieren Waterfront-Lage mit moderner Ausstattung - eine frühe Wette auf die langfristige Entwicklung der Inseln." + }, + { + "slug": "azizi-jaddaf-beach-oasis", + "title": "AZIZI JADDAF BEACH OASIS", + "category": "healthcare-city", + "location": "Al Jaddaf & DHCC", + "status": "In Planung / Preis folgt", + "status_group": "offplan", + "buyer_profile": "Zentralitätskäufer, Business-Nutzer und Anleger mit Creek- und Downtown-Bezug", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "STUDIO, 1 BEDROOM & PENTHOUSES", + "image": "immobile/dubai/azizi-jaddaf-beach-oasis/overview-thumbnail/azizi-jaddaf-beach-oasis-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-healthcare-city/azizi-jaddaf-beach-oasis", + "short": "Al-Jaddaf-Adresse mit eigenem Beach-Pool nahe Downtown Dubai.", + "marcel_take": "Jaddaf Beach Oasis setzt das Beach-Oasis-Lagunenkonzept im Creek-Cluster Al Jaddaf fort. Damit ein Lifestyle-Twist auf eine sonst zentral-urbane Lage. Verfügbarkeit und Eckdaten prüfe ich pro Einheit auf Anfrage.", + "highlights": [ + "Preisangabe auf offizieller Übersicht noch offen", + "New Release" + ], + "data_confidence": "yellow", + "official_headline": "CITY LIVING, BEACH FEELING", + "official_description": "Azizi Jaddaf Beach Oasis – unlocks a prime address in Al Jaddaf for discerning buyers seeking to invest in one of the most sought-after locations in the city. A modern contemporary design with its own beach pool, nestled within an area rich with the heritage and legacy of old Dubai. A mesmerizing blend of access and exclusivity awaits in this hidden gem of a community, just moments from the business, commercial and leisure hub of Downtown Dubai.", + "official_unit_type": "STUDIO, 1 BEDROOM & PENTHOUSES", + "official_description_de": "Jaddaf Beach Oasis bringt das Beach-Pool-Konzept ins zentrale Al Jaddaf - in Geh-Distanz zu Downtown Dubai. Modernes Design trifft auf eine traditionsreiche Lage; eine Adresse für Käufer, die zentrale Mietbarkeit mit Lifestyle-Twist suchen." + }, + { + "slug": "azizi-rose", + "title": "AZIZI ROSE", + "category": "growth-corridors", + "location": "Jebel Ali", + "status": "In Planung / Preis folgt", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "STUDIO & 1 BEDROOM", + "image": "immobile/dubai/azizi-rose/overview-thumbnail/azizi-rose-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/jebel-ali/azizi-rose", + "short": "Studio- und 1-BR-Adresse im Downtown Jebel Ali nahe JAFZA.", + "marcel_take": "Rose ist eine Freehold-Position direkt an JAFZA, einer der größten Free Zones der Region. Damit klar an Business-Mieter und langfristige Connectivity-These adressiert. Phase und Einstiegspreis kommuniziere ich pro Einheit.", + "highlights": [ + "Freehold direkt neben JAFZA", + "Studio- und 1-BR-Schwerpunkt", + "Sheikh Zayed Road und Metro nah" + ], + "data_confidence": "yellow", + "official_headline": "THE FOCAL POINT OF OPPORTUNITY", + "official_description": "Azizi Rose is your gateway to the hyper-connected, thriving community of Downtown Jebel Ali, where leading global companies have strategically established themselves at the heart of Asia-Europe trade routes. It represents a rare freehold investment opportunity on the doorstep of the world’s largest free trade zone, JAFZA, and the Middle East’s busiest port. With Sheikh Zayed Road and the metro in close proximity, residents enjoy seamless access to Dubai’s foremost business, retail, and leisure destinations.", + "official_unit_type": "STUDIO & 1 BEDROOM", + "official_description_de": "Azizi Rose liegt im Downtown Jebel Ali - direkt an JAFZA, einer der größten Free Zones weltweit, und am größten Hafen des Nahen Ostens. Eine Freehold-Position mit klarem Business-Mieter-Profil, gut angebunden an Sheikh Zayed Road und die Metro." + }, + { + "slug": "azizi-farishta-ii", + "title": "AZIZI FARISHTA II", + "category": "healthcare-city", + "location": "Al Jaddaf & DHCC", + "status": "In Planung / Preis folgt", + "status_group": "offplan", + "buyer_profile": "Zentralitätskäufer, Business-Nutzer und Anleger mit Creek- und Downtown-Bezug", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "STUDIO, 1 BEDROOM & PENTHOUSES", + "image": "immobile/dubai/azizi-farishta-ii/overview-thumbnail/azizi-farishta-ii-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-healthcare-city/azizi-farishta-ii", + "short": "Al-Jaddaf-Creekside-Adresse mit Studios, 1-BR und Penthouses.", + "marcel_take": "Farishta II liegt direkt am Dubai Creek in Al Jaddaf und richtet sich an zentral orientierte Käufer. Penthouses ergänzen die Studio- und 1-BR-Logik. Einstiegspreis und konkrete Phase auf Anfrage.", + "highlights": [ + "Direkt am Dubai Creek in Al Jaddaf", + "Studio bis 1-BR plus Penthouses", + "Metro- und Highway-Anbindung" + ], + "data_confidence": "yellow", + "official_headline": "TIMELESS LIVING, AT THE CENTER OF EVERYTHING.", + "official_description": "Azizi Farishta II in Al Jaddaf defines elevated creekside living. Set where rich cultural heritage and traditions meet the city’s contemporary architectural prowess, just steps from the Dubai Creek, this sophisticated residential development offers effortless metro and highway connectivity, placing Downtown Dubai and the city’s iconic landmarks within easy reach. With a curated collection of premium residences, including stylish studios, one-bedroom apartments, and lavish penthouses, each home is crafted with meticulous attention to detail, offers panoramic views, and delivers a prestigious, unrivaled lifestyle.", + "official_unit_type": "STUDIO, 1 BEDROOM & PENTHOUSES", + "official_description_de": "Farishta II steht direkt am Dubai Creek in Al Jaddaf, mit kurzer Distanz zu Downtown und den großen Wahrzeichen der Stadt. Studios, Ein-Zimmer-Apartments und Penthouses - eine Adresse mit Creek-Lage und Premium-Anspruch." + }, + { + "slug": "azizi-gabriel", + "title": "AZIZI GABRIEL", + "category": "growth-corridors", + "location": "Jebel Ali", + "status": "In Planung / Preis folgt", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "STUDIO, 1, 2 BEDROOMS", + "image": "immobile/dubai/azizi-gabriel/overview-thumbnail/azizi-gabriel-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/jebel-ali/azizi-gabriel", + "short": "Downtown-Jebel-Ali-Adresse mit Studio bis 2-BR direkt an der JAFZA.", + "marcel_take": "Gabriel positioniert sich mit Studio- bis 2-BR-Apartments im Downtown Jebel Ali und damit für Business-Pendler und JAFZA-Mieter. Verfügbarkeit und Einstiegspreis aktuell auf Anfrage.", + "highlights": [ + "Studio bis 2-BR-Apartments", + "Downtown Jebel Ali", + "JAFZA und SZR direkt erreichbar" + ], + "data_confidence": "yellow", + "official_headline": "THE APEX OF AMBITION", + "official_description": "Azizi Gabriel is an exciting new residential opportunity in the center of the vibrant and growing community of Downtown Jebel Ali, an unparalleled global business hub. Enjoy a freehold investment opportunity on the doorstep of the world’s largest free trade zone - JAFZA - and the biggest port in the Middle East. And with quick access to Sheik Zayed Road, the rest of Dubai’s business, retail, and leisure landmarks are within easy reach. Build your future in the center of a thriving community that gives you direct access to Dubai’s best business, retail and entertainment offerings. Unlock a life of modern elegance with a home that enables your potential with style. With easy access to Sheik Zayed Road and the metro, the whole city is on your doorstep.", + "official_unit_type": "STUDIO, 1, 2 BEDROOMS", + "official_description_de": "Azizi Gabriel ist eine Freehold-Adresse im Downtown Jebel Ali, direkt am Eingang zur JAFZA. Mit guter Anbindung an die wichtigsten Achsen Dubais ein klassischer Yield-Case mit Business-Mieter-Profil." + }, + { + "slug": "azizi-leily", + "title": "Azizi Leily", + "category": "healthcare-city", + "location": "Al Jaddaf & DHCC", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Zentralitätskäufer, Business-Nutzer und Anleger mit Creek- und Downtown-Bezug", + "price_from": "From AED 828K", + "handover": "Details prüfen", + "units": "STUDIO, 1, 2 BEDROOMS & PENTHOUSE", + "image": "immobile/dubai/azizi-leily/overview-thumbnail/azizi-leily-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-healthcare-city/azizi-leily", + "short": "Al-Jaddaf-Adresse mit Studios bis 2-BR und zwei Penthouses ab AED 828K.", + "marcel_take": "Leily liegt im Creek-Cluster Al Jaddaf und positioniert sich mit zwei Penthouses bewusst etwas höherwertiger. Mit ab AED 828K ein klar zugänglicher Einstieg in eine zentrale Lage. Eckdaten prüfe ich pro Einheit.", + "highlights": [ + "Studios bis 2-BR plus zwei Penthouses", + "Creek-Cluster Al Jaddaf", + "Einstieg ab AED 828K" + ], + "data_confidence": "green", + "official_headline": "TIMELESS ROOTS, MODERN HORIZONS", + "official_description": "In the heart of Al Jaddaf, where the Dubai Creek shimmers beneath the skyline, Azizi Leily rises with distinction and grace. From chic studios and spacious one- and two-bedroom residences to two signature penthouses, every home embodies refined contemporary living.", + "official_unit_type": "STUDIO, 1, 2 BEDROOMS & PENTHOUSE", + "official_starting_price": "From AED 828K", + "official_description_de": "Im Herzen von Al Jaddaf, wo der Dubai Creek unter der Skyline glitzert, positioniert sich Azizi Leily mit Studios, geräumigen 1- und 2-Zimmer-Wohnungen sowie zwei Penthouses als kompakte, zeitgemäße Creek-Adresse." + }, + { + "slug": "azizi-lina", + "title": "Azizi Lina", + "category": "growth-corridors", + "location": "Jebel Ali", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "From AED 572K", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/azizi-lina/overview-thumbnail/azizi-lina-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/jebel-ali/azizi-lina", + "short": "Jebel-Ali-Adresse direkt neben JAFZA ab AED 572K.", + "marcel_take": "Lina ist mit ab AED 572K eine der zugänglichsten Jebel-Ali-Optionen direkt neben JAFZA. Klares Yield-Profil mit Business-Mieterprofil. Phase und konkrete Einheiten prüfe ich auf Anfrage.", + "highlights": [ + "Einstieg ab AED 572K", + "Lage direkt an JAFZA", + "Yield-Case für Business-Mieter" + ], + "data_confidence": "yellow", + "official_headline": "WHERE CONNECTIVITY FUELS OPPORTUNITY", + "official_description": "Azizi Lina rises in Downtown Jebel Ali, alongside the famed JAFZA — one of the world’s largest free zones and the Middle East’s biggest port. Effortless metro and highway connectivity, contemporary residences, thoughtfully designed amenities, and 100+ Fortune Global 500 companies in immediate vicinity bring global opportunity within reach, creating a lifestyle that perfectly balances ambition and comfort.", + "official_starting_price": "From AED 572K", + "official_description_de": "Azizi Lina liegt im Downtown Jebel Ali, unmittelbar neben der JAFZA und dem größten Hafen des Nahen Ostens. Direkter Zugang zu Metro und Highway, moderne Wohnungen und mehr als 100 Fortune-Global-500-Unternehmen im direkten Umfeld machen das Haus zu einer Adresse für Berufstätige mit internationalem Geschäftsbezug." + }, + { + "slug": "milan-heights", + "title": "Milan Heights", + "category": "mega-communities", + "location": "Azizi Milan", + "status": "In Planung / Preis folgt", + "status_group": "offplan", + "buyer_profile": "Langfristige Off-Plan-Käufer, Community-Investoren und Eigennutzer mit Wachstumsthese", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "STUDIO, 1, 2, 3 BEDROOMS", + "image": "immobile/dubai/milan-heights/overview-thumbnail/milan-heights-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-land/milan-heights", + "short": "Premium-Linie innerhalb des Azizi-Milan-Masterplans.", + "marcel_take": "Milan Heights ist die hochwertigere Linie innerhalb der Milan-Großentwicklung. Wer von der Milan-Investmentthese überzeugt ist und ein höheres Ticket investieren will, findet hier eine differenzierte Variante mit eigenem Lagunenkonzept.", + "highlights": [ + "Premium-Linie innerhalb Azizi Milan", + "Eigenes Lagunenkonzept", + "Studio- bis 3-BR-Mix" + ], + "data_confidence": "yellow", + "official_headline": "THE PINNACLE OF ITALIAN-INSPIRED LIVING", + "official_description": "Milan Heights, set within the famed Azizi Milan, epitomizes modern elegance infused with Milanese-Italian charm. Crafted as a refined sanctuary, it meets every lifestyle need with effortless grace. Boasting exceptional amenities and the allure of its signature blue lagoon, this enclave harmonizes sophistication with convenience.", + "official_unit_type": "STUDIO, 1, 2, 3 BEDROOMS", + "official_description_de": "Milan Heights liegt innerhalb der Azizi-Milan-Großentwicklung und positioniert sich als die hochwertigere Linie des Masterplans. Eigene blaue Lagune und gehobene Ausstattung ergänzen die italienisch inspirierte Quartiersarchitektur." + }, + { + "slug": "azizi-tower-1", + "title": "Azizi Tower 1", + "category": "healthcare-city", + "location": "Al Jaddaf & DHCC", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Zentralitätskäufer, Business-Nutzer und Anleger mit Creek- und Downtown-Bezug", + "price_from": "From AED 1.83M", + "handover": "Details prüfen", + "units": "COMMERCIAL SPACES", + "image": "immobile/dubai/azizi-tower-1/overview-thumbnail/azizi-tower-1-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-healthcare-city/azizi-tower-1", + "short": "Reines Commercial-Building in Al Jaddaf ab AED 1,83M.", + "marcel_take": "Tower 1 ist eine Commercial-Position in Al Jaddaf, kein Wohnobjekt. Für Käufer mit Office- oder Retail-These eine direkte Vergleichsadresse zu Azizi Emerald. Eckdaten und Flächenzuschnitte besprechen wir individuell.", + "highlights": [ + "Reine Commercial-Spaces", + "Einstieg ab AED 1,83M", + "Direkter Vergleich zu Azizi Emerald" + ], + "data_confidence": "green", + "official_headline": "THE EMIRATE’S BUSINESS HUB OF CONNECTIVITY", + "official_description": "Azizi Tower 1 is a modern commercial landmark in Al Jaddaf, offering flexible layouts and thoughtfully designed interiors that support productivity and growth. With a contemporary façade and direct links to the city’s key destinations, it provides an ideal address for businesses of every scale — from agile startups to established enterprises.", + "official_unit_type": "COMMERCIAL SPACES", + "official_starting_price": "From AED 1.83M", + "official_description_de": "Azizi Tower 1 ist ein modernes kommerzielles Gebäude in Al Jaddaf. Flexibel zuschneidbare Flächen und durchdachte Innenräume sprechen sowohl Startups als auch etablierte Unternehmen an - eine Office-Adresse mit guter Anbindung an die zentralen Achsen der Stadt." + }, + { + "slug": "azizi-wares", + "title": "Azizi Wares", + "category": "growth-corridors", + "location": "Jebel Ali", + "status": "In Planung / Preis folgt", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "STUDIO, 1, 2 & 3 BEDROOMS", + "image": "immobile/dubai/azizi-wares/overview-thumbnail/azizi-wares-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/jebel-ali/azizi-wares", + "short": "Freehold-Adresse in Jebel Ali mit Studio bis 3-BR.", + "marcel_take": "Wares deckt mit Studio- bis 3-BR den breiten Mix in Jebel Ali ab und ist damit weniger reiner Yield-Case als Lina oder Rose. Eignet sich auch für Eigennutzer mit Connectivity-Fokus. Eckdaten auf Anfrage.", + "highlights": [ + "Studio bis 3-BR-Mix", + "Freehold-Position in Jebel Ali", + "JAFZA und Metro nah" + ], + "data_confidence": "yellow", + "official_headline": "YOUR GATEWAY TO A WORLD OF OPPORTUNITY", + "official_description": "Azizi Wares, a distinctive address beside JAFZA in Jebel Ali, combines contemporary elegance with unmatched connectivity. This exclusive freehold residence features meticulously designed studios and one-, two-, and three-bedroom apartments that elevate everyday living. With seamless access to Sheikh Zayed Road and the metro, Dubai’s key destinations are effortlessly within reach.", + "official_unit_type": "STUDIO, 1, 2 & 3 BEDROOMS", + "official_description_de": "Azizi Wares liegt direkt neben der JAFZA in Jebel Ali und kombiniert zeitgemäße Architektur mit hervorragender Anbindung. Die Freehold-Adresse umfasst Studios sowie 1-, 2- und 3-Zimmer-Apartments - mit Sheikh Zayed Road und Metro in unmittelbarer Reichweite." + }, + { + "slug": "azizi-david", + "title": "Azizi David", + "category": "healthcare-city", + "location": "Al Jaddaf & DHCC", + "status": "In Planung / Preis folgt", + "status_group": "offplan", + "buyer_profile": "Zentralitätskäufer, Business-Nutzer und Anleger mit Creek- und Downtown-Bezug", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "STUDIO, 1, 2 BEDROOMS & PENTHOUSE", + "image": "immobile/dubai/azizi-david/overview-thumbnail/azizi-david-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-healthcare-city/azizi-david", + "short": "Al-Jaddaf-Adresse mit Studios bis 2-BR und Penthouses am Dubai Creek.", + "marcel_take": "David positioniert sich als gehobenere Adresse im Creek-Cluster Al Jaddaf mit Studio- bis 2-BR-Mix und Penthouses. Verfügbarkeit und Einstiegspreis kommuniziere ich pro Einheit; Eckdaten gleiche ich gegen Leily und Farishta II ab.", + "highlights": [ + "Studio bis 2-BR plus Penthouses", + "Creek-Lage in Al Jaddaf", + "Eckdaten und Phase auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "WHERE HERITAGE SHAPES THE FUTURE", + "official_description": "In the heart of Al Jaddaf, surrounded by culture, connected to opportunity, and framed by sweeping creek views, Azizi David rises as a celebration of a tradition-rich past, seamlessly woven with modernity. Offering an exceptional selection of residences — from elegant studios and stylish one- and two-bedroom apartments to opulent penthouses — it embodies contemporary living while honoring Dubai’s timeless legacy.", + "official_unit_type": "STUDIO, 1, 2 BEDROOMS & PENTHOUSE", + "official_description_de": "Azizi David in Al Jaddaf liegt umrahmt von Creek-Sichtachsen und kombiniert kulturell geprägte Lage mit moderner Wohnarchitektur. Studios, 1- und 2-Zimmer-Apartments sowie Penthouses richten sich an unterschiedliche Käuferprofile innerhalb des Creek-Clusters." + }, + { + "slug": "azizi-sikander", + "title": "Azizi Sikander", + "category": "growth-corridors", + "location": "Al Furjan", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "From AED 586K", + "handover": "Details prüfen", + "units": "STUDIO, 1 & 2 BEDROOMS", + "image": "immobile/dubai/azizi-sikander/overview-thumbnail/azizi-sikander-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/azizi-sikander", + "short": "Aktiv vermarktete Al-Furjan-Adresse mit Studios und 1- bis 2-BR-Apartments.", + "marcel_take": "Sikander gehört zu den aktiv vermarkteten Al-Furjan-Adressen ab AED 586K. Lage entlang der Metro-Achse, Standardspektrum von Studio bis 2-BR. Verfügbarkeit pro Einheit und Bauphase prüfe ich auf Anfrage.", + "highlights": [ + "Lage entlang der Al-Furjan-Metro-Achse", + "Studio- bis 2-BR-Mix", + "Aktiv vermarktet ab AED 586K" + ], + "data_confidence": "green", + "official_headline": "EMBRACE THE CONTEMPORARY LIFESTYLE", + "official_description": "Azizi Sikander presents itself as a distinguished destination within Al Furjan community, boasting breathtaking city vistas and a refined architectural design. Residents are immersed in a lively atmosphere enriched with high-end amenities and convenient access to essential attractions. This exquisite building harmoniously blends contemporary living with the advantages of a well-connected neighborhood, making it the perfect place to call home.", + "official_unit_type": "STUDIO, 1 & 2 BEDROOMS", + "official_starting_price": "From AED 586K", + "official_description_de": "Azizi Sikander positioniert sich innerhalb der Al-Furjan-Community als Adresse mit weiten Stadtsichten und klar geschnittener Architektur. High-End-Annehmlichkeiten und ein gut angebundenes Quartier ergänzen sich zu einer Wohnadresse, die zeitgemäßes Wohnen mit den Vorteilen einer eingespielten Nachbarschaft verbindet." + }, + { + "slug": "azizi-amir", + "title": "Azizi Amir", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "In Planung / Preis folgt", + "status_group": "offplan", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "1, 2 & 3 BEDROOMS", + "image": "immobile/dubai/azizi-amir/overview-thumbnail/azizi-amir-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/azizi-amir", + "short": "Familienorientierte Al-Furjan-Adresse mit 1- bis 3-Zimmer-Apartments.", + "marcel_take": "Amir setzt auf größeres Wohnflächensegment in Al Furjan und richtet sich damit eher an Familienhaushalte als an Studio-Mieter. Preis und Verfügbarkeit aktuell auf Anfrage; Eckdaten gleiche ich gegen Sikander, Raffi und Zain individuell ab.", + "highlights": [ + "Family-Layouts mit 1- bis 3-BR", + "Lage in der Al-Furjan-Community", + "Verfügbarkeit auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "REDEFINE MODERN LIFESTYLE AT AZIZI AMIR", + "official_description": "Located in the vibrant heart of Al Furjan, Azizi Amir is a remarkable addition to this flourishing community in Dubai. This stylish residence combines elegance with the energy of city living. Offering premium amenities and leisure activities tailored to your needs, Azizi Amir ensures an exceptional living experience. Its strategic location along the metro line provides convenient commuting, allowing you to enjoy the perfect balance of excitement and comfort in your luxurious new home.", + "official_unit_type": "1, 2 & 3 BEDROOMS", + "official_description_de": "Azizi Amir ist eine moderne Erweiterung der Al-Furjan-Community in Dubai. Durchdachte Annehmlichkeiten und Freizeitangebote, kombiniert mit der strategischen Lage entlang der Metrolinie, machen das Haus zu einer komfortablen Wohnadresse mit guter Anbindung." + }, + { + "slug": "azizi-raffi", + "title": "Azizi Raffi", + "category": "growth-corridors", + "location": "Al Furjan", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "From AED 618K", + "handover": "Details prüfen", + "units": "STUDIO, 1, 2 & 3 BEDROOMS", + "image": "immobile/dubai/azizi-raffi/overview-thumbnail/azizi-raffi-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/azizi-raffi", + "short": "Al-Furjan-Adresse mit breitem Mix von Studio bis 3-BR ab AED 618K.", + "marcel_take": "Raffi deckt mit Studios bis 3-BR den größten Bedarfsmix in Al Furjan ab. Einstieg ab AED 618K. Lage und Anbindung sind die typischen Al-Furjan-Vorteile; Phase und Liefertermin prüfe ich pro Einheit.", + "highlights": [ + "Mix von Studio bis 3-BR", + "Einstieg ab AED 618K", + "Lage entlang der Metro-Achse" + ], + "data_confidence": "green", + "official_headline": "A SEAMLESS BLEND OF ART AND ARCHITECTURE AWAITS YOU", + "official_description": "Welcome to Azizi Raffi in Al Furjan, where modern design meets unparalleled convenience. This newly launched residential building offers contemporary living spaces crafted for comfort, complemented by a range of amenities that elevate urban life. Ideally located in Al Furjan, Azizi Raffi provides seamless access to key areas in Dubai, blending vibrant city life with the tranquillity of a well-connected community", + "official_unit_type": "STUDIO, 1, 2 & 3 BEDROOMS", + "official_starting_price": "From AED 618K", + "official_description_de": "Azizi Raffi in Al Furjan kombiniert modernes Design mit kompromissloser Anbindung. Das neu vermarktete Wohngebäude bietet zeitgemäße Wohnflächen und eine Auswahl an Annehmlichkeiten, die das urbane Leben auf eine angenehme Stufe heben - dabei nahtlos angebunden an die wichtigsten Stadtteile Dubais." + }, + { + "slug": "azizi-neila", + "title": "Azizi Neila", + "category": "growth-corridors", + "location": "Al Furjan", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "From AED 1.26M", + "handover": "Details prüfen", + "units": "STUDIO & 1 BEDROOM", + "image": "immobile/dubai/azizi-neila/overview-thumbnail/azizi-neila-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/neila", + "short": "Studio- und 1-BR-Adresse in Al Furjan ab AED 1,26M.", + "marcel_take": "Neila konzentriert sich auf Studio- und 1-BR-Einheiten und damit auf das klassische Yield-Segment in Al Furjan. Einstieg ab AED 1,26M. Für Investoren mit Cashflow-Fokus eine vergleichbare Option zu Jewel.", + "highlights": [ + "Studio- und 1-BR-Konzept", + "Yield-Profil ab AED 1,26M", + "Al-Furjan-Lage mit Metro-Nähe" + ], + "data_confidence": "green", + "official_headline": "YOUR DISTINCTIVE RESIDENCE AWAITS AT AZIZI NEILA", + "official_description": "Revel in exceptional connectivity and find the perfect equilibrium between the dynamism of the city and serene tranquility at NEILA-Azizi's latest jewel in Al Furjan.", + "official_unit_type": "STUDIO & 1 BEDROOM", + "official_starting_price": "From AED 1.26M", + "official_description_de": "Azizi Neila ist Azizis jüngste Adresse in Al Furjan und legt den Fokus auf hervorragende Anbindung und ein ausgewogenes Verhältnis zwischen urbaner Dynamik und ruhigerem Wohnumfeld." + }, + { + "slug": "azizi-zain", + "title": "Azizi Zain", + "category": "growth-corridors", + "location": "Al Furjan", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "From AED 1.72M", + "handover": "Details prüfen", + "units": "1, 2 & 3 BEDROOMS", + "image": "immobile/dubai/azizi-zain/overview-thumbnail/azizi-zain-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/azizi-zain", + "short": "Familien-Adresse in Al Furjan mit 1- bis 3-BR-Apartments ab AED 1,72M.", + "marcel_take": "Zain richtet sich gezielt an Familienhaushalte: keine Studios, dafür 1- bis 3-BR. Mit ab AED 1,72M klar oberhalb der Studio-Linien wie Sikander oder Raffi. Lage entlang der Metro-Achse bringt den klassischen Al-Furjan-Vermietungsvorteil.", + "highlights": [ + "1- bis 3-BR-Apartments", + "Familien-Adresse ab AED 1,72M", + "Metro-Anbindung in Al Furjan" + ], + "data_confidence": "green", + "official_headline": "A GRACEFUL PLACE TO CALL HOME", + "official_description": "Azizi Zain adds to the vibrancy of Dubai's renowned Al Furjan community. This modern residence embodies all the richness of this booming residential hub, complemented by excellent amenities and exceptional convenience of living. The location along the metro line is an added benefit, making it more attractive to residents for easy commute while at a desirable distance from the city", + "official_unit_type": "1, 2 & 3 BEDROOMS", + "official_starting_price": "From AED 1.72M", + "official_description_de": "Azizi Zain ist eine moderne Wohnadresse innerhalb der Al-Furjan-Community. Hochwertige Annehmlichkeiten, ausgewogene Grundrisse und die Lage entlang der Metrolinie machen das Haus zu einer praktikablen Adresse für Bewohner, die kurze Wege ohne dauerhafte Stadtnähe schätzen." + }, + { + "slug": "beach-oasis-ii", + "title": "Beach Oasis II", + "category": "studio-city", + "location": "Studio City", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Einsteiger, Vermietungskäufer und Lifestyle-Nutzer im bezahlbareren Segment", + "price_from": "From AED 604K", + "handover": "Details prüfen", + "units": "STUDIO, 1 & 2 BEDROOMS", + "image": "immobile/dubai/beach-oasis-ii/overview-thumbnail/beach-oasis-ii-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/studio-city/beach-oasis-ii", + "short": "Lagunen-Erweiterung von Beach Oasis im Dubai Studio City ab AED 604K.", + "marcel_take": "Beach Oasis II ergänzt das ursprüngliche Beach-Oasis-Konzept in Studio City: zwei Gebäude um eine Lagunen-Pool-Anlage. Einstieg ab AED 604K macht es zur zugänglichsten Lifestyle-Option im Cluster.", + "highlights": [ + "Lagunen-Pool und künstlicher Strand", + "Zwei Gebäude rund um Innenhof", + "Einstieg ab AED 604K" + ], + "data_confidence": "green", + "official_headline": "WHERE SERENITY MEETS VIBRANCY IN DUBAI STUDIO CITY", + "official_description": "Experience a serene lifestyle amidst the vibrancy of Dubai Studio City. Beach Oasis II is an elegant urban neighbourhood comprising two buildings surrounding a lagoon-style pool and a man-made beach. Featuring spacious homes, it offers studio, 1 & 2-bedroom apartments. The captivating pool is surrounded by lush greenery, offering a tranquil ambiance complemented by a host of amenities, like gym and play areas. The location provides excellent connectivity to a range of sports & leisure options along with easy access to Dubai's largest highways. Here, life finds joy in full swing, offering the perfect work-life balance.", + "official_unit_type": "STUDIO, 1 & 2 BEDROOMS", + "official_starting_price": "From AED 604K", + "official_description_de": "Beach Oasis II in Dubai Studio City besteht aus zwei Gebäuden, die einen Lagunen-Pool und einen künstlichen Strand umrahmen. Studios sowie 1- und 2-Zimmer-Apartments, ergänzt um Gym und Spielflächen, machen das Projekt zu einer überschaubaren Lifestyle-Adresse mit guter Highway-Anbindung." + }, + { + "slug": "azizi-jewel", + "title": "Azizi Jewel", + "category": "growth-corridors", + "location": "Al Furjan", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "From AED 1.01M", + "handover": "Details prüfen", + "units": "STUDIO & 1 BEDROOM", + "image": "immobile/dubai/azizi-jewel/overview-thumbnail/azizi-jewel-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/azizi-jewel", + "short": "Studio- und 1-BR-Konzept in Al Furjan ab AED 1,01M.", + "marcel_take": "Jewel deckt das Studio- und 1-BR-Segment in Al Furjan ab und steht im direkten Vergleich zu Pearl und Neila. Einstieg ab AED 1,01M. Vermarktung läuft, Phase und konkrete Einheiten kann ich auf Anfrage abgleichen.", + "highlights": [ + "Studio- und 1-BR-Mix", + "Einstieg ab AED 1,01M", + "Al-Furjan-Lage entlang der Metro" + ], + "data_confidence": "green", + "official_headline": "YOUR DISTINCTIVE RESIDENCE AWAITS AT AZIZI JEWEL", + "official_description": "Step into Azizi Jewel, where the next generation of strategic urban connectivity is brought to life at Al-Furjan, with masterful craftsmanship, effortlessly blending chic aesthetics with functional design.", + "official_unit_type": "STUDIO & 1 BEDROOM", + "official_starting_price": "From AED 1.01M", + "official_description_de": "Azizi Jewel steht in Al Furjan für die nächste Generation strategisch angebundener Wohnadressen: präzises Handwerk, schickes Design und funktionale Grundrisse - eine Adresse, die Effizienz und Ästhetik bewusst zusammenbringt." + }, + { + "slug": "azizi-central", + "title": "Azizi Central", + "category": "growth-corridors", + "location": "Al Furjan", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "From AED 1.73M", + "handover": "Details prüfen", + "units": "1, 2 & 3 BEDROOMS", + "image": "immobile/dubai/azizi-central/overview-thumbnail/azizi-central-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/central", + "short": "Familien-Adresse in Al Furjan mit 1- bis 3-BR-Apartments ab AED 1,73M.", + "marcel_take": "Central positioniert sich als familien- und größenstärkere Al-Furjan-Adresse. Mit ab AED 1,73M ein höheres Ticket als die Studio-Linien, dafür mehr Wohnfläche pro Einheit. Lage an der Metro-Achse, Eckdaten prüfe ich individuell.", + "highlights": [ + "1- bis 3-BR-Apartments", + "Familien-Profil ab AED 1,73M", + "Lage entlang der Metro-Achse" + ], + "data_confidence": "green", + "official_headline": "DISCOVER CONTEMPORARY LIVING AT ITS FINEST", + "official_description": "Experience the epitome of contemporary elegance at Azizi Central, an exquisite addition to the Al Furjan Community in new Dubai, nestled along the prestigious metro line. Central stands as a pinnacle among Azizi's distinguished residential projects, offering a haven for families seeking refined urban living with the dynamic vitality of the city.", + "official_unit_type": "1, 2 & 3 BEDROOMS", + "official_starting_price": "From AED 1.73M", + "official_description_de": "Azizi Central ist eine zeitgemäße Erweiterung der Al-Furjan-Community entlang der Metrolinie. Die Adresse positioniert sich als familienorientiertes Haus, das ruhiges urbanes Wohnen mit der Energie der Stadt verbindet." + }, + { + "slug": "amber", + "title": "Amber", + "category": "growth-corridors", + "location": "Al Furjan", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "From AED 1.51M", + "handover": "Details prüfen", + "units": "1, 2 & 3 BEDROOMS", + "image": "immobile/dubai/amber/overview-thumbnail/amber-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/amber", + "short": "Al-Furjan-Adresse mit 1- bis 3-Bedroom-Apartments ab AED 1,51M.", + "marcel_take": "Amber gehört zur jüngeren Welle Al-Furjan-Adressen mit Familien-Layouts. Ab AED 1,51M ein vergleichbar positioniertes Ticket wie Central. Verfügbarkeit und Phase pro Einheit prüfe ich auf Anfrage.", + "highlights": [ + "1- bis 3-BR-Apartments", + "Einstieg ab AED 1,51M", + "Aktiv vermarktete Al-Furjan-Phase" + ], + "data_confidence": "green", + "official_headline": "YOUR DISTINCTIVE RESIDENCE AWAITS AT AMBER", + "official_description": "Revel in exceptional connectivity and find the perfect equilibrium between the dynamism of the city and serene tranquility at Amber-Azizi's latest jewel in Al Furjan.", + "official_unit_type": "1, 2 & 3 BEDROOMS", + "official_starting_price": "From AED 1.51M", + "official_description_de": "Amber ist Azizis jüngste Adresse in Al Furjan und positioniert sich zwischen urbaner Anbindung und ruhigerem Wohnumfeld - eine Wohnadresse, die hohe Wohnqualität und kurze Wege im Alltag zusammenbringt." + }, + { + "slug": "park-avenue-iii", + "title": "Park Avenue III", + "category": "meydan", + "location": "Meydan - Riviera", + "status": "In Planung / Preis folgt", + "status_group": "offplan", + "buyer_profile": "Lifestyle-orientierte Anleger und Käufer mit Fokus auf MBR City und Crystal-Lagoon-Nähe", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "STUDIO, 1 & 3 BEDROOMS", + "image": "immobile/dubai/park-avenue-iii/overview-thumbnail/park-avenue-iii-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/meydan/park-avenue-iii", + "short": "Dritte Phase der Park-Avenue-Boutique-Community in MBR City.", + "marcel_take": "Park Avenue III ist die jüngste Phase der Park-Avenue-Reihe in MBR City: 89 Wohneinheiten und 13 Premium-Retail. Damit kleinformatiger und exklusiver positioniert als die großen Riviera-Türme. Einstiegspreis und Phase auf Anfrage.", + "highlights": [ + "89 Wohneinheiten plus 13 Premium-Retail", + "Kleinformatige MBR-City-Erweiterung", + "Einstiegspreis auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "REIMAGINE URBAN LIVING", + "official_description": "Park Avenue III is the newest addition to Azizi's success in developing superior craftsmanship and modern living, which is nestled in Medyan, a prestigious neighborhood in Dubai, offering the best of both worlds. Azizi Park Avenue III features 89 high-end residential units and 13 premium retail stores, making it an exclusive window into prime real estate. From refined luxury interiors to breathtaking landscaped outdoor areas—you'll get it all here.", + "official_unit_type": "STUDIO, 1 & 3 BEDROOMS", + "official_description_de": "Park Avenue III ist die jüngste Phase der Park-Avenue-Reihe in Meydan. Mit 89 hochwertigen Wohneinheiten und 13 Premium-Retail-Flächen positioniert sich die Adresse bewusst kleinteilig - exklusiv und überschaubar statt Großcommunity." + }, + { + "slug": "pearl", + "title": "Azizi Pearl", + "category": "growth-corridors", + "location": "Al Furjan", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "From AED 694K", + "handover": "Details prüfen", + "units": "1 BEDROOM", + "image": "immobile/dubai/pearl/overview-thumbnail/pearl-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/pearl", + "short": "Studio-getriebene Al-Furjan-Residenz mit 192 Studios und 1-BR-Anteil.", + "marcel_take": "Pearl ist von der Einheitenstruktur klar studio-getrieben (192 Studios) und damit eine reine Yield-Adresse für Investoren mit Cashflow-Fokus. Einstieg ab AED 694K macht es zur zugänglichsten Al-Furjan-Variante.", + "highlights": [ + "192 Studios als Yield-Schwerpunkt", + "54 1-BR und 14 2-BR-Einheiten", + "Einstieg ab AED 694K" + ], + "data_confidence": "green", + "official_headline": "PEARL RESIDENCES, AL-FURJAN'S CROWN JEWEL", + "official_description": "Elevate your living experience to new heights at Pearl, the prestigious residential complex soaring gracefully across 7 floors with a selection of 192 studios, 54 lavish one-bedroom apartments, and 14 exquisite two-bedroom residences.", + "official_unit_type": "1 BEDROOM", + "official_starting_price": "From AED 694K", + "official_description_de": "Pearl ist eine 7-stöckige Wohnadresse mit 192 Studios, 54 Ein-Zimmer- und 14 Zwei-Zimmer-Apartments. Konzentrierte Yield-Logik mit deutlichem Studio-Schwerpunkt - eine klassische Al-Furjan-Bestandsadresse für Cashflow-Käufer." + }, + { + "slug": "park-avenue-ii", + "title": "Park Avenue II", + "category": "meydan", + "location": "Meydan - Riviera", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Lifestyle-orientierte Anleger und Käufer mit Fokus auf MBR City und Crystal-Lagoon-Nähe", + "price_from": "From AED 1.74M", + "handover": "Details prüfen", + "units": "STUDIO, 1 & 3 BEDROOMS", + "image": "immobile/dubai/park-avenue-ii/overview-thumbnail/park-avenue-ii-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/meydan/park-avenue-ii", + "short": "Erweiterung der Park-Avenue-Boutique-Community in MBR City ab AED 1,74M.", + "marcel_take": "Park Avenue II setzt das Konzept der ursprünglichen Park-Avenue-Adresse in MBR City fort, mit etwas höherem Einstiegspreis. Wer Park Avenue als Konzept überzeugend findet, sollte II als jüngere Phase prüfen.", + "highlights": [ + "Boutique-Erweiterung in MBR City", + "Studio-, 1- und 3-BR-Mix", + "Einstieg ab AED 1,74M" + ], + "data_confidence": "green", + "official_headline": "FOLLOW YOUR WANDER-MUST AT PARK AVENUE II", + "official_description": "Every journey has its destination. And ours is one of a kind: Park Avenue II at Medyan, where exclusivity meets distinction! You're invited to join us in this remarkable journey. With impeccable design, a perfect mix of residential experiences, and unique amenities, experience life in a naturally relaxing environment surrounded by beautiful homes, lush greenery, and soothing water features. Choose from 1 & 2 bedroom apartments, each offering magnificent views. Experience the highest standard of cosmopolitan living that celebrates the beauty of our natural world", + "official_unit_type": "STUDIO, 1 & 3 BEDROOMS", + "official_starting_price": "From AED 1.74M", + "official_description_de": "Park Avenue II in Meydan setzt auf die Kombination aus Lifestyle und Wohnen: durchdachtes Design, ein Mix aus 1- und 2-BR-Apartments mit Aussicht, dazu üppige Grünflächen und Wasserflächen rund um die Anlage. Eine zentrale Lage mit Community-Charakter." + }, + { + "slug": "berton", + "title": "Berton", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/berton/overview-thumbnail/berton-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/berton", + "short": "Al-Furjan-Adresse mit direkter Anbindung an Route 2020 und SZR.", + "marcel_take": "Berton liegt strategisch an der Route 2020 und an der Sheikh Zayed Road. Die Verkehrsanbindung ist der entscheidende Vermietungsvorteil. Konkrete Einheiten und aktuelle Phase prüfe ich auf Anfrage.", + "highlights": [ + "Direkte Anbindung an Route 2020", + "Nähe Sheikh Zayed Road", + "Bestand in Al Furjan" + ], + "data_confidence": "yellow", + "official_headline": "INTERTWINING URBAN HARMONY AT BERTON", + "official_description": "Step into Berton, where the next generation of strategic urban connectivity is brought to life at Al-Furjan, with masterful craftsmanship, effortlessly blending chic aesthetics with functional design. Berton offers direct access to the Route 2020 metro line and Sheikh Mohammed bin Zayed Road.", + "official_description_de": "Berton steht in Al Furjan für strategisch angebundenes Wohnen: präzises Design, durchdachte Grundrisse und der direkte Zugang zur Route-2020-Metrolinie sowie zur Sheikh Mohammed bin Zayed Road. Eine Adresse für Bewohner mit Pendelfokus." + }, + { + "slug": "aliyah", + "title": "Aliyah", + "category": "healthcare-city", + "location": "Al Jaddaf & DHCC", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Zentralitätskäufer, Business-Nutzer und Anleger mit Creek- und Downtown-Bezug", + "price_from": "From AED 1.14M", + "handover": "Details prüfen", + "units": "STUDIO, 1 & 2 BEDROOMS", + "image": "immobile/dubai/aliyah/overview-thumbnail/aliyah-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/dubai-healthcare-city/aliyah", + "short": "Off-Plan-Adresse in Al Jaddaf mit Studios bis 2-BR ab AED 1,14M.", + "marcel_take": "Aliyah ist eine aktuelle Off-Plan-Position im Creek-Cluster Al Jaddaf. Einstieg ab AED 1,14M, mit Studio- bis 2-BR-Mix. Zahlungsplan, Phase und Liefertermin prüfe ich pro Einheit auf Anfrage.", + "highlights": [ + "Studio bis 2-BR-Apartments", + "Creek-Cluster Al Jaddaf", + "Off-Plan-Einstieg ab AED 1,14M" + ], + "data_confidence": "green" + }, + { + "slug": "samia", + "title": "Samia", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/samia/overview-thumbnail/samia-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/samia", + "short": "Al-Furjan-Bestand mit 292 Apartments und acht Duplex-Penthouses.", + "marcel_take": "Samia ist ein 14-stöckiges Bestandsobjekt in Al Furjan mit dem Mix Studio bis 2-BR plus acht Duplex-Penthouses. Die Penthouse-Optionen sind das Differenzierungsmerkmal gegenüber den Schwesteradressen.", + "highlights": [ + "292 Studios bis 2-BR-Apartments", + "Acht Duplex-Penthouses als USP", + "14-stöckiges Bestandsobjekt" + ], + "data_confidence": "yellow", + "official_headline": "LIVE AT EASE AT SAMIA", + "official_description": "Explore the exceptional lifestyle at Samia by Azizi – a sophisticated 14-storey residence nestled in the heart of Al Furjan. With 292 meticulously furnished apartments ranging from studios to spacious 2-bedroom layouts, alongside eight luxurious duplex penthouses, Samia seamlessly blends convenience with unmatched sophistication, setting a new standard for refined living in Al Furjan.", + "official_description_de": "Samia ist eine 14-stöckige Wohnadresse im Herzen von Al Furjan. 292 möblierte Apartments von Studios bis 2-Zimmer-Layouts, ergänzt um acht Duplex-Penthouses, kombinieren Komfort mit gehobener Ausstattung in einem überschaubaren Gebäude." + }, + { + "slug": "plaza", + "title": "Plaza", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/plaza/overview-thumbnail/plaza-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/plaza", + "short": "Etablierte Al-Furjan-Adresse mit Studios, 1- und 2-BR-Apartments.", + "marcel_take": "Plaza ist ein Bestandsprojekt mit klassischer Al-Furjan-Logik: 286 Studios, 46 1-BR und 102 2-BR. Vermietungsstark, Resale-Markt etabliert. Wer Al Furjan auf Cashflow spielt, sollte Plaza neben Star und Roy Mediterranean kennen.", + "highlights": [ + "286 Studios, 46 1-BR und 102 2-BR", + "Bestand mit etabliertem Mietmarkt", + "Resale-Verfügbarkeit auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "LIVE LAVISHLY AT AZIZI PLAZA", + "official_description": "Experience the essence of urban living at Azizi Plaza, where style seamlessly intertwine with convenience. Nestled in a well-connected urban enclave, a various collection of 286 studios, 46 one-bedroom apartments, and 102 two-bedroom apartments, embodying a fresh perspective on contemporary urban lifestyles.", + "official_description_de": "Azizi Plaza liegt in einer gut angebundenen Al-Furjan-Lage und bietet 286 Studios, 46 Ein-Zimmer- und 102 Zwei-Zimmer-Apartments. Eine moderne, zeitgemäß geplante Wohnadresse für klassische urbane Lifestyles." + }, + { + "slug": "shaista", + "title": "Shaista", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/shaista/overview-thumbnail/shaista-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/shaista", + "short": "Bestand in Al Furjan mit Studios, 1- und 2-BR-Apartments.", + "marcel_take": "Shaista ist Bestand in Al Furjan mit dem Standardmix 137 Studios, 124 1-BR, 23 2-BR. Vermietungslogik wie bei den Schwesteradressen Farishta oder Plaza. Verfügbarkeit über Resale, Eckdaten prüfe ich pro Einheit.", + "highlights": [ + "137 Studios, 124 1-BR und 23 2-BR", + "Etabliertes Al-Furjan-Bestandsobjekt", + "Resale-Verfügbarkeit individuell" + ], + "data_confidence": "yellow", + "official_headline": "UNVEILING A CHAPTER OF REFINEMENT AT SHAISTA", + "official_description": "A new chapter of refinement unfolds at Shaista, a place positioned conveniently in the heart of the Al-Furjan neighborhood, with a selection of 137 studios, 124 one-bedroom, and 23 two-bedroom apartments, crafting an enclave that encapsulates the essence of true living.", + "official_description_de": "Shaista liegt zentral im Al-Furjan-Quartier und umfasst 137 Studios, 124 Ein-Zimmer- und 23 Zwei-Zimmer-Apartments. Eine Adresse, die kompakte Grundrisse mit ausgewogener Wohnqualität verbindet." + }, + { + "slug": "montrell", + "title": "Montrell", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/montrell/overview-thumbnail/montrell-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/montrell", + "short": "Mid-Rise-Bestand in Al Furjan mit 168 Studios und 54 1-BR-Apartments.", + "marcel_take": "Montrell ist eine reine Studio- und 1-BR-Adresse in Al Furjan und damit ein konzentriertes Yield-Konstrukt. Bestandsobjekt, Vermarktung über den Zweitmarkt; Mietniveau und Verfügbarkeit besprechen wir individuell.", + "highlights": [ + "168 Studios und 54 1-BR-Apartments", + "Reine Yield-Konfiguration", + "Resale-Verfügbarkeit auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "MONTRELL TRANSCENDS THE ORDINARY", + "official_description": "Montrell is a meticulously crafted mid-rise development, featuring 168 studios and 54 one-bedroom apartments, each a masterpiece of contemporary design and laid-back luxury, allowing you to embrace a lifestyle of your own creation.", + "official_description_de": "Montrell ist eine sorgfältig geplante Mid-Rise-Adresse mit 168 Studios und 54 Ein-Zimmer-Apartments. Zeitgemäßes Design und entspannte Wohnatmosphäre prägen das Haus - klassische Al-Furjan-Yield-Logik." + }, + { + "slug": "candace-acacia", + "title": "Candace Acacia", + "category": "growth-corridors", + "location": "Al Furjan", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "From AED 1.33M", + "handover": "Details prüfen", + "units": "STUDIO, 1 & 3 BEDROOMS", + "image": "immobile/dubai/candace-acacia/overview-thumbnail/candace-acacia-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/candace-acacia", + "short": "Al-Furjan-Adresse mit Studio-, 1- und 3-BR-Mix ab AED 1,33M.", + "marcel_take": "Acacia ist eine etablierte Al-Furjan-Adresse mit ungewöhnlichem Mix Studio bis 3-BR. Einstieg ab AED 1,33M. Klassischer Yield-Cluster in stabiler Lage; Phase und Verfügbarkeit auf Anfrage.", + "highlights": [ + "Studio-, 1- und 3-BR-Mix", + "Einstieg ab AED 1,33M", + "Etablierter Al-Furjan-Cluster" + ], + "data_confidence": "green", + "official_headline": "ELEVATE YOUR LIFESTYLE AT ACACIA RESIDENCES", + "official_description": "Discover a sanctuary where lavishness meets convenience. Azizi's Acacia Residences redefine living, providing you with a dream home that perfectly complements your aspirations. Explore more of what awaits you.", + "official_unit_type": "STUDIO, 1 & 3 BEDROOMS", + "official_starting_price": "From AED 1.33M", + "official_description_de": "Acacia Residences von Azizi positionieren sich als ruhige Wohnadresse im etablierten Al-Furjan-Bestand - eine Kombination aus Komfort und Anbindung für Bewohner mit klassischen Wohnansprüchen." + }, + { + "slug": "aster", + "title": "Aster", + "category": "growth-corridors", + "location": "Al Furjan", + "status": "Verfügbar / Off-Plan", + "status_group": "offplan", + "buyer_profile": "Käufer, die Wachstumskorridore wie Jebel Ali, JVC oder Al Furjan vergleichen", + "price_from": "From AED 1.71 MIL", + "handover": "Details prüfen", + "units": "1 Bedroom", + "image": "immobile/dubai/aster/overview-thumbnail/aster-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/aster", + "short": "Al-Furjan-Adresse mit Studios und 1-Bedroom-Apartments.", + "marcel_take": "Aster ist ein Studio- und 1-BR-Projekt in Al Furjan mit zusätzlich einigen 2-BR-Einheiten. Mit ab AED 1,71M klar im oberen Segment für kleine Wohnungen. Eckdaten und Phase prüfe ich pro Einheit.", + "highlights": [ + "Studio- und 1-BR-Schwerpunkt", + "160 Studios und 58 1-BR-Apartments", + "Einstieg ab AED 1,71M" + ], + "data_confidence": "green", + "official_headline": "A HAVEN OF COMFORT & SOPHISTICATION", + "official_description": "Explore the extraordinary that awaits you at Aster, where 160 studios, 58 one-bedroom apartments, and 9 two-bedroom apartments redefine living with meticulous designs that harmonize elegance with everyday convenience.", + "official_unit_type": "1 BEDROOM", + "official_starting_price": "From AED 1.71 MIL", + "official_description_de": "Aster bietet 160 Studios, 58 Ein-Zimmer- und 9 Zwei-Zimmer-Apartments mit konsequent durchdachter Architektur. Eleganz und Alltagskomfort gehen in den Grundrissen Hand in Hand." + }, + { + "slug": "tulip", + "title": "Tulip", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/tulip/overview-thumbnail/tulip-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/tulip", + "short": "Al-Furjan-Adresse mit 1- bis 3-BR-Apartments für Familien.", + "marcel_take": "Tulip setzt komplett auf 1- bis 3-BR ohne Studio-Anteil und richtet sich damit klar an Familienhaushalte. Eckdaten, Phase und konkrete Verfügbarkeit prüfe ich pro Einheit.", + "highlights": [ + "1- bis 3-BR-Apartments", + "Familienorientierte Al-Furjan-Adresse", + "Verfügbarkeit auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "DWELL IN DISTINCTION AT AZIZI TULIP", + "official_description": "Azizi Tulip stands as a housing gem, presenting a collection of one, two, and three-bedroom apartments that epitomize the essence of refined living. This haven is a sanctuary for families in search of a home that exudes distinction and sophistication, inviting you to indulge in a lifestyle of opulence", + "official_description_de": "Azizi Tulip umfasst 1-, 2- und 3-Zimmer-Apartments und positioniert sich als Adresse für Familien und Bewohner mit höherem Flächenbedarf - klar familienorientiert statt reiner Yield-Adresse." + }, + { + "slug": "freesia", + "title": "Freesia", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/freesia/overview-thumbnail/freesia-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/freesia", + "short": "Al-Furjan-Adresse mit Smart-Living-Ausrichtung.", + "marcel_take": "Freesia gehört zum etablierten Al-Furjan-Bestand und positioniert sich über das Smart-Living-Thema. Vermarktung läuft üblicherweise über den Resale-Markt; Einheiten und Mietniveau besprechen wir individuell.", + "highlights": [ + "Smart-Living-Ausrichtung", + "Etabliertes Al-Furjan-Bestandsobjekt", + "Resale-Verfügbarkeit auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "YOUR ALL-YEAR GETAWAY TO SMART LIVING", + "official_description": "Introducing Al Freesia, a residential haven nestled in the vibrant heart of Al Furjan–it sets the stage for a life of sophistication and ease in a prime location, with impeccable amenities and plush living spaces.", + "official_description_de": "Al Freesia liegt mitten in Al Furjan und kombiniert hochwertige Annehmlichkeiten mit komfortablen Wohnflächen. Eine Adresse mit Fokus auf Ausstattung und Wohnqualität in einer eingespielten Lage." + }, + { + "slug": "daisy", + "title": "Daisy", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/daisy/overview-thumbnail/daisy-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/daisy", + "short": "Al-Furjan-Bestand mit 1-, 2- und 3-BR-Apartments.", + "marcel_take": "Daisy ist eine etablierte Al-Furjan-Adresse mit europäisch ausgestatteten Apartments. Bestandscharakter, Vermarktung über Resale. Wer in Al Furjan eine ruhigere Adresse als die großen Studio-Türme sucht, kann Daisy in den Vergleich nehmen.", + "highlights": [ + "1-, 2- und 3-BR-Apartments", + "Europäisch ausgestattete Küchen", + "Resale-Verfügbarkeit auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "EMBARK ON NEW BEGINNINGS AT DAISY.", + "official_description": "At Daisy, new beginnings intertwine seamlessly with the allure of nature, nestled in the serene embrace of Al Furjan, where you can choose from one, two, and three-bedroom apartments, each adorned with fully-fitted, European-style kitchens boasting high-end finishes.", + "official_description_de": "Daisy in Al Furjan bietet 1-, 2- und 3-Zimmer-Apartments mit voll ausgestatteten Küchen im europäischen Stil und hochwertigen Materialien. Eine Adresse für Bewohner, die Wert auf Ausstattung und Wohnqualität legen." + }, + { + "slug": "orchid", + "title": "Orchid", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/orchid/overview-thumbnail/orchid-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/orchid", + "short": "Al-Furjan-Adresse mit Sichtachse auf Dubai Marina.", + "marcel_take": "Orchid spielt im Al-Furjan-Bestand die Sichtachse zur Dubai Marina aus. Damit lifestyle-affiner positioniert als die reinen Yield-Adressen. Konkrete Einheiten und Phase prüfe ich individuell.", + "highlights": [ + "Sichtachse Richtung Dubai Marina", + "Lifestyle-orientierte Al-Furjan-Adresse", + "Verfügbarkeit auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "WHERE EVERY SUNRISE UNVEILS THE BEAUTY OF DUBAI MARINA", + "official_description": "Imagine waking up to breathtaking views of Dubai Marina every day, while being surrounded by tasteful and elegant design. This is your chance to elevate your living standards and make a statement with Orchid. Invest in more than just a property, invest in a lifestyle that others will envy.", + "official_description_de": "Orchid in Al Furjan bietet Sichtachsen Richtung Dubai Marina und kombiniert sie mit hochwertigem Design. Eine Adresse, die mehr Lifestyle-Charakter trägt als die reinen Yield-Häuser des Quartiers." + }, + { + "slug": "feirouz", + "title": "Feirouz", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/feirouz/overview-thumbnail/feirouz-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/feirouz", + "short": "Familienorientierte Al-Furjan-Adresse mit großzügigen Apartments.", + "marcel_take": "Feirouz richtet sich an Familien mit höherem Flächenbedarf. Bestandsobjekt mit den klassischen Al-Furjan-Vorteilen: Lage, Anbindung und etablierter Mietmarkt. Verfügbarkeit auf Anfrage, Mietniveau besprechen wir konkret.", + "highlights": [ + "Family-Layouts mit großzügigen Apartments", + "Etablierter Al-Furjan-Bestand", + "Verfügbarkeit auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "YOUR IDEAL PLACE TO CALL HOME", + "official_description": "Indulge in the real gem of Al-Furjan at Feirouz, where each family member will find their perfect sanctuary within our spacious apartments, surrounded by a myriad of amenities and breathtaking views that redefine everyday luxury.", + "official_description_de": "Feirouz in Al Furjan ist eine familienorientierte Adresse mit großzügigen Apartments. Die Kombination aus zahlreichen Annehmlichkeiten und ausgewählten Sichtachsen positioniert das Haus als komfortable Wohnadresse für unterschiedliche Familiensituationen." + }, + { + "slug": "yasamine", + "title": "Yasamine", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/yasamine/overview-thumbnail/yasamine-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/yasamine", + "short": "Al-Furjan-Bestand mit unterschiedlichen Layouts und Wohnungsgrößen.", + "marcel_take": "Yasamine setzt auf Layout-Vielfalt im Al-Furjan-Bestand. Wer ein bestimmtes Profil sucht (kleines Studio, großes 2-BR, Eckwohnung), findet hier gute Vergleichsmöglichkeiten. Verfügbarkeit auf Anfrage.", + "highlights": [ + "Layout-Vielfalt im Al-Furjan-Bestand", + "Mehrere Wohnungsgrößen vergleichbar", + "Verfügbarkeit auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "TURNING YOUR NEEDS TO YASAMINE", + "official_description": "At Yasamine, we understand that every resident has unique desires and needs. That's why we've designed our apartments to cater to a variety of lifestyles, with different sizes and layouts available to suit your preferences. And with stunning views from every apartment, you'll never tire of the breathtaking scenery. Experience the uniqueness of Yasamine for yourself and discover your perfect home.", + "official_description_de": "Yasamine in Al Furjan setzt auf Layout-Vielfalt: unterschiedliche Wohnungsgrößen und Grundrisse, dazu ausgewählte Sichtachsen aus jedem Apartment. Eine Adresse, die unterschiedliche Wohnbedürfnisse innerhalb desselben Hauses abdeckt." + }, + { + "slug": "iris", + "title": "Iris", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/iris/overview-thumbnail/iris-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/iris", + "short": "Al-Furjan-Adresse mit Apartments inklusive privater Terrasse oder Balkon.", + "marcel_take": "Iris hebt sich im Al-Furjan-Bestand durch private Terrassen oder Balkone in jeder Einheit ab. Das spricht eher Eigennutzer an als reine Yield-Investoren. Verfügbarkeit individuell prüfen.", + "highlights": [ + "Apartments mit privater Terrasse oder Balkon", + "Eigennutzer-affines Profil", + "Verfügbarkeit auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "DISCOVER THE SERENE LIFE OF IRIS", + "official_description": "At Iris, your dreams become reality with an array of exquisite apartments, each featuring a private terrace or balcony providing a tranquil retreat with stunning city views for you to enjoy the convenience of coming home to your own private sanctuary without any stress.", + "official_description_de": "Iris in Al Furjan kombiniert exquisit ausgestattete Apartments mit privater Terrasse oder Balkon je Einheit - eine Adresse mit klarem Eigennutzer-Fokus innerhalb einer urbanen Lage." + }, + { + "slug": "liatris", + "title": "Liatris", + "category": "al-furjan-yield", + "location": "Al Furjan", + "status": "Bestand / Details prüfen", + "status_group": "ready", + "buyer_profile": "Renditekäufer, die etablierte Al-Furjan-Adressen und Details im Bestand prüfen", + "price_from": "Auf Anfrage", + "handover": "Details prüfen", + "units": "Einheitentypen prüfen", + "image": "immobile/dubai/liatris/overview-thumbnail/liatris-overview-thumbnail.webp", + "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/liatris", + "short": "Al-Furjan-Adresse mit Sichtachse Richtung Dubai Marina.", + "marcel_take": "Liatris bietet aus dem Al-Furjan-Bestand heraus Sichtachsen Richtung Dubai Marina. Damit eher für Eigennutzer und Lifestyle-orientierte Mieter relevant als für reine Cashflow-Optimierung.", + "highlights": [ + "Sichtachse Richtung Dubai Marina", + "Lifestyle-Charakter", + "Verfügbarkeit auf Anfrage" + ], + "data_confidence": "yellow", + "official_headline": "INDULGE IN MESMERIZING PANORAMIC VIEWS", + "official_description": "Discover a life of exquisite luxury at Azizi Liatris, where each residence offers enchanting vistas of the iconic Dubai Marina high-rises, elevating your way of living to new heights as you indulge in the epitome of sophistication with opulent interiors.", + "official_description_de": "Azizi Liatris bietet aus jeder Wohnung Sichtachsen in Richtung Dubai-Marina-Skyline. Eine Adresse mit Lifestyle-Charakter und gehobener Ausstattung im Al-Furjan-Bestand." + } + ], + "market_context": { + "title": "Warum Dubai für Investoren relevant bleibt", + "subtitle": "Warum Dubai für viele internationale Investoren relevant bleibt - und warum trotzdem nicht jedes Projekt automatisch passt.", + "facts": [ + { + "icon": "receipt-percent", + "title": "0 % Einkommensteuer", + "description": "Auf Mieteinnahmen und Veräußerungsgewinne fällt in Dubai keine Einkommensteuer an. Entscheidend für die Gesamtrendite bleibt aber die persönliche steuerliche Situation in Ihrem Heimatland - das klären wir mit Ihrem Steuerberater individuell." + }, + { + "icon": "chart-bar", + "title": "Mietnachfrage", + "description": "Starke Zuwanderung, Tourismus und internationale Business-Nachfrage tragen den Mietmarkt - allerdings sehr unterschiedlich je nach Stadtteil. Genau deshalb sortieren wir die Adressen nach Lage und Zielgruppe, nicht nach Rendering." + }, + { + "icon": "shield-check", + "title": "Regulierung", + "description": "Dubai Land Department, RERA und gesetzlich vorgeschriebene Escrow-Konten geben Off-Plan-Käufern in Dubai mehr Transparenz, als die meisten Erstkäufer vor dem ersten Termin erwarten - der Prozess ist klar geregelt." + }, + { + "icon": "banknotes", + "title": "AED an USD gekoppelt", + "description": "Der Dirham ist seit Jahrzehnten fest an den US-Dollar gebunden. Für Euro-Käufer ist die Wechselkursrechnung damit deutlich planbarer als in vielen anderen Wachstumsmärkten - das nimmt aus dem Investment einen typischen Risikofaktor heraus." + }, + { + "icon": "identification", + "title": "Golden Visa", + "description": "Ab bestimmten Investmentgrößen kann der Immobilienkauf in Dubai Aufenthaltsoptionen in den Vereinigten Arabischen Emiraten eröffnen. Die konkreten Schwellenwerte und Voraussetzungen prüfen wir vor jeder Entscheidung individuell." + }, + { + "icon": "building-office-2", + "title": "Projektqualität zählt", + "description": "Nicht \"Dubai\" entscheidet über Ihre Rendite, sondern Lage, Entwickler, Baufortschritt, Zahlungsplan und Exit-Strategie auf Einheitenebene. Genau dort setzt die persönliche Einordnung von Marcel an - statt einer austauschbaren Empfehlung." + } + ] + }, + "process": { + "title": "Der Kaufprozess mit B2in", + "steps": [ + { + "number": "01", + "title": "Strategie klären", + "description": "Eigennutzung, Cashflow, Wertzuwachs oder Trophy Asset - bevor wir über einzelne Projekte sprechen, legen wir die Logik fest, an der jede weitere Entscheidung gemessen wird." + }, + { + "number": "02", + "title": "Projekte shortlisten", + "description": "Aus den 63 Adressen werden 2 bis 4 passende Projekte - keine endlose Linkliste, sondern eine begründete Auswahl, die wir gemeinsam priorisieren." + }, + { + "number": "03", + "title": "Verfügbarkeit prüfen", + "description": "Aktive Phasen, Einheiten, Etagen, Views, Zahlungsplan und Resale-Angebote werden vor jeder Empfehlung aktuell abgefragt - nicht aus dem Katalog abgelesen." + }, + { + "number": "04", + "title": "Kauf begleiten", + "description": "Reservierung, SPA, DLD- und RERA-Prozess, Zahlungsschritte und Übergabe werden strukturiert begleitet - mit klarem Ansprechpartner an jeder Stelle des Ablaufs." + } + ] + }, + "mindset": { + "title": "Passt Dubai zu Ihrer Investmentstrategie?", + "positive": "Dubai passt, wenn Sie internationale Dynamik suchen, Entscheidungen zügig treffen können und Projektqualität wichtiger nehmen als reine Renderings.", + "negative": "Dubai passt nicht, wenn Sie absolute Garantien erwarten, keine Wechselkurs- oder Marktrisiken tragen wollen oder jede Entscheidung erst nach Monaten treffen können.", + "cta": "Persönliche Einschätzung anfragen" + }, + "furniture": { + "title": "Immobilie gekauft - Einrichtung mitdenken.", + "text": "Eine vermietete Wohnung ist nur so stark wie ihre Ausstattung. Als B2in-Kunde können Sie Immobilienkauf, Einrichtung und Vermietbarkeit von Anfang an zusammendenken - mit Zugang zu einem kuratierten Einrichtungsnetzwerk.", + "button": "Mehr zum B2in-Netzwerk" + } +} \ No newline at end of file diff --git a/resources/views/livewire/web/components/sections/benefits-section.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/benefits-section.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/benefits-section.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/benefits-section.blade.php diff --git a/resources/views/livewire/web/components/sections/broker-section.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/broker-section.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/broker-section.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/broker-section.blade.php diff --git a/resources/views/livewire/web/components/sections/card-section.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/card-section.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/card-section.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/card-section.blade.php diff --git a/resources/views/livewire/web/components/sections/commitment-section.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/commitment-section.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/commitment-section.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/commitment-section.blade.php diff --git a/resources/views/livewire/web/components/sections/dark-stats-section.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/dark-stats-section.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/dark-stats-section.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/dark-stats-section.blade.php diff --git a/resources/views/livewire/web/components/sections/digital-core.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/digital-core.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/digital-core.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/digital-core.blade.php diff --git a/resources/views/livewire/web/components/sections/ecosystem-hero.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/ecosystem-hero.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/ecosystem-hero.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/ecosystem-hero.blade.php diff --git a/resources/views/livewire/web/components/sections/ecosystem-stats.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/ecosystem-stats.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/ecosystem-stats.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/ecosystem-stats.blade.php diff --git a/resources/views/livewire/web/components/sections/end-customer-section.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/end-customer-section.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/end-customer-section.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/end-customer-section.blade.php diff --git a/resources/views/livewire/web/components/sections/final-commitment.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/final-commitment.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/final-commitment.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/final-commitment.blade.php diff --git a/resources/views/livewire/web/components/sections/hero-image.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/hero-image.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/hero-image.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/hero-image.blade.php diff --git a/resources/views/livewire/web/components/sections/hero-tiles.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/hero-tiles.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/hero-tiles.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/hero-tiles.blade.php diff --git a/resources/views/livewire/web/components/sections/leadership-team.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/leadership-team.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/leadership-team.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/leadership-team.blade.php diff --git a/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/magazin-detail.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/magazin-detail.blade.php new file mode 100644 index 00000000..8f82c2bc --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/magazin-detail.blade.php @@ -0,0 +1,116 @@ +
+ + + +
+
+
+

+ {!! $article['title'] !!} +

+

+ {{ $article['subtitle'] }} +

+
+
+ + + + {{ $article['date'] }} +
+
+ + + + {{ $article['readTime'] }} +
+
+
+ + +
+ +
+ +
+ +
+
+

+ {{ $article['content']['intro'] }} +

+ + @foreach($article['content']['sections'] as $index => $section) +
+

+ {{ $index + 1 }}. {{ $section['title'] }} +

+

+ {{ $section['content'] }} +

+
+ @endforeach +
+
+ + + {{--
+
+ +
+

{{ $content['share_article'] }}

+
+ + + +
+
+
+
--}} +
+
+
+ + + +
+
+
+

+ {!! $content['cta_title'] !!} +

+ + + {{ $content['cta_button'] }} + +
+
+
+
diff --git a/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/magazin-list.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/magazin-list.blade.php new file mode 100644 index 00000000..f0851100 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/magazin-list.blade.php @@ -0,0 +1,74 @@ +
+
+
+

+ {!! $content['title'] !!} +

+

+ {{ $content['subtitle'] }} +

+
+ +
+ @foreach($this->posts as $post) + + @endforeach +
+ + {{-- --}} +
+
diff --git a/resources/views/livewire/web/components/sections/partner-benefits.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/partner-benefits.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/partner-benefits.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/partner-benefits.blade.php diff --git a/resources/views/livewire/web/components/sections/partner-hero.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/partner-hero.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/partner-hero.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/partner-hero.blade.php diff --git a/resources/views/livewire/web/components/sections/partner-process.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/partner-process.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/partner-process.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/partner-process.blade.php diff --git a/resources/views/livewire/web/components/sections/portfolio.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/portfolio.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/portfolio.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/portfolio.blade.php diff --git a/resources/views/livewire/web/components/sections/spotlights-section.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/spotlights-section.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/spotlights-section.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/spotlights-section.blade.php diff --git a/resources/views/livewire/web/components/sections/supplier-section.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/supplier-section.blade.php similarity index 100% rename from resources/views/livewire/web/components/sections/supplier-section.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/sections/supplier-section.blade.php diff --git a/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/ui/contact-form.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/ui/contact-form.blade.php new file mode 100644 index 00000000..32d20d46 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/livewire/web/components/ui/contact-form.blade.php @@ -0,0 +1,267 @@ +
+ +
+
+
+ +
+

+ {!! $content['hero']['title'] ?? 'Send us a
message.' !!} +

+

+ {{ $content['hero']['subtitle'] ?? 'Wir freuen uns auf Ihre Nachricht und werden uns schnellstmöglich bei Ihnen melden.' }} +

+
+ + +
+ @if ($success) +
+
+ + + +
+
+

{{ __('ui.contact_form.success_title') }}

+

+ {{ $content['form']['success_message'] ?? __('ui.contact_form.success_message') }} +

+
+
+ @else +
+
+
+ + + @error('firstName') {{ $message }} @enderror +
+
+ + + @error('lastName') {{ $message }} @enderror +
+
+ +
+ + + @error('company') {{ $message }} @enderror +
+ +
+
+ + + @error('email') {{ $message }} @enderror +
+
+ + + @error('phone') {{ $message }} @enderror +
+
+ +
+ +
+ +
+ @error('subject') {{ $message }} @enderror +
+ + + +
+ + + @error('message') {{ $message }} @enderror +
+ + {{-- Honeypot --}} + + +
+ + @error('privacy') {{ $message }} @enderror +
+ + +

{{ __('ui.required_fields') }}

+
+ @endif +
+
+
+
+ + +
+
+
+ @foreach($this->contactInfo as $index => $info) +
+
+ @if($info['icon'] === 'map-pin') + + + + + @elseif($info['icon'] === 'mail') + + + + @else + + + + @endif +
+

{{ $info['title'] }}

+
+ @foreach($info['info'] as $line) +

{{ $line }}

+ @endforeach +
+
+ @endforeach +
+
+
+ + + {{--
+
+
+
+

+ {!! $content['social_media']['title'] ?? 'Follow for
exclusives' !!} +

+

+ {{ $content['social_media']['subtitle'] ?? 'Bleiben Sie auf dem Laufenden mit exklusiven Angeboten und News.' }} +

+
+ +
+ @foreach($this->socialMedia as $index => $social) +
+
+

{{ $social['name'] }}

+

{{ $social['handle'] }}

+
+ + + +
+ @endforeach +
+
+
+
+ --}} +
diff --git a/resources/views/web/about_bak.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/about_bak.blade.php similarity index 100% rename from resources/views/web/about_bak.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/about_bak.blade.php diff --git a/resources/views/web/b2in.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/b2in.blade.php similarity index 100% rename from resources/views/web/b2in.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/b2in.blade.php diff --git a/resources/views/web/dev/immobilien-v1.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/dev/immobilien-v1.blade.php similarity index 100% rename from resources/views/web/dev/immobilien-v1.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/dev/immobilien-v1.blade.php diff --git a/resources/views/web/dev/interior-v1.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/dev/interior-v1.blade.php similarity index 100% rename from resources/views/web/dev/interior-v1.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/dev/interior-v1.blade.php diff --git a/resources/views/web/dev/partner-v1.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/dev/partner-v1.blade.php similarity index 100% rename from resources/views/web/dev/partner-v1.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/dev/partner-v1.blade.php diff --git a/resources/views/web/ecosystem.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/ecosystem.blade.php similarity index 100% rename from resources/views/web/ecosystem.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/ecosystem.blade.php diff --git a/resources/views/web/home2.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/home2.blade.php similarity index 100% rename from resources/views/web/home2.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/home2.blade.php diff --git a/resources/views/web/immobilien-show.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/immobilien-show.blade.php similarity index 100% rename from resources/views/web/immobilien-show.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/immobilien-show.blade.php diff --git a/resources/views/web/immobilien.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/immobilien.blade.php similarity index 100% rename from resources/views/web/immobilien.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/immobilien.blade.php diff --git a/resources/views/web/interior.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/interior.blade.php similarity index 100% rename from resources/views/web/interior.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/interior.blade.php diff --git a/resources/views/web/netzwerk.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/netzwerk.blade.php similarity index 98% rename from resources/views/web/netzwerk.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/netzwerk.blade.php index 1dec308d..ee65f515 100644 --- a/resources/views/web/netzwerk.blade.php +++ b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/netzwerk.blade.php @@ -1,6 +1,6 @@ @extends('web.layouts.web-master') -@section('title', 'Netzwerk & Ökosystem - B2in') +@section('title', 'Netzwerk – regionale Fachexperten und starke Marken | B2in Interior') @section('meta_description', 'Das B2in-Netzwerk: Europäisches Einrichtungsnetzwerk, Fachhändler-Partnerschaften & Marken-Kooperationen – in Entwicklung.') @section('content') @@ -36,7 +36,7 @@
diff --git a/resources/views/web/partner.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/partner.blade.php similarity index 100% rename from resources/views/web/partner.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/partner.blade.php diff --git a/resources/views/web/portfolio.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/portfolio.blade.php similarity index 100% rename from resources/views/web/portfolio.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/portfolio.blade.php diff --git a/resources/views/web/service.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/service.blade.php similarity index 100% rename from resources/views/web/service.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/service.blade.php diff --git a/resources/views/web/welcome_bak.blade.php b/dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/welcome_bak.blade.php similarity index 100% rename from resources/views/web/welcome_bak.blade.php rename to dev/2026-08-28/archiv-2026-10-06/code/resources/views/web/welcome_bak.blade.php diff --git a/dev/2026-08-28/archiv-2026-10-06/code/routes-web.php b/dev/2026-08-28/archiv-2026-10-06/code/routes-web.php new file mode 100644 index 00000000..53420c36 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/code/routes-web.php @@ -0,0 +1,284 @@ +exists('web.'.$theme)) { + return view('web.'.$theme); + } + + // Fallback to the default home view + return view('web.home'); +})->name('home'); + +// Entwurf der Startseite in der Farbwelt vom 24.09.2026 (Nachtrag 19) – nur zur Abstimmung, +// mit B2IN_HOME_DRAFT=false verschwindet die Seite (404). +Route::get('/entwurf', function () { + abort_unless(config('app.theme', 'b2in') === 'b2in' && config('app.home_draft'), 404); + + app()->instance('b2in.palette', 'greige'); + + return view('web.home-draft'); +})->name('home.draft'); + +// Willkommensseite +Route::get('/welcome', function () { + return view('web.welcome'); +})->name('welcome'); + +// Weitere gemeinsame Webseiten hier... +Route::get('/about', function () { + return view('web.about'); +})->name('about'); +Route::get('/ecosystem', function () { + return redirect('/partner', 301); +})->name('ecosystem'); + +$loadAziziContent = fn (): array => json_decode( + file_get_contents(resource_path('lang/de/immobilien-azizi.json')), + true, + 512, + JSON_THROW_ON_ERROR, +); + +$isAziziSourcePreview = function (Request $request): bool { + if (! $request->query->has('dev')) { + return false; + } + + return ! in_array(strtolower((string) $request->query('dev')), ['0', 'false', 'off', 'no'], true); +}; + +Route::get('/immobilien', function (Request $request) use ($isAziziSourcePreview, $loadAziziContent) { + $content = $loadAziziContent(); + $dev = $isAziziSourcePreview($request); + $devQuery = $dev; + $overviewRouteName = 'immobilien'; + $detailRouteName = 'immobilien.show'; + + return view('web.dev.immobilien-azizi', compact('content', 'dev', 'devQuery', 'overviewRouteName', 'detailRouteName')); +})->name('immobilien'); + +// Immobilien-Welt: eigenes Magazin, eigene Über-uns-Seite und eigene FAQ. Muessen vor der +// Projekt-Detailroute stehen, sonst wuerde diese die Pfade als Projekt-Slug lesen. +Route::get('/immobilien/magazin', function () { + return view('web.magazin', ['world' => 'immobilien']); +})->name('immobilien.magazin'); + +Route::get('/immobilien/ueber-b2in', function () { + return view('web.immobilien-about'); +})->name('immobilien.about'); + +Route::get('/immobilien/faq', function () { + return view('web.faq', ['section' => 'faq_immobilien']); +})->name('immobilien.faq'); + +Route::get('/immobilien/kontakt', function () { + return view('web.contact', ['world' => 'immobilien']); +})->name('immobilien.contact'); + +Route::get('/immobilien/{slug}', function (Request $request, string $slug) use ($isAziziSourcePreview, $loadAziziContent) { + $content = $loadAziziContent(); + $dev = $isAziziSourcePreview($request); + $devQuery = $dev; + $overviewRouteName = 'immobilien'; + $project = collect($content['projects'] ?? [])->firstWhere('slug', $slug); + abort_unless($project, 404); + + return view('web.dev.immobilien-azizi-show', compact('content', 'project', 'dev', 'devQuery', 'overviewRouteName')); +})->name('immobilien.show'); + +// Die Netzwerk-Seite geht im Abschnitt "Mehr als Marken: unser Netzwerk" auf /marken auf. +// Alte Links und Rankings laufen per 301 dorthin; die View bleibt als Archiv liegen. +Route::get('/netzwerk', function () { + return redirect('/marken', 301); +})->name('netzwerk'); +Route::get('/interior', function () { + return redirect('/marken', 301); +})->name('interior'); + +/*Route::get('/immobilien/{slug}', function (string $slug) { + $cmsProject = CmsProject::query()->published()->where('slug', $slug)->first(); + if ($cmsProject) { + $project = $cmsProject->toFrontendArray(); + + return view('web.immobilien-show', compact('project')); + } + + $theme = config('app.theme', 'b2in'); + $immobilienProjects = cms_theme_section('immobilien_projects', $theme); + $project = is_array($immobilienProjects) ? data_get($immobilienProjects, "projects.{$slug}") : null; + abort_unless($project, 404); + + return view('web.immobilien-show', compact('project')); + +})->name('immobilien.show'); + */ +Route::get('/partner', function () { + return redirect('/marken', 301); +})->name('partner'); +Route::get('/magazin', function () { + return view('web.magazin'); +})->name('magazin'); +// Alte numerische Magazin-URLs (/magazin/1 … /magazin/5) dauerhaft auf den Slug umleiten. +// Muss vor der Slug-Route stehen, sonst wuerde diese die Ziffern selbst schlucken. +Route::get('/magazin/{id}', function (string $id) { + $slug = \App\Models\CmsArticle::slugForLegacyId($id); + abort_unless($slug !== null, 404); + + return redirect()->route('magazin.detail', ['slug' => $slug], 301); +})->whereNumber('id')->name('magazin.detail.legacy'); + +Route::get('/magazin/{slug}', function (string $slug) { + // Die Detailseite rendert in der Welt ihres Beitrags (Dubai-Themen bleiben blau). Die Welt + // muss vor dem Rendern feststehen, weil Kopf- und Fusszeile sie in mount() festhalten. + $article = \App\Models\CmsArticle::forFrontend()[$slug] ?? null; + abort_unless($article !== null, 404); + b2in_world_set($article['world'] ?? 'interior'); + + return view('web.magazin-detail', compact('slug')); +})->name('magazin.detail'); +// Kernmarken: Uebersichtsseite und Detailseite je Marke. +Route::get('/marken', function () { + return view('web.marken'); +})->name('marken'); + +Route::get('/marken/{slug}', function (string $slug) { + $brands = \App\Models\CmsBrand::forFrontend(); + abort_unless(isset($brands[$slug]), 404); + + $brand = $brands[$slug]; + $brandTitle = $brand['name'].' – '.$brand['tagline'].' | B2in Interior'; + $brandDescription = trim(strip_tags((string) $brand['teaser'])); + + return view('web.marken-show', compact('slug', 'brandTitle', 'brandDescription')); +})->name('marken.show'); + +// Referenzen: realisierte Projekte aus den Markengalerien plus der Showroom-Feed. +Route::get('/referenzen', function () { + return view('web.referenzen'); +})->name('referenzen'); + +// Schreibgeschuetzte Einbettung eines Displays (nur veroeffentlichte Playlists, kein Token). +Route::get('/embed/display/{display}', [\App\Http\Controllers\DisplayEmbedController::class, 'show']) + ->name('display.embed'); + +Route::get('/contact', function () { + return view('web.contact'); +})->name('contact'); + +// Verwaiste Seiten: ihre Content-Sektionen (hero_image, content_section_left/right, portfolio) +// existieren in keiner Lang-Datei mehr und die Seiten liefern seitdem 500. Sie werden wie die +// anderen stillgelegten Seiten dauerhaft umgeleitet; die Views bleiben als Archiv liegen. +Route::get('/service', function () { + return redirect('/marken', 301); +})->name('service'); + +Route::get('/portfolio', function () { + return redirect('/immobilien', 301); +})->name('portfolio'); + +Route::get('/faq', function () { + return view('web.faq'); +})->name('faq'); + +// Rechtliche Seiten +Route::get('/impressum', function () { + return view('web.impressum'); +})->name('impressum'); +Route::get('/privacy', function () { + return view('web.privacy'); +})->name('privacy'); +Route::get('/terms', function () { + return view('web.terms'); +})->name('terms'); +Route::get('/cookie-policy', function () { + return view('web.cookie-policy'); +})->name('cookie-policy'); + +// Theme Demo Route +Route::get('/theme-demo', function () { + return view('web.theme-demo'); +})->name('theme-demo'); + +// Dev: Sitemap & Archiv-Versionen +Route::prefix('dev')->group(function () use ($loadAziziContent) { + Route::get('/sitemap', fn () => view('web.dev.sitemap'))->name('dev.sitemap'); + Route::get('/immobilien-v1', fn () => view('web.dev.immobilien-v1'))->name('dev.immobilien-v1'); + Route::get('/immobilien-azizi', function () use ($loadAziziContent) { + $content = $loadAziziContent(); + $dev = true; + $devQuery = false; + $overviewRouteName = 'dev.immobilien-azizi'; + $detailRouteName = 'dev.immobilien-azizi.show'; + + return view('web.dev.immobilien-azizi', compact('content', 'dev', 'devQuery', 'overviewRouteName', 'detailRouteName')); + })->name('dev.immobilien-azizi'); + Route::get('/immobilien-azizi/{slug}', function (string $slug) use ($loadAziziContent) { + $content = $loadAziziContent(); + $project = collect($content['projects'] ?? [])->firstWhere('slug', $slug); + abort_unless($project, 404); + $dev = true; + $devQuery = false; + $overviewRouteName = 'dev.immobilien-azizi'; + + return view('web.dev.immobilien-azizi-show', compact('content', 'project', 'dev', 'devQuery', 'overviewRouteName')); + })->name('dev.immobilien-azizi.show'); + Route::get('/interior-v1', fn () => view('web.dev.interior-v1'))->name('dev.interior-v1'); + Route::get('/partner-v1', fn () => view('web.dev.partner-v1'))->name('dev.partner-v1'); +}); + +// Pfad-basierte Theme-Routen für lokale Entwicklung wurden entfernt +// Die Themensauswahl wird nun über den ThemeServiceProvider gesteuert (Domain oder ?theme=... GET-Parameter) + +Route::get('/partner/invitation/expired/{token}', function (string $token) { + $invitation = \App\Models\PartnerInvitation::with('role')->where('token', $token)->firstOrFail(); + + return view('partner.invitation-expired', compact('invitation')); +})->name('partner.invitation.expired'); + +Route::get('/partner/invitation/used/{token}', function (string $token) { + $invitation = \App\Models\PartnerInvitation::with('role')->where('token', $token)->firstOrFail(); + + return view('partner.invitation-used', compact('invitation')); +})->name('partner.invitation.used'); + +Volt::route('/partner/invitation/{token}', 'partner.invitation-accept') + ->name('partner.invitation.accept'); + +Volt::route('/partner/create-account', 'partner.create-account') + ->name('partner.create.account'); + +// Öffentliche Registrierung per QR-/Code (Landing, code-check) +Volt::route('/reg/{role}', 'reg.landing') + ->name('registration.landing'); + +Volt::route('/registration/thank-you', 'reg.thank-you') + ->name('registration.thank-you'); + +// Partner Setup Wizard & Daten +Route::middleware('auth')->group(function () { + Volt::route('/partner/setup', 'partner.setup-wizard') + ->name('partner.setup.wizard'); +}); + +// Cabinet Quick-Status – key-geschützte Mini-App für schnellen Statuswechsel +Route::get('/info/status', QuickStatus::class)->name('cabinet.quick-status'); + +// Authentifizierungs-Routen werden in domains.php eingebunden +// require __DIR__ . '/auth.php'; diff --git a/tests/Feature/Cms/NetzwerkPageCmsSeederTest.php b/dev/2026-08-28/archiv-2026-10-06/code/tests/Feature/Cms/NetzwerkPageCmsSeederTest.php similarity index 100% rename from tests/Feature/Cms/NetzwerkPageCmsSeederTest.php rename to dev/2026-08-28/archiv-2026-10-06/code/tests/Feature/Cms/NetzwerkPageCmsSeederTest.php diff --git a/dev/2026-08-28/archiv-2026-10-06/lang-de-sektionen.php b/dev/2026-08-28/archiv-2026-10-06/lang-de-sektionen.php new file mode 100644 index 00000000..ea76e61d --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/lang-de-sektionen.php @@ -0,0 +1,1203 @@ + [ + 'title' => 'Zwei Welten. Ein Netzwerk.', + 'paragraphs' => [ + 0 => 'Wir verbinden den Immobilienkauf mit der perfekten Einrichtung. Immobilien-Investoren profitieren von unserem exklusiven Möbel-Netzwerk – Projektentwickler von unserer deutschen Vertragssicherheit im Supply-Chain-Management.', + ], + 'image' => 'b2in/best-of-two-worlds.jpg', + 'image_alt' => 'Das B2in-Ökosystem – Immobilien und Einrichtung', + 'image_caption' => 'Das B2in-Ökosystem', + ], + 'ecosystem_core' => [ + 'title' => 'Ein Ökosystem, drei Säulen', + 'subtitle' => '', + 'pillars' => [ + 0 => [ + 'icon' => 'building-office-2', + 'title' => 'Immobilien & Investments', + 'description' => 'Exklusive Off-Market-Projekte & High-Yield Renditeobjekte.', + 'link' => '/immobilien', + ], + 1 => [ + 'icon' => 'squares-2x2', + 'title' => 'Local-for-Local Marktplatz', + 'description' => 'Das Netzwerk für den regionalen Möbelfachhandel und Makler.', + 'link' => '/netzwerk', + ], + 2 => [ + 'icon' => 'clipboard-document-check', + 'title' => 'Supply-Chain-Management', + 'description' => 'Deutsche Vertragssicherheit für internationale Immobilienentwickler.', + 'link' => '/netzwerk', + ], + ], + ], + 'brand_worlds' => [ + 'title' => 'Unsere Welten:
Design, Immobilien und internationaler Handel', + 'subtitle' => 'Von internationalen Immobilien-Investments über exklusive Einrichtungskonzepte bis zum transatlantischen Handel – B2in verbindet die Welten, die zusammengehören.', + 'worlds' => [ + 0 => [ + 'image' => 'b2in/stileigentum.jpg', + 'title' => 'Stileigentum', + 'description' => 'Das Premium-Segment: Exklusive und hochwertige Einrichtungskonzepte für anspruchsvolle Kunden, die Qualität und Tradition schätzen.', + 'link' => 'https://stileigentum.test', + 'logo' => 'img/logos/stileigentum-logo-positiv.svg', + 'logo_width' => 'w-35', + 'external' => true, + ], + 1 => [ + 'image' => 'b2in/style2own.jpg', + 'title' => 'Style2own', + 'description' => 'Der Lifestyle-Kanal: Moderne Einrichtungskonzepte für Young Professionals und trend-orientierte Kunden – urban, flexibel, inspirierend.', + 'link' => 'https://style2own.test', + 'logo' => 'img/logos/style2own-logo-positiv.svg', + 'logo_width' => 'w-28', + 'external' => true, + ], + 2 => [ + 'image' => 'b2in/b2a.jpg', + 'title' => 'B2A', + 'description' => 'Unsere Logistik-Power für den transatlantischen Handel. Wir ermöglichen Herstellern den direkten Zugang zu internationalen Märkten.', + 'link' => 'https://b2a.test', + 'logo' => 'img/logos/b2a-logo-positiv.svg', + 'logo_width' => 'w-18', + 'external' => true, + ], + ], + ], + 'integriertes_modell_b2in' => [ + 'title' => 'Das Beste aus zwei Welten:
Immobilien und Einrichtung', + 'paragraphs' => [ + 0 => 'B2in verbindet, was zusammengehört: Wer eine Immobilie erwirbt, braucht die passende Einrichtung. Wer exklusiv einrichten möchte, findet über unser Netzwerk die besten lokalen Fachexperten – ergänzt durch das Sortiment europäischer Hersteller.', + 1 => 'Das Ergebnis: Ein nahtloses Erlebnis für den Kunden und neue Ertragsquellen für unsere Partner – ob Makler, Händler oder Entwickler.', + ], + 'image' => 'b2in/best-of-two-worlds.jpg', + 'image_alt' => 'Das Ergebnis für den Kunden – Immobilie und Einrichtung aus einer Hand', + 'image_caption' => 'Immobilie und Einrichtung – aus einer Hand', + ], + 'immobilien_hero' => [ + 'title' => 'Investieren Sie in die Zukunft – Dubai, Lissabon & mehr.', + 'subtitle' => 'Exklusive Off-Market-Projekte und High-Yield-Investments. Persönlich kuratiert und begleitet von Marcel Scheibe.', + 'features' => [ + 0 => [ + 'title' => 'Off-Market', + 'description' => 'Exklusive Projekte', + 'icon' => 'lock-closed', + ], + 1 => [ + 'title' => 'High-Yield', + 'description' => 'Renditestarke Investments', + 'icon' => 'arrow-trending-up', + ], + 2 => [ + 'title' => 'Persönlich', + 'description' => 'Begleitung durch Marcel Scheibe', + 'icon' => 'user', + ], + 3 => [ + 'title' => 'International', + 'description' => 'Dubai, Lissabon & mehr', + 'icon' => 'globe-alt', + ], + ], + 'image' => 'b2in/hero-immobilien.jpg', + 'image_alt' => 'Internationale Immobilien-Investments', + 'card_title' => 'B2in Immobilien', + 'card_text' => 'Exklusive internationale Investments', + 'hub' => [ + 'title' => 'B2in Immobilien', + 'subtitle' => 'Exklusive internationale Investments', + ], + 'stats' => [ + 0 => 'Off-Market Zugang', + 1 => 'Persönliche Begleitung', + 2 => 'Renditestarke Objekte', + ], + ], + 'immobilien_projects' => [ + 'title' => 'Aktuelle Launches & Projekte', + 'subtitle' => 'Entdecken Sie unsere aktuellen Immobilien-Projekte auf internationalen Märkten.', + 'projects' => [ + 'azizi-creek-views-4' => [ + 'slug' => 'azizi-creek-views-4', + 'title' => 'Azizi Developments: Creek Views 4', + 'location' => 'Al Jaddaf, Dubai', + 'status' => 'NEW LAUNCH', + 'launch_date' => '03.03.2026', + 'price_from' => 'ab 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)', + 'image' => 'expose/a1/image-4.jpeg', + 'highlights' => [ + 0 => 'Prime Waterfront Views', + 1 => '1BR: ab 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)', + 2 => 'Exklusives 3BR Penthouse (Single Inventory)', + 3 => 'High Rental Demand & Capital Appreciation', + ], + 'quick_facts' => [ + 0 => [ + 'icon' => 'home-modern', + 'label' => 'Typen', + 'value' => '1BR & 3BR Penthouse', + ], + 1 => [ + 'icon' => 'squares-2x2', + 'label' => 'Größe', + 'value' => '543 – 2.346 sqft', + ], + 2 => [ + 'icon' => 'building-office-2', + 'label' => 'Einheiten', + 'value' => 'Nur 132 (Limited)', + ], + 3 => [ + 'icon' => 'user', + 'label' => 'Entwickler', + 'value' => 'Azizi Developments', + ], + ], + 'investment_case' => [ + 'title' => 'Starkes Investment, hohe Nachfrage.', + 'text' => 'Creek Views 4 bietet eine strategische Top-Lage in Al Jaddaf. Die Kombination aus limitiertem Angebot (nur 132 Einheiten) und Premium-Ausstattung macht dieses Projekt zur idealen Wahl für Investoren, die auf Wertsteigerung (Capital Appreciation) und hohe Mietnachfrage abzielen.', + 'views' => [ + 0 => 'Road View', + 1 => 'Sitting & Play Area View', + 2 => 'Neighbour View', + ], + ], + 'gallery' => [ + 0 => 'expose/a1/image-4.jpeg', + 1 => 'expose/a1/image-3.jpeg', + 2 => 'expose/a1/image-2.jpeg', + 3 => 'expose/a1/image-5.jpeg', + 4 => 'expose/a1/image-6.jpeg', + 5 => 'expose/a1/image-7.jpeg', + ], + 'location_info' => [ + 'title' => 'Strategische Location: Al Jaddaf', + 'map_url' => 'https://maps.google.com/?q=Al+Jaddaf+Dubai', + 'points' => [ + 0 => 'Direkte Anbindung an Dubai Creek und Waterfront', + 1 => 'Wenige Minuten bis Downtown Dubai & Burj Khalifa', + 2 => 'Exzellente Infrastruktur und wachsender Stadtteil', + ], + ], + 'contact' => [ + 'title' => 'Sichern Sie sich eine der 132 Einheiten.', + 'subtitle' => 'Ihr Ansprechpartner: Marcel Scheibe', + 'options' => [ + '' => 'Ich interessiere mich für...', + '1br' => '1 Bedroom Apartment', + '3br_penthouse' => '3BR Penthouse (Single Unit)', + 'general' => 'Allgemeine Beratung', + ], + ], + ], + ], + 'cta_text' => 'Jetzt Exposé & Verfügbarkeit anfragen', + 'cta_link' => '/contact', + ], + 'immobilien_moebel_vorteil' => [ + 'title' => 'Ihr Investment, Ihr Vorteil', + 'text' => 'Als Käufer einer B2in-Immobilie erhalten Sie exklusiven Insider-Zugang zu unserem B2in-Möbelnetzwerk. Richten Sie Ihre Immobilie zu unschlagbaren Partner-Konditionen ein.', + 'button_text' => 'Mehr zum B2in-Netzwerk', + 'button_link' => '/netzwerk', + ], + 'immobilien_trust' => [ + 'title' => 'Persönliche Begleitung', + 'paragraphs' => [ + 0 => 'Hinter jedem B2in-Investment steht Marcel Scheibe als persönlicher Ansprechpartner. Keine anonyme Plattform – sondern ein Gesicht mit Expertise, Netzwerk und dem Anspruch, dass Ihr Investment in den besten Händen ist.', + ], + 'image' => 'b2in/marcel-scheibe-about.jpg', + 'image_alt' => 'Marcel Scheibe – Persönliche Investmentbegleitung', + 'image_caption' => 'Marcel Scheibe, Gründer & CEO', + 'list' => [ + 0 => [ + 'icon' => 'calendar', + 'title' => 'Investor Evenings – Exklusive Quartals-Events im kleinen Kreis', + ], + 1 => [ + 'icon' => 'phone', + 'title' => 'Direkter Draht – Persönliches Gespräch und Terminvereinbarung', + ], + 2 => [ + 'icon' => 'shield-check', + 'title' => 'Transparenz – Von der Marktanalyse bis zum Closing begleitet', + ], + ], + ], + 'immobilien_hero_v2' => [ + 'title' => 'Investieren in globale Dynamik. Mit deutscher Verlässlichkeit.', + 'subtitle' => 'Exklusive Off-Market-Projekte, attraktive Renditen und eine Begleitung, die weit über den Kaufvertrag hinausgeht. Entdecken Sie den Immobilienmarkt in Dubai.', + 'cta_text' => 'Aktuelle Projekte ansehen', + 'cta_link' => '#projekte', + 'image' => 'b2in/hero-immobilien.jpg', + 'image_alt' => 'Dubai Skyline – Premium Immobilien-Investments', + ], + 'immobilien_warum_dubai' => [ + 'title' => 'Warum sich ein Investment in Dubai lohnt', + 'intro' => 'Dubai ist nicht nur eine finanzielle Entscheidung, sondern der Zugang zu einem der wachstumsstärksten Märkte der Welt. Investoren schätzen die klaren rechtlichen Strukturen und Rahmenbedingungen, die weltweit nahezu einzigartig sind:', + 'facts' => [ + 0 => [ + 'icon' => 'banknotes', + 'title' => '0 % Steuern', + 'description' => 'Keine Einkommensteuer auf Mieteinnahmen, keine Kapitalertragsteuer beim Verkauf.', + ], + 1 => [ + 'icon' => 'arrow-trending-up', + 'title' => 'Starke Renditen', + 'description' => 'Attraktive Mietrenditen von historisch 6 % bis 9 % jährlich.', + ], + 2 => [ + 'icon' => 'shield-check', + 'title' => 'Hohe Sicherheit', + 'description' => 'Ein staatlich regulierter Markt mit dem sicheren Escrow-Treuhand-System.', + ], + 3 => [ + 'icon' => 'currency-dollar', + 'title' => 'Stabile Währung', + 'description' => 'Der Dirham (AED) ist fest an den US-Dollar gekoppelt.', + ], + 4 => [ + 'icon' => 'identification', + 'title' => 'Golden Visa', + 'description' => 'Sichern Sie sich Aufenthaltsgenehmigungen über attraktive Investor-Programme.', + ], + 5 => [ + 'icon' => 'globe-alt', + 'title' => 'Hohe Nachfrage', + 'description' => 'Internationale Zuwanderung und begrenztes Angebot treiben die Nachfrage nach Wohnraum stetig nach oben.', + ], + ], + ], + 'immobilien_image_break' => [ + 'image' => 'b2in/hero-immobilien.jpg', + 'image_alt' => 'Dubai Skyline – Immobilien-Investments', + 'quote' => 'Dubai hat sich zu einem der dynamischsten Immobilienmärkte der Welt entwickelt.', + 'author' => 'Marcel Scheibe', + ], + 'immobilien_kaufprozess' => [ + 'title' => 'Klar strukturiert: Der Kaufprozess in Dubai', + 'intro' => 'Der Markt in Dubai ist schneller, digitaler und projektbezogen organisiert. Jeder Schritt ist durch das staatliche Escrow-System (Treuhandkonten nach Baufortschritt) maximal abgesichert.', + 'steps' => [ + 0 => [ + 'number' => '1', + 'title' => 'Reservierung (Booking Fee)', + 'description' => 'Mit einer Gebühr von ca. 3–10 % wird Ihre Wunsch-Einheit offiziell aus dem Verkauf genommen und für Sie blockiert.', + ], + 1 => [ + 'number' => '2', + 'title' => 'Anzahlung & Vertrag (SPA)', + 'description' => 'Nach einer ersten Anzahlung (meist 10 %) wird der offizielle Kaufvertrag, das Sales & Purchase Agreement (SPA), erstellt.', + ], + 2 => [ + 'number' => '3', + 'title' => 'Staatliche Registrierung (DLD)', + 'description' => 'Durch die Zahlung der Registrierungsgebühr (4 %) an das Dubai Land Department wird Ihr Eigentum offiziell im staatlichen Register verankert.', + ], + 3 => [ + 'number' => '4', + 'title' => 'Finaler Kaufvertrag', + 'description' => 'Ihr Eigentumsrecht ist offiziell gesichert. Die weiteren Zahlungen erfolgen streng nach Baufortschritt auf sichere Treuhandkonten.', + ], + ], + ], + 'immobilien_bruecke' => [ + 'title' => '"Der Markt spricht für sich. Meine Aufgabe ist eine andere."', + 'paragraphs' => [ + 0 => 'Für viele deutsche Investoren wirkt der Immobilienkauf in Dubai zunächst ungewohnt. In Deutschland sind wir Notare, Grundbücher und hochbürokratische Prozesse gewohnt. Dubai ist dynamischer.', + 1 => 'Ich bin nicht hier, um Ihnen den Markt zu verkaufen – die Qualität der Projekte spricht für sich. Meine Aufgabe ist es, Ihre Brücke zu sein. Als Investor, der selbst in Dubai gekauft hat, kenne ich die Praxis. Ich bin regelmäßig vor Ort, stehe im permanenten Austausch mit Bauträgern und begleite Sie durch den kompletten Prozess. Ich übersetze die internationale Geschwindigkeit in deutsche Verlässlichkeit.', + ], + 'advantage_title' => 'Ihr B2in-Vorteil', + 'advantage_text' => 'Meine Begleitung endet nicht beim Kauf. Planen Sie die lukrative Kurzzeitvermietung (z.B. Airbnb)? Über unser B2in-Netzwerk und meine Wurzeln in der Möbelbranche realisieren wir für Sie komplette Einrichtungskonzepte – für maximale Rendite bei minimalem Aufwand.', + 'cta_text' => 'Persönliches Beratungsgespräch vereinbaren', + 'cta_link' => '/contact', + 'image' => 'b2in/marcel-scheibe-about.jpg', + 'image_alt' => 'Marcel Scheibe – Persönliche Investmentbegleitung', + 'image_caption' => 'Marcel Scheibe, Gründer & CEO', + ], + 'immobilien_mindset' => [ + 'title' => 'Sind Sie der richtige Investor für Dubai?', + 'text_positive' => 'Dubai richtet sich an Menschen, die international denken. Der Staat priorisiert Effizienz, wirtschaftliche Entwicklung und enorme Geschwindigkeit. Wenn Sie an die Verschiebung weltweiter Wirtschaftszentren glauben und ein dynamisches System schätzen, ist Dubai der strategisch perfekte Baustein für Ihr Portfolio. Dann sind Sie bei uns genau richtig.', + 'text_negative' => 'Wenn Sie jedoch ein System bevorzugen, das auf langsamen Entscheidungswegen und maximaler Bürokratie aufbaut, wird dieser Markt nicht zu Ihren Erwartungen passen.', + 'closing' => 'Der Schritt ist kleiner, als Sie denken. Lassen Sie uns gemeinsam herausfinden, ob ein Investment in Dubai in Ihre Strategie passt.', + 'cta_text' => 'Unverbindliches Gespräch vereinbaren', + 'cta_link' => '/contact', + ], + 'netzwerk_hero' => [ + 'title' => 'Das B2in Netzwerk – regionale Fachexperten und starke Marken.', + 'subtitle' => 'Wir verbinden Fachhändler aus der Region mit ausgewählten europäischen Herstellern – damit Sie vor Ort beraten werden und trotzdem Zugriff auf das gesamte Sortiment haben.', + 'image' => 'b2in/ecosystem-hero.jpg', + 'image_alt' => 'B2in Netzwerk – Einrichtung und regionale Fachexperten', + ], + 'netzwerk_image_break' => [ + 'image' => 'b2in/ecosystem-hero.jpg', + 'image_alt' => 'B2in Netzwerk – Einrichtung und regionale Fachexperten', + 'quote' => 'Wir verbinden, was zusammengehört: Immobilien und Einrichtung.', + 'author' => 'Marcel Scheibe', + ], + 'netzwerk_teasers' => [ + 'title' => 'Was wir aufbauen', + 'cards' => [ + 0 => [ + 'icon' => 'squares-2x2', + 'title' => 'Einrichtungsnetzwerk', + 'description' => 'Persönliche Beratung durch lokale Fachexperten, kuratierte europäische Hersteller und exklusive Konditionen für B2in-Immobilienkunden. Einrichtung, die man anfassen kann – nicht nur online bestellen.', + 'status' => 'In Entwicklung', + ], + 1 => [ + 'icon' => 'building-storefront', + 'title' => 'Für Händler & Fachhändler', + 'description' => 'Sie sind lokaler Einrichtungsexperte und möchten Teil eines Premium-Netzwerks werden? Wir verbinden Sie mit Kunden, die persönliche Beratung und Qualität schätzen.', + 'status' => 'Vorab-Registrierung möglich', + ], + 2 => [ + 'icon' => 'globe-alt', + 'title' => 'Für Entwickler & Marken', + 'description' => 'Deutsche Vertragssicherheit für Objekte und Projektentwicklungen: Beschaffung aus einer Hand, mit Fokus auf Termintreue, Qualitätskontrolle und Durchsetzungskraft.', + 'status' => 'Vorab-Registrierung möglich', + ], + ], + ], + 'netzwerk_cta' => [ + 'title' => 'Interesse an einer Partnerschaft?', + 'text' => 'Ob als Fachhändler, Hersteller, Makler oder Entwickler – kontaktieren Sie uns für eine Vorab-Registrierung und erfahren Sie als Erste, wenn unser Netzwerk live geht.', + 'button_text' => 'Kontakt aufnehmen', + 'button_link' => '/contact', + ], + 'netzwerk_cabinet_partner' => [ + 'badge' => 'Premiumpartner', + 'title' => 'Unser Premiumpartner: CABINET Einbauschränke', + 'lead' => 'Maßgefertigte Exzellenz für höchste Ansprüche.', + 'paragraphs' => [ + 0 => 'Im B2in-Netzwerk setzen wir auf Qualität, die Bestand hat. Wir sind stolz darauf, CABINET als Premiumpartner in unserem Netzwerk zu präsentieren. Der CABINET Store in Bielefeld (unser physischer Ankerpunkt) steht für maßgefertigte Einbaulösungen, die Design, Funktionalität und handwerkliche Präzision perfekt vereinen.', + 1 => 'Ob begehbare Kleiderschränke, smarte Raumlösungen oder exklusive Innenausbauten – CABINET liefert den Premium-Standard, den unsere Immobilien-Investoren und Entwickler für ihre High-End-Projekte fordern. Diese Partnerschaft ist ein lebendiger Beweis für unsere Philosophie: Wir verbinden internationale Immobilien mit deutscher Einrichtungsexzellenz.', + ], + 'image' => 'b2in/cabinet_logo.png', + 'image_alt' => 'CABINET Einbauschränke – Premiumpartner von B2in', + ], + 'netzwerk_immobilien_hint' => [ + 'title' => 'Schon jetzt verfügbar: Immobilien', + 'description' => 'Unser Immobilienbereich ist bereits aktiv. Entdecken Sie exklusive Off-Market-Projekte in Dubai mit persönlicher Begleitung durch Marcel Scheibe.', + 'button_text' => 'Zu den Immobilien-Projekten', + 'button_link' => '/immobilien', + ], + 'interior_hero' => [ + 'title' => 'Exklusive Einrichtung. Lokal gedacht, international vernetzt.', + 'subtitle' => 'Das B2in-Einrichtungsnetzwerk verbindet lokale Fachexpertise mit internationalen Herstellern – persönlich, greifbar und in Ihrer Nähe.', + 'features' => [ + 0 => [ + 'title' => 'Local-for-Local', + 'description' => 'Ihr Fachhändler vor Ort', + 'icon' => 'map-pin', + ], + 1 => [ + 'title' => 'Premium-Netzwerk', + 'description' => 'Kuratierte Hersteller & Marken', + 'icon' => 'star', + ], + 2 => [ + 'title' => 'Zwei Marken', + 'description' => 'stileigentum & style2own', + 'icon' => 'squares-2x2', + ], + 3 => [ + 'title' => 'Persönlich', + 'description' => 'Beratung statt Algorithmus', + 'icon' => 'user', + ], + ], + 'image' => 'b2in/ecosystem-hero.jpg', + 'image_alt' => 'B2in Einrichtungsnetzwerk – Local-for-Local', + 'card_title' => 'B2in Interior', + 'card_text' => 'Local-for-Local Einrichtungsnetzwerk', + 'hub' => [ + 'title' => 'B2in Interior', + 'subtitle' => 'Das Einrichtungsnetzwerk', + ], + 'stats' => [ + 0 => 'Lokale Fachexperten', + 1 => 'Europäische Hersteller', + 2 => 'Persönliche Beratung', + ], + ], + 'interior_concept' => [ + 'title' => 'Was bedeutet Local-for-Local?', + 'paragraphs' => [ + 0 => 'Unser Einrichtungsnetzwerk setzt auf das, was online nicht geht: echte Beratung, echtes Anfassen, echte Expertise. Statt anonymer Plattformen vermitteln wir den direkten Kontakt zu lokalen Fachhändlern – Menschen, die ihr Handwerk verstehen und Sie persönlich begleiten.', + 1 => 'B2in verbindet diese lokalen Experten mit einem kuratierten Netzwerk europäischer Hersteller. Das Ergebnis: Zugang zu exklusiven Marken und Sortimenten, die Sie so nicht im Internet finden – aber mit der Beratungsqualität, die nur Ihr Fachhändler vor Ort bieten kann.', + ], + 'image' => 'b2in/ecosystem_result.jpg', + 'image_alt' => 'Local-for-Local – Persönliche Beratung statt anonyme Plattform', + 'image_caption' => 'Persönliche Einrichtungsberatung vor Ort', + ], + 'interior_brands' => [ + 'title' => 'Zwei Marken, ein Netzwerk', + 'subtitle' => 'Je nach Stil und Anspruch finden Sie Ihren Zugang über eine unserer zwei Einrichtungsmarken.', + 'brands' => [ + 0 => [ + 'name' => 'stileigentum', + 'tagline' => 'Premium-Einrichtung', + 'description' => 'Exklusive und hochwertige Einrichtungskonzepte für anspruchsvolle Kunden, die Qualität und Tradition schätzen. Handverlesene Hersteller, zeitlose Materialien, individuelle Beratung.', + 'audience' => 'Für Kunden, die das Besondere suchen.', + 'logo' => 'img/logos/stileigentum-logo-positiv.svg', + 'logo_width' => 'w-35', + 'link' => 'https://stileigentum.test', + ], + 1 => [ + 'name' => 'style2own', + 'tagline' => 'Design-Lifestyle', + 'description' => 'Moderne Einrichtungskonzepte für Young Professionals und trend-orientierte Kunden – urban, flexibel, inspirierend. Aktuelle Trends, smarte Lösungen, faire Preise.', + 'audience' => 'Für alle, die Design lieben.', + 'logo' => 'img/logos/style2own-logo-positiv.svg', + 'logo_width' => 'w-28', + 'link' => 'https://style2own.test', + ], + ], + ], + 'interior_zielgruppen' => [ + 'title' => 'Für wen ist das Einrichtungsnetzwerk?', + 'groups' => [ + 0 => [ + 'icon' => 'home', + 'title' => 'Privatpersonen', + 'description' => 'Sie richten Ihr neues Zuhause ein und wünschen sich persönliche Beratung statt endlosem Online-Scrollen? Über unser Netzwerk finden Sie lokale Fachexperten, die Ihren Stil verstehen.', + ], + 1 => [ + 'icon' => 'building-office-2', + 'title' => 'Immobilien-Investoren', + 'description' => 'Sie haben über B2in ein Investment getätigt? Als Immobilienkäufer erhalten Sie exklusiven Zugang zu Partner-Konditionen für die komplette Einrichtung – aus einer Hand.', + ], + 2 => [ + 'icon' => 'clipboard-document-check', + 'title' => 'Entwickler & Makler', + 'description' => 'Sie brauchen Mustereinrichtungen, Home-Staging oder eine schlüsselfertige Ausstattung für Ihre Projekte? B2in koordiniert von der Planung bis zur Lieferung.', + ], + ], + ], + 'interior_process' => [ + 'title' => 'So einfach funktioniert es', + 'steps' => [ + 0 => [ + 'number' => '01', + 'title' => 'Beratung', + 'description' => 'Kontaktieren Sie uns oder besuchen Sie einen unserer lokalen Partner. Gemeinsam definieren wir Ihren Stil, Ihr Budget und Ihre Wünsche.', + ], + 1 => [ + 'number' => '02', + 'title' => 'Auswahl', + 'description' => 'Ihr Fachhändler zeigt Ihnen kuratierte Kollektionen europäischer Hersteller – zum Anfassen, nicht nur auf dem Bildschirm.', + ], + 2 => [ + 'number' => '03', + 'title' => 'Lieferung & Einrichtung', + 'description' => 'B2in koordiniert Logistik und Lieferung. Ihr lokaler Partner begleitet die Einrichtung bis zum letzten Detail.', + ], + ], + ], + 'interior_trust' => [ + 'title' => 'Persönlich statt anonym', + 'paragraphs' => [ + 0 => 'Hinter dem B2in-Einrichtungsnetzwerk steht Marcel Scheibe mit der Überzeugung, dass gute Einrichtung persönliche Beratung braucht. Kein Algorithmus ersetzt das Gespräch mit einem Experten, der Materialien kennt, Räume versteht und Ihren Stil trifft.', + ], + 'image' => 'b2in/marcel-scheibe-about.jpg', + 'image_alt' => 'Marcel Scheibe – Das Gesicht hinter dem Einrichtungsnetzwerk', + 'image_caption' => 'Marcel Scheibe, Gründer & CEO', + 'list' => [ + 0 => [ + 'icon' => 'map-pin', + 'title' => 'Lokale Experten – Fachhändler in Ihrer Region, die Sie persönlich beraten', + ], + 1 => [ + 'icon' => 'star', + 'title' => 'Kuratierte Hersteller – Nur geprüfte europäische Qualitätsmarken', + ], + 2 => [ + 'icon' => 'shield-check', + 'title' => 'Transparente Preise – Faire Konditionen ohne versteckte Aufschläge', + ], + ], + ], + 'broker_section' => [ + 'title' => 'Lifetime Vergütung für Makler', + 'subtitle' => 'Profitieren Sie von einem revolutionären Vergütungsmodell, das über den einmaligen Verkauf hinausgeht. Bauen Sie langfristige Kundenbeziehungen auf und generieren Sie kontinuierliche Erträge.', + 'card_title' => 'Lifetime-Vergütung', + 'compensation' => [ + 'initial_sale' => '3.5%', + 'follow_up' => '1.5%', + ], + 'compensation_text' => 'Kontinuierliche Erträge über die gesamte Kundenbeziehung', + 'benefits' => [ + 0 => [ + 'title' => 'Lifetime-Vergütungsmodell', + 'description' => 'Kontinuierliche Provisionen durch langfristige Kundenbeziehungen und wiederkehrende Geschäfte', + 'icon' => 'trending-up', + ], + 1 => [ + 'title' => 'Schnellere Vermarktung', + 'description' => 'Durchdachte Wohnkonzepte reduzieren die Verkaufszeit und erhöhen die Erfolgschancen', + 'icon' => 'clock', + ], + 2 => [ + 'title' => 'Qualifizierte Leads', + 'description' => 'Vorgefilterte, interessierte Kunden durch das B2in-Portal und Premium-Mitgliedschaften', + 'icon' => 'target', + ], + 3 => [ + 'title' => 'Premium-Positioning', + 'description' => 'Exklusive Vermarktung hochwertiger Wohnkonzepte für anspruchsvolle Zielgruppen', + 'icon' => 'award', + ], + ], + ], + 'commitment_section' => [ + 'title' => 'Das Vertrauen unserer Partner', + 'subtitle' => 'Echte Meinungen von echten Partnern. Ihr Erfolg ist unser größter Ansporn.', + 'testimonials' => [ + 0 => [ + 'image' => 'b2in/testo-1.jpg', + 'rating' => 5, + 'quote' => 'Die Zusammenarbeit mit B2in hat unsere Erwartungen übertroffen. Professionell, effizient und immer lösungsorientiert.', + 'author' => 'Max Mustermann', + 'author_title' => 'Möbelhersteller', + ], + 1 => [ + 'image' => 'b2in/testo-2.jpg', + 'rating' => 5, + 'quote' => 'Dank der B2in-Plattform konnten wir unsere Reichweite signifikant erhöhen und neue Märkte erschließen.', + 'author' => 'Erika Mustermann', + 'author_title' => 'lokaler Möbelhändler', + ], + 2 => [ + 'image' => 'b2in/testo-3.jpg', + 'rating' => 5, + 'quote' => 'Das B2in-Portal hat die Art, wie ich Immobilien vermarkte, revolutioniert. Das Staging wertet meine Objekte auf, und die Möbelprovision ist ein extrem attraktiver Zusatzverdienst.', + 'author' => 'John Doe', + 'author_title' => 'Immobilienmakler', + ], + ], + ], + 'dark_stats_section' => [ + 'stats' => [ + 0 => [ + 'number' => '17+', + 'text' => 'Years of Experience', + ], + 1 => [ + 'number' => '2M', + 'text' => 'Happy Guests', + ], + ], + 'title' => 'Economically Sound and Well-
Friendly Service for
Families and Their
Precious Belongings', + 'description' => 'We understand that every family is unique, which is why we offer personalized services tailored to meet your specific needs. From luxury amenities to budget-friendly options, we ensure every guest feels valued and comfortable.', + 'features' => [ + 0 => [ + 'title' => 'Top Consultation', + 'subtitle' => 'Expert guidance', + ], + 1 => [ + 'title' => 'Finest Meal', + 'subtitle' => 'Gourmet dining', + ], + 2 => [ + 'title' => 'Easy Tax Reduction', + 'subtitle' => 'Cost-effective', + ], + ], + 'image' => 'b2in/accommodation-2.jpg', + 'image_alt' => 'Luxury interior design', + ], + 'ecosystem_hero' => [ + 'title' => 'Wie unser Ökosystem Wachstum für alle Partner generiert', + 'subtitle' => 'Ein intelligentes Netzwerk, das Immobilienkäufer, lokale Fachexperten, internationale Hersteller, Makler und Entwickler nahtlos miteinander verbindet – für außergewöhnliche Immobilien- und Einrichtungserlebnisse.', + 'features' => [ + 0 => [ + 'title' => 'Immobilien', + 'description' => 'Internationale Investments', + 'icon' => 'globe-alt', + ], + 1 => [ + 'title' => 'Einrichtung', + 'description' => 'Local for Local', + 'icon' => 'cube-transparent', + ], + 2 => [ + 'title' => 'Supply Chain', + 'description' => 'Beschaffung & Kontrolle', + 'icon' => 'clipboard-document-check', + ], + 3 => [ + 'title' => 'Technologie', + 'description' => 'Digitales Herzstück', + 'icon' => 'cpu-chip', + ], + ], + 'image' => 'b2in/ecosystem-hero.jpg', + 'image_alt' => 'Ecosystem Hero Image', + 'card_title' => 'B2in Portal', + 'card_text' => 'Die Technologie dahinter, die das Ökosystem ermöglicht', + 'hub' => [ + 'title' => 'B2in Portal', + 'subtitle' => 'Die Technologie dahinter, die das Ökosystem ermöglicht', + ], + 'stats' => [ + 0 => 'Exklusive Auswahl', + 1 => 'Persönlicher Service', + 2 => 'Werte die bleiben', + ], + ], + 'ecosystem_stats' => [ + 'title' => 'Unser Ecosystem in Zahlen', + 'subtitle' => 'Zahlen, die die Stärke und das Vertrauen in unser vernetztes Geschäftsmodell widerspiegeln.', + 'stats' => [ + 0 => [ + 'number' => '1,7K+', + 'label' => 'Partner & Experten im Netzwerk', + 'description' => 'Wachsende Community von Entwicklern, Maklern, Händlern und Herstellern', + ], + 1 => [ + 'number' => '510+', + 'label' => 'Realisierte Projekte', + 'description' => 'Immobilien- und Einrichtungsprojekte durch unser Netzwerk', + ], + 2 => [ + 'number' => '98%', + 'label' => 'Partner-Zufriedenheit', + 'description' => 'Zufriedenheit über alle Ecosystem-Teilnehmer hinweg', + ], + 3 => [ + 'number' => '24/7', + 'label' => 'Partner-Support', + 'description' => 'Kontinuierliche Verfügbarkeit der digitalen Infrastruktur', + ], + ], + ], + 'ecosystem_start' => [ + 'title' => 'Alles beginnt mit dem Moment of Need:', + 'paragraphs' => [ + 0 => 'Unser Ökosystem startet beim Kunden – genau dann, wenn er ihn braucht: beim Immobilienkauf.', + 1 => 'Über den Makler erhält der Kunde Zugang zum B2in-Ökosystem. Unsere Marken style2own und stileigentum schaffen den passenden Rahmen – je nach Zielgruppe und Lebensstil.', + ], + 'image' => 'b2in/ecosystem_start.jpg', + 'image_alt' => 'Der Einstieg ins Ökosystem – über den Immobilienkauf', + 'image_caption' => 'Der Einstieg: Immobilienkauf als Trigger', + 'image_description' => 'Eine stilisierte Grafik, die zeigt, wie der Immobilienkauf den Einstieg ins B2in-Ökosystem auslöst.', + ], + 'ecosystem_hub' => [ + 'title' => 'Im Hub trifft Local for Local auf internationale Expertise', + 'paragraphs' => [ + 0 => 'Sobald ein Kunde seine Region wählt, spielt unsere Plattform ihre Stärke aus: Die "Local First"-Logik zeigt die Angebote der lokalen Fachexperten prominent an.', + 1 => 'Ergänzt wird das Sortiment durch europäische Hersteller. Und für Immobilienentwickler liefern wir die operative Beschaffung gleich mit – vom Vertrag bis zur Qualitätskontrolle.', + ], + 'image' => 'b2in/ecosystem_hub.jpg', + 'image_alt' => 'Local for Local – lokale Expertise trifft internationale Beschaffung', + 'image_caption' => 'Local for Local: Lokale Expertise, internationale Reichweite', + 'image_description' => 'Eine klare Infografik, die zeigt: [Lokales Angebot] + [Internationale Beschaffung] = Das B2in-Ökosystem.', + ], + 'ecosystem_result' => [ + 'title' => 'Ein Kreislauf, in dem jeder gewinnt', + 'paragraphs' => [ + 0 => 'In diesem Zusammenspiel entstehen klare Vorteile für jeden Teilnehmer:', + ], + 'list' => [ + 0 => [ + 'icon' => 'globe-alt', + 'title' => 'Der Immobilienentwickler erhält einen verlässlichen Partner für Beschaffung und Qualitätskontrolle in Deutschland – transparent und termingerecht.', + ], + 1 => [ + 'icon' => 'building-storefront', + 'title' => 'Der lokale Händler gewinnt qualifizierte Kunden, die er alleine nicht erreicht hätte, und stärkt seine Position vor Ort.', + ], + 2 => [ + 'icon' => 'home-modern', + 'title' => 'Der Makler bietet seinen Kunden einen einzigartigen Mehrwert nach dem Abschluss und profitiert von attraktiven Zusatzprovisionen.', + ], + ], + 'image' => 'b2in/ecosystem_result.jpg', + 'image_alt' => 'Ihr Erfolg und die Partnerschaft mit B2in', + 'image_caption' => 'Ihr Erfolg und die Partnerschaft mit B2in', + 'image_description' => 'Eine stilisierte Grafik, die zeigt, wie Ihr Erfolg und die Partnerschaft mit B2in zusammenhängen.', + ], + 'end_customer_section' => [ + 'tag' => 'Für Endkunden', + 'title' => 'Exklusive Erlebnisse für Sie', + 'subtitle' => 'Mit Ihrer persönlichen Login-Karte erhalten Sie Zugang zu einer einzigartigen Erlebniswelt, die speziell auf Ihre Wohnwünsche und Lebensstil abgestimmt ist. Entdecken Sie kuratierte Immobilien und Services, die sonst nicht verfügbar sind.', + 'benefits' => [ + 0 => [ + 'title' => 'Exklusive Login-Karte', + 'description' => 'Personalisierter Zugang zu ausgewählten Immobilienerlebnissen und Premium-Services', + 'icon' => 'credit-card', + ], + 1 => [ + 'title' => 'Personalisierte Erlebniswelt', + 'description' => 'Maßgeschneiderte Immobilienangebote basierend auf individuellen Präferenzen und Bedürfnissen', + 'icon' => 'star', + ], + 2 => [ + 'title' => 'Kuratierte Wohnkonzepte', + 'description' => 'Hochwertige, durchdachte Immobilienlösungen von verifizierten Partnern', + 'icon' => 'home', + ], + 3 => [ + 'title' => 'Qualitätsgarantie', + 'description' => 'Geprüfte Anbieter und standardisierte Qualitätsprozesse für maximale Sicherheit', + 'icon' => 'shield', + ], + ], + 'image' => 'b2in/end-customer-section.jpg', + 'image_alt' => 'End Customer Section Image', + 'card_title' => 'Login-Karte', + 'card_text' => 'Ihr Schlüssel zu exklusiven Immobilienerlebnissen', + 'card' => [ + 'title' => 'Login-Karte', + 'subtitle' => 'Ihr Schlüssel zu exklusiven Immobilienerlebnissen', + 'member_number_label' => 'Mitgliedsnummer', + 'member_number' => 'B2IN-2024-VIP', + ], + ], + 'final_commitment' => [ + 'title' => 'Were committed to
your comfort and
satisfaction for
unforgettable
experiences', + 'author' => 'Robert Wilson', + 'author_title' => 'General Manager', + ], + 'digital_core' => [ + 'title' => 'Die Technologie, die diesen Kreislauf ermöglicht', + 'subtitle' => 'Unsere zentrale Plattform ist mehr als nur Technologie. Sie ist das digitale Herzstück für transparente Prozesse, datengestützte Entscheidungen und nahtlose Zusammenarbeit im gesamten Ökosystem.', + 'features' => [ + 0 => [ + 'title' => 'Maximale Zuverlässigkeit', + 'description' => 'Unsere Plattform ist jederzeit und von überall erreichbar. Sie wächst mit Ihrem Erfolg und garantiert einen stabilen Betrieb, auf den Sie sich verlassen können.', + 'icon' => 'cloud', + 'icon_style' => 'solid', + ], + 1 => [ + 'title' => 'Kompromisslose Sicherheit', + 'description' => 'Ihre Daten und die Ihrer Kunden sind unser höchstes Gut. Wir schützen sie mit modernsten Sicherheitsarchitekturen und garantieren vollsten Datenschutz.', + 'icon' => 'shield-check', + ], + 2 => [ + 'title' => 'Zukunftsfähige Integration', + 'description' => 'Das B2in-Portal ist offen für die Zukunft. Es lässt sich nahtlos in andere Systeme integrieren und ist bereit für zukünftige Erweiterungen und Technologien.', + 'icon' => 'squares-2x2', + ], + 3 => [ + 'title' => 'Datenbasierte Einblicke', + 'description' => 'Verfolgen Sie als Makler die Aktivitäten Ihrer Kunden oder als Lieferant die Performance Ihrer Produkte – alles in Echtzeit. Treffen Sie bessere Entscheidungen auf Basis valider Daten.', + 'icon' => 'chart-bar', + 'icon_style' => 'solid', + ], + 4 => [ + 'title' => 'Intelligente Personalisierung', + 'description' => 'Künstliche Intelligenz unterstützt Sie und Ihre Kunden – von personalisierten Einrichtungsvorschlägen bis zur Automatisierung von Prozessen für maximale Effizienz.', + 'icon' => 'cpu-chip', + ], + 5 => [ + 'title' => 'Exzellente User Experience', + 'description' => 'Unsere Plattform ist für maximale Geschwindigkeit optimiert und bietet auf jedem Gerät – vom Desktop bis zum Smartphone – eine intuitive und flüssige Bedienung.', + 'icon' => 'users', + 'icon_style' => 'solid', + ], + ], + ], + 'partner_benefits' => [ + 'title' => 'Warum Partner werden?', + 'subtitle' => 'Entdecken Sie die Vorteile einer Partnerschaft mit B2in und wie Sie von unserem innovativen Ecosystem profitieren können.', + 'broker' => [ + 'tag' => 'Für Makler', + 'title' => 'Revolutionäres Provisionsmodell', + 'benefits' => [ + 0 => [ + 'icon' => 'trending-up', + 'title' => 'Lifetime-Provisionsmodell', + 'description' => 'Profitieren Sie von kontinuierlichen Einnahmen durch unser innovatives Vergütungssystem', + ], + 1 => [ + 'icon' => 'target', + 'title' => 'Schnellere Vermarktung', + 'description' => 'Durchdachte Wohnkonzepte verkürzen Vermarktungszeiten und erhöhen Ihre Erfolgsquote', + ], + 2 => [ + 'icon' => 'award', + 'title' => 'Mehrwert für Ihre Kunden', + 'description' => 'Bieten Sie Ihren Kunden exklusive, kuratierte Immobilienerlebnisse', + ], + ], + 'highlight' => [ + 'value' => '3.5% - ∞', + 'text' => 'Erstprovision bis Lifetime-Vergütung', + ], + ], + 'supplier' => [ + 'tag' => 'Für Lieferanten', + 'title' => 'Globale Marktchancen', + 'benefits' => [ + 0 => [ + 'icon' => 'globe', + 'title' => 'Zugang zu internationalen Märkten', + 'description' => 'Erweitern Sie Ihre Reichweite über Grenzen hinweg mit unserem globalen Netzwerk', + ], + 1 => [ + 'icon' => 'handshake', + 'title' => 'Faire Konditionen', + 'description' => 'Transparente und partnerschaftliche Geschäftsbedingungen für nachhaltigen Erfolg', + ], + 2 => [ + 'icon' => 'settings', + 'title' => 'Einfache Produktverwaltung', + 'description' => 'Intuitive Plattform für die Verwaltung und Präsentation Ihrer Produkte', + ], + ], + 'highlight' => [ + 'image' => 'b2in/accommodation-1.jpg', + 'alt' => 'Partner success visualization', + 'value' => '500+', + 'text' => 'Erfolgreiche Partner', + ], + ], + ], + 'supply_chain_intro' => [ + 'title' => 'Supply-Chain-Management: Ihr verlängerter Arm in Deutschland.', + 'paragraphs' => [ + 0 => 'Für Immobilienentwickler, die Möbel oder Innenausstattung aus Deutschland beziehen möchten, fungieren wir als verlängerter Arm vor Ort – mit klarem Fokus auf Vertragssicherheit, Termintreue und Durchsetzungskraft.', + ], + 'list' => [ + 0 => [ + 'icon' => 'document-check', + 'title' => 'Vertragsmanagement – Ausarbeitung, Strukturierung und Absicherung von Lieferverträgen', + ], + 1 => [ + 'icon' => 'shield-check', + 'title' => 'Vertragssicherung & Durchsetzung – Meilenstein-Überwachung, Eskalation, Nachverfolgung', + ], + 2 => [ + 'icon' => 'magnifying-glass-circle', + 'title' => 'Tracking & Qualitätskontrolle – Laufende Überwachung, persönliche Kontrolle, termingerechte Lieferung', + ], + ], + 'image' => 'b2in/marcel-scheibe-about.jpg', + 'image_alt' => 'Marcel Scheibe – Supply-Chain-Management', + 'image_caption' => 'Marcel Scheibe, Gründer & CEO', + ], + 'partner_hero' => [ + 'title' => 'Für Entwickler & Partner', + 'subtitle' => 'Ob Immobilienentwickler, lokaler Einrichtungsexperte, europäische Marke oder Makler – B2in ist das Netzwerk, das Ihr Geschäft mit den richtigen Partnern und Kunden verbindet.', + 'partner_types' => [ + 0 => [ + 'title' => 'Immobilienentwickler', + 'description' => 'Supply-Chain-Management aus Deutschland', + 'icon' => 'globe-alt', + ], + 1 => [ + 'title' => 'Hersteller & Marken', + 'description' => 'Kuratierter Marktzugang, intelligente Logistik', + 'icon' => 'building-office-2', + ], + 2 => [ + 'title' => 'Lokale Händler', + 'description' => 'Digitale Reichweite, exklusives Sortiment', + 'icon' => 'building-storefront', + ], + 3 => [ + 'title' => 'Makler & Bauträger', + 'description' => 'Mehrwert für Kunden, Zusatzertrag für Sie', + 'icon' => 'home-modern', + ], + ], + 'image' => 'b2in/partner-hero.jpg', + 'image_alt' => 'Partner Hero Image', + 'card_title' => 'Partner Network', + 'card_text' => 'Werden Sie Teil unseres Ecosystems', + 'hub' => [ + 'title' => 'Partner Network', + 'subtitle' => 'Werden Sie Teil unseres Ecosystems', + ], + 'connection_points' => [ + 0 => [ + 'name' => 'Makler', + 'subtext' => 'Lifetime-Modell', + ], + 1 => [ + 'name' => 'Lieferanten', + 'subtext' => 'Global Markets', + ], + 2 => [ + 'name' => 'Erfolg', + 'subtext' => 'Messbare Ziele', + ], + 3 => [ + 'name' => 'Qualität', + 'subtext' => 'Premium Standards', + ], + ], + ], + 'partner_card_section' => [ + 'title' => 'Welcher Partner-Typ sind Sie?', + 'subtitle' => 'Entdecken Sie die Vorteile einer Partnerschaft mit B2in – ob im Bereich Immobilien, Einrichtung oder Supply Chain.', + 'cards' => [ + 0 => [ + 'title' => 'Für Immobilienentwickler', + 'description' => 'Operative Steuerung Ihrer Beschaffung aus Deutschland – Vertragsmanagement, Qualitätskontrolle und termingerechte Lieferung.', + 'icon' => 'globe-alt', + 'button' => '#partner-benefits-developer', + 'button_text' => 'Ihre Vorteile als Entwickler', + ], + 1 => [ + 'title' => 'Für lokale Händler & Fachexperten', + 'description' => 'Stärken Sie Ihr Geschäft vor Ort. Erhalten Sie Zugang zu Online-Kunden und einem exklusiven, überregionalen Sortiment.', + 'icon' => 'building-storefront', + 'button' => '#partner-benefits-retailer', + 'button_text' => 'Ihre Vorteile als Händler', + ], + 2 => [ + 'title' => 'Für Hersteller & europäische Marken', + 'description' => 'Erschließen Sie neue, kuratierte Vertriebskanäle in regionalen Märkten und profitieren Sie von unserer intelligenten Logistik.', + 'icon' => 'building-office-2', + 'button' => '#partner-benefits-supplier', + 'button_text' => 'Ihre Vorteile als Hersteller', + ], + 3 => [ + 'title' => 'Für Immobilienmakler & Bauträger', + 'description' => 'Bieten Sie Ihren Kunden einen einzigartigen Mehrwert, beschleunigen Sie die Vermarktung und sichern Sie sich attraktive Zusatzprovisionen.', + 'icon' => 'home-modern', + 'button' => '#partner-benefits-broker', + 'button_text' => 'Ihre Vorteile als Makler', + ], + ], + ], + 'partner_benefits_developer' => [ + 'id' => 'partner-benefits-developer', + 'tag' => 'Ihre Vorteile als Immobilienentwickler', + 'tag_icon' => 'globe-alt', + 'tag_title' => 'Ihr verlängerter Arm in Deutschland.', + 'features' => [ + 0 => [ + 'title' => 'Vertragsmanagement', + 'description' => 'Unterstützung bei der Ausarbeitung und Strukturierung von Lieferverträgen. Definition klarer Leistungs- und Qualitätsparameter, Absicherung von Zahlungs- und Lieferbedingungen.', + 'icon' => 'document-check', + ], + 1 => [ + 'title' => 'Vertragssicherung & Durchsetzung', + 'description' => 'Aktive Überwachung der vereinbarten Meilensteine, Eskalation auf Managementebene bei Abweichungen und konsequente Nachverfolgung offener Punkte.', + 'icon' => 'shield-check', + ], + 2 => [ + 'title' => 'Tracking & Qualitätskontrolle', + 'description' => 'Laufende Produktions- und Lieferüberwachung, persönliche Kontrolle bei Bedarf und Sicherstellung termingerechter Auslieferung.', + 'icon' => 'magnifying-glass-circle', + ], + 3 => [ + 'title' => 'Netzwerk & Marktkenntnis', + 'description' => 'Direkte Anbindung an Hersteller und Entscheider in Deutschland. Wir sorgen dafür, dass Vereinbarungen nicht nur auf dem Papier bestehen, sondern tatsächlich umgesetzt werden.', + 'icon' => 'link', + ], + ], + 'highlight' => [ + 'value' => '100%', + 'text' => 'Transparenz, Verlässlichkeit und planbare Lieferung – ohne operative Reibungsverluste', + ], + 'image' => 'b2in/partner-benefits-developer.jpg', + 'image_alt' => 'Supply-Chain-Management für Immobilienentwickler', + ], + 'partner_benefits_retailer' => [ + 'id' => 'partner-benefits-retailer', + 'tag' => 'Ihre Vorteile als lokaler Händler', + 'tag_icon' => 'building-storefront', + 'tag_title' => 'Werden Sie zum digitalen Champion in Ihrer Region.', + 'features' => [ + 0 => [ + 'title' => 'Digitale Reichweite', + 'description' => 'Wir bringen Ihnen die Online-Kunden, die Sie alleine nicht erreichen. Profitieren Sie von unseren reichweitenstarken Endkunden-Marken.', + 'icon' => 'signal', + ], + 1 => [ + 'title' => 'Sortiments-Erweiterung', + 'description' => 'Ergänzen Sie Ihr Angebot mit exklusiven Herstellermarken aus unserem Portfolio – ganz ohne eigenes Lagerrisiko.', + 'icon' => 'squares-plus', + ], + 2 => [ + 'title' => 'Stärkung gegen Online-Riesen', + 'description' => 'Mit "Local First" stärken wir gezielt Ihre Position im Markt. Der Kunde sieht Ihr Angebot immer zuerst.', + 'icon' => 'shield-check', + ], + 3 => [ + 'title' => 'Faire Konditionen', + 'description' => 'Unser Provisionsmodell ist transparent und darauf ausgelegt, dass wir nur dann verdienen, wenn Sie es auch tun.', + 'icon' => 'scale', + ], + ], + 'highlight' => [ + 'value' => '+35%', + 'text' => 'Digitale Reichweite im ersten Jahr (Durchschnitt unserer Partner)', + ], + 'image' => 'b2in/partner-benefits-retailer.jpg', + 'image_alt' => 'Partner Benefits Retailer', + ], + 'partner_benefits_supplier' => [ + 'id' => 'partner-benefits-supplier', + 'tag' => 'Ihre Vorteile als Hersteller & Marke', + 'tag_icon' => 'building-office-2', + 'tag_title' => 'Erschließen Sie neue Märkte – intelligent und kuratiert.', + 'features' => [ + 0 => [ + 'title' => 'Kuratierter Vertriebskanal', + 'description' => 'Statt sich im Rauschen großer Marktplätze zu verlieren, wird Ihre Marke gezielt designaffinen Kunden in kaufkräftigen Regionen präsentiert.', + 'icon' => 'eye', + ], + 1 => [ + 'title' => 'Effiziente Logistik', + 'description' => 'Unsere Bündel-Logistik senkt Ihre Vertriebskosten. Wir managen den Sammeltransport und die komplette Abwicklung.', + 'icon' => 'truck', + ], + 2 => [ + 'title' => 'Direkter Marktzugang', + 'description' => 'Überspringen Sie den klassischen Großhandel und bauen Sie eine direkte Beziehung zu regionalen Märkten und Endkunden auf.', + 'icon' => 'map-pin', + ], + 3 => [ + 'title' => 'Skalierbares Wachstum', + 'description' => 'Starten Sie mit uns in einer Region und wachsen Sie schrittweise in weitere europäische Hubs hinein.', + 'icon' => 'chart-bar-square', + ], + ], + 'highlight' => [ + 'value' => '> 20', + 'text' => 'Kuratierte regionale Hubs als neue Vertriebskanäle in Europa', + ], + 'image' => 'b2in/partner-benefits-supplier.jpg', + 'image_alt' => 'Partner Benefits Supplier', + ], + 'partner_benefits_broker' => [ + 'id' => 'partner-benefits-broker', + 'tag' => 'Ihre Vorteile als Makler & Immobilienprofi', + 'tag_icon' => 'home-modern', + 'tag_title' => 'Mehrwert für Ihre Kunden – Mehr Ertrag für Sie.', + 'features' => [ + 0 => [ + 'title' => 'Schnellere Vermarktung durch Home Staging', + 'description' => 'Nutzen Sie unsere kuratierten Möbel-Pakete (stileigentum&style2own), um Ihre Immobilien professionell zu inszenieren. Beschleunigen Sie den Verkaufsprozess und erzielen Sie höhere Preise.', + 'icon' => 'rocket-launch', + ], + 1 => [ + 'title' => 'Einzigartiger Service nach dem Abschluss', + 'description' => 'Bieten Sie Ihren Käufern oder Mietern nach Vertragsunterzeichnung über unsere exklusive Login-Karte direkten Zugang zu einem kompletten Einrichtungsservice.', + 'icon' => 'gift', + ], + 2 => [ + 'title' => 'Attraktives Provisionsmodell', + 'description' => 'Profitieren Sie doppelt: Neben Ihrer klassischen Courtage erhalten Sie eine faire, lebenslange Provision auf alle Möbelumsätze, die Ihre Kunden über die Plattform generieren.', + 'icon' => 'currency-euro', + ], + 3 => [ + 'title' => 'Einfaches Handling', + 'description' => 'Unser digitales Makler-Portal macht es Ihnen leicht: Kunden einladen, Aktivitäten verfolgen und Provisionen transparent einsehen.', + 'icon' => 'finger-print', + ], + ], + 'highlight' => [ + 'value' => '-25%', + 'text' => 'Kürzere Vermarktungszeit für mit B2in inszenierte Objekte', + ], + 'image' => 'b2in/partner-benefits-broker.jpg', + 'image_alt' => 'Partner Benefits Broker', + ], + 'partner_process' => [ + 'title' => 'So werden Sie Partner', + 'subtitle' => 'In nur drei einfachen Schritten werden Sie Teil des B2in Ecosystems und können von allen Vorteilen unserer Partnerschaft profitieren.', + 'steps' => [ + 0 => [ + 'step' => '1', + 'title' => 'Bewerben', + 'description' => 'Erzählen Sie uns Ihre Geschichte. Füllen Sie unser kurzes Kontaktformular aus und zeigen Sie uns, was Ihre Produkte oder Ihr Geschäft auszeichnet.', + 'icon' => 'envelope', + 'image' => 'b2in/room-1.jpg', + ], + 1 => [ + 'step' => '2', + 'title' => 'Prüfung', + 'description' => 'Wir prüfen jede Anfrage persönlich. Unser Ziel ist es, ein hochwertiges und komplementäres Netzwerk aufzubauen, von dem alle profitieren.', + 'icon' => 'check-circle', + 'image' => 'b2in/room-2.jpg', + ], + 2 => [ + 'step' => '3', + 'title' => 'Onboarding', + 'description' => 'Willkommen an Bord! Wir schulen Sie persönlich im Umgang mit unserem Partner-Portal und stellen sicher, dass Sie vom ersten Tag an erfolgreich sind.', + 'icon' => 'rocket-launch', + 'image' => 'b2in/room-3.jpg', + ], + ], + 'cta' => [ + 'title' => 'Bereit für den nächsten Schritt?', + 'subtitle' => 'Werden Sie noch heute Teil des B2in Ecosystems und profitieren Sie von innovativen Geschäftsmodellen und nachhaltigen Erfolgsstrategien.', + 'button_text' => 'Jetzt Partner werden', + 'button_link' => '/contact', + ], + ], + 'supplier_section' => [ + 'tag' => 'Für Lieferanten', + 'title' => 'Kuratierte Plattform für Anbieter', + 'subtitle' => 'Werden Sie Teil eines exklusiven Netzwerks hochwertiger Anbieter. Präsentieren Sie Ihre Produkte und Services einer vorqualifizierten, kaufkräftigen Zielgruppe mit höchsten Qualitätsansprüchen.', + 'benefits' => [ + 0 => [ + 'title' => 'Kuratierter Vertriebskanal', + 'description' => 'Zugang zu einer exklusiven, vorqualifizierten Kundenbasis mit hohem Qualitätsanspruch', + 'icon' => 'store', + ], + 1 => [ + 'title' => 'Selbstverwaltung', + 'description' => 'Vollständige Kontrolle über Produktpräsentation, Preisgestaltung und Verfügbarkeit', + 'icon' => 'settings', + ], + 2 => [ + 'title' => 'Zentrale Qualitätssicherung', + 'description' => 'Standardisierte Prozesse und Qualitätskontrollen für maximales Kundenvertrauen', + 'icon' => 'check-circle', + ], + 3 => [ + 'title' => 'Analytics & Insights', + 'description' => 'Detaillierte Verkaufsanalysen und Markteinblicke für optimierte Geschäftsentscheidungen', + 'icon' => 'bar-chart', + ], + ], + 'dashboard' => [ + 'title' => 'Anbieter-Dashboard', + 'stats' => [ + 0 => [ + 'label' => 'Produktsichtbarkeit', + 'value' => '94%', + ], + 1 => [ + 'label' => 'Qualitätsbewertung', + 'value' => '98%', + ], + ], + ], + ], + 'leadership_team' => [ + 'title' => 'Das Führungsteam', + 'subtitle' => 'Unser erfahrenes Team bringt jahrzehntelange Expertise in den Bereichen Technologie, Operations und Geschäftsentwicklung mit.', + 'team_tag' => 'B2IN TEAM', + 'team' => [ + 0 => [ + 'name' => 'Marcel Scheibe', + 'position' => 'Gründer & CEO', + 'expertise' => 'Visionär für die digitale Zukunft des lokalen Handels und strategischer Brückenbauer zwischen den USA und Europa.', + 'image' => 'b2in/marcel-scheibe.jpg', + ], + 1 => [ + 'name' => 'Sarah Müller', + 'position' => 'Head of Operations', + 'expertise' => 'Expertin für die Optimierung unserer europaweiten Logistikprozesse und die operative Exzellenz unserer regionalen Hubs.', + 'image' => 'b2in/sarah-mueller.jpg', + ], + 2 => [ + 'name' => 'Thomas Weber', + 'position' => 'Head of Technology', + 'expertise' => 'Technologieführer mit Fokus auf eine intuitive, skalierbare Plattform-Architektur, die Händler und Hersteller nahtlos verbindet.', + 'image' => 'b2in/thomas-weber.jpg', + ], + ], + ], +]; diff --git a/dev/2026-08-28/archiv-2026-10-06/lang-en-sektionen.php b/dev/2026-08-28/archiv-2026-10-06/lang-en-sektionen.php new file mode 100644 index 00000000..6c1f61a1 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-06/lang-en-sektionen.php @@ -0,0 +1,1203 @@ + [ + 'title' => 'Two Worlds. One Network.', + 'paragraphs' => [ + 0 => 'We connect real estate purchases with the perfect furnishing. Real estate investors benefit from our exclusive furniture network – project developers from our German contractual reliability in supply chain management.', + ], + 'image' => 'b2in/best-of-two-worlds.jpg', + 'image_alt' => 'The B2in Ecosystem – Real Estate and Interior', + 'image_caption' => 'The B2in Ecosystem', + ], + 'ecosystem_core' => [ + 'title' => 'One Ecosystem, Three Pillars', + 'subtitle' => '', + 'pillars' => [ + 0 => [ + 'icon' => 'building-office-2', + 'title' => 'Real Estate & Investments', + 'description' => 'Exclusive off-market projects & high-yield investment properties.', + 'link' => '/immobilien', + ], + 1 => [ + 'icon' => 'squares-2x2', + 'title' => 'Local-for-Local Marketplace', + 'description' => 'The network for regional furniture retailers and brokers.', + 'link' => '/netzwerk', + ], + 2 => [ + 'icon' => 'clipboard-document-check', + 'title' => 'Supply Chain Management', + 'description' => 'German contractual reliability for international property developers.', + 'link' => '/netzwerk', + ], + ], + ], + 'brand_worlds' => [ + 'title' => 'Our Worlds:
Design, Real Estate, and International Trade', + 'subtitle' => 'From international real estate investments to exclusive interior concepts to transatlantic trade – B2in connects the worlds that belong together.', + 'worlds' => [ + 0 => [ + 'image' => 'b2in/stileigentum.jpg', + 'title' => 'Stileigentum', + 'description' => 'The premium segment: Exclusive and high-quality interior concepts for discerning clients who value quality and tradition.', + 'link' => 'https://stileigentum.test', + 'logo' => 'img/logos/stileigentum-logo-positiv.svg', + 'logo_width' => 'w-35', + 'external' => true, + ], + 1 => [ + 'image' => 'b2in/style2own.jpg', + 'title' => 'Style2own', + 'description' => 'The lifestyle channel: Modern interior concepts for young professionals and trend-oriented clients – urban, flexible, inspiring.', + 'link' => 'https://style2own.test', + 'logo' => 'img/logos/style2own-logo-positiv.svg', + 'logo_width' => 'w-28', + 'external' => true, + ], + 2 => [ + 'image' => 'b2in/b2a.jpg', + 'title' => 'B2A', + 'description' => 'Our logistics powerhouse for transatlantic trade. We enable manufacturers direct access to international markets.', + 'link' => 'https://b2a.test', + 'logo' => 'img/logos/b2a-logo-positiv.svg', + 'logo_width' => 'w-18', + 'external' => true, + ], + ], + ], + 'integriertes_modell_b2in' => [ + 'title' => 'The Best of Both Worlds:
Real Estate and Interior', + 'paragraphs' => [ + 0 => 'B2in connects what belongs together: Those who acquire property need the right furnishing. Those who want exclusive interiors will find the best local specialists through our network – complemented by the range of European manufacturers.', + 1 => 'The result: A seamless experience for the customer and new revenue streams for our partners – whether brokers, retailers, or developers.', + ], + 'image' => 'b2in/best-of-two-worlds.jpg', + 'image_alt' => 'The result for the customer – Property and interior from one source', + 'image_caption' => 'Property and interior – from one source', + ], + 'immobilien_hero' => [ + 'title' => 'Invest in the Future – Dubai, Lisbon & More.', + 'subtitle' => 'Exclusive off-market projects and high-yield investments. Personally curated and guided by Marcel Scheibe.', + 'features' => [ + 0 => [ + 'title' => 'Off-Market', + 'description' => 'Exclusive Projects', + 'icon' => 'lock-closed', + ], + 1 => [ + 'title' => 'High-Yield', + 'description' => 'High-Return Investments', + 'icon' => 'arrow-trending-up', + ], + 2 => [ + 'title' => 'Personal', + 'description' => 'Guidance by Marcel Scheibe', + 'icon' => 'user', + ], + 3 => [ + 'title' => 'International', + 'description' => 'Dubai, Lisbon & More', + 'icon' => 'globe-alt', + ], + ], + 'image' => 'b2in/hero-immobilien.jpg', + 'image_alt' => 'International Real Estate Investments', + 'card_title' => 'B2in Real Estate', + 'card_text' => 'Exclusive international investments', + 'hub' => [ + 'title' => 'B2in Real Estate', + 'subtitle' => 'Exclusive International Investments', + ], + 'stats' => [ + 0 => 'Off-Market Access', + 1 => 'Personal Guidance', + 2 => 'High-Yield Properties', + ], + ], + 'immobilien_projects' => [ + 'title' => 'Current Launches & Projects', + 'subtitle' => 'Discover our current real estate projects in international markets.', + 'projects' => [ + 'azizi-creek-views-4' => [ + 'slug' => 'azizi-creek-views-4', + 'title' => 'Azizi Developments: Creek Views 4', + 'location' => 'Al Jaddaf, Dubai', + 'status' => 'NEW LAUNCH', + 'launch_date' => '03.03.2026', + 'price_from' => 'from 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)', + 'image' => 'expose/a1/image-4.jpeg', + 'highlights' => [ + 0 => 'Prime Waterfront Views', + 1 => '1BR: from 1.125.000 AED (ca. 283.000 EUR / 306.000 USD)', + 2 => 'Exclusive 3BR Penthouse (Single Inventory)', + 3 => 'High Rental Demand & Capital Appreciation', + ], + 'quick_facts' => [ + 0 => [ + 'icon' => 'home-modern', + 'label' => 'Types', + 'value' => '1BR & 3BR Penthouse', + ], + 1 => [ + 'icon' => 'squares-2x2', + 'label' => 'Size', + 'value' => '543 – 2,346 sqft', + ], + 2 => [ + 'icon' => 'building-office-2', + 'label' => 'Units', + 'value' => 'Only 132 (Limited)', + ], + 3 => [ + 'icon' => 'user', + 'label' => 'Developer', + 'value' => 'Azizi Developments', + ], + ], + 'investment_case' => [ + 'title' => 'Strong Investment, High Demand.', + 'text' => 'Creek Views 4 offers a strategic top location in Al Jaddaf. The combination of limited supply (only 132 units) and premium finishes makes this project the ideal choice for investors targeting capital appreciation and high rental demand.', + 'views' => [ + 0 => 'Road View', + 1 => 'Sitting & Play Area View', + 2 => 'Neighbour View', + ], + ], + 'gallery' => [ + 0 => 'expose/a1/image-4.jpeg', + 1 => 'expose/a1/image-3.jpeg', + 2 => 'expose/a1/image-2.jpeg', + 3 => 'expose/a1/image-5.jpeg', + 4 => 'expose/a1/image-6.jpeg', + 5 => 'expose/a1/image-7.jpeg', + ], + 'location_info' => [ + 'title' => 'Strategic Location: Al Jaddaf', + 'map_url' => 'https://maps.google.com/?q=Al+Jaddaf+Dubai', + 'points' => [ + 0 => 'Direct connection to Dubai Creek and Waterfront', + 1 => 'Just minutes to Downtown Dubai & Burj Khalifa', + 2 => 'Excellent infrastructure and growing district', + ], + ], + 'contact' => [ + 'title' => 'Secure one of the 132 units.', + 'subtitle' => 'Your contact: Marcel Scheibe', + 'options' => [ + '' => 'I am interested in...', + '1br' => '1 Bedroom Apartment', + '3br_penthouse' => '3BR Penthouse (Single Unit)', + 'general' => 'General Consultation', + ], + ], + ], + ], + 'cta_text' => 'Request Exposé & Availability Now', + 'cta_link' => '/contact', + ], + 'immobilien_moebel_vorteil' => [ + 'title' => 'Your Investment, Your Advantage', + 'text' => 'As a buyer of a B2in property, you receive exclusive insider access to our B2in furniture network. Furnish your property at unbeatable partner rates.', + 'button_text' => 'Learn More About the B2in Network', + 'button_link' => '/netzwerk', + ], + 'immobilien_trust' => [ + 'title' => 'Personal Guidance', + 'paragraphs' => [ + 0 => 'Behind every B2in investment stands Marcel Scheibe as your personal contact. No anonymous platform – but a face with expertise, network, and the commitment that your investment is in the best hands.', + ], + 'image' => 'b2in/marcel-scheibe-about.jpg', + 'image_alt' => 'Marcel Scheibe – Personal Investment Guidance', + 'image_caption' => 'Marcel Scheibe, Founder & CEO', + 'list' => [ + 0 => [ + 'icon' => 'calendar', + 'title' => 'Investor Evenings – Exclusive quarterly events in an intimate setting', + ], + 1 => [ + 'icon' => 'phone', + 'title' => 'Direct Line – Personal conversation and appointment scheduling', + ], + 2 => [ + 'icon' => 'shield-check', + 'title' => 'Transparency – Guided from market analysis to closing', + ], + ], + ], + 'immobilien_hero_v2' => [ + 'title' => 'Investing in Global Dynamics. With German Reliability.', + 'subtitle' => 'Exclusive off-market projects, attractive returns, and guidance that goes far beyond the purchase contract. Discover the real estate market in Dubai.', + 'cta_text' => 'View Current Projects', + 'cta_link' => '#projekte', + 'image' => 'b2in/hero-immobilien.jpg', + 'image_alt' => 'Dubai Skyline – Premium Real Estate Investments', + ], + 'immobilien_warum_dubai' => [ + 'title' => 'Why an Investment in Dubai Is Worth It', + 'intro' => 'Dubai is not just a financial decision, but access to one of the world\'s fastest-growing markets. Investors value the clear legal structures and frameworks that are virtually unique worldwide:', + 'facts' => [ + 0 => [ + 'icon' => 'banknotes', + 'title' => '0% Taxes', + 'description' => 'No income tax on rental income, no capital gains tax on sale.', + ], + 1 => [ + 'icon' => 'arrow-trending-up', + 'title' => 'Strong Returns', + 'description' => 'Attractive rental yields of historically 6% to 9% annually.', + ], + 2 => [ + 'icon' => 'shield-check', + 'title' => 'High Security', + 'description' => 'A government-regulated market with a secure escrow trust system.', + ], + 3 => [ + 'icon' => 'currency-dollar', + 'title' => 'Stable Currency', + 'description' => 'The Dirham (AED) is pegged to the US Dollar.', + ], + 4 => [ + 'icon' => 'identification', + 'title' => 'Golden Visa', + 'description' => 'Secure residence permits through attractive investor programs.', + ], + 5 => [ + 'icon' => 'globe-alt', + 'title' => 'High Demand', + 'description' => 'International immigration and limited supply continuously drive housing demand upward.', + ], + ], + ], + 'immobilien_image_break' => [ + 'image' => 'b2in/hero-immobilien.jpg', + 'image_alt' => 'Dubai Skyline – Real Estate Investments', + 'quote' => 'Dubai has evolved into one of the most dynamic real estate markets in the world.', + 'author' => 'Marcel Scheibe', + ], + 'immobilien_kaufprozess' => [ + 'title' => 'Clearly Structured: The Purchase Process in Dubai', + 'intro' => 'The market in Dubai is faster, more digital, and organized by project. Every step is maximally secured through the government escrow system (trust accounts based on construction progress).', + 'steps' => [ + 0 => [ + 'number' => '1', + 'title' => 'Reservation (Booking Fee)', + 'description' => 'With a fee of approx. 3–10%, your desired unit is officially taken off the market and reserved for you.', + ], + 1 => [ + 'number' => '2', + 'title' => 'Down Payment & Contract (SPA)', + 'description' => 'After an initial down payment (usually 10%), the official Sales & Purchase Agreement (SPA) is drawn up.', + ], + 2 => [ + 'number' => '3', + 'title' => 'Government Registration (DLD)', + 'description' => 'By paying the registration fee (4%) to the Dubai Land Department, your ownership is officially recorded in the government register.', + ], + 3 => [ + 'number' => '4', + 'title' => 'Final Purchase Contract', + 'description' => 'Your ownership rights are officially secured. Further payments are made strictly according to construction progress into secure trust accounts.', + ], + ], + ], + 'immobilien_bruecke' => [ + 'title' => '"The market speaks for itself. My role is a different one."', + 'paragraphs' => [ + 0 => 'For many German investors, buying real estate in Dubai initially feels unfamiliar. In Germany, we are accustomed to notaries, land registries, and highly bureaucratic processes. Dubai is more dynamic.', + 1 => 'I am not here to sell you the market – the quality of the projects speaks for itself. My role is to be your bridge. As an investor who has bought in Dubai myself, I know the practice. I am regularly on-site, in permanent contact with developers, and I guide you through the entire process. I translate international speed into German reliability.', + ], + 'advantage_title' => 'Your B2in Advantage', + 'advantage_text' => 'My guidance doesn\'t end with the purchase. Planning lucrative short-term rentals (e.g., Airbnb)? Through our B2in network and my roots in the furniture industry, we realize complete interior concepts for you – for maximum returns with minimum effort.', + 'cta_text' => 'Schedule a Personal Consultation', + 'cta_link' => '/contact', + 'image' => 'b2in/marcel-scheibe-about.jpg', + 'image_alt' => 'Marcel Scheibe – Personal Investment Guidance', + 'image_caption' => 'Marcel Scheibe, Founder & CEO', + ], + 'immobilien_mindset' => [ + 'title' => 'Are You the Right Investor for Dubai?', + 'text_positive' => 'Dubai is for people who think internationally. The government prioritizes efficiency, economic development, and tremendous speed. If you believe in the shift of global economic centers and value a dynamic system, Dubai is the strategically perfect building block for your portfolio. Then you are in the right place with us.', + 'text_negative' => 'However, if you prefer a system built on slow decision-making and maximum bureaucracy, this market will not match your expectations.', + 'closing' => 'The step is smaller than you think. Let\'s find out together whether an investment in Dubai fits your strategy.', + 'cta_text' => 'Schedule a Non-Binding Consultation', + 'cta_link' => '/contact', + ], + 'netzwerk_hero' => [ + 'title' => 'The B2in Ecosystem – Real Estate Meets Interior.', + 'subtitle' => 'We are currently building the smartest local-for-local furnishing network. As a B2in real estate client, you will benefit exclusively from our closed shop in the future.', + 'image' => 'b2in/ecosystem-hero.jpg', + 'image_alt' => 'B2in Ecosystem – Interior and Real Estate', + ], + 'netzwerk_image_break' => [ + 'image' => 'b2in/ecosystem-hero.jpg', + 'image_alt' => 'B2in Ecosystem – Interior and Real Estate', + 'quote' => 'We connect what belongs together: real estate and interior.', + 'author' => 'Marcel Scheibe', + ], + 'netzwerk_teasers' => [ + 'title' => 'What We Are Building', + 'cards' => [ + 0 => [ + 'icon' => 'squares-2x2', + 'title' => 'Interior Network', + 'description' => 'Personal consultation by local specialists, curated European manufacturers, and exclusive rates for B2in real estate clients. Furnishing you can touch – not just order online.', + 'status' => 'In Development', + ], + 1 => [ + 'icon' => 'building-storefront', + 'title' => 'For Retailers & Specialists', + 'description' => 'Are you a local interior specialist looking to join a premium network? We connect you with clients who value personal consultation and quality.', + 'status' => 'Pre-Registration Available', + ], + 2 => [ + 'icon' => 'globe-alt', + 'title' => 'For Developers & Brands', + 'description' => 'German contractual reliability for international property developers. Supply chain management focused on schedule adherence, quality control, and enforcement.', + 'status' => 'Pre-Registration Available', + ], + ], + ], + 'netzwerk_cta' => [ + 'title' => 'Interested in a Partnership?', + 'text' => 'Whether as a specialist retailer, manufacturer, broker, or developer – contact us for pre-registration and be among the first to know when our network goes live.', + 'button_text' => 'Get in Touch', + 'button_link' => '/contact', + ], + 'netzwerk_cabinet_partner' => [ + 'badge' => 'Premium partner', + 'title' => 'Our premium partner: CABINET Built-In Wardrobes', + 'lead' => 'Bespoke excellence for the highest standards.', + 'paragraphs' => [ + 0 => 'In the B2in ecosystem, we focus on lasting quality. We are proud to feature CABINET as a premium partner in our network. The CABINET store in Bielefeld (our physical anchor) stands for bespoke built-in solutions that unite design, functionality, and craftsmanship.', + 1 => 'Whether walk-in wardrobes, smart room concepts, or exclusive interiors – CABINET delivers the premium standard our real estate investors and developers expect for high-end projects. This partnership reflects our philosophy: connecting international real estate with German interior excellence.', + ], + 'image' => 'b2in/cabinet_logo.png', + 'image_alt' => 'CABINET built-in wardrobes – B2in premium partner', + ], + 'netzwerk_immobilien_hint' => [ + 'title' => 'Already available: Real estate', + 'description' => 'Our real estate division is already active. Discover exclusive off-market projects in Dubai with personal guidance from Marcel Scheibe.', + 'button_text' => 'View real estate projects', + 'button_link' => '/immobilien', + ], + 'interior_hero' => [ + 'title' => 'Exclusive Furnishing. Locally Conceived, Internationally Connected.', + 'subtitle' => 'The B2in interior network connects local expertise with international manufacturers – personal, tangible, and in your area.', + 'features' => [ + 0 => [ + 'title' => 'Local-for-Local', + 'description' => 'Your specialist retailer nearby', + 'icon' => 'map-pin', + ], + 1 => [ + 'title' => 'Premium Network', + 'description' => 'Curated manufacturers & brands', + 'icon' => 'star', + ], + 2 => [ + 'title' => 'Two Brands', + 'description' => 'stileigentum & style2own', + 'icon' => 'squares-2x2', + ], + 3 => [ + 'title' => 'Personal', + 'description' => 'Consultation over algorithms', + 'icon' => 'user', + ], + ], + 'image' => 'b2in/ecosystem-hero.jpg', + 'image_alt' => 'B2in Interior Network – Local-for-Local', + 'card_title' => 'B2in Interior', + 'card_text' => 'Local-for-Local Interior Network', + 'hub' => [ + 'title' => 'B2in Interior', + 'subtitle' => 'The Interior Network', + ], + 'stats' => [ + 0 => 'Local Specialists', + 1 => 'European Manufacturers', + 2 => 'Personal Consultation', + ], + ], + 'interior_concept' => [ + 'title' => 'What Does Local-for-Local Mean?', + 'paragraphs' => [ + 0 => 'Our interior network relies on what online cannot deliver: real consultation, real touch, real expertise. Instead of anonymous platforms, we facilitate direct contact with local specialist retailers – people who understand their craft and guide you personally.', + 1 => 'B2in connects these local experts with a curated network of European manufacturers. The result: Access to exclusive brands and collections that you won\'t find online – but with the consultation quality that only your local specialist can offer.', + ], + 'image' => 'b2in/ecosystem_result.jpg', + 'image_alt' => 'Local-for-Local – Personal consultation instead of anonymous platforms', + 'image_caption' => 'Personal interior consultation on-site', + ], + 'interior_brands' => [ + 'title' => 'Two Brands, One Network', + 'subtitle' => 'Depending on your style and standards, you can access our network through one of our two interior brands.', + 'brands' => [ + 0 => [ + 'name' => 'stileigentum', + 'tagline' => 'Premium Interior', + 'description' => 'Exclusive and high-quality interior concepts for discerning clients who value quality and tradition. Hand-selected manufacturers, timeless materials, individual consultation.', + 'audience' => 'For clients seeking the extraordinary.', + 'logo' => 'img/logos/stileigentum-logo-positiv.svg', + 'logo_width' => 'w-35', + 'link' => 'https://stileigentum.test', + ], + 1 => [ + 'name' => 'style2own', + 'tagline' => 'Design Lifestyle', + 'description' => 'Modern interior concepts for young professionals and trend-oriented clients – urban, flexible, inspiring. Current trends, smart solutions, fair prices.', + 'audience' => 'For everyone who loves design.', + 'logo' => 'img/logos/style2own-logo-positiv.svg', + 'logo_width' => 'w-28', + 'link' => 'https://style2own.test', + ], + ], + ], + 'interior_zielgruppen' => [ + 'title' => 'Who Is the Interior Network For?', + 'groups' => [ + 0 => [ + 'icon' => 'home', + 'title' => 'Private Individuals', + 'description' => 'Furnishing your new home and looking for personal consultation instead of endless online scrolling? Through our network, you\'ll find local specialists who understand your style.', + ], + 1 => [ + 'icon' => 'building-office-2', + 'title' => 'Real Estate Investors', + 'description' => 'Have you made an investment through B2in? As a property buyer, you receive exclusive access to partner rates for complete furnishing – all from one source.', + ], + 2 => [ + 'icon' => 'clipboard-document-check', + 'title' => 'Developers & Brokers', + 'description' => 'Need model furnishings, home staging, or turnkey outfitting for your projects? B2in coordinates from planning to delivery.', + ], + ], + ], + 'interior_process' => [ + 'title' => 'It\'s That Simple', + 'steps' => [ + 0 => [ + 'number' => '01', + 'title' => 'Consultation', + 'description' => 'Contact us or visit one of our local partners. Together, we define your style, budget, and preferences.', + ], + 1 => [ + 'number' => '02', + 'title' => 'Selection', + 'description' => 'Your specialist retailer shows you curated collections from European manufacturers – to touch, not just on a screen.', + ], + 2 => [ + 'number' => '03', + 'title' => 'Delivery & Setup', + 'description' => 'B2in coordinates logistics and delivery. Your local partner accompanies the setup down to the last detail.', + ], + ], + ], + 'interior_trust' => [ + 'title' => 'Personal Instead of Anonymous', + 'paragraphs' => [ + 0 => 'Behind the B2in interior network stands Marcel Scheibe with the conviction that great furnishing requires personal consultation. No algorithm replaces the conversation with an expert who knows materials, understands spaces, and matches your style.', + ], + 'image' => 'b2in/marcel-scheibe-about.jpg', + 'image_alt' => 'Marcel Scheibe – The face behind the interior network', + 'image_caption' => 'Marcel Scheibe, Founder & CEO', + 'list' => [ + 0 => [ + 'icon' => 'map-pin', + 'title' => 'Local Experts – Specialist retailers in your region who advise you personally', + ], + 1 => [ + 'icon' => 'star', + 'title' => 'Curated Manufacturers – Only verified European quality brands', + ], + 2 => [ + 'icon' => 'shield-check', + 'title' => 'Transparent Pricing – Fair rates with no hidden markups', + ], + ], + ], + 'broker_section' => [ + 'title' => 'Lifetime Compensation for Brokers', + 'subtitle' => 'Benefit from a revolutionary compensation model that goes beyond the one-time sale. Build long-term client relationships and generate continuous returns.', + 'card_title' => 'Lifetime Compensation', + 'compensation' => [ + 'initial_sale' => '3.5%', + 'follow_up' => '1.5%', + ], + 'compensation_text' => 'Continuous returns throughout the entire client relationship', + 'benefits' => [ + 0 => [ + 'title' => 'Lifetime Compensation Model', + 'description' => 'Continuous commissions through long-term client relationships and recurring business', + 'icon' => 'trending-up', + ], + 1 => [ + 'title' => 'Faster Marketing', + 'description' => 'Well-designed living concepts reduce sales time and increase success rates', + 'icon' => 'clock', + ], + 2 => [ + 'title' => 'Qualified Leads', + 'description' => 'Pre-filtered, interested clients through the B2in portal and premium memberships', + 'icon' => 'target', + ], + 3 => [ + 'title' => 'Premium Positioning', + 'description' => 'Exclusive marketing of high-quality living concepts for discerning target groups', + 'icon' => 'award', + ], + ], + ], + 'commitment_section' => [ + 'title' => 'The Trust of Our Partners', + 'subtitle' => 'Real opinions from real partners. Your success is our greatest motivation.', + 'testimonials' => [ + 0 => [ + 'image' => 'b2in/testo-1.jpg', + 'rating' => 5, + 'quote' => 'Working with B2in has exceeded our expectations. Professional, efficient, and always solution-oriented.', + 'author' => 'Max Mustermann', + 'author_title' => 'Furniture Manufacturer', + ], + 1 => [ + 'image' => 'b2in/testo-2.jpg', + 'rating' => 5, + 'quote' => 'Thanks to the B2in platform, we were able to significantly increase our reach and tap into new markets.', + 'author' => 'Erika Mustermann', + 'author_title' => 'Local Furniture Retailer', + ], + 2 => [ + 'image' => 'b2in/testo-3.jpg', + 'rating' => 5, + 'quote' => 'The B2in portal has revolutionized the way I market real estate. The staging enhances my properties, and the furniture commission is an extremely attractive additional income.', + 'author' => 'John Doe', + 'author_title' => 'Real Estate Broker', + ], + ], + ], + 'dark_stats_section' => [ + 'stats' => [ + 0 => [ + 'number' => '17+', + 'text' => 'Years of Experience', + ], + 1 => [ + 'number' => '2M', + 'text' => 'Happy Guests', + ], + ], + 'title' => 'Economically Sound and Well-
Friendly Service for
Families and Their
Precious Belongings', + 'description' => 'We understand that every family is unique, which is why we offer personalized services tailored to meet your specific needs. From luxury amenities to budget-friendly options, we ensure every guest feels valued and comfortable.', + 'features' => [ + 0 => [ + 'title' => 'Top Consultation', + 'subtitle' => 'Expert guidance', + ], + 1 => [ + 'title' => 'Finest Meal', + 'subtitle' => 'Gourmet dining', + ], + 2 => [ + 'title' => 'Easy Tax Reduction', + 'subtitle' => 'Cost-effective', + ], + ], + 'image' => 'b2in/accommodation-2.jpg', + 'image_alt' => 'Luxury interior design', + ], + 'ecosystem_hero' => [ + 'title' => 'How Our Ecosystem Generates Growth for All Partners', + 'subtitle' => 'An intelligent network that seamlessly connects property buyers, local specialists, international manufacturers, brokers, and developers – for extraordinary real estate and interior experiences.', + 'features' => [ + 0 => [ + 'title' => 'Real Estate', + 'description' => 'International Investments', + 'icon' => 'globe-alt', + ], + 1 => [ + 'title' => 'Interior', + 'description' => 'Local for Local', + 'icon' => 'cube-transparent', + ], + 2 => [ + 'title' => 'Supply Chain', + 'description' => 'Procurement & Control', + 'icon' => 'clipboard-document-check', + ], + 3 => [ + 'title' => 'Technology', + 'description' => 'Digital Core', + 'icon' => 'cpu-chip', + ], + ], + 'image' => 'b2in/ecosystem-hero.jpg', + 'image_alt' => 'Ecosystem Hero Image', + 'card_title' => 'B2in Portal', + 'card_text' => 'The technology behind it that enables the ecosystem', + 'hub' => [ + 'title' => 'B2in Portal', + 'subtitle' => 'The technology behind it that enables the ecosystem', + ], + 'stats' => [ + 0 => 'Exclusive Selection', + 1 => 'Personal Service', + 2 => 'Lasting Values', + ], + ], + 'ecosystem_stats' => [ + 'title' => 'Our Ecosystem in Numbers', + 'subtitle' => 'Numbers that reflect the strength and trust in our connected business model.', + 'stats' => [ + 0 => [ + 'number' => '1.7K+', + 'label' => 'Partners & Experts in the Network', + 'description' => 'Growing community of developers, brokers, retailers, and manufacturers', + ], + 1 => [ + 'number' => '510+', + 'label' => 'Completed Projects', + 'description' => 'Real estate and interior projects through our network', + ], + 2 => [ + 'number' => '98%', + 'label' => 'Partner Satisfaction', + 'description' => 'Satisfaction across all ecosystem participants', + ], + 3 => [ + 'number' => '24/7', + 'label' => 'Partner Support', + 'description' => 'Continuous availability of the digital infrastructure', + ], + ], + ], + 'ecosystem_start' => [ + 'title' => 'Everything Begins with the Moment of Need:', + 'paragraphs' => [ + 0 => 'Our ecosystem starts with the customer – exactly when they need it: at the property purchase.', + 1 => 'Through the broker, the customer gains access to the B2in ecosystem. Our brands style2own and stileigentum create the right framework – tailored to the target group and lifestyle.', + ], + 'image' => 'b2in/ecosystem_start.jpg', + 'image_alt' => 'The entry into the ecosystem – through the property purchase', + 'image_caption' => 'The Entry: Property Purchase as Trigger', + 'image_description' => 'A stylized graphic showing how the property purchase triggers entry into the B2in ecosystem.', + ], + 'ecosystem_hub' => [ + 'title' => 'In the Hub, Local for Local Meets International Expertise', + 'paragraphs' => [ + 0 => 'Once a customer selects their region, our platform plays to its strengths: The "Local First" logic prominently displays the offerings of local specialists.', + 1 => 'The range is complemented by European manufacturers. And for property developers, we deliver the operational procurement as well – from contract to quality control.', + ], + 'image' => 'b2in/ecosystem_hub.jpg', + 'image_alt' => 'Local for Local – Local expertise meets international procurement', + 'image_caption' => 'Local for Local: Local Expertise, International Reach', + 'image_description' => 'A clear infographic showing: [Local Offering] + [International Procurement] = The B2in Ecosystem.', + ], + 'ecosystem_result' => [ + 'title' => 'A Cycle Where Everyone Wins', + 'paragraphs' => [ + 0 => 'In this interplay, clear advantages emerge for every participant:', + ], + 'list' => [ + 0 => [ + 'icon' => 'globe-alt', + 'title' => 'The property developer receives a reliable partner for procurement and quality control in Germany – transparent and on schedule.', + ], + 1 => [ + 'icon' => 'building-storefront', + 'title' => 'The local retailer gains qualified customers they couldn\'t have reached on their own, strengthening their local position.', + ], + 2 => [ + 'icon' => 'home-modern', + 'title' => 'The broker offers their clients a unique added value after closing and benefits from attractive additional commissions.', + ], + ], + 'image' => 'b2in/ecosystem_result.jpg', + 'image_alt' => 'Your success and the partnership with B2in', + 'image_caption' => 'Your Success and the Partnership with B2in', + 'image_description' => 'A stylized graphic showing how your success and the partnership with B2in are interconnected.', + ], + 'end_customer_section' => [ + 'tag' => 'For End Customers', + 'title' => 'Exclusive Experiences for You', + 'subtitle' => 'With your personal login card, you gain access to a unique world of experiences, specially tailored to your living preferences and lifestyle. Discover curated properties and services that are otherwise unavailable.', + 'benefits' => [ + 0 => [ + 'title' => 'Exclusive Login Card', + 'description' => 'Personalized access to selected real estate experiences and premium services', + 'icon' => 'credit-card', + ], + 1 => [ + 'title' => 'Personalized Experience World', + 'description' => 'Tailored property offerings based on individual preferences and needs', + 'icon' => 'star', + ], + 2 => [ + 'title' => 'Curated Living Concepts', + 'description' => 'High-quality, well-designed property solutions from verified partners', + 'icon' => 'home', + ], + 3 => [ + 'title' => 'Quality Guarantee', + 'description' => 'Verified providers and standardized quality processes for maximum security', + 'icon' => 'shield', + ], + ], + 'image' => 'b2in/end-customer-section.jpg', + 'image_alt' => 'End Customer Section Image', + 'card_title' => 'Login Card', + 'card_text' => 'Your key to exclusive real estate experiences', + 'card' => [ + 'title' => 'Login Card', + 'subtitle' => 'Your key to exclusive real estate experiences', + 'member_number_label' => 'Member Number', + 'member_number' => 'B2IN-2024-VIP', + ], + ], + 'final_commitment' => [ + 'title' => 'We\'re committed to
your comfort and
satisfaction for
unforgettable
experiences', + 'author' => 'Robert Wilson', + 'author_title' => 'General Manager', + ], + 'digital_core' => [ + 'title' => 'The Technology That Enables This Cycle', + 'subtitle' => 'Our central platform is more than just technology. It is the digital core for transparent processes, data-driven decisions, and seamless collaboration across the entire ecosystem.', + 'features' => [ + 0 => [ + 'title' => 'Maximum Reliability', + 'description' => 'Our platform is accessible anytime, anywhere. It grows with your success and guarantees stable operations you can rely on.', + 'icon' => 'cloud', + 'icon_style' => 'solid', + ], + 1 => [ + 'title' => 'Uncompromising Security', + 'description' => 'Your data and your clients\' data are our highest priority. We protect them with state-of-the-art security architectures and guarantee complete data privacy.', + 'icon' => 'shield-check', + ], + 2 => [ + 'title' => 'Future-Proof Integration', + 'description' => 'The B2in portal is open for the future. It integrates seamlessly with other systems and is ready for future expansions and technologies.', + 'icon' => 'squares-2x2', + ], + 3 => [ + 'title' => 'Data-Driven Insights', + 'description' => 'Track your clients\' activities as a broker or your products\' performance as a supplier – all in real-time. Make better decisions based on valid data.', + 'icon' => 'chart-bar', + 'icon_style' => 'solid', + ], + 4 => [ + 'title' => 'Intelligent Personalization', + 'description' => 'Artificial intelligence supports you and your clients – from personalized interior suggestions to process automation for maximum efficiency.', + 'icon' => 'cpu-chip', + ], + 5 => [ + 'title' => 'Excellent User Experience', + 'description' => 'Our platform is optimized for maximum speed and offers intuitive, fluid navigation on every device – from desktop to smartphone.', + 'icon' => 'users', + 'icon_style' => 'solid', + ], + ], + ], + 'partner_benefits' => [ + 'title' => 'Why Become a Partner?', + 'subtitle' => 'Discover the advantages of a partnership with B2in and how you can benefit from our innovative ecosystem.', + 'broker' => [ + 'tag' => 'For Brokers', + 'title' => 'Revolutionary Commission Model', + 'benefits' => [ + 0 => [ + 'icon' => 'trending-up', + 'title' => 'Lifetime Commission Model', + 'description' => 'Benefit from continuous income through our innovative compensation system', + ], + 1 => [ + 'icon' => 'target', + 'title' => 'Faster Marketing', + 'description' => 'Well-designed living concepts shorten marketing times and increase your success rate', + ], + 2 => [ + 'icon' => 'award', + 'title' => 'Added Value for Your Clients', + 'description' => 'Offer your clients exclusive, curated real estate experiences', + ], + ], + 'highlight' => [ + 'value' => '3.5% - ∞', + 'text' => 'Initial commission to lifetime compensation', + ], + ], + 'supplier' => [ + 'tag' => 'For Suppliers', + 'title' => 'Global Market Opportunities', + 'benefits' => [ + 0 => [ + 'icon' => 'globe', + 'title' => 'Access to International Markets', + 'description' => 'Expand your reach across borders with our global network', + ], + 1 => [ + 'icon' => 'handshake', + 'title' => 'Fair Terms', + 'description' => 'Transparent and partnership-based business conditions for sustainable success', + ], + 2 => [ + 'icon' => 'settings', + 'title' => 'Easy Product Management', + 'description' => 'Intuitive platform for managing and presenting your products', + ], + ], + 'highlight' => [ + 'image' => 'b2in/accommodation-1.jpg', + 'alt' => 'Partner success visualization', + 'value' => '500+', + 'text' => 'Successful Partners', + ], + ], + ], + 'supply_chain_intro' => [ + 'title' => 'Supply Chain Management: Your Extended Arm in Germany.', + 'paragraphs' => [ + 0 => 'For property developers looking to source furniture or interior fittings from Germany, we act as your extended arm on the ground – with a clear focus on contractual reliability, schedule adherence, and enforcement.', + ], + 'list' => [ + 0 => [ + 'icon' => 'document-check', + 'title' => 'Contract Management – Drafting, structuring, and securing supply contracts', + ], + 1 => [ + 'icon' => 'shield-check', + 'title' => 'Contract Enforcement – Milestone monitoring, escalation, follow-up', + ], + 2 => [ + 'icon' => 'magnifying-glass-circle', + 'title' => 'Tracking & Quality Control – Ongoing monitoring, personal inspection, on-time delivery', + ], + ], + 'image' => 'b2in/marcel-scheibe-about.jpg', + 'image_alt' => 'Marcel Scheibe – Supply Chain Management', + 'image_caption' => 'Marcel Scheibe, Founder & CEO', + ], + 'partner_hero' => [ + 'title' => 'For Developers & Partners', + 'subtitle' => 'Whether property developer, local interior specialist, European brand, or broker – B2in is the network that connects your business with the right partners and clients.', + 'partner_types' => [ + 0 => [ + 'title' => 'Property Developers', + 'description' => 'Supply chain management from Germany', + 'icon' => 'globe-alt', + ], + 1 => [ + 'title' => 'Manufacturers & Brands', + 'description' => 'Curated market access, intelligent logistics', + 'icon' => 'building-office-2', + ], + 2 => [ + 'title' => 'Local Retailers', + 'description' => 'Digital reach, exclusive product range', + 'icon' => 'building-storefront', + ], + 3 => [ + 'title' => 'Brokers & Developers', + 'description' => 'Added value for clients, additional income for you', + 'icon' => 'home-modern', + ], + ], + 'image' => 'b2in/partner-hero.jpg', + 'image_alt' => 'Partner Hero Image', + 'card_title' => 'Partner Network', + 'card_text' => 'Become Part of Our Ecosystem', + 'hub' => [ + 'title' => 'Partner Network', + 'subtitle' => 'Become Part of Our Ecosystem', + ], + 'connection_points' => [ + 0 => [ + 'name' => 'Brokers', + 'subtext' => 'Lifetime Model', + ], + 1 => [ + 'name' => 'Suppliers', + 'subtext' => 'Global Markets', + ], + 2 => [ + 'name' => 'Success', + 'subtext' => 'Measurable Goals', + ], + 3 => [ + 'name' => 'Quality', + 'subtext' => 'Premium Standards', + ], + ], + ], + 'partner_card_section' => [ + 'title' => 'What Partner Type Are You?', + 'subtitle' => 'Discover the benefits of a partnership with B2in – whether in real estate, interior, or supply chain.', + 'cards' => [ + 0 => [ + 'title' => 'For Property Developers', + 'description' => 'Operational management of your procurement from Germany – contract management, quality control, and on-time delivery.', + 'icon' => 'globe-alt', + 'button' => '#partner-benefits-developer', + 'button_text' => 'Your Benefits as a Developer', + ], + 1 => [ + 'title' => 'For Local Retailers & Specialists', + 'description' => 'Strengthen your local business. Gain access to online customers and an exclusive, supra-regional product range.', + 'icon' => 'building-storefront', + 'button' => '#partner-benefits-retailer', + 'button_text' => 'Your Benefits as a Retailer', + ], + 2 => [ + 'title' => 'For Manufacturers & European Brands', + 'description' => 'Open up new, curated distribution channels in regional markets and benefit from our intelligent logistics.', + 'icon' => 'building-office-2', + 'button' => '#partner-benefits-supplier', + 'button_text' => 'Your Benefits as a Manufacturer', + ], + 3 => [ + 'title' => 'For Real Estate Brokers & Developers', + 'description' => 'Offer your clients unique added value, accelerate marketing, and secure attractive additional commissions.', + 'icon' => 'home-modern', + 'button' => '#partner-benefits-broker', + 'button_text' => 'Your Benefits as a Broker', + ], + ], + ], + 'partner_benefits_developer' => [ + 'id' => 'partner-benefits-developer', + 'tag' => 'Your Benefits as a Property Developer', + 'tag_icon' => 'globe-alt', + 'tag_title' => 'Your Extended Arm in Germany.', + 'features' => [ + 0 => [ + 'title' => 'Contract Management', + 'description' => 'Support in drafting and structuring supply contracts. Definition of clear performance and quality parameters, securing payment and delivery terms.', + 'icon' => 'document-check', + ], + 1 => [ + 'title' => 'Contract Enforcement', + 'description' => 'Active monitoring of agreed milestones, escalation to management level in case of deviations, and consistent follow-up of open items.', + 'icon' => 'shield-check', + ], + 2 => [ + 'title' => 'Tracking & Quality Control', + 'description' => 'Ongoing production and delivery monitoring, personal inspection when needed, and ensuring on-time delivery.', + 'icon' => 'magnifying-glass-circle', + ], + 3 => [ + 'title' => 'Network & Market Knowledge', + 'description' => 'Direct connection to manufacturers and decision-makers in Germany. We ensure that agreements don\'t just exist on paper but are actually implemented.', + 'icon' => 'link', + ], + ], + 'highlight' => [ + 'value' => '100%', + 'text' => 'Transparency, reliability, and predictable delivery – without operational friction', + ], + 'image' => 'b2in/partner-benefits-developer.jpg', + 'image_alt' => 'Supply Chain Management for Property Developers', + ], + 'partner_benefits_retailer' => [ + 'id' => 'partner-benefits-retailer', + 'tag' => 'Your Benefits as a Local Retailer', + 'tag_icon' => 'building-storefront', + 'tag_title' => 'Become the Digital Champion in Your Region.', + 'features' => [ + 0 => [ + 'title' => 'Digital Reach', + 'description' => 'We bring you the online customers you can\'t reach on your own. Benefit from our high-reach consumer brands.', + 'icon' => 'signal', + ], + 1 => [ + 'title' => 'Product Range Extension', + 'description' => 'Complement your offering with exclusive manufacturer brands from our portfolio – without any inventory risk.', + 'icon' => 'squares-plus', + ], + 2 => [ + 'title' => 'Protection Against Online Giants', + 'description' => 'With "Local First," we specifically strengthen your market position. The customer always sees your offering first.', + 'icon' => 'shield-check', + ], + 3 => [ + 'title' => 'Fair Terms', + 'description' => 'Our commission model is transparent and designed so that we only earn when you do too.', + 'icon' => 'scale', + ], + ], + 'highlight' => [ + 'value' => '+35%', + 'text' => 'Digital reach in the first year (average of our partners)', + ], + 'image' => 'b2in/partner-benefits-retailer.jpg', + 'image_alt' => 'Partner Benefits Retailer', + ], + 'partner_benefits_supplier' => [ + 'id' => 'partner-benefits-supplier', + 'tag' => 'Your Benefits as a Manufacturer & Brand', + 'tag_icon' => 'building-office-2', + 'tag_title' => 'Open Up New Markets – Intelligently and Curated.', + 'features' => [ + 0 => [ + 'title' => 'Curated Distribution Channel', + 'description' => 'Instead of getting lost in the noise of large marketplaces, your brand is presented to design-savvy customers in affluent regions.', + 'icon' => 'eye', + ], + 1 => [ + 'title' => 'Efficient Logistics', + 'description' => 'Our bundled logistics reduce your distribution costs. We manage consolidated shipping and complete processing.', + 'icon' => 'truck', + ], + 2 => [ + 'title' => 'Direct Market Access', + 'description' => 'Skip the traditional wholesale and build a direct relationship with regional markets and end customers.', + 'icon' => 'map-pin', + ], + 3 => [ + 'title' => 'Scalable Growth', + 'description' => 'Start with us in one region and gradually expand into further European hubs.', + 'icon' => 'chart-bar-square', + ], + ], + 'highlight' => [ + 'value' => '> 20', + 'text' => 'Curated regional hubs as new distribution channels in Europe', + ], + 'image' => 'b2in/partner-benefits-supplier.jpg', + 'image_alt' => 'Partner Benefits Supplier', + ], + 'partner_benefits_broker' => [ + 'id' => 'partner-benefits-broker', + 'tag' => 'Your Benefits as a Broker & Real Estate Professional', + 'tag_icon' => 'home-modern', + 'tag_title' => 'Added Value for Your Clients – More Revenue for You.', + 'features' => [ + 0 => [ + 'title' => 'Faster Marketing Through Home Staging', + 'description' => 'Use our curated furniture packages (stileigentum & style2own) to professionally stage your properties. Accelerate the sales process and achieve higher prices.', + 'icon' => 'rocket-launch', + ], + 1 => [ + 'title' => 'Unique After-Closing Service', + 'description' => 'Offer your buyers or tenants direct access to a complete furnishing service through our exclusive login card after contract signing.', + 'icon' => 'gift', + ], + 2 => [ + 'title' => 'Attractive Commission Model', + 'description' => 'Benefit twice: In addition to your classic brokerage fee, you receive a fair, lifetime commission on all furniture sales your clients generate through the platform.', + 'icon' => 'currency-euro', + ], + 3 => [ + 'title' => 'Easy Handling', + 'description' => 'Our digital broker portal makes it easy: invite clients, track activities, and view commissions transparently.', + 'icon' => 'finger-print', + ], + ], + 'highlight' => [ + 'value' => '-25%', + 'text' => 'Shorter marketing time for properties staged with B2in', + ], + 'image' => 'b2in/partner-benefits-broker.jpg', + 'image_alt' => 'Partner Benefits Broker', + ], + 'partner_process' => [ + 'title' => 'How to Become a Partner', + 'subtitle' => 'In just three simple steps, you become part of the B2in ecosystem and can benefit from all the advantages of our partnership.', + 'steps' => [ + 0 => [ + 'step' => '1', + 'title' => 'Apply', + 'description' => 'Tell us your story. Fill out our short contact form and show us what sets your products or business apart.', + 'icon' => 'envelope', + 'image' => 'b2in/room-1.jpg', + ], + 1 => [ + 'step' => '2', + 'title' => 'Review', + 'description' => 'We review every application personally. Our goal is to build a high-quality, complementary network that benefits everyone.', + 'icon' => 'check-circle', + 'image' => 'b2in/room-2.jpg', + ], + 2 => [ + 'step' => '3', + 'title' => 'Onboarding', + 'description' => 'Welcome aboard! We personally train you on using our partner portal and ensure you are successful from day one.', + 'icon' => 'rocket-launch', + 'image' => 'b2in/room-3.jpg', + ], + ], + 'cta' => [ + 'title' => 'Ready for the Next Step?', + 'subtitle' => 'Become part of the B2in ecosystem today and benefit from innovative business models and sustainable success strategies.', + 'button_text' => 'Become a Partner Now', + 'button_link' => '/contact', + ], + ], + 'supplier_section' => [ + 'tag' => 'For Suppliers', + 'title' => 'Curated Platform for Providers', + 'subtitle' => 'Become part of an exclusive network of high-quality providers. Present your products and services to a pre-qualified, affluent audience with the highest quality standards.', + 'benefits' => [ + 0 => [ + 'title' => 'Curated Distribution Channel', + 'description' => 'Access to an exclusive, pre-qualified customer base with high quality standards', + 'icon' => 'store', + ], + 1 => [ + 'title' => 'Self-Management', + 'description' => 'Full control over product presentation, pricing, and availability', + 'icon' => 'settings', + ], + 2 => [ + 'title' => 'Central Quality Assurance', + 'description' => 'Standardized processes and quality controls for maximum customer trust', + 'icon' => 'check-circle', + ], + 3 => [ + 'title' => 'Analytics & Insights', + 'description' => 'Detailed sales analytics and market insights for optimized business decisions', + 'icon' => 'bar-chart', + ], + ], + 'dashboard' => [ + 'title' => 'Provider Dashboard', + 'stats' => [ + 0 => [ + 'label' => 'Product Visibility', + 'value' => '94%', + ], + 1 => [ + 'label' => 'Quality Rating', + 'value' => '98%', + ], + ], + ], + ], + 'leadership_team' => [ + 'title' => 'The Leadership Team', + 'subtitle' => 'Our experienced team brings decades of expertise in technology, operations, and business development.', + 'team_tag' => 'B2IN TEAM', + 'team' => [ + 0 => [ + 'name' => 'Marcel Scheibe', + 'position' => 'Founder & CEO', + 'expertise' => 'Visionary for the digital future of local trade and strategic bridge-builder between the USA and Europe.', + 'image' => 'b2in/marcel-scheibe.jpg', + ], + 1 => [ + 'name' => 'Sarah Müller', + 'position' => 'Head of Operations', + 'expertise' => 'Expert in optimizing our Europe-wide logistics processes and operational excellence of our regional hubs.', + 'image' => 'b2in/sarah-mueller.jpg', + ], + 2 => [ + 'name' => 'Thomas Weber', + 'position' => 'Head of Technology', + 'expertise' => 'Technology leader focused on an intuitive, scalable platform architecture that seamlessly connects retailers and manufacturers.', + 'image' => 'b2in/thomas-weber.jpg', + ], + ], + ], +]; diff --git a/dev/2026-08-28/archiv-2026-10-07-aufraeumen/README.md b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/README.md new file mode 100644 index 00000000..90c7ae93 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/README.md @@ -0,0 +1,25 @@ +# Archiv: Aufräumen 07.10.2026 + +Dateien, die nichts mehr lädt oder anzeigt. Pfade unter `code/` wie im Projekt. Nichts in diesem Ordner +wird von der Anwendung geladen. + +| Datei / Ordner | Was es war | +|---|---| +| `resources/views/livewire/web/components/sections_bak/` | 20 Sicherungskopien alter Sektionen (`*.blade_bak.php`, Stand April 2026) | +| `resources/views/livewire/partner/setup-wizard_bak.blade.php` | Sicherungskopie des Partner-Einrichtungsassistenten | +| `app/Livewire/Web/Components/AboutHero.php` | doppelte, ungenutzte Klasse – im Einsatz ist `Sections/AboutHero` | +| `resources/views/web/layouts/admin-master.blade.php`, `header.blade.php`, `footer.blade.php` | alte Layout-Teile (Tailwind-UI-Vorlage mit Platzhalter-Logo) | +| `resources/views/layouts/web-master.blade.php`, `admin-master.blade.php`, `resources/views/partials/admin-head.blade.php` | zweite, ungenutzte Fassung der Layouts – im Einsatz sind `web/layouts/web-master` und die Flux-Layouts | +| `resources/views/components/placeholder-pattern.blade.php`, `components/layouts/app/header.blade.php`, `components/layouts/auth/simple.blade.php`, `components/layouts/auth/split.blade.php` | Varianten aus der Starter-Vorlage, nirgends eingebunden (im Einsatz: `app/sidebar`, `auth/card`) | +| `public/img/assets/b2in/* Kopie*` | Bildkopien (hero-room, partner-hero, b2a) | +| `public/img/assets/b2in/._*` | macOS-Metadaten (AppleDouble), keine Bilder | +| `public/img/assets/b2in/integriertes-model.*` | Bild der entfernten Sektion „Integriertes Modell“ | +| `public/img/map/dubai-map.*` | Dubai-Karte der früheren Immobilien-Seite (5 MB) | +| `resources/views/web/welcome.blade.php` | Demo-Seite `/welcome` („Dies ist die Willkommensseite …“), Route entfernt | +| `public/img/assets/b2a/`, `stileigentum/`, `style2own/` | 118 Bilder (14,5 MB) der drei ruhenden Domains, die keine Vorlage mehr verwendet – ihre Texte lagen in `config/content.php` (Archiv vom 06.10.). Die Domains selbst mit Views, Komponenten und den noch genutzten Bildern bleiben. | + +Außerdem entfernt: der auskommentierte TopBar-Aufruf in `web/layouts/web-master.blade.php` (die +Komponente selbst bleibt, das Registrierungs-Layout `web-master-slot` nutzt sie) und drei leere Ordner +unter `resources/views/components/web/components/`. + +Zurückholen: Datei an den ursprünglichen Pfad zurückkopieren. diff --git a/app/Livewire/Web/Components/AboutHero.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/app/Livewire/Web/Components/AboutHero.php similarity index 100% rename from app/Livewire/Web/Components/AboutHero.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/app/Livewire/Web/Components/AboutHero.php diff --git a/public/img/assets/b2a/10_large.jpeg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/10_large.jpeg similarity index 100% rename from public/img/assets/b2a/10_large.jpeg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/10_large.jpeg diff --git a/public/img/assets/b2a/10_large.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/10_large.webp similarity index 100% rename from public/img/assets/b2a/10_large.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/10_large.webp diff --git a/public/img/assets/b2a/4d5b989609fa0adda725d522c044f752.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/4d5b989609fa0adda725d522c044f752.jpg similarity index 100% rename from public/img/assets/b2a/4d5b989609fa0adda725d522c044f752.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/4d5b989609fa0adda725d522c044f752.jpg diff --git a/public/img/assets/b2a/4d5b989609fa0adda725d522c044f752.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/4d5b989609fa0adda725d522c044f752.webp similarity index 100% rename from public/img/assets/b2a/4d5b989609fa0adda725d522c044f752.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/4d5b989609fa0adda725d522c044f752.webp diff --git a/public/img/assets/b2a/98886-magazin-kueche-amerikanisch-adobestock_244255643-lugostock__1_.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/98886-magazin-kueche-amerikanisch-adobestock_244255643-lugostock__1_.webp similarity index 100% rename from public/img/assets/b2a/98886-magazin-kueche-amerikanisch-adobestock_244255643-lugostock__1_.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/98886-magazin-kueche-amerikanisch-adobestock_244255643-lugostock__1_.webp diff --git a/public/img/assets/b2a/98887-magazin-kueche-amerikanisch-adobestock_316627567-bmak__1_.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/98887-magazin-kueche-amerikanisch-adobestock_316627567-bmak__1_.webp similarity index 100% rename from public/img/assets/b2a/98887-magazin-kueche-amerikanisch-adobestock_316627567-bmak__1_.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/98887-magazin-kueche-amerikanisch-adobestock_316627567-bmak__1_.webp diff --git a/public/img/assets/b2a/accommodation-3.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/accommodation-3.jpg similarity index 100% rename from public/img/assets/b2a/accommodation-3.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/accommodation-3.jpg diff --git a/public/img/assets/b2a/accommodation-3.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/accommodation-3.webp similarity index 100% rename from public/img/assets/b2a/accommodation-3.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/accommodation-3.webp diff --git a/public/img/assets/b2a/content-left.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/content-left.jpg similarity index 100% rename from public/img/assets/b2a/content-left.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/content-left.jpg diff --git a/public/img/assets/b2a/content-left.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/content-left.webp similarity index 100% rename from public/img/assets/b2a/content-left.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/content-left.webp diff --git a/public/img/assets/b2a/content-right.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/content-right.jpg similarity index 100% rename from public/img/assets/b2a/content-right.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/content-right.jpg diff --git a/public/img/assets/b2a/content-right.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/content-right.webp similarity index 100% rename from public/img/assets/b2a/content-right.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/content-right.webp diff --git a/public/img/assets/b2a/faxon-euroline-steel-windows-img~d3114bcb0b9c4eeb_14-3023-1-66b0fb7-1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/faxon-euroline-steel-windows-img~d3114bcb0b9c4eeb_14-3023-1-66b0fb7-1.jpg similarity index 100% rename from public/img/assets/b2a/faxon-euroline-steel-windows-img~d3114bcb0b9c4eeb_14-3023-1-66b0fb7-1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/faxon-euroline-steel-windows-img~d3114bcb0b9c4eeb_14-3023-1-66b0fb7-1.jpg diff --git a/public/img/assets/b2a/faxon-euroline-steel-windows-img~d3114bcb0b9c4eeb_14-3023-1-66b0fb7-1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/faxon-euroline-steel-windows-img~d3114bcb0b9c4eeb_14-3023-1-66b0fb7-1.webp similarity index 100% rename from public/img/assets/b2a/faxon-euroline-steel-windows-img~d3114bcb0b9c4eeb_14-3023-1-66b0fb7-1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/faxon-euroline-steel-windows-img~d3114bcb0b9c4eeb_14-3023-1-66b0fb7-1.webp diff --git a/public/img/assets/b2a/hero-image.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-image.jpg similarity index 100% rename from public/img/assets/b2a/hero-image.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-image.jpg diff --git a/public/img/assets/b2a/hero-image.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-image.webp similarity index 100% rename from public/img/assets/b2a/hero-image.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-image.webp diff --git a/public/img/assets/b2a/hero-slider-1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-slider-1.jpg similarity index 100% rename from public/img/assets/b2a/hero-slider-1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-slider-1.jpg diff --git a/public/img/assets/b2a/hero-slider-1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-slider-1.webp similarity index 100% rename from public/img/assets/b2a/hero-slider-1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-slider-1.webp diff --git a/public/img/assets/b2a/hero-slider-2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-slider-2.jpg similarity index 100% rename from public/img/assets/b2a/hero-slider-2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-slider-2.jpg diff --git a/public/img/assets/b2a/hero-slider-2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-slider-2.webp similarity index 100% rename from public/img/assets/b2a/hero-slider-2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/hero-slider-2.webp diff --git a/public/img/assets/b2a/modern-showroom-high-point-02_1024x-1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/modern-showroom-high-point-02_1024x-1.jpg similarity index 100% rename from public/img/assets/b2a/modern-showroom-high-point-02_1024x-1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/modern-showroom-high-point-02_1024x-1.jpg diff --git a/public/img/assets/b2a/modern-showroom-high-point-02_1024x-1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/modern-showroom-high-point-02_1024x-1.webp similarity index 100% rename from public/img/assets/b2a/modern-showroom-high-point-02_1024x-1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/modern-showroom-high-point-02_1024x-1.webp diff --git a/public/img/assets/b2a/product-1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-1.jpg similarity index 100% rename from public/img/assets/b2a/product-1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-1.jpg diff --git a/public/img/assets/b2a/product-1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-1.webp similarity index 100% rename from public/img/assets/b2a/product-1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-1.webp diff --git a/public/img/assets/b2a/product-2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-2.jpg similarity index 100% rename from public/img/assets/b2a/product-2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-2.jpg diff --git a/public/img/assets/b2a/product-2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-2.webp similarity index 100% rename from public/img/assets/b2a/product-2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-2.webp diff --git a/public/img/assets/b2a/product-3.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-3.jpg similarity index 100% rename from public/img/assets/b2a/product-3.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-3.jpg diff --git a/public/img/assets/b2a/product-3.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-3.webp similarity index 100% rename from public/img/assets/b2a/product-3.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/product-3.webp diff --git a/public/img/assets/b2a/world-1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-1.jpg similarity index 100% rename from public/img/assets/b2a/world-1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-1.jpg diff --git a/public/img/assets/b2a/world-1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-1.webp similarity index 100% rename from public/img/assets/b2a/world-1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-1.webp diff --git a/public/img/assets/b2a/world-11.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-11.jpg similarity index 100% rename from public/img/assets/b2a/world-11.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-11.jpg diff --git a/public/img/assets/b2a/world-11.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-11.webp similarity index 100% rename from public/img/assets/b2a/world-11.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-11.webp diff --git a/public/img/assets/b2a/world-2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-2.jpg similarity index 100% rename from public/img/assets/b2a/world-2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-2.jpg diff --git a/public/img/assets/b2a/world-2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-2.webp similarity index 100% rename from public/img/assets/b2a/world-2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-2.webp diff --git a/public/img/assets/b2a/world-21.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-21.jpg similarity index 100% rename from public/img/assets/b2a/world-21.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-21.jpg diff --git a/public/img/assets/b2a/world-21.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-21.webp similarity index 100% rename from public/img/assets/b2a/world-21.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-21.webp diff --git a/public/img/assets/b2a/world-3.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-3.jpg similarity index 100% rename from public/img/assets/b2a/world-3.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-3.jpg diff --git a/public/img/assets/b2a/world-3.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-3.webp similarity index 100% rename from public/img/assets/b2a/world-3.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-3.webp diff --git a/public/img/assets/b2a/world-31.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-31.jpg similarity index 100% rename from public/img/assets/b2a/world-31.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-31.jpg diff --git a/public/img/assets/b2a/world-31.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-31.webp similarity index 100% rename from public/img/assets/b2a/world-31.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2a/world-31.webp diff --git a/public/img/assets/b2in/b2a Kopie.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/b2a Kopie.jpg similarity index 100% rename from public/img/assets/b2in/b2a Kopie.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/b2a Kopie.jpg diff --git a/public/img/assets/b2in/b2a Kopie.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/b2a Kopie.webp similarity index 100% rename from public/img/assets/b2in/b2a Kopie.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/b2a Kopie.webp diff --git a/public/img/assets/b2in/hero-room Kopie 2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/hero-room Kopie 2.jpg similarity index 100% rename from public/img/assets/b2in/hero-room Kopie 2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/hero-room Kopie 2.jpg diff --git a/public/img/assets/b2in/hero-room Kopie 2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/hero-room Kopie 2.webp similarity index 100% rename from public/img/assets/b2in/hero-room Kopie 2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/hero-room Kopie 2.webp diff --git a/public/img/assets/b2in/hero-room Kopie.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/hero-room Kopie.jpg similarity index 100% rename from public/img/assets/b2in/hero-room Kopie.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/hero-room Kopie.jpg diff --git a/public/img/assets/b2in/hero-room Kopie.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/hero-room Kopie.webp similarity index 100% rename from public/img/assets/b2in/hero-room Kopie.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/hero-room Kopie.webp diff --git a/public/img/assets/b2in/integriertes-model.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/integriertes-model.jpg similarity index 100% rename from public/img/assets/b2in/integriertes-model.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/integriertes-model.jpg diff --git a/public/img/assets/b2in/integriertes-model.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/integriertes-model.webp similarity index 100% rename from public/img/assets/b2in/integriertes-model.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/integriertes-model.webp diff --git a/public/img/assets/b2in/partner-hero Kopie 2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/partner-hero Kopie 2.jpg similarity index 100% rename from public/img/assets/b2in/partner-hero Kopie 2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/partner-hero Kopie 2.jpg diff --git a/public/img/assets/b2in/partner-hero Kopie 2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/partner-hero Kopie 2.webp similarity index 100% rename from public/img/assets/b2in/partner-hero Kopie 2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/partner-hero Kopie 2.webp diff --git a/public/img/assets/b2in/partner-hero Kopie.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/partner-hero Kopie.jpg similarity index 100% rename from public/img/assets/b2in/partner-hero Kopie.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/partner-hero Kopie.jpg diff --git a/public/img/assets/b2in/partner-hero Kopie.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/partner-hero Kopie.webp similarity index 100% rename from public/img/assets/b2in/partner-hero Kopie.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/b2in/partner-hero Kopie.webp diff --git a/public/img/assets/stileigentum/accommodation-3.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/accommodation-3.jpg similarity index 100% rename from public/img/assets/stileigentum/accommodation-3.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/accommodation-3.jpg diff --git a/public/img/assets/stileigentum/accommodation-3.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/accommodation-3.webp similarity index 100% rename from public/img/assets/stileigentum/accommodation-3.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/accommodation-3.webp diff --git a/public/img/assets/stileigentum/content-left.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/content-left.jpg similarity index 100% rename from public/img/assets/stileigentum/content-left.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/content-left.jpg diff --git a/public/img/assets/stileigentum/content-left.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/content-left.webp similarity index 100% rename from public/img/assets/stileigentum/content-left.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/content-left.webp diff --git a/public/img/assets/stileigentum/content-right.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/content-right.jpg similarity index 100% rename from public/img/assets/stileigentum/content-right.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/content-right.jpg diff --git a/public/img/assets/stileigentum/content-right.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/content-right.webp similarity index 100% rename from public/img/assets/stileigentum/content-right.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/content-right.webp diff --git a/public/img/assets/stileigentum/hero-image.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-image.jpg similarity index 100% rename from public/img/assets/stileigentum/hero-image.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-image.jpg diff --git a/public/img/assets/stileigentum/hero-image.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-image.webp similarity index 100% rename from public/img/assets/stileigentum/hero-image.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-image.webp diff --git a/public/img/assets/stileigentum/hero-slider-1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-slider-1.jpg similarity index 100% rename from public/img/assets/stileigentum/hero-slider-1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-slider-1.jpg diff --git a/public/img/assets/stileigentum/hero-slider-1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-slider-1.webp similarity index 100% rename from public/img/assets/stileigentum/hero-slider-1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-slider-1.webp diff --git a/public/img/assets/stileigentum/hero-slider-2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-slider-2.jpg similarity index 100% rename from public/img/assets/stileigentum/hero-slider-2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-slider-2.jpg diff --git a/public/img/assets/stileigentum/hero-slider-2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-slider-2.webp similarity index 100% rename from public/img/assets/stileigentum/hero-slider-2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/hero-slider-2.webp diff --git a/public/img/assets/stileigentum/tile-1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-1.jpg similarity index 100% rename from public/img/assets/stileigentum/tile-1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-1.jpg diff --git a/public/img/assets/stileigentum/tile-1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-1.webp similarity index 100% rename from public/img/assets/stileigentum/tile-1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-1.webp diff --git a/public/img/assets/stileigentum/tile-2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-2.jpg similarity index 100% rename from public/img/assets/stileigentum/tile-2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-2.jpg diff --git a/public/img/assets/stileigentum/tile-2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-2.webp similarity index 100% rename from public/img/assets/stileigentum/tile-2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-2.webp diff --git a/public/img/assets/stileigentum/tile-3.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-3.jpg similarity index 100% rename from public/img/assets/stileigentum/tile-3.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-3.jpg diff --git a/public/img/assets/stileigentum/tile-3.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-3.webp similarity index 100% rename from public/img/assets/stileigentum/tile-3.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-3.webp diff --git a/public/img/assets/stileigentum/tile-4.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-4.jpg similarity index 100% rename from public/img/assets/stileigentum/tile-4.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-4.jpg diff --git a/public/img/assets/stileigentum/tile-4.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-4.webp similarity index 100% rename from public/img/assets/stileigentum/tile-4.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-4.webp diff --git a/public/img/assets/stileigentum/tile-5.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-5.jpg similarity index 100% rename from public/img/assets/stileigentum/tile-5.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-5.jpg diff --git a/public/img/assets/stileigentum/tile-5.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-5.webp similarity index 100% rename from public/img/assets/stileigentum/tile-5.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/tile-5.webp diff --git a/public/img/assets/stileigentum/world-1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-1.jpg similarity index 100% rename from public/img/assets/stileigentum/world-1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-1.jpg diff --git a/public/img/assets/stileigentum/world-1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-1.webp similarity index 100% rename from public/img/assets/stileigentum/world-1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-1.webp diff --git a/public/img/assets/stileigentum/world-11.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-11.jpg similarity index 100% rename from public/img/assets/stileigentum/world-11.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-11.jpg diff --git a/public/img/assets/stileigentum/world-11.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-11.webp similarity index 100% rename from public/img/assets/stileigentum/world-11.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-11.webp diff --git a/public/img/assets/stileigentum/world-2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-2.jpg similarity index 100% rename from public/img/assets/stileigentum/world-2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-2.jpg diff --git a/public/img/assets/stileigentum/world-2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-2.webp similarity index 100% rename from public/img/assets/stileigentum/world-2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-2.webp diff --git a/public/img/assets/stileigentum/world-21.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-21.jpg similarity index 100% rename from public/img/assets/stileigentum/world-21.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-21.jpg diff --git a/public/img/assets/stileigentum/world-21.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-21.webp similarity index 100% rename from public/img/assets/stileigentum/world-21.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-21.webp diff --git a/public/img/assets/stileigentum/world-3.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-3.jpg similarity index 100% rename from public/img/assets/stileigentum/world-3.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-3.jpg diff --git a/public/img/assets/stileigentum/world-3.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-3.webp similarity index 100% rename from public/img/assets/stileigentum/world-3.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-3.webp diff --git a/public/img/assets/stileigentum/world-31.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-31.jpg similarity index 100% rename from public/img/assets/stileigentum/world-31.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-31.jpg diff --git a/public/img/assets/stileigentum/world-31.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-31.webp similarity index 100% rename from public/img/assets/stileigentum/world-31.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/stileigentum/world-31.webp diff --git a/public/img/assets/style2own/Style2own1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own1.jpg similarity index 100% rename from public/img/assets/style2own/Style2own1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own1.jpg diff --git a/public/img/assets/style2own/Style2own1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own1.webp similarity index 100% rename from public/img/assets/style2own/Style2own1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own1.webp diff --git a/public/img/assets/style2own/Style2own2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own2.jpg similarity index 100% rename from public/img/assets/style2own/Style2own2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own2.jpg diff --git a/public/img/assets/style2own/Style2own2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own2.webp similarity index 100% rename from public/img/assets/style2own/Style2own2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own2.webp diff --git a/public/img/assets/style2own/Style2own3.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own3.jpg similarity index 100% rename from public/img/assets/style2own/Style2own3.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own3.jpg diff --git a/public/img/assets/style2own/Style2own3.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own3.webp similarity index 100% rename from public/img/assets/style2own/Style2own3.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own3.webp diff --git a/public/img/assets/style2own/Style2own4.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own4.jpg similarity index 100% rename from public/img/assets/style2own/Style2own4.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own4.jpg diff --git a/public/img/assets/style2own/Style2own4.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own4.webp similarity index 100% rename from public/img/assets/style2own/Style2own4.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own4.webp diff --git a/public/img/assets/style2own/Style2own5.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own5.jpg similarity index 100% rename from public/img/assets/style2own/Style2own5.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own5.jpg diff --git a/public/img/assets/style2own/Style2own5.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own5.webp similarity index 100% rename from public/img/assets/style2own/Style2own5.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/Style2own5.webp diff --git a/public/img/assets/style2own/accommodation-3.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/accommodation-3.jpg similarity index 100% rename from public/img/assets/style2own/accommodation-3.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/accommodation-3.jpg diff --git a/public/img/assets/style2own/accommodation-3.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/accommodation-3.webp similarity index 100% rename from public/img/assets/style2own/accommodation-3.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/accommodation-3.webp diff --git a/public/img/assets/style2own/content-left.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/content-left.jpg similarity index 100% rename from public/img/assets/style2own/content-left.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/content-left.jpg diff --git a/public/img/assets/style2own/content-left.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/content-left.webp similarity index 100% rename from public/img/assets/style2own/content-left.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/content-left.webp diff --git a/public/img/assets/style2own/content-right.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/content-right.jpg similarity index 100% rename from public/img/assets/style2own/content-right.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/content-right.jpg diff --git a/public/img/assets/style2own/content-right.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/content-right.webp similarity index 100% rename from public/img/assets/style2own/content-right.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/content-right.webp diff --git a/public/img/assets/style2own/hero-image.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-image.jpg similarity index 100% rename from public/img/assets/style2own/hero-image.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-image.jpg diff --git a/public/img/assets/style2own/hero-image.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-image.webp similarity index 100% rename from public/img/assets/style2own/hero-image.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-image.webp diff --git a/public/img/assets/style2own/hero-slider-1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-slider-1.jpg similarity index 100% rename from public/img/assets/style2own/hero-slider-1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-slider-1.jpg diff --git a/public/img/assets/style2own/hero-slider-1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-slider-1.webp similarity index 100% rename from public/img/assets/style2own/hero-slider-1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-slider-1.webp diff --git a/public/img/assets/style2own/hero-slider-2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-slider-2.jpg similarity index 100% rename from public/img/assets/style2own/hero-slider-2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-slider-2.jpg diff --git a/public/img/assets/style2own/hero-slider-2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-slider-2.webp similarity index 100% rename from public/img/assets/style2own/hero-slider-2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/hero-slider-2.webp diff --git a/public/img/assets/style2own/tile-1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-1.jpg similarity index 100% rename from public/img/assets/style2own/tile-1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-1.jpg diff --git a/public/img/assets/style2own/tile-1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-1.webp similarity index 100% rename from public/img/assets/style2own/tile-1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-1.webp diff --git a/public/img/assets/style2own/tile-2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-2.jpg similarity index 100% rename from public/img/assets/style2own/tile-2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-2.jpg diff --git a/public/img/assets/style2own/tile-2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-2.webp similarity index 100% rename from public/img/assets/style2own/tile-2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-2.webp diff --git a/public/img/assets/style2own/tile-3.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-3.jpg similarity index 100% rename from public/img/assets/style2own/tile-3.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-3.jpg diff --git a/public/img/assets/style2own/tile-3.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-3.webp similarity index 100% rename from public/img/assets/style2own/tile-3.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-3.webp diff --git a/public/img/assets/style2own/tile-4.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-4.jpg similarity index 100% rename from public/img/assets/style2own/tile-4.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-4.jpg diff --git a/public/img/assets/style2own/tile-4.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-4.webp similarity index 100% rename from public/img/assets/style2own/tile-4.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-4.webp diff --git a/public/img/assets/style2own/tile-5.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-5.jpg similarity index 100% rename from public/img/assets/style2own/tile-5.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-5.jpg diff --git a/public/img/assets/style2own/tile-5.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-5.webp similarity index 100% rename from public/img/assets/style2own/tile-5.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/tile-5.webp diff --git a/public/img/assets/style2own/world-1.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-1.jpg similarity index 100% rename from public/img/assets/style2own/world-1.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-1.jpg diff --git a/public/img/assets/style2own/world-1.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-1.webp similarity index 100% rename from public/img/assets/style2own/world-1.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-1.webp diff --git a/public/img/assets/style2own/world-11.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-11.jpg similarity index 100% rename from public/img/assets/style2own/world-11.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-11.jpg diff --git a/public/img/assets/style2own/world-11.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-11.webp similarity index 100% rename from public/img/assets/style2own/world-11.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-11.webp diff --git a/public/img/assets/style2own/world-2.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-2.jpg similarity index 100% rename from public/img/assets/style2own/world-2.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-2.jpg diff --git a/public/img/assets/style2own/world-2.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-2.webp similarity index 100% rename from public/img/assets/style2own/world-2.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-2.webp diff --git a/public/img/assets/style2own/world-21.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-21.jpg similarity index 100% rename from public/img/assets/style2own/world-21.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-21.jpg diff --git a/public/img/assets/style2own/world-21.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-21.webp similarity index 100% rename from public/img/assets/style2own/world-21.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-21.webp diff --git a/public/img/assets/style2own/world-3.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-3.jpg similarity index 100% rename from public/img/assets/style2own/world-3.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-3.jpg diff --git a/public/img/assets/style2own/world-3.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-3.webp similarity index 100% rename from public/img/assets/style2own/world-3.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-3.webp diff --git a/public/img/assets/style2own/world-31.jpg b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-31.jpg similarity index 100% rename from public/img/assets/style2own/world-31.jpg rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-31.jpg diff --git a/public/img/assets/style2own/world-31.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-31.webp similarity index 100% rename from public/img/assets/style2own/world-31.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/assets/style2own/world-31.webp diff --git a/public/img/map/dubai-map.png b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/map/dubai-map.png similarity index 100% rename from public/img/map/dubai-map.png rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/map/dubai-map.png diff --git a/public/img/map/dubai-map.webp b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/map/dubai-map.webp similarity index 100% rename from public/img/map/dubai-map.webp rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/public/img/map/dubai-map.webp diff --git a/resources/views/components/layouts/app/header.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/components/layouts/app/header.blade.php similarity index 100% rename from resources/views/components/layouts/app/header.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/components/layouts/app/header.blade.php diff --git a/resources/views/components/layouts/auth/simple.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/components/layouts/auth/simple.blade.php similarity index 100% rename from resources/views/components/layouts/auth/simple.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/components/layouts/auth/simple.blade.php diff --git a/resources/views/components/layouts/auth/split.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/components/layouts/auth/split.blade.php similarity index 100% rename from resources/views/components/layouts/auth/split.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/components/layouts/auth/split.blade.php diff --git a/resources/views/components/placeholder-pattern.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/components/placeholder-pattern.blade.php similarity index 100% rename from resources/views/components/placeholder-pattern.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/components/placeholder-pattern.blade.php diff --git a/resources/views/layouts/admin-master.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/layouts/admin-master.blade.php similarity index 100% rename from resources/views/layouts/admin-master.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/layouts/admin-master.blade.php diff --git a/resources/views/layouts/web-master.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/layouts/web-master.blade.php similarity index 100% rename from resources/views/layouts/web-master.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/layouts/web-master.blade.php diff --git a/resources/views/livewire/partner/setup-wizard_bak.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/partner/setup-wizard_bak.blade.php similarity index 100% rename from resources/views/livewire/partner/setup-wizard_bak.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/partner/setup-wizard_bak.blade.php diff --git a/resources/views/livewire/web/components/sections_bak/about-hero.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/about-hero.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/about-hero.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/about-hero.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/broker-section.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/broker-section.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/broker-section.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/broker-section.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/commitment-section.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/commitment-section.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/commitment-section.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/commitment-section.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/dark-stats-section.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/dark-stats-section.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/dark-stats-section.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/dark-stats-section.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/digital-core.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/digital-core.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/digital-core.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/digital-core.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/ecosystem-hero.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/ecosystem-hero.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/ecosystem-hero.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/ecosystem-hero.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/ecosystem-stats.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/ecosystem-stats.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/ecosystem-stats.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/ecosystem-stats.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/end-customer-section.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/end-customer-section.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/end-customer-section.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/end-customer-section.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/final-commitment.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/final-commitment.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/final-commitment.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/final-commitment.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/leadership-team.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/leadership-team.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/leadership-team.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/leadership-team.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/magazin-detail.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/magazin-detail.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/magazin-detail.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/magazin-detail.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/magazin-list.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/magazin-list.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/magazin-list.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/magazin-list.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/our-story.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/our-story.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/our-story.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/our-story.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/our-values.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/our-values.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/our-values.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/our-values.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/partner-benefits.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/partner-benefits.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/partner-benefits.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/partner-benefits.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/partner-cta.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/partner-cta.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/partner-cta.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/partner-cta.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/partner-hero.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/partner-hero.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/partner-hero.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/partner-hero.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/partner-process.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/partner-process.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/partner-process.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/partner-process.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/spotlights-section.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/spotlights-section.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/spotlights-section.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/spotlights-section.blade_bak.php diff --git a/resources/views/livewire/web/components/sections_bak/supplier-section.blade_bak.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/supplier-section.blade_bak.php similarity index 100% rename from resources/views/livewire/web/components/sections_bak/supplier-section.blade_bak.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/livewire/web/components/sections_bak/supplier-section.blade_bak.php diff --git a/resources/views/partials/admin-head.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/partials/admin-head.blade.php similarity index 100% rename from resources/views/partials/admin-head.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/partials/admin-head.blade.php diff --git a/resources/views/web/layouts/admin-master.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/web/layouts/admin-master.blade.php similarity index 100% rename from resources/views/web/layouts/admin-master.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/web/layouts/admin-master.blade.php diff --git a/resources/views/web/layouts/footer.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/web/layouts/footer.blade.php similarity index 100% rename from resources/views/web/layouts/footer.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/web/layouts/footer.blade.php diff --git a/resources/views/web/layouts/header.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/web/layouts/header.blade.php similarity index 100% rename from resources/views/web/layouts/header.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/web/layouts/header.blade.php diff --git a/resources/views/web/welcome.blade.php b/dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/web/welcome.blade.php similarity index 100% rename from resources/views/web/welcome.blade.php rename to dev/2026-08-28/archiv-2026-10-07-aufraeumen/code/resources/views/web/welcome.blade.php diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/README.md b/dev/2026-08-28/archiv-2026-10-07-entwurf/README.md new file mode 100644 index 00000000..73c46c36 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/README.md @@ -0,0 +1,21 @@ +# Archiv: Entwurf /entwurf und Farb-Schalter (07.10.2026) + +Mit der Slideshow im Hero der Startseite (Nachtrag 23) und der festen Palette „Modern“ wurden die +Abstimmungsstände entfernt (Nachtrag 24). Hier liegen die Dateien im Zustand **vor** dem Entfernen, +Pfade wie im Projekt. Nichts in diesem Ordner wird von der Anwendung geladen. + +| Datei | Inhalt | +|---|---| +| `code/resources/views/web/home-draft.blade.php` | Entwurfsseite `/entwurf` (Farbwelt „Greige“) | +| `code/app/Livewire/.../HeroSlider.php`, `code/resources/views/livewire/.../hero-slider.blade.php` | Hero des Entwurfs mit Goldkante, Flanken und Slideshow | +| `code/resources/views/components/web/hero-flank-*.blade.php` | grüne Flanken links/rechts | +| `code/resources/views/components/palette-switch.blade.php` | schwimmender Farb-Schalter „Bisher / Neu / Entwurf“ | +| `code/public/img/logos/b2in-interior-logo-gold-*.svg` | Logos mit Goldbogen | +| `code/resources/css/web/theme-b2in.css` | Paletten „Modern“ (am ``), „Greige“ und das CSS `.hero-draft` | +| `code/resources/views/web/layouts/web-master.blade.php`, `code/config/app.php`, `code/routes/web.php`, `code/app/Helpers/ThemeHelper.php` | Schalter-Skript, Config `palette_switch`/`palette`/`home_draft`, Route, Gold-Logo-Weiche | +| `code/tests/Feature/HomeDraftTest.php`, `code/tests/Feature/ColorWorldsTest.php` | Tests vor dem Entfernen | + +Die CMS-Sektion `home.hero_slider` war lokal nicht angelegt; auf dem Server sichert der +`UnusedCmsContentCleanupSeeder` sie vor dem Löschen nach `storage/app/private/cms-archiv/`. + +Zurückholen: Dateien zurückkopieren oder per Git den Commit vor Nachtrag 24 auschecken. diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/app/Helpers/ThemeHelper.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/app/Helpers/ThemeHelper.php new file mode 100644 index 00000000..adf0b89e --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/app/Helpers/ThemeHelper.php @@ -0,0 +1,191 @@ + [ + 'positive' => 'img/logos/b2in-interior-logo-positive.svg', + 'negative' => 'img/logos/b2in-interior-logo-negative.svg', + ], + 'b2in-immobilien' => [ + 'positive' => 'img/logos/b2in-logo-positive.svg', + 'negative' => 'img/logos/b2in-logo-negative.svg', + ], + 'b2a' => [ + 'positive' => 'img/logos/b2a-logo-positiv.svg', + 'negative' => 'img/logos/b2a-logo-negativ.svg', + ], + 'stileigentum' => [ + 'positive' => 'img/logos/stileigentum-logo-positiv.svg', + 'negative' => 'img/logos/stileigentum-logo-negativ.svg', + ], + 'style2own' => [ + 'positive' => 'img/logos/style2own-logo-positiv.svg', + 'negative' => 'img/logos/style2own-logo-negativ.svg', + ], + ]; + + return $logoMap[$brand][$type] ?? $logoMap['b2in'][$type]; + } + + /** + * Get the favicon path based on the current theme + */ + public static function getFaviconPath(): string + { + $theme = config('app.theme', 'b2in'); + + return "img/favicons/{$theme}-favicon.ico"; + } + + /** + * Get the CSS theme file based on the current theme + */ + public static function getThemeCssPath(): string + { + $theme = config('app.theme', 'b2in'); + + return "resources/css/web/theme-{$theme}.css"; + } + + /** + * Get domain-specific configuration + */ + public static function getDomainConfig(): array + { + $theme = config('app.theme', 'b2in'); + + return config("domains.domains.{$theme}", []); + } + + /** + * Get primary color for the current theme + */ + public static function getPrimaryColor(): string + { + $config = self::getDomainConfig(); + + return $config['color_scheme']['primary'] ?? '#2b3f51'; + } + + /** + * Get secondary color for the current theme + */ + public static function getSecondaryColor(): string + { + $config = self::getDomainConfig(); + + return $config['color_scheme']['secondary'] ?? '#20a0da'; + } + + /** + * Get primary font family for the current theme + */ + public static function getPrimaryFont(): string + { + $config = self::getDomainConfig(); + + return $config['font_family']['primary'] ?? 'Inter'; + } + + /** + * Get secondary font family for the current theme + */ + public static function getSecondaryFont(): string + { + $config = self::getDomainConfig(); + + return $config['font_family']['secondary'] ?? 'IBM Plex Sans'; + } + + /** + * Get domain name for the current theme + */ + public static function getDomainName(): string + { + $config = self::getDomainConfig(); + + return $config['domain_name'] ?? 'B2IN'; + } + + public static function getDomainUrl(): string + { + $config = self::getDomainConfig(); + + return $config['url'] ?? config('app.url'); + } + + /** + * Get brand colors for a specific brand + */ + public static function getBrandColors(?string $brand = null): array + { + $brand = $brand ?? config('app.theme', 'b2in'); + $config = config("domains.domains.{$brand}", []); + + return [ + 'primary' => $config['color_scheme']['primary'] ?? '#2b3f51', + 'secondary' => $config['color_scheme']['secondary'] ?? '#20a0da', + 'accent' => $config['color_scheme']['accent'] ?? null, + ]; + } + + /** + * Get brand name for a specific brand + */ + public static function getBrandName(?string $brand = null): string + { + $brand = $brand ?? config('app.theme', 'b2in'); + + $brandNames = [ + 'b2in' => 'B2IN', + 'b2a' => 'B2A', + 'stileigentum' => 'StilEigentum', + 'style2own' => 'Style2Own', + ]; + + return $brandNames[$brand] ?? strtoupper($brand); + } + + /** + * Get all brand configuration for a specific brand + */ + public static function getBrandConfig(?string $brand = null): array + { + $brand = $brand ?? config('app.theme', 'b2in'); + + return config("domains.domains.{$brand}", []); + } +} diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/app/Livewire/Web/Components/Sections/HeroSlider.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/app/Livewire/Web/Components/Sections/HeroSlider.php new file mode 100644 index 00000000..ec27e292 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/app/Livewire/Web/Components/Sections/HeroSlider.php @@ -0,0 +1,98 @@ + */ + public array $content = []; + + /** @var array */ + public array $slides = []; + + public function mount(): void + { + $section = cms_theme_section('hero_slider'); + $this->content = is_array($section) ? $section : []; + $this->slides = $this->slidesFromContent() ?: $this->slidesFromBrands(); + } + + /** + * @return array + */ + private function slidesFromContent(): array + { + $slides = []; + + foreach ((array) ($this->content['slides'] ?? []) as $slide) { + if (! is_array($slide) || trim((string) ($slide['image'] ?? '')) === '') { + continue; + } + + if (array_key_exists('active', $slide) && ! filter_var($slide['active'], FILTER_VALIDATE_BOOLEAN)) { + continue; + } + + $label = trim((string) ($slide['label'] ?? $slide['title'] ?? '')); + + $slides[] = [ + 'image' => (string) $slide['image'], + 'alt' => trim((string) ($slide['alt'] ?? $label)), + 'label' => $label, + 'caption' => trim((string) ($slide['caption'] ?? '')), + ]; + } + + return $slides; + } + + /** + * @return array + */ + private function slidesFromBrands(): array + { + $slides = []; + + foreach (CmsBrand::forFrontend() as $brand) { + $image = trim((string) ($brand['image'] ?? '')); + + if ($image === '') { + continue; + } + + $name = (string) ($brand['name'] ?? ''); + + $slides[] = [ + 'image' => $image, + 'alt' => $name.' – '.strip_tags((string) ($brand['tagline'] ?? '')), + 'label' => $name, + 'caption' => strip_tags((string) ($brand['tagline'] ?? '')), + ]; + } + + return $slides; + } + + public function getIntervalMsProperty(): int + { + $seconds = (float) ($this->content['interval'] ?? 7); + + return (int) round(max(3, min(30, $seconds)) * 1000); + } + + public function render(): \Illuminate\View\View + { + return view('livewire.web.components.sections.hero-slider'); + } +} diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/config/app.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/config/app.php new file mode 100644 index 00000000..358d3eaf --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/config/app.php @@ -0,0 +1,207 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Indexierung durch Suchmaschinen + |-------------------------------------------------------------------------- + | + | Nur die Produktivumgebung darf indexiert werden. Vorschau- und Testinstanzen + | liefern damit automatisch `noindex, nofollow` – sonst konkurriert eine Kopie + | der Website mit dem Original um dieselben Suchergebnisse. + | + | Bewusst als eigener Schalter und nicht nur an APP_ENV gekoppelt, damit eine + | Vorschau notfalls auch mit APP_ENV=production noindex bleiben kann. + | + */ + 'indexable' => (bool) env('SITE_INDEXABLE', env('APP_ENV', 'production') === 'production'), + + /* + |-------------------------------------------------------------------------- + | Farbvarianten-Schalter (B2in Interior) + |-------------------------------------------------------------------------- + | + | Blendet auf den Interior-Seiten den schwimmenden Schalter ein, mit dem sich + | die bisherige Creme-Palette und die hellere Variante „Modern“ vergleichen + | lassen (Nachtrag 18). Nur für die Abstimmung gedacht – sobald eine Palette + | entschieden ist, per B2IN_PALETTE_SWITCH=false abschalten. + | + */ + + 'palette_switch' => (bool) env('B2IN_PALETTE_SWITCH', false), + + /* + |-------------------------------------------------------------------------- + | Feste Farbpalette der Interior-Welt (ohne Schalter) + |-------------------------------------------------------------------------- + | + | „modern“ = die hellere Variante „Neu“ (Nachtrag 18), „classic“ = Creme. + | Gilt, solange der Schalter aus ist; mit Schalter ist es die Vorbelegung. + | Seit der Abstimmung 25.09. steht die Seite auf „modern“. + | + */ + + 'palette' => env('B2IN_PALETTE', 'modern'), + + /* + |-------------------------------------------------------------------------- + | Entwurf der Startseite unter /entwurf + |-------------------------------------------------------------------------- + | + | Farbwelt „Greige“ mit Hero-Slideshow (Nachtrag 19), nur zur Abstimmung. + | Abschalten, sobald der Entwurf entschieden ist. + | + */ + + 'home_draft' => (bool) env('B2IN_HOME_DRAFT', true), + + /* + |-------------------------------------------------------------------------- + | Obere Hinweisleiste (Ankündigungsleiste) + |-------------------------------------------------------------------------- + | + | Seit der Abstimmung vom 01.10.2026 ausgeblendet – die Seite wirkt ohne die + | Leiste ruhiger. Inhalt und CMS-Pflege bleiben erhalten; mit + | B2IN_ANNOUNCEMENT_BAR=true ist sie auf allen Seiten wieder da. + | + */ + + 'announcement_bar' => (bool) env('B2IN_ANNOUNCEMENT_BAR', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | the application so that it's available within Artisan commands. + | + */ + + 'url' => env('APP_URL', 'https://localhost'), + 'domain_name' => env('APP_DOMAIN_NAME', 'localhost'), + + /* + |-------------------------------------------------------------------------- + | Asset URL + |-------------------------------------------------------------------------- + | + | This URL is used when generating asset URLs. By default, this is null + | which means assets will be served from the same domain. For multi-domain + | setups, this is dynamically overwritten by the ThemeServiceProvider. + | + */ + + 'asset_url' => env('ASSET_URL'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. The timezone + | is set to "UTC" by default as it is suitable for most use cases. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. + | + */ + + 'locale' => env('APP_LOCALE', 'en'), + + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), + + 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is utilized by Laravel's encryption services and should be set + | to a random, 32 character string to ensure that all encrypted values + | are secure. You should do this prior to deploying the application. + | + */ + + 'cipher' => 'AES-256-CBC', + + 'key' => env('APP_KEY'), + + 'previous_keys' => [ + ...array_filter( + explode(',', env('APP_PREVIOUS_KEYS', '')) + ), + ], + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), + ], + +]; diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/public/img/logos/b2in-interior-logo-gold-negative.svg b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/public/img/logos/b2in-interior-logo-gold-negative.svg new file mode 100644 index 00000000..0b5009b0 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/public/img/logos/b2in-interior-logo-gold-negative.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/public/img/logos/b2in-interior-logo-gold-positive.svg b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/public/img/logos/b2in-interior-logo-gold-positive.svg new file mode 100644 index 00000000..b22bc61b --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/public/img/logos/b2in-interior-logo-gold-positive.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/css/web/theme-b2in.css b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/css/web/theme-b2in.css new file mode 100644 index 00000000..be4ea3f2 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/css/web/theme-b2in.css @@ -0,0 +1,470 @@ +@import "tailwindcss"; + +/* B2in – zwei Farbwelten auf einem Themensystem (Arbeitsplan September 2026, Punkt 1.1). + + Standard ist die Interior-Welt: Tanne, Creme, Sand, Ocker, Clay, Anthrazit. + Die Immobilien-Welt behält das bestehende Blau; sie greift, sobald das Layout + `world-immobilien` an den Body setzt (siehe b2in_world() in app/helpers.php). + Welche Logo-Variante dazu erscheint, entscheidet ThemeHelper::getLogoPath(). + + Alle Werte sind HSL-Tripel ohne Funktionsaufruf, damit `hsl(var(--x) / 0.5)` + in shared-styles.css und in den Tailwind-Utilities funktioniert. */ + +@layer base { + :root { + /* ── Interior-Welt ─────────────────────────────────────────────── */ + + /* Grundflächen */ + --background: 38 33% 95%; /* #f7f4ef Creme – Hintergrund */ + --foreground: 26 8% 16%; /* #2d2926 Anthrazit – Text */ + + /* Karten eine Stufe heller als Creme, damit sie sich vom Grund abheben */ + --card: 40 43% 98%; /* #fbf9f5 */ + --card-foreground: 26 8% 16%; + --popover: 40 43% 98%; + --popover-foreground: 26 8% 16%; + + /* Hauptton dunkel: Wortmarke, Buttons, dunkle Sektionen */ + --primary: 175 16% 15%; /* #202c2b Tanne */ + --primary-light: 175 13% 22%; + --primary-lighter: 175 8% 82%; + --primary-dark: 175 18% 11%; + --primary-foreground: 38 33% 95%; /* Creme auf Tanne */ + + /* Akzent: Logo-Bogen, Hervorhebungen, Icons, aktive Navigation */ + --secondary: 37 62% 55%; /* #d39e46 Ocker */ + --secondary-light: 37 66% 63%; + --secondary-lighter: 37 60% 80%; + --secondary-dark: 37 55% 45%; + --secondary-deep: 37 50% 36%; /* Ocker als Textfarbe auf hellem Grund */ + --cta-band-line: 37 62% 55%; /* Haarlinie am Abschlussband in Ocker */ + --secondary-foreground: 38 33% 95%; + + /* Sekundärton für Produkte und ruhige Beschriftungen */ + --clay: 24 15% 57%; /* #a38f82 Clay */ + + /* Ruhige Flächen und Fließtext in gedämpfter Farbe */ + --muted: 30 24% 90%; /* helles Sand */ + --muted-foreground: 24 12% 40%; /* abgedunkelter Clay – lesbar auf Creme */ + + /* Sektionswechsel: Sand als Fläche */ + --accent: 28 25% 80%; /* #d9cbbf Sand */ + --accent-dark: 28 25% 74%; + --accent-foreground: 26 8% 16%; + + /* Dunkle Sektionen */ + --dark-bg: 175 16% 15%; /* Tanne */ + --dark-text: 38 33% 95%; + --dark-muted: 38 20% 76%; + + /* Footer: Sand mit Tanne (laut Farbwelt „Sand – Flächen, Footer“) */ + --footer-bg: 28 25% 80%; + --footer-fg: 175 16% 15%; + --footer-muted: 24 12% 40%; + --footer-line: 175 16% 15%; + + /* Abschlussband: Ton in Ton von dunklem Tannengrün in ein helleres, kein Ocker im + Verlauf – Grün zu Ocker wirkte unharmonisch. Ocker bleibt Akzent für Wörter und Linien. */ + --cta-band-end: 175 12% 26%; + + /* Interaktion */ + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + + --border: 28 20% 84%; + --input: 40 40% 98%; + --ring: 175 16% 15%; + + --radius: 0.75rem; + + /* Bühne des Hero-Bereichs */ + --hero-container: 30 28% 89%; + --hero-container-dark: 28 25% 83%; + --hero-container-light: 36 32% 93%; + + /* Schatten */ + --shadow-warm: 0 10px 30px -15px hsl(var(--foreground) / 0.1); + --shadow-card: 0 4px 20px -8px hsl(var(--foreground) / 0.08); + --shadow-elevated: 0 20px 40px -20px hsl(var(--foreground) / 0.15); + --shadow-accent-glow: 0 0 30px hsl(var(--secondary) / 0.3); + + /* Übergänge */ + --transition-smooth: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + --transition-bounce: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); + + /* Schriften: Inter für Fließtext, eine Serife für Überschriften – der Ton der + Shop-Entwürfe. EB Garamond liegt bereits lokal vor (public/fonts/eb-garamond). */ + --font-primary: 'Inter', system-ui, -apple-system, sans-serif; + --font-secondary: 'EB Garamond', 'Georgia', 'Times New Roman', serif; + } + + /* ── Immobilien-Welt: das bisherige Blau ───────────────────────── */ + .world-immobilien { + --background: 32 20% 97%; /* #f5f4f2 helles Beige */ + --foreground: 20 14% 16%; /* #2a2a2a */ + + --card: 0 25% 96%; + --card-foreground: 20 14% 16%; + --popover: 0 25% 96%; + --popover-foreground: 20 14% 16%; + + --primary: 209 32% 25%; /* #2b3f51 Anthracite */ + --primary-light: 209 32% 35%; + --primary-lighter: 209 32% 85%; + --primary-dark: 209 32% 20%; + --primary-foreground: 0 25% 96%; + + --secondary: 199 74% 49%; /* #20a0da Dynamic Blue */ + --secondary-light: 199 74% 56%; + --secondary-lighter: 199 74% 75%; + --secondary-dark: 199 74% 42%; + --secondary-deep: 199 74% 36%; + --secondary-foreground: 0 25% 96%; + + --clay: 199 50% 35%; + + --muted: 0 0% 92%; + --muted-foreground: 199 50% 35%; /* #4a8bb5 */ + + --accent: 210 0% 90%; + --accent-dark: 210 0% 85%; + --accent-foreground: 20 14% 16%; + + --dark-bg: 209 32% 25%; + --dark-text: 0 0% 100%; + --dark-muted: 0 0% 80%; + + --footer-bg: 209 32% 25%; + --footer-fg: 0 0% 100%; + --footer-muted: 0 0% 80%; + --footer-line: 0 0% 80%; + + --cta-band-end: 199 74% 42%; + + --border: 0 0% 80%; + --input: 0 0% 92%; + --ring: 20 14% 16%; + + --hero-container: 0 0% 93%; + --hero-container-dark: 0 0% 85%; + --hero-container-light: 0 0% 95%; + + --font-secondary: 'IBM Plex Sans', 'Inter', system-ui, -apple-system, sans-serif; + } + + /* ── Interior, Variante „Modern“ (Nachtrag 18) ────────────────────── + Marcels Rückmeldung vom 23.09.: die Creme-Flächen wirken altbacken. Diese + Variante lässt Tanne und Ocker aus dem Logo unangetastet und hellt nur die + Flächen auf: Grund fast weiß, Karten weiß, Sektionswechsel in hellem Grau- + Beige, Footer in Tanne. Aktiv, sobald der Farb-Schalter (palette-switch) + `palette-modern` an setzt; die Wahl liegt im localStorage. */ + .palette-modern .world-interior { + --background: 40 25% 98%; /* #fbfaf8 fast weiß, leicht warm */ + --card: 0 0% 100%; /* Karten reinweiß */ + --popover: 0 0% 100%; + + --muted: 40 12% 94%; /* #f2f0ed */ + --muted-foreground: 24 8% 38%; + + --accent: 36 14% 93%; /* #efece7 Sektionswechsel, klar statt Sand */ + --accent-dark: 36 14% 88%; + + --border: 36 12% 88%; /* #e6e2dc */ + --input: 0 0% 100%; + + --hero-container: 40 14% 95%; + --hero-container-dark: 40 12% 90%; + --hero-container-light: 40 25% 98%; + + /* Footer dunkel in Tanne – gibt der hellen Seite unten einen klaren Abschluss */ + --footer-bg: 175 16% 15%; + --footer-fg: 38 33% 95%; + --footer-muted: 38 20% 76%; + --footer-line: 38 20% 76%; + + /* Karten sind jetzt weiß auf fast weiß: etwas mehr Schatten, damit sie sich lösen */ + --shadow-card: 0 6px 24px -10px hsl(var(--foreground) / 0.14); + --shadow-elevated: 0 24px 48px -20px hsl(var(--foreground) / 0.2); + } + + /* ── Interior, Entwurf „Greige“ (Nachtrag 19, Briefing Marcel 24.09.) ───── + Heller, leicht kühler Grundton (Greige statt Creme), deutlich präsenteres + Tannengrün, Gold nur als feine Linie. Liegt als Klasse am der + Entwurfsseite /entwurf – nicht am wie der Browser-Schalter, damit + sich beide nicht überlagern. */ + .world-interior.palette-greige { + --background: 45 14% 93%; /* #f0eeeb Greige, Off-White */ + --foreground: 166 25% 13%; /* Tannengrau für Text */ + + --card: 40 20% 97%; /* #f8f7f4 – hell, aber kein steriles Weiß */ + --card-foreground: 166 25% 13%; + --popover: 40 20% 97%; + --popover-foreground: 166 25% 13%; + + --primary: 165 44% 14%; /* #14342c Tannengrün, klar und dunkel */ + --primary-light: 165 32% 22%; + --primary-lighter: 165 12% 82%; + --primary-dark: 165 50% 10%; + --primary-foreground: 45 20% 95%; + + --secondary: 38 45% 46%; /* #aa8341 gedecktes Gold */ + --secondary-light: 38 45% 56%; + --secondary-lighter: 40 40% 80%; + --secondary-dark: 38 48% 38%; + --secondary-deep: 38 55% 34%; /* Gold als Textfarbe auf hellem Grund */ + --cta-band-line: 38 45% 46%; + --secondary-foreground: 45 20% 95%; + + --clay: 30 8% 50%; + + --muted: 45 12% 90%; + --muted-foreground: 160 8% 36%; + + --accent: 45 12% 89%; /* #e8e6e0 Sektionswechsel */ + --accent-dark: 45 12% 84%; + --accent-foreground: 166 25% 13%; + + --dark-bg: 165 44% 14%; + --dark-text: 45 20% 95%; + --dark-muted: 45 15% 78%; + + /* Footer in Tannengrün, Haarlinie in Gold */ + --footer-bg: 165 44% 14%; + --footer-fg: 45 20% 95%; + --footer-muted: 45 15% 78%; + --footer-line: 38 45% 46%; + + --cta-band-end: 165 30% 22%; + + --border: 40 10% 84%; + --input: 40 20% 98%; + --ring: 165 44% 14%; + + --hero-container: 40 20% 97%; + --hero-container-dark: 45 12% 90%; + --hero-container-light: 40 25% 98%; + + --shadow-card: 0 6px 24px -10px hsl(var(--foreground) / 0.14); + --shadow-elevated: 0 30px 60px -28px hsl(var(--primary) / 0.35); + } +} + +/* Interior: Ocker ist Akzent, kein Flächenton unter Text – Creme auf Ocker erreicht + keinen ausreichenden Kontrast. Der zweite Hero-Button wird deshalb zur Kontur in + Tanne, und Ocker-Text auf Sand (Footer) nutzt die tiefe Stufe. */ +.world-interior .btn-secondary-accent { + background: transparent !important; + color: hsl(var(--primary)); + border: 1px solid hsl(var(--primary) / 0.55); + box-shadow: none; +} + +.world-interior .btn-secondary-accent:hover { + background: hsl(var(--primary)) !important; + color: hsl(var(--primary-foreground)); + border-color: hsl(var(--primary)); +} + +.world-interior .section-footer .text-secondary { + color: hsl(var(--secondary-deep)); +} + +/* Variante „Modern“: auf dem dunklen Footer trägt Ocker in voller Stärke. */ +.palette-modern .world-interior .section-footer .text-secondary { + color: hsl(var(--secondary)); +} + +/* Variante „Modern“: Abschlussband und Footer sind beide dunkel – eine helle Haarlinie trennt sie. */ +.palette-modern .world-interior .section-footer { + border-top: 1px solid hsl(var(--footer-muted) / 0.35); +} + +/* Der schwebende Termin-Button liegt über Bildern und weißen Karten: er bekommt eine + Fläche in Kartenfarbe, damit die Kontur nicht im Hintergrund verschwindet. */ +.world-interior .appointment-toggle.btn-secondary-accent { + background: hsl(var(--card)) !important; +} + +.world-interior .appointment-toggle.btn-secondary-accent:hover { + background: hsl(var(--primary)) !important; +} + +/* Cookie-Manager (acme/cookie-consent) in der Interior-Welt: die Paketfarben aus + config/cookie-consent.php sind das Blau der Immobilien-Welt. Hier folgt der schwebende + Button dem Akzent-Button der Seite (Tanne, Hover heller), Icon, Schalter und Link-Hover + tragen Ocker, „Speichern“ liegt in Tanne. Die Immobilien-Welt behält ihr Blau. */ +.world-interior .cookie-consent-wrapper { + --cc-primary: hsl(var(--secondary)); + --cc-primary-hover: hsl(var(--secondary-dark)); + --cc-save: hsl(var(--primary)); + --cc-save-hover: hsl(var(--primary-light)); + --cc-button-bg: hsl(var(--primary)); + --cc-button-hover: hsl(var(--primary-light)); +} + +.world-interior .cookie-consent-wrapper .cc-floating-btn { + --tw-ring-color: hsl(var(--secondary)) !important; + color: hsl(var(--primary-foreground)); + background: linear-gradient(145deg, hsl(var(--primary)) 0%, hsl(var(--primary-light)) 100%); +} + +.world-interior .cookie-consent-wrapper .cc-floating-btn:hover { + background: linear-gradient(145deg, hsl(var(--primary-light)) 0%, hsl(var(--primary)) 100%); +} + +/* Variante „Modern“: der Footer ist dunkel, also das negative Logo statt des positiven. */ +.footer-logo-dark { + display: none; +} + +.palette-modern .world-interior .footer-logo-light { + display: none; +} + +.palette-modern .world-interior .footer-logo-dark { + display: block; +} + +@import "./shared-styles.css"; + +/* ── Entwurf „Greige“: Footer dunkel mit Goldlinie und negativem Logo ─────── */ +.world-interior.palette-greige .section-footer { + border-top: 1px solid hsl(var(--secondary) / 0.6); +} + +.world-interior.palette-greige .section-footer .text-secondary { + color: hsl(var(--secondary)); +} + +.world-interior.palette-greige .footer-logo-light { + display: none; +} + +.world-interior.palette-greige .footer-logo-dark { + display: block; +} + +/* ── Hero des Entwurfs: Rahmen mit Goldkante, grüne Flanken, Slider ──────── + Goldkanten als Verlaufs-Border: transparenter Rand, Fläche auf padding-box, + Goldverlauf auf border-box. Kein Pseudo-Rand mit Maske mehr – der ließ an + der gerundeten Kante eine helle Linie durchscheinen. Die grünen Flanken sind + Inline-SVGs (components/web/hero-flank-*), skaliert über die Rahmenhöhe. */ +.hero-draft .hero-frame { + border: 1.5px solid transparent; + background: + linear-gradient(hsl(var(--hero-container)), hsl(var(--hero-container))) padding-box, + linear-gradient( + 125deg, + hsl(var(--secondary-light)) 0%, + hsl(var(--secondary)) 28%, + hsl(var(--secondary) / 0.35) 62%, + hsl(var(--secondary-light)) 100% + ) border-box; + box-shadow: var(--shadow-elevated); + isolation: isolate; +} + +.hero-draft .hero-flank { + position: absolute; + z-index: 0; + width: auto; +} + +.hero-draft .hero-flank-right { + top: 0; + right: 0; + height: 100%; +} + +.hero-draft .hero-flank-left { + left: 0; + bottom: 0; + height: 46%; +} + +.hero-draft .hero-image { + position: relative; + z-index: 1; +} + +/* Goldkante um das Bild, gleiche Technik wie am Rahmen */ +.hero-draft .hero-image-frame { + border: 1.5px solid transparent; + border-radius: 1.25rem; + background: + linear-gradient(hsl(var(--card)), hsl(var(--card))) padding-box, + linear-gradient( + 135deg, + hsl(var(--secondary-light)) 0%, + hsl(var(--secondary)) 40%, + hsl(var(--secondary) / 0.4) 100% + ) border-box; + box-shadow: var(--shadow-elevated); +} + +.hero-draft .hero-eyebrow { + display: inline-flex; + align-items: center; + gap: 1rem; + font-size: 0.75rem; + letter-spacing: 0.28em; + text-transform: uppercase; + color: hsl(var(--muted-foreground)); +} + +.hero-draft .hero-eyebrow::after { + content: ""; + width: 3.5rem; + height: 1px; + background: hsl(var(--secondary)); +} + +.hero-draft .hero-title { + font-family: var(--font-secondary); + font-size: clamp(2rem, 3.1vw, 3.3rem); + line-height: 1.12; + font-weight: 400; + letter-spacing: -0.01em; + color: hsl(var(--primary)); +} + +.hero-draft .hero-title em { + font-style: normal; + color: hsl(var(--secondary-deep)); +} + +/* Button: Goldrand rundum, unten kräftiger, Pfeil in Gold */ +.hero-draft .btn-hero { + display: inline-flex; + align-items: center; + gap: 0.75rem; + padding: 1rem 1.75rem; + border-radius: 0.75rem; + font-weight: 500; + color: hsl(var(--primary-foreground)); + background: linear-gradient(145deg, hsl(var(--primary)) 0%, hsl(var(--primary-light)) 100%); + border: 1px solid hsl(var(--secondary)); + border-bottom-width: 3px; + box-shadow: 0 14px 30px -14px hsl(var(--primary) / 0.6); + transition: transform 0.2s ease, box-shadow 0.2s ease; +} + +.hero-draft .btn-hero svg { + color: hsl(var(--secondary-light)); +} + +.hero-draft .btn-hero:hover { + transform: translateY(-1px); + box-shadow: 0 18px 34px -14px hsl(var(--primary) / 0.7); +} + +.hero-draft .hero-slide { + transition: opacity 1.4s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .hero-draft .hero-slide { + transition: none; + } +} + diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/components/palette-switch.blade.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/components/palette-switch.blade.php new file mode 100644 index 00000000..376b1e75 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/components/palette-switch.blade.php @@ -0,0 +1,55 @@ +{{-- Farb-Schalter für die Abstimmung (Nachtrag 18 + 19): bisherige Creme-Palette, die hellere + Variante „Neu“ und der Entwurf vom 24.09. Schwimmt am linken Rand in der Mitte – unten links + sitzt der Cookie-Button, unten rechts die Terminanfrage. + „Bisher“ und „Neu“ schalten im Browser um (localStorage b2in-palette, im gesetzt, + ?palette=modern|classic per Link). „Entwurf“ ist eine eigene Seite (/entwurf) mit fester + Palette; von dort führen die beiden anderen Einträge zurück auf die Startseite. --}} +@props(['draft' => false]) + +
+
+ + + @if ($draft) + + {{ __('ui.palette.classic') }} + + + {{ __('ui.palette.modern') }} + + + {{ __('ui.palette.draft') }} + + @else + + + + {{ __('ui.palette.draft') }} + + @endif +
+
diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/components/web/hero-flank-left.blade.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/components/web/hero-flank-left.blade.php new file mode 100644 index 00000000..72f2e0f1 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/components/web/hero-flank-left.blade.php @@ -0,0 +1,18 @@ +{{-- Linke Flanke des Entwurfs-Heros (Nachtrag 19): schmaler Haken unten links, oben gerundet, + mit Goldlinie. Höhe rund 46 % des Rahmens, Breite aus dem viewBox-Verhältnis. --}} + diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/components/web/hero-flank-right.blade.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/components/web/hero-flank-right.blade.php new file mode 100644 index 00000000..0207e11a --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/components/web/hero-flank-right.blade.php @@ -0,0 +1,24 @@ +{{-- Rechte Flanke des Entwurfs-Heros (Nachtrag 19): tannengrüner Block mit gerundeter Innenkante, + Goldlinie mit Verlauf entlang der Rundung und einer kurzen Zierlinie wie in der Visualisierung. + Skaliert über die Rahmenhöhe (height: 100 %, Breite aus dem viewBox-Verhältnis). Farben + kommen aus den Tokens, damit die Flanke jede Palette mitmacht. Kann später 1:1 gegen eine + gelieferte SVG-Datei getauscht werden. --}} + diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/livewire/web/components/sections/hero-slider.blade.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/livewire/web/components/sections/hero-slider.blade.php new file mode 100644 index 00000000..bdb9ff8d --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/livewire/web/components/sections/hero-slider.blade.php @@ -0,0 +1,102 @@ +{{-- Hero des Entwurfs (Nachtrag 19): Rahmen mit feiner Goldkante und grünen Flanken, links + Text mit einem Button, rechts die Slideshow. Das Bild hat ein festes Seitenverhältnis – + das Motiv wird auf großen Bildschirmen nicht mehr unten beschnitten (Briefing Punkt 2). + Der Wechsel läuft langsam (Überblendung 1,4 s, Standard alle 7 s), pausiert bei Hover und + bleibt bei „reduzierter Bewegung“ stehen. --}} +
+
+ +
+ + + + {{-- Rechts wenig Innenabstand: das Bild liegt über der grünen Flanke, wie in der Visualisierung. --}} +
+ {{-- Text --}} +
+ @if (!empty($content['eyebrow'])) +

{{ $content['eyebrow'] }}

+ @endif + +

{!! $content['title'] ?? '' !!}

+ + @if (!empty($content['subtitle'])) +

{!! $content['subtitle'] !!}

+ @endif + + +
+ + {{-- Slideshow --}} +
+
+
+ @forelse ($slides as $index => $slide) +
+ {{ $slide['alt'] }} 0) loading="lazy" @endif /> + @if ($slide['label'] !== '') +
+ {{ $slide['label'] }} +
+ @endif +
+ @empty +
+ {{ __('ui.hero_slider.empty') }} +
+ @endforelse +
+
+
+
+
+ + {{-- Punkte unter dem Rahmen --}} + @if (count($slides) > 1) +
+ @foreach ($slides as $index => $slide) + + @endforeach +
+ @endif +
+
diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/web/home-draft.blade.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/web/home-draft.blade.php new file mode 100644 index 00000000..b228918b --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/web/home-draft.blade.php @@ -0,0 +1,33 @@ +{{-- Entwurf der Startseite in der Farbwelt vom 24.09.2026 (Nachtrag 19). Nur zur Abstimmung: + Palette „greige“ am Body, Gold-Logo, neuer Hero mit Slideshow, keine Ankündigungsleiste. + Der Rest der Seite ist die reguläre Startseite – die Sektionen färben sich über die Tokens. --}} +@extends('web.layouts.web-master') + +@section('title', 'Entwurf – B2in Interior') +@section('meta_description', 'Entwurf der Startseite in der neuen Farbwelt – nur zur Abstimmung.') +@section('announcement_bar', 'off') + +@push('meta') + +@endpush + +@section('content') +
+ + +
+ + + + + + + + + + +
+ + +
+@endsection diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/web/layouts/web-master.blade.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/web/layouts/web-master.blade.php new file mode 100644 index 00000000..259bb51c --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/resources/views/web/layouts/web-master.blade.php @@ -0,0 +1,186 @@ + +@php + // Farbpalette der Interior-Welt (Nachtrag 18): ohne Schalter setzt der Server die Klasse aus + // config('app.palette'); mit Schalter entscheidet das Skript im anhand des localStorage. + $paletteFixed = config('app.theme', 'b2in') === 'b2in' + && b2in_world() === 'interior' + && ! config('app.palette_switch') + && b2in_palette() === '' + && config('app.palette') === 'modern'; +@endphp + + + + + + + + @unless (config('app.indexable')) + {{-- Vorschau-/Testinstanz: darf nicht in den Suchindex. --}} + + @endunless + + @yield('title', $domainName ?? config('app.name', 'Laravel')) + + + @hasSection('meta_image') + + @else + + @endif + + + + + + + + + @stack('meta') + + + + + + + + + + + + + + + + + + + + + + @php + $theme = config('app.theme', 'b2in'); + // Farb-Schalter nur auf den Interior-Seiten von b2in, solange die Palette abgestimmt wird. + $showPaletteSwitch = $theme === 'b2in' && b2in_world() === 'interior' && config('app.palette_switch'); + // Entwurf /entwurf (Nachtrag 19): feste Palette „greige“ am Body, kein Browser-Schalter. + $paletteDraft = b2in_palette() === 'greige'; + // Global per B2IN_ANNOUNCEMENT_BAR, einzeln per @section('announcement_bar', 'off'). + $hideAnnouncementBar = ! config('app.announcement_bar') || trim($__env->yieldContent('announcement_bar', 'on')) === 'off'; + @endphp + + @if ($showPaletteSwitch && ! $paletteDraft) + {{-- Läuft vor dem Stylesheet: setzt die gemerkte Palette, bevor die Seite gezeichnet wird. + ?palette=modern|classic in der URL überschreibt und merkt sich die Wahl; ohne + gemerkte Wahl gilt config('app.palette'). --}} + + @endif + + @vite([ + \App\Helpers\ThemeHelper::getThemeCssPath(), + 'resources/js/app.js' + ], 'build/' . $theme) + + + + + {{-- Gilt für alle Seiten: das Terminanfrage-Widget im Layout nutzt x-cloak, die einzelnen + Seiten bringen die Regel bisher nur teilweise selbst mit. --}} + + + + @stack('styles') + + + + + {{-- GTM noscript (nur bei GTM-Nutzung) --}} + + + {{-- Ankündigungsleiste – global per B2IN_ANNOUNCEMENT_BAR, je Seite mit @section('announcement_bar', 'off') abschaltbar --}} + @unless ($hideAnnouncementBar) + + @endunless + + {{-- TopBar (Backup: Sprachwechsel & Social Icons – folgt später) --}} + {{-- --}} + + @yield('content') + + {{-- Terminanfrage: schwebend unten rechts, auf allen Seiten --}} + + + @if ($showPaletteSwitch) + + @endif + + {{-- Cookie Consent Manager (vor Livewire-Scripts) --}} + + + + @stack('scripts') + + + diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/routes/web.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/routes/web.php new file mode 100644 index 00000000..fe6d309c --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/routes/web.php @@ -0,0 +1,266 @@ +exists('web.'.$theme)) { + return view('web.'.$theme); + } + + // Fallback to the default home view + return view('web.home'); +})->name('home'); + +// Entwurf der Startseite in der Farbwelt vom 24.09.2026 (Nachtrag 19) – nur zur Abstimmung, +// mit B2IN_HOME_DRAFT=false verschwindet die Seite (404). +Route::get('/entwurf', function () { + abort_unless(config('app.theme', 'b2in') === 'b2in' && config('app.home_draft'), 404); + + app()->instance('b2in.palette', 'greige'); + + return view('web.home-draft'); +})->name('home.draft'); + +// Willkommensseite +Route::get('/welcome', function () { + return view('web.welcome'); +})->name('welcome'); + +// Weitere gemeinsame Webseiten hier... +Route::get('/about', function () { + return view('web.about'); +})->name('about'); +Route::get('/ecosystem', function () { + return redirect('/partner', 301); +})->name('ecosystem'); + +$loadAziziContent = fn (): array => json_decode( + file_get_contents(resource_path('lang/de/immobilien-azizi.json')), + true, + 512, + JSON_THROW_ON_ERROR, +); + +$isAziziSourcePreview = function (Request $request): bool { + if (! $request->query->has('dev')) { + return false; + } + + return ! in_array(strtolower((string) $request->query('dev')), ['0', 'false', 'off', 'no'], true); +}; + +Route::get('/immobilien', function (Request $request) use ($isAziziSourcePreview, $loadAziziContent) { + $content = $loadAziziContent(); + $dev = $isAziziSourcePreview($request); + $devQuery = $dev; + $overviewRouteName = 'immobilien'; + $detailRouteName = 'immobilien.show'; + + return view('web.dev.immobilien-azizi', compact('content', 'dev', 'devQuery', 'overviewRouteName', 'detailRouteName')); +})->name('immobilien'); + +// Immobilien-Welt: eigenes Magazin, eigene Über-uns-Seite und eigene FAQ. Muessen vor der +// Projekt-Detailroute stehen, sonst wuerde diese die Pfade als Projekt-Slug lesen. +Route::get('/immobilien/magazin', function () { + return view('web.magazin', ['world' => 'immobilien']); +})->name('immobilien.magazin'); + +Route::get('/immobilien/ueber-b2in', function () { + return view('web.immobilien-about'); +})->name('immobilien.about'); + +Route::get('/immobilien/faq', function () { + return view('web.faq', ['section' => 'faq_immobilien']); +})->name('immobilien.faq'); + +Route::get('/immobilien/kontakt', function () { + return view('web.contact', ['world' => 'immobilien']); +})->name('immobilien.contact'); + +Route::get('/immobilien/{slug}', function (Request $request, string $slug) use ($isAziziSourcePreview, $loadAziziContent) { + $content = $loadAziziContent(); + $dev = $isAziziSourcePreview($request); + $devQuery = $dev; + $overviewRouteName = 'immobilien'; + $project = collect($content['projects'] ?? [])->firstWhere('slug', $slug); + abort_unless($project, 404); + + return view('web.dev.immobilien-azizi-show', compact('content', 'project', 'dev', 'devQuery', 'overviewRouteName')); +})->name('immobilien.show'); + +// Die Netzwerk-Seite geht im Abschnitt "Mehr als Marken: unser Netzwerk" auf /marken auf. +// Alte Links und Rankings laufen per 301 dorthin; die View liegt seit 06.10.2026 in +// dev/2026-08-28/archiv-2026-10-06/. +Route::get('/netzwerk', function () { + return redirect('/marken', 301); +})->name('netzwerk'); +Route::get('/interior', function () { + return redirect('/marken', 301); +})->name('interior'); + +Route::get('/partner', function () { + return redirect('/marken', 301); +})->name('partner'); +Route::get('/magazin', function () { + return view('web.magazin'); +})->name('magazin'); +// Alte numerische Magazin-URLs (/magazin/1 … /magazin/5) dauerhaft auf den Slug umleiten. +// Muss vor der Slug-Route stehen, sonst wuerde diese die Ziffern selbst schlucken. +Route::get('/magazin/{id}', function (string $id) { + $slug = \App\Models\CmsArticle::slugForLegacyId($id); + abort_unless($slug !== null, 404); + + return redirect()->route('magazin.detail', ['slug' => $slug], 301); +})->whereNumber('id')->name('magazin.detail.legacy'); + +Route::get('/magazin/{slug}', function (string $slug) { + // Die Detailseite rendert in der Welt ihres Beitrags (Dubai-Themen bleiben blau). Die Welt + // muss vor dem Rendern feststehen, weil Kopf- und Fusszeile sie in mount() festhalten. + $article = \App\Models\CmsArticle::forFrontend()[$slug] ?? null; + abort_unless($article !== null, 404); + b2in_world_set($article['world'] ?? 'interior'); + + return view('web.magazin-detail', compact('slug')); +})->name('magazin.detail'); +// Kernmarken: Uebersichtsseite und Detailseite je Marke. +Route::get('/marken', function () { + return view('web.marken'); +})->name('marken'); + +Route::get('/marken/{slug}', function (string $slug) { + $brands = \App\Models\CmsBrand::forFrontend(); + abort_unless(isset($brands[$slug]), 404); + + $brand = $brands[$slug]; + $brandTitle = $brand['name'].' – '.$brand['tagline'].' | B2in Interior'; + $brandDescription = trim(strip_tags((string) $brand['teaser'])); + + return view('web.marken-show', compact('slug', 'brandTitle', 'brandDescription')); +})->name('marken.show'); + +// Referenzen: realisierte Projekte aus den Markengalerien plus der Showroom-Feed. +// Lässt sich im CMS-Modul „Referenzen“ ausblenden – dann 404 und kein Menüpunkt. +Route::get('/referenzen', function () { + abort_unless(references_page_enabled(), 404); + + return view('web.referenzen'); +})->name('referenzen'); + +// Schreibgeschuetzte Einbettung eines Displays (nur veroeffentlichte Playlists, kein Token). +Route::get('/embed/display/{display}', [\App\Http\Controllers\DisplayEmbedController::class, 'show']) + ->name('display.embed'); + +Route::get('/contact', function () { + return view('web.contact'); +})->name('contact'); + +// Verwaiste Seiten: ihre Content-Sektionen (hero_image, content_section_left/right, portfolio) +// existieren in keiner Lang-Datei mehr und die Seiten liefern seitdem 500. Sie werden wie die +// anderen stillgelegten Seiten dauerhaft umgeleitet; die Views liegen in dev/2026-08-28/archiv-2026-10-06/. +Route::get('/service', function () { + return redirect('/marken', 301); +})->name('service'); + +Route::get('/portfolio', function () { + return redirect('/immobilien', 301); +})->name('portfolio'); + +Route::get('/faq', function () { + return view('web.faq'); +})->name('faq'); + +// Rechtliche Seiten +Route::get('/impressum', function () { + return view('web.impressum'); +})->name('impressum'); +Route::get('/privacy', function () { + return view('web.privacy'); +})->name('privacy'); +Route::get('/terms', function () { + return view('web.terms'); +})->name('terms'); +Route::get('/cookie-policy', function () { + return view('web.cookie-policy'); +})->name('cookie-policy'); + +// Theme Demo Route +Route::get('/theme-demo', function () { + return view('web.theme-demo'); +})->name('theme-demo'); + +// Dev: Sitemap und Quellvorschau der Immobilien-Seite +Route::prefix('dev')->group(function () use ($loadAziziContent) { + Route::get('/sitemap', fn () => view('web.dev.sitemap'))->name('dev.sitemap'); + Route::get('/immobilien-azizi', function () use ($loadAziziContent) { + $content = $loadAziziContent(); + $dev = true; + $devQuery = false; + $overviewRouteName = 'dev.immobilien-azizi'; + $detailRouteName = 'dev.immobilien-azizi.show'; + + return view('web.dev.immobilien-azizi', compact('content', 'dev', 'devQuery', 'overviewRouteName', 'detailRouteName')); + })->name('dev.immobilien-azizi'); + Route::get('/immobilien-azizi/{slug}', function (string $slug) use ($loadAziziContent) { + $content = $loadAziziContent(); + $project = collect($content['projects'] ?? [])->firstWhere('slug', $slug); + abort_unless($project, 404); + $dev = true; + $devQuery = false; + $overviewRouteName = 'dev.immobilien-azizi'; + + return view('web.dev.immobilien-azizi-show', compact('content', 'project', 'dev', 'devQuery', 'overviewRouteName')); + })->name('dev.immobilien-azizi.show'); +}); + +// Pfad-basierte Theme-Routen für lokale Entwicklung wurden entfernt +// Die Themensauswahl wird nun über den ThemeServiceProvider gesteuert (Domain oder ?theme=... GET-Parameter) + +Route::get('/partner/invitation/expired/{token}', function (string $token) { + $invitation = \App\Models\PartnerInvitation::with('role')->where('token', $token)->firstOrFail(); + + return view('partner.invitation-expired', compact('invitation')); +})->name('partner.invitation.expired'); + +Route::get('/partner/invitation/used/{token}', function (string $token) { + $invitation = \App\Models\PartnerInvitation::with('role')->where('token', $token)->firstOrFail(); + + return view('partner.invitation-used', compact('invitation')); +})->name('partner.invitation.used'); + +Volt::route('/partner/invitation/{token}', 'partner.invitation-accept') + ->name('partner.invitation.accept'); + +Volt::route('/partner/create-account', 'partner.create-account') + ->name('partner.create.account'); + +// Öffentliche Registrierung per QR-/Code (Landing, code-check) +Volt::route('/reg/{role}', 'reg.landing') + ->name('registration.landing'); + +Volt::route('/registration/thank-you', 'reg.thank-you') + ->name('registration.thank-you'); + +// Partner Setup Wizard & Daten +Route::middleware('auth')->group(function () { + Volt::route('/partner/setup', 'partner.setup-wizard') + ->name('partner.setup.wizard'); +}); + +// Cabinet Quick-Status – key-geschützte Mini-App für schnellen Statuswechsel +Route::get('/info/status', QuickStatus::class)->name('cabinet.quick-status'); + +// Authentifizierungs-Routen werden in domains.php eingebunden +// require __DIR__ . '/auth.php'; diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/tests/Feature/ColorWorldsTest.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/tests/Feature/ColorWorldsTest.php new file mode 100644 index 00000000..1ffdbbfb --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/tests/Feature/ColorWorldsTest.php @@ -0,0 +1,288 @@ +get('/')->assertSuccessful()->getContent(); + + expect($html)->toMatch('/not->toMatch('/toContain('b2in-interior-logo-positive.svg') + ->not->toContain('img/logos/b2in-logo-positive.svg'); +}); + +it('renders the real estate pages in the immobilien world with the plain logo', function (string $path) { + $html = $this->get($path)->assertSuccessful()->getContent(); + + expect($html)->toMatch('/toContain('img/logos/b2in-logo-positive.svg') + ->toContain('img/logos/b2in-logo-negative.svg') + ->not->toContain('b2in-interior-logo'); +})->with([ + 'overview' => '/immobilien', + 'detail' => '/immobilien/azizi-creek-views-4', +]); + +it('keeps the other pages in the interior world', function (string $path) { + $html = $this->get($path)->assertSuccessful()->getContent(); + + expect($html)->toMatch('/with([ + 'brands' => '/marken', + 'about' => '/about', + 'contact' => '/contact', +]); + +// ======================================== +// Logo je Welt +// ======================================== + +it('resolves the logo per world', function () { + config(['app.theme' => 'b2in']); + + expect(ThemeHelper::getLogoPath('positive', 'interior'))->toBe('img/logos/b2in-interior-logo-positive.svg'); + expect(ThemeHelper::getLogoPath('negative', 'interior'))->toBe('img/logos/b2in-interior-logo-negative.svg'); + expect(ThemeHelper::getLogoPath('positive', 'immobilien'))->toBe('img/logos/b2in-logo-positive.svg'); + expect(ThemeHelper::getLogoPath('negative', 'immobilien'))->toBe('img/logos/b2in-logo-negative.svg'); +}); + +it('ignores the world for the other themes', function () { + config(['app.theme' => 'b2a']); + + expect(ThemeHelper::getLogoPath('positive', 'immobilien'))->toBe('img/logos/b2a-logo-positiv.svg'); +}); + +it('ships both logo families in both variants as svg and png', function (string $family) { + foreach (['positive', 'negative'] as $variant) { + expect(file_exists(public_path("img/logos/{$family}-{$variant}.svg")))->toBeTrue(); + expect(file_exists(public_path("img/logos/{$family}-{$variant}.png")))->toBeTrue(); + } +})->with(['b2in-interior-logo', 'b2in-logo']); + +it('colors the interior logo with the new palette', function () { + $positive = strtolower(file_get_contents(public_path('img/logos/b2in-interior-logo-positive.svg'))); + $negative = strtolower(file_get_contents(public_path('img/logos/b2in-interior-logo-negative.svg'))); + + expect($positive)->toContain('#202c2b')->toContain('#d39e46')->not->toContain('#2c9fda'); + expect($negative)->toContain('#f7f4ef')->toContain('#d39e46')->not->toContain('#2c9fda'); +}); + +it('keeps the blue bow on the real estate logo', function () { + $svg = strtolower(file_get_contents(public_path('img/logos/b2in-logo-positive.svg'))); + + expect($svg)->toContain('#2c9fda')->not->toContain('#d39e46'); +}); + +// ======================================== +// Welten-Wechsler in Kopf- und Fusszeile +// ======================================== + +it('offers the world switcher in header and footer', function () { + $html = $this->get('/')->assertSuccessful()->getContent(); + + // Desktop-Header, mobiles Menue (nur bei geoeffnetem Menue) und Footer + expect(substr_count($html, 'data-world-switch'))->toBeGreaterThanOrEqual(2); + expect($html)->toContain('Bereich wechseln'); + expect(preg_match_all('/data-world-switch.*?>\s*Interior\s*<.*?>\s*Immobilien\s*toBeGreaterThanOrEqual(2); +}); + +it('marks the current world in the switcher', function () { + $home = $this->get('/')->assertSuccessful()->getContent(); + $immobilien = $this->get('/immobilien')->assertSuccessful()->getContent(); + + expect($home)->toMatch('/aria-current="page"[^>]*>\s*Interior\s*not->toMatch('/aria-current="page"[^>]*>\s*Immobilien\s*toMatch('/aria-current="page"[^>]*>\s*Immobilien\s*not->toMatch('/aria-current="page"[^>]*>\s*Interior\s*toContain('--primary: 175 16% 15%') + ->toContain('--background: 38 33% 95%') + ->toContain('--accent: 28 25% 80%') + ->toContain('--secondary: 37 62% 55%') + ->toContain('--clay: 24 15% 57%') + ->toContain('--foreground: 26 8% 16%') + ->toContain('.world-immobilien') + ->toContain('--secondary: 199 74% 49%'); +}); + +it('binds the glow and shadow effects to the accent instead of a fixed blue', function () { + $css = file_get_contents(resource_path('css/web/shared-styles.css')); + + expect($css)->not->toContain('rgba(0, 136, 204') + ->not->toContain('rgba(0, 155, 221') + ->not->toContain('hsla(199'); +}); + +// ======================================== +// Abschlussband +// ======================================== + +it('keeps ocher out of the interior band gradient and uses it for highlighted words instead', function () { + $theme = file_get_contents(resource_path('css/web/theme-b2in.css')); + $shared = file_get_contents(resource_path('css/web/shared-styles.css')); + + // Interior: Ton in Ton (Tanne), Immobilien: weiter Anthrazit → Dynamic Blue + expect($theme)->toContain('--cta-band-end: 175 12% 26%') + ->toContain('--cta-band-end: 199 74% 42%'); + + // Woerter mit `text-primary` im Bandtitel („Ihr nächster Schritt“) laufen auf den Akzent + expect($shared)->toContain('.cta-band .text-primary'); +}); + +it('turns highlighted words on accent-colored sections to the primary tone', function () { + // /marken: „Lernen Sie unsere Marken kennen“ liegt auf einer Ocker-Flaeche; das Wort + // „Marken“ traegt im CMS `text-secondary` und waere sonst Ocker auf Ocker. + $shared = file_get_contents(resource_path('css/web/shared-styles.css')); + + expect($shared)->toContain('section.bg-secondary .text-secondary'); + + // Livewire haengt seine Attribute vor `class`, deshalb ein Muster statt eines festen Strings. + $html = $this->get('/marken')->assertSuccessful()->getContent(); + + expect($html)->toMatch('/
]*class="section-padding bg-secondary/') + ->toContain('Marken'); +}); + +// ======================================== +// Farbvariante „Modern“ und Schalter (Nachtrag 18) +// ======================================== + +it('floats the palette switch on the interior pages when it is enabled', function (string $path) { + config(['app.palette_switch' => true]); + + $html = $this->get($path)->assertSuccessful()->getContent(); + + expect($html)->toContain('data-palette-switch') + ->toContain('b2in-palette') + ->toContain("classList.add('palette-modern')") + ->toContain('Bisher') + ->toContain('Neu'); +})->with(['home' => '/', 'brands' => '/marken', 'contact' => '/contact']); + +it('keeps the palette switch off the real estate pages', function () { + config(['app.palette_switch' => true]); + + $this->get('/immobilien') + ->assertSuccessful() + ->assertDontSee('data-palette-switch', false) + ->assertDontSee('b2in-palette', false); +}); + +it('hides the palette switch once it is disabled in the config', function () { + config(['app.palette_switch' => false]); + + $this->get('/') + ->assertSuccessful() + ->assertDontSee('data-palette-switch', false) + ->assertDontSee("classList.add('palette-modern')", false); +}); + +it('runs the interior pages on the modern palette without a switch by default', function (string $path) { + $html = $this->get($path)->assertSuccessful()->getContent(); + + expect($html)->toMatch('//') + ->not->toContain('data-palette-switch') + ->not->toContain('b2in-palette'); +})->with(['home' => '/', 'brands' => '/marken']); + +it('keeps the real estate pages and the classic setting without the modern class', function () { + expect($this->get('/immobilien')->assertSuccessful()->getContent())->not->toContain('class="palette-modern"'); + + config(['app.palette' => 'classic']); + expect($this->get('/')->assertSuccessful()->getContent())->not->toContain('class="palette-modern"'); +}); + +it('lets the switch fall back to the configured palette when nothing is stored', function () { + config(['app.palette_switch' => true]); + + $html = $this->get('/')->assertSuccessful()->getContent(); + + expect($html)->toContain("palette = 'modern'") + ->not->toContain('class="palette-modern"'); +}); + +it('ships the modern palette as an override of the interior world', function () { + $css = file_get_contents(resource_path('css/web/theme-b2in.css')); + + expect($css)->toContain('.palette-modern .world-interior {') + // Flächen werden heller, die Logofarben bleiben: Tanne und Ocker tauchen im Block nicht auf. + ->toContain('--background: 40 25% 98%') + ->toContain('--card: 0 0% 100%'); + + $block = substr($css, strpos($css, '.palette-modern .world-interior {')); + $block = substr($block, 0, strpos($block, '}')); + + expect($block)->not->toContain('--primary:') + ->not->toContain('--secondary:'); +}); + +it('carries the negative logo in the footer for the modern palette', function () { + $html = $this->get('/')->assertSuccessful()->getContent(); + + expect($html)->toMatch('/footer-logo-light[^>]*/') + ->toContain('b2in-interior-logo-positive.svg') + ->toContain('footer-logo-dark') + ->toContain('b2in-interior-logo-negative.svg'); + + $footer = substr($html, strpos($html, 'not->toBeFalse() + ->and($dark)->not->toBeFalse() + ->and($light < $dark)->toBeTrue(); + + $css = file_get_contents(resource_path('css/web/theme-b2in.css')); + expect($css)->toContain('.palette-modern .world-interior .footer-logo-dark') + ->toContain('.palette-modern .world-interior .footer-logo-light'); +}); + +it('keeps a single negative logo in the real estate footer', function () { + $html = $this->get('/immobilien')->assertSuccessful()->getContent(); + $footer = substr($html, strpos($html, 'not->toContain('footer-logo-dark') + ->toContain('b2in-logo-negative.svg'); +}); + +it('separates the dark footer from the cta band and grounds the floating button', function () { + $css = file_get_contents(resource_path('css/web/theme-b2in.css')); + + expect($css)->toContain('.palette-modern .world-interior .section-footer {') + ->toContain('border-top: 1px solid hsl(var(--footer-muted)') + ->toContain('.world-interior .appointment-toggle.btn-secondary-accent {') + ->toContain('background: hsl(var(--card)) !important'); + + $this->get('/')->assertSuccessful()->assertSee('appointment-toggle'); +}); + +it('recolors the cookie manager for the interior world only', function () { + $css = file_get_contents(resource_path('css/web/theme-b2in.css')); + + expect($css)->toContain('.world-interior .cookie-consent-wrapper {') + ->toContain('--cc-button-bg: hsl(var(--primary))') + ->toContain('--cc-primary: hsl(var(--secondary))') + ->not->toContain('.world-immobilien .cookie-consent-wrapper'); + + // Der Manager selbst bleibt eingebunden, der Button trägt weiter die Paketklasse. + $this->get('/')->assertSuccessful()->assertSee('cc-floating-btn'); +}); diff --git a/dev/2026-08-28/archiv-2026-10-07-entwurf/code/tests/Feature/HomeDraftTest.php b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/tests/Feature/HomeDraftTest.php new file mode 100644 index 00000000..7a3d1c88 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-07-entwurf/code/tests/Feature/HomeDraftTest.php @@ -0,0 +1,263 @@ +', $start); + + return substr($html, $start, $end - $start); +} + +// ======================================== +// Entwurf /entwurf (Nachtrag 19) +// ======================================== + +it('renders the draft homepage in the greige palette with the gold logos', function () { + $html = $this->get('/entwurf')->assertSuccessful()->getContent(); + + expect($html)->toMatch('/toContain('b2in-interior-logo-gold-positive.svg') + ->toContain('b2in-interior-logo-gold-negative.svg') + ->not->toContain('b2in-interior-logo-positive.svg') + ->toContain(''); +}); + +it('keeps the regular homepage on the ocher logo and without the palette class', function () { + $html = $this->get('/')->assertSuccessful()->getContent(); + + expect($html)->not->toContain('palette-greige') + ->not->toContain('logo-gold') + ->toContain('b2in-interior-logo-positive.svg'); +}); + +it('shows the new headline with one button and no announcement bar', function () { + $html = $this->get('/entwurf')->assertSuccessful()->getContent(); + $hero = heroSection($html); + + expect($hero)->toContain('Räume aus einer Hand. Mit starken Marken und persönlichen Lösungen.') + ->toContain('B2in Interior') + ->toContain('Unsere Marken entdecken') + ->toContain('href="/marken"') + ->not->toContain('Termin anfragen'); + + // Mit eingeschalteter Leiste zeigt die reguläre Startseite sie, der Entwurf nie. + config(['app.announcement_bar' => true]); + $html = $this->get('/entwurf')->getContent(); + expect($this->get('/')->getContent())->toContain('Rotpunkt Küchen neu bei B2in Interior'); + expect($html)->not->toContain('Rotpunkt Küchen neu bei B2in Interior'); + + // Das Termin-Widget unten rechts bleibt. + expect($html)->toContain('appointment-toggle'); +}); + +it('keeps the remaining homepage sections below the new hero', function () { + $html = $this->get('/entwurf')->assertSuccessful()->getContent(); + + $order = ['id="hero"', 'B2in by Marcel Scheibe', 'Einrichtung für Ihr Zuhause', 'Unsere Kernmarken', 'id="footer"']; + $last = -1; + + foreach ($order as $needle) { + $pos = strpos($html, $needle); + expect($pos)->not->toBeFalse("fehlt: {$needle}")->and($pos)->toBeGreaterThan($last); + $last = $pos; + } +}); + +it('keeps the greige draft free of the modern class and the switch', function () { + $html = $this->get('/entwurf')->assertSuccessful()->getContent(); + + expect($html)->not->toContain('class="palette-modern"') + ->not->toContain('data-palette-switch'); +}); + +it('can be switched off for the live site', function () { + config(['app.home_draft' => false]); + + $this->get('/entwurf')->assertNotFound(); +}); + +// ======================================== +// Slideshow +// ======================================== + +it('runs the brand title images as slides while no slides are maintained', function () { + $this->seed(CmsBrandSeeder::class); + $this->seed(BrandImageSeeder::class); + + $slides = Livewire::test(HeroSlider::class)->get('slides'); + $count = CmsBrand::query()->published()->get()->filter(fn (CmsBrand $b) => trim((string) $b->image) !== '')->count(); + + expect(array_slice(array_column($slides, 'label'), 0, 3))->toBe(['CABINET', 'Rotpunkt Küchen', 'Febrü']) + ->and($slides)->toHaveCount($count) + ->and($slides[0]['image'])->toBe('marken/cabinet/ankleide-solitaer-eiche-tano.webp'); + + $html = $this->get('/entwurf')->assertSuccessful()->getContent(); + $hero = heroSection($html); + + expect(substr_count($hero, 'data-hero-slide='))->toBe($count) + ->and(substr_count($hero, 'role="tab"'))->toBe($count) + ->and($hero)->toContain('marken/rotpunkt/kueche-01.webp') + ->toContain('aria-roledescription="carousel"'); +}); + +it('skips brands without a title image', function () { + $this->seed(CmsBrandSeeder::class); + CmsBrand::query()->update(['image' => '']); + CmsBrand::query()->where('slug', 'rotpunkt')->update(['image' => 'marken/rotpunkt/kueche-01.webp']); + + $slides = Livewire::test(HeroSlider::class)->get('slides'); + + expect(array_column($slides, 'label'))->toBe(['Rotpunkt Küchen']); +}); + +it('says so when no brand has an image yet', function () { + $this->seed(CmsBrandSeeder::class); + CmsBrand::query()->update(['image' => '']); + + expect(heroSection($this->get('/entwurf')->assertSuccessful()->getContent()))->toContain('Noch keine Bilder hinterlegt'); +}); + +it('prefers slides maintained in the cms and honours their active flag', function () { + $this->seed(CmsBrandSeeder::class); + $this->seed(BrandImageSeeder::class); + + $slides = [ + ['image' => 'b2in/hero-room.jpg', 'label' => 'Raumkonzepte', 'caption' => 'Alles aus einer Hand'], + ['image' => 'b2in/off.jpg', 'label' => 'Aus', 'active' => false], + ['image' => '', 'label' => 'Ohne Bild'], + ]; + + CmsContent::create([ + 'group' => 'home', + 'key' => 'hero_slider', + 'type' => 'json', + 'value' => ['de' => ['title' => 'Test', 'slides' => $slides], 'en' => ['title' => 'Test', 'slides' => $slides]], + 'order' => 0, + ]); + + $result = Livewire::test(HeroSlider::class)->get('slides'); + + expect($result)->toHaveCount(1) + ->and($result[0]['label'])->toBe('Raumkonzepte') + ->and($result[0]['image'])->toBe('b2in/hero-room.jpg'); +}); + +it('draws the green flanks as inline svgs that scale with the frame', function () { + $hero = heroSection($this->get('/entwurf')->assertSuccessful()->getContent()); + + expect($hero)->toContain('data-hero-flank="right"') + ->toContain('data-hero-flank="left"') + ->toContain('preserveAspectRatio="xMaxYMid meet"') + ->toContain('stop-color: hsl(var(--secondary-light))') + ->toContain('class="hero-image-frame"'); +}); + +it('clamps the slide interval to a calm range', function () { + CmsContent::create([ + 'group' => 'home', + 'key' => 'hero_slider', + 'type' => 'json', + 'value' => ['de' => ['title' => 'Test', 'interval' => 1], 'en' => ['title' => 'Test', 'interval' => 1]], + 'order' => 0, + ]); + + expect(Livewire::test(HeroSlider::class)->get('intervalMs'))->toBe(3000); +}); + +// ======================================== +// Farb-Schalter +// ======================================== + +it('links the draft from the palette switch and back', function () { + config(['app.palette_switch' => true]); + + $home = $this->get('/')->assertSuccessful()->getContent(); + expect($home)->toContain('Entwurf')->toContain(route('home.draft')); + + $draft = $this->get('/entwurf')->assertSuccessful()->getContent(); + $switch = substr($draft, strpos($draft, 'data-palette-switch')); + + expect($switch)->toContain('aria-current="page"') + ->toContain('?palette=classic') + ->toContain('?palette=modern') + ->not->toContain('classList.add(\'palette-modern\')'); +}); + +// ======================================== +// Logos und Stylesheet +// ======================================== + +it('ships the gold logo copies with the new fir green and without the ocher', function () { + $positive = strtoupper(file_get_contents(public_path('img/logos/b2in-interior-logo-gold-positive.svg'))); + $negative = strtoupper(file_get_contents(public_path('img/logos/b2in-interior-logo-gold-negative.svg'))); + + expect($positive)->toContain('#AA8341')->toContain('#14342C')->not->toContain('#D39E46')->not->toContain('#202C2B'); + expect($negative)->toContain('#AA8341')->toContain('#F0EEEB')->not->toContain('#D39E46'); + + // Die bisherigen Logos bleiben unverändert. + expect(strtoupper(file_get_contents(public_path('img/logos/b2in-interior-logo-positive.svg'))))->toContain('#D39E46'); +}); + +it('defines the greige palette on the body and keeps gold as a hairline', function () { + $css = file_get_contents(resource_path('css/web/theme-b2in.css')); + + expect($css)->toContain('.world-interior.palette-greige {') + ->toContain('--background: 45 14% 93%') + ->toContain('--primary: 165 44% 14%') + ->toContain('--secondary: 38 45% 46%') + ->toContain('.world-interior.palette-greige .footer-logo-dark') + ->toContain('.hero-draft .btn-hero') + // Goldkanten als Verlaufs-Border (padding-box/border-box), auch um das Bild; Button unten kräftiger. + ->toContain(') border-box;') + ->toContain('.hero-draft .hero-image-frame {') + ->toContain('border-bottom-width: 3px') + ->not->toContain('mask-composite'); +}); + +// ======================================== +// Projekttext (Briefing Punkt 7) +// ======================================== + +it('uses the new project wording in the lang files', function () { + $html = $this->get('/')->assertSuccessful()->getContent(); + + expect($html)->toContain('Mit einem zentralen deutschen Vertragspartner und einem eingespielten Herstellernetzwerk.') + ->not->toContain('Mit deutscher Vertragssicherheit'); +}); + +it('replaces the project wording in an existing cms row and leaves the rest alone', function () { + $cards = [ + ['title' => 'Zuhause', 'description' => 'Bleibt so.'], + ['title' => 'Projekt', 'description' => 'Vollständige Einrichtung … Mit deutscher Vertragssicherheit und einem eingespielten Herstellernetzwerk.'], + ]; + CmsContent::create([ + 'group' => 'home', + 'key' => 'audience_switch', + 'type' => 'json', + 'value' => ['de' => ['title' => 'Für wen?', 'cards' => $cards], 'en' => ['title' => 'For whom?', 'cards' => []]], + 'order' => 0, + ]); + + $this->seed(AudienceSwitchProjectTextSeeder::class); + $this->seed(AudienceSwitchProjectTextSeeder::class); + + $row = CmsContent::query()->where('group', 'home')->where('key', 'audience_switch')->firstOrFail(); + $de = $row->getTranslation('value', 'de'); + + expect($de['title'])->toBe('Für wen?') + ->and($de['cards'][0]['description'])->toBe('Bleibt so.') + ->and($de['cards'][1]['description'])->toBe('Vollständige Einrichtung … Mit einem zentralen deutschen Vertragspartner und einem eingespielten Herstellernetzwerk.'); +}); diff --git a/dev/2026-08-28/archiv-2026-10-08/README.md b/dev/2026-08-28/archiv-2026-10-08/README.md new file mode 100644 index 00000000..60ee0600 --- /dev/null +++ b/dev/2026-08-28/archiv-2026-10-08/README.md @@ -0,0 +1,10 @@ +# Archiv: Korrekturen 08.10.2026 + +| Datei | Was es war | +|---|---| +| `code/public/img/assets/sponsoring/tc-bad-waldliesborn-horn.jpg` | Logo des TC Bad Waldliesborn-Horn – wird nicht (mehr) unterstützt | +| `code/public/img/assets/sponsoring/tc-hoevelhof.png` | Logo, das tatsächlich das des TC Hiddenhausen ist, lief fälschlich als „TC Hövelhof“; ersetzt durch `tc-hiddenhausen.png` aus der Lieferung | + +Die Beiträge „Supply-Chain-Management für Entwickler“ und „Local for Local“ sind nicht gelöscht, nur +offline (`is_published = false`, in der Lang-Datei `'published' => false`) – im Admin unter Magazin +wieder einschaltbar. diff --git a/dev/2026-08-28/archiv-2026-10-08/code/public/img/assets/sponsoring/tc-bad-waldliesborn-horn.jpg b/dev/2026-08-28/archiv-2026-10-08/code/public/img/assets/sponsoring/tc-bad-waldliesborn-horn.jpg new file mode 100644 index 00000000..2609544d Binary files /dev/null and b/dev/2026-08-28/archiv-2026-10-08/code/public/img/assets/sponsoring/tc-bad-waldliesborn-horn.jpg differ diff --git a/dev/2026-08-28/archiv-2026-10-08/code/public/img/assets/sponsoring/tc-hoevelhof.png b/dev/2026-08-28/archiv-2026-10-08/code/public/img/assets/sponsoring/tc-hoevelhof.png new file mode 100644 index 00000000..933ff181 Binary files /dev/null and b/dev/2026-08-28/archiv-2026-10-08/code/public/img/assets/sponsoring/tc-hoevelhof.png differ diff --git a/dev/2026-08-28/deploy/dateiliste.txt b/dev/2026-08-28/deploy/dateiliste.txt new file mode 100644 index 00000000..3a1a29b9 --- /dev/null +++ b/dev/2026-08-28/deploy/dateiliste.txt @@ -0,0 +1,126 @@ +.env.example +.gitignore +app/Helpers/ThemeHelper.php +app/Http/Controllers/DisplayEmbedController.php +app/Livewire/Admin/Cms/CabinetInfoTablet.php +app/Livewire/Web/Components/Sections/AudienceSwitch.php +app/Livewire/Web/Components/Sections/BrandDetail.php +app/Livewire/Web/Components/Sections/BrandOverview.php +app/Livewire/Web/Components/Sections/CoreBrands.php +app/Livewire/Web/Components/Sections/DisplayFeed.php +app/Livewire/Web/Components/Sections/ImmobilienTeaser.php +app/Livewire/Web/Components/Sections/MagazinDetail.php +app/Livewire/Web/Components/Sections/MagazinList.php +app/Livewire/Web/Components/Sections/MarkenCta.php +app/Livewire/Web/Components/Sections/MarkenGrowth.php +app/Livewire/Web/Components/Sections/MarkenNetwork.php +app/Livewire/Web/Components/Sections/PageHero.php +app/Livewire/Web/Components/Sections/ReferenceProjects.php +app/Livewire/Web/Components/Sections/Sponsoring.php +app/Livewire/Web/Components/UI/AnnouncementBar.php +app/Livewire/Web/Components/UI/AppointmentWidget.php +app/Livewire/Web/Components/UI/Footer.php +app/Models/CmsArticle.php +app/Models/CmsBrand.php +app/Providers/ThemeServiceProvider.php +app/Support/DisplayModuleSettings.php +app/helpers.php +config/app.php +config/cms_section_map.php +config/seeding.php +database/factories/CmsBrandFactory.php +database/migrations/2026_08_28_110407_create_cms_brands_table.php +database/migrations/2026_08_28_112244_add_summary_and_highlights_to_cms_brands_table.php +database/migrations/2026_09_03_084254_add_page_sections_to_cms_brands_table.php +database/seeders/BrandGalleryCaptionNormalizerSeeder.php +database/seeders/BrandLogoSeeder.php +database/seeders/BrandPageTextSeeder.php +database/seeders/CmsArticleSeeder.php +database/seeders/CmsBrandSeeder.php +database/seeders/CmsContentSeeder.php +database/seeders/DatabaseSeeder.php +database/seeders/DemoBrandGallerySeeder.php +database/seeders/DisplayInteriorBrandingSeeder.php +database/seeders/DisplayMediaUrlNormalizerSeeder.php +database/seeders/InteriorRelaunchCmsSeeder.php +public/_cabinet/assets/b2in-interior-logo-negative.svg +public/_cabinet/assets/b2in-interior-logo-positive.svg +public/_cabinet/display/index.html +public/img/assets/marken/cabinet.svg +public/img/assets/marken/februe.png +public/img/assets/marken/rotpunkt.svg +public/img/assets/sponsoring/arminia-bielefeld.png +public/img/assets/sponsoring/tc-bad-waldliesborn-horn.jpg +public/img/assets/sponsoring/tc-hoevelhof.png +public/img/logos/b2in-interior-logo-negative.png +public/img/logos/b2in-interior-logo-negative.svg +public/img/logos/b2in-interior-logo-positive.png +public/img/logos/b2in-interior-logo-positive.svg +resources/css/web/shared-styles.css +resources/lang/de/b2in.php +resources/lang/de/ui.php +resources/lang/en/b2in.php +resources/lang/en/ui.php +resources/views/livewire/admin/cms/brands-index.blade.php +resources/views/livewire/admin/cms/cabinet-info-tablet.blade.php +resources/views/livewire/admin/cms/content-index.blade.php +resources/views/livewire/admin/cms/dashboard.blade.php +resources/views/livewire/admin/cms/projects-index.blade.php +resources/views/livewire/web/components/sections/audience-switch.blade.php +resources/views/livewire/web/components/sections/brand-detail.blade.php +resources/views/livewire/web/components/sections/brand-overview.blade.php +resources/views/livewire/web/components/sections/core-brands.blade.php +resources/views/livewire/web/components/sections/display-feed.blade.php +resources/views/livewire/web/components/sections/f-a-q.blade.php +resources/views/livewire/web/components/sections/immobilien-teaser.blade.php +resources/views/livewire/web/components/sections/magazin-list.blade.php +resources/views/livewire/web/components/sections/marken-cta.blade.php +resources/views/livewire/web/components/sections/marken-growth.blade.php +resources/views/livewire/web/components/sections/marken-network.blade.php +resources/views/livewire/web/components/sections/page-hero.blade.php +resources/views/livewire/web/components/sections/reference-projects.blade.php +resources/views/livewire/web/components/sections/sponsoring.blade.php +resources/views/livewire/web/components/ui/announcement-bar.blade.php +resources/views/livewire/web/components/ui/appointment-widget.blade.php +resources/views/livewire/web/components/ui/footer.blade.php +resources/views/livewire/web/components/ui/header.blade.php +resources/views/vendor/mail/html/header.blade.php +resources/views/web/about.blade.php +resources/views/web/contact.blade.php +resources/views/web/cookie-policy.blade.php +resources/views/web/faq.blade.php +resources/views/web/home.blade.php +resources/views/web/impressum.blade.php +resources/views/web/layouts/web-master.blade.php +resources/views/web/magazin-detail.blade.php +resources/views/web/magazin.blade.php +resources/views/web/marken-show.blade.php +resources/views/web/marken.blade.php +resources/views/web/netzwerk.blade.php +resources/views/web/privacy.blade.php +resources/views/web/referenzen.blade.php +resources/views/web/terms.blade.php +routes/admin.php +routes/web.php +tests/Feature/Admin/Cms/CmsBrandsIndexTest.php +tests/Feature/AnnouncementBarTest.php +tests/Feature/AppointmentWidgetTest.php +tests/Feature/BrandPageSectionsTest.php +tests/Feature/BrandPageTest.php +tests/Feature/CabinetInfoTabletTest.php +tests/Feature/Cms/CmsArticleTest.php +tests/Feature/Cms/CmsBrandTest.php +tests/Feature/Cms/CmsContentSeederTest.php +tests/Feature/DisplayInteriorBrandingTest.php +tests/Feature/DisplayMediaUrlNormalizerTest.php +tests/Feature/DisplayVersionApiTest.php +tests/Feature/DisplayVersionTest.php +tests/Feature/DisplayWebFeedTest.php +tests/Feature/FooterTest.php +tests/Feature/HomePageStructureTest.php +tests/Feature/InteriorPageTest.php +tests/Feature/LiveSiteReviewTest.php +tests/Feature/MagazinPageTest.php +tests/Feature/MarkenPageTest.php +tests/Feature/PreviewHostTest.php +tests/Feature/ReferenzenPageTest.php diff --git a/dev/2026-08-28/entwicklungsplan.md b/dev/2026-08-28/entwicklungsplan.md new file mode 100644 index 00000000..a4ae207b --- /dev/null +++ b/dev/2026-08-28/entwicklungsplan.md @@ -0,0 +1,2519 @@ +# Entwicklungsplan: B2in Interior – Neuausrichtung Website & CMS + +**Erstellt:** 28.08.2026 · zuletzt aktualisiert 28.08.2026 +**Basis:** `B2in_Interior-Konzept.md`, `umsetzungliste.md`, `umsetzung-inhalte.md` +**Vorgänger:** `dev/2026-02-27/b2in-website-umsetzungsplan.md` +**Rahmen:** 37–39 Std. freigegeben (18 + 8 + 4 + 3 + 4–6) +**Status:** Revision 14 – **AP0–AP6 umgesetzt**, Seite abgestimmt, Markentexte Rotpunkt und Febrü +eingearbeitet. **Arbeitsplan 14.09. (`umsetzungen-14-09-2026.md`), Punkt 1.1 Farbwelt und Logo +umgesetzt (Nachtrag 6).** Offen: Bildmaterial, Rechtstexte und die Herstellerfreigaben. +**Umgebung:** Dev Container, `php artisan …` (nicht `vendor/bin/sail …`) + +> **Verbindliche Schreibweisen:** **Interior** (nicht „Interieur"), **Febrü**, **Rotpunkt Küchen**, **CABINET**. +> Das Konzeptpapier schreibt durchgehend „Interieur" – die Umsetzungsliste überschreibt das. Gilt für Code, +> Texte, Commit-Messages und Datenbank-Inhalte. + +--- + +## 0. Stand & nächste Schritte + +**Stand 03.09.2026:** T1 und B1–B13 abgearbeitet, **alle Arbeitspakete AP0–AP6 umgesetzt**, die +Bestandsinhalte auf den Interior-Auftritt umgestellt, die Seite abgestimmt und alle vier Punkte +der Abstimmungsrunde vom 03.09. umgesetzt (Nachtrag 5). Alle drei Markenseiten haben jetzt einen +ausführlichen Text. `php artisan test --compact`: **873 grün** (3217 Assertions), Pint sauber, +`npm run build:b2in` gebaut. +**Die Seite ist testbereit** – die ausstehenden Zulieferungen trägt Marcel selbst im CMS nach. + +| Paket | Stand | +|---|---| +| AP0 Vorbereitung | ✅ | +| AP1 Umstrukturierung & Umtextung | ✅ | +| AP2 Kernmarken-Modul + `/marken` + Galerie | ✅ | +| AP3 Terminanfrage-Widget + WhatsApp-Link | ✅ (Nummer fehlt noch) | +| AP6 Sponsoring | ✅ | +| Bestandsinhalte FAQ / About / Kontakt / Magazin | ✅ | +| Markenseiten Rotpunkt und Febrü (Zulieferung 31.08.) | ✅ | +| Abstimmungsrunde 03.09.: korrigierte Texte, CABINET-Seite, Galerie-Hinweise, Abschluss-CTA | ✅ | +| AP4 Display-Spiegelung | ✅ | +| AP5 Rubrik-Seite „Referenzen" | ✅ | +| Arbeitsplan 14.09. · 1.1 Farbwelt, Logo je Welt, Welten-Wechsler | ✅ (Nachtrag 6) | +| Welten-Trennung: Navigation, Magazin, Über uns, FAQ, Widget je Welt | ✅ (Nachtrag 7, Erweiterung zu 1.1) | +| Arbeitsplan 14.09. · 1.2 Tischlerei als vierte Marke | ✅ Otterpohl mit Text und Logo (Nachtrag 9 + 15) | +| Arbeitsplan 14.09. · 1.4 Akkordeon und Widget-Beschriftung je Marke | ✅ (bereits seit 03.09., CABINET-Text fehlt im CMS) | +| Arbeitsplan 14.09. · 1.3 Herkunfts-Sektion „Aus der Region gefertigt“ | ✅ (Nachtrag 10 + 11: Standorte an der Marke, Ablauf CABINET von Marcel bestätigen lassen) | +| Abstimmung 23.09. · WhatsApp zuerst im Widget, Business-Nummer, Farbvariante „Modern“ mit Schalter | ✅ (Nachtrag 18, Palette von Marcel entscheiden lassen) | +| Briefing 24.09. · Entwurf Startseite „Greige“ mit Gold-Logo, Hero-Slideshow, Projekttext | ✅ Entwurf unter /entwurf (Nachtrag 19); offen: Foto Marcel, Slides selbst pflegen, Logo-Verläufe | +| Zulieferung 24.09. · Otterpohl Text v2, Bilder (Werkstatt + Referenzen) | ✅ (Nachtrag 19, Unterschriften und Referenzen-Fallback von Marcel bestätigen lassen) | + +### Nächste Schritte + +**Vor dem Versand des Testlinks — nichts.** Alle Seiten laden, die Suite ist grün, die Assets sind +gebaut. Was fehlt, ist Material, kein Code. + +**Was Marcel selbst nachträgt (alles im CMS, ohne Codeänderung):** + +| Was | Wo im Admin | +|---|---| +| Stimmungsbilder der drei Marken (Logos liegen seit 03.09. vor) | Kernmarken → Marke bearbeiten | +| Echte Projektfotos statt der Demobilder (siehe Warnung unten) | Kernmarken → Bildergalerie | +| Herstellerseiten-URLs | Kernmarken → Herstellerseite | +| Motiv für den Kopf von `/marken` | Inhalte → `marken` → `hero` | +| WhatsApp-Nummer – seit Nachtrag 18 per Seeder gesetzt (0521-98620100), Änderung weiter hier | Inhalte → `global` → `contact` → `whatsapp` | +| Welches Display auf der Website läuft | Inhalte → `referenzen` → `display_feed` → `display_id` | + +**Beim Deployment mit erledigen (Abschnitt 8):** + +1. **Rechtstexte** – AGB und Datenschutzerklärung beschreiben weiter das alte Geschäft + („Connecting Design and Property", Dubai/Lissabon, Supply-Chain-Management, + `resources/lang/de/b2in_legal.php` Zeilen 117 und 221). Marcel lässt die Formulierung prüfen, + danach eintragen. Der WhatsApp-Absatz kommt im selben Zug dazu. +2. **OG-Bild** – das Layout verweist auf `img/assets/b2in-og-default.jpg`, die Datei existiert + nicht. Bis dahin zeigt jede geteilte Seite eine Vorschau ohne Bild. +3. **Seeder-Passwort rotieren** (B8) – steht weiter in der Git-Historie. +4. Die zwei Magazin-Beiträge und die Sponsoren-Kurztexte gegenlesen lassen. +5. **CABINET-Seitentext freigeben lassen** – für CABINET lag keine Zulieferung vor, der Text ist + von uns nach dem Muster der beiden abgestimmten Seiten verfasst (Nachtrag 5). +6. **Demobilder der Rubrik „Realisiertes Projekt" ersetzen.** Seit dem Entfallen der + „BEISPIEL"-Kennzeichnung geben sie sich als echte Referenzen aus. + +**Danach offen, aber nicht Teil dieses Auftrags:** YouTube-Einbindung mit Consent-Gate auf der +Referenzen-Seite (Abschnitt 4). Sinnvoll, sobald es Videos gibt – vorher wäre es ein Consent-Gate +ohne Inhalt. + +--- + +## 1. Ist-Architektur (relevanter Ausschnitt) + +### 1.1 Content-Pipeline + +``` +resources/lang/de/b2in.php (themes.b2in.
) ← Quelltexte / Fallback + ├─ config/cms_section_map.php section → [group, key] + ├─ database/seeders/CmsContentSeeder.php + ▼ +flux_cms_contents (group, key, type, value:JSON, translatable de/en) + ├─ FluxCms\Core\Services\CmsContentService (Cache: flux_cms.content.__all__) + ▼ +cms_theme_section('hero') → CMS gewinnt, sonst trans('b2in.themes.b2in.hero') +``` + +Redaktion unter `admin/flux-cms/content` → [`content-index.blade.php`](../../resources/views/livewire/admin/cms/content-index.blade.php) +(Volt, 782 Z.): Group/Key-Editor mit JSON-Repeater-Modal, Medien-Picker, Flux-Editor für HTML. +**Kann Werte ändern, aber keine Sektion neu anlegen.** + +### 1.2 Seiten & Sektionen + +- Startseite: `routes/web.php` → `resources/views/web/home.blade.php` +- Sektionen = Livewire-Komponenten unter `app/Livewire/Web/Components/Sections/`, + Muster `mount() { $this->content = cms_theme_section(''); }` +- Ist-Reihenfolge: `header → hero → founder-bar → content-section(synergie) → vision-section → ecosystem-core → cta-section → footer` +- Navigation und Ankündigungsleiste liegen **bereits im CMS** (`global.header.navigation`, `global.announcement_bar`) + → Umbau ist Redaktion, kein Code. +- SEO: `@section('title')` / `@section('meta_description')` je View; OG-Tags leiten sich + in `web-master.blade.php` automatisch daraus ab → **OG kostet keinen Extra-Aufwand** (aber siehe B6). +- Immobilien rendern statisch aus `resources/lang/de/immobilien-azizi.json` – wie gefordert. + +### 1.3 Display-CMS + +`Display` (Gerät) → `DisplayPlaylist` (draft/published) → `DisplayVersion` („Modul", Enum +`DisplayVersionType`: `video-display` | `b2in` | `offers`) → `DisplayVersionItem`. +[`DisplayPlaylistConfigBuilder`](../../app/Services/DisplayPlaylistConfigBuilder.php) erzeugt das +Player-JSON. Player: `public/_cabinet/display/index.html`, festes 1080×1920-Raster (9:16), per Scale eingepasst. +API vorhanden: `/api/display/{display}/config`, `/api/display/preview/{token}`, +`/api/display/module/{module}/preview` – registriert für Portal-Domain **und** als Fallback für alle Domains. + +### 1.4 Sonstiges + +- Kontaktformular: `packages/acme/contact-form` – **unterstützt bereits `customFields` + Presets, + Honeypot, Rate-Limit und `SpamDetector`.** Das Terminanfrage-Widget kann darauf aufsetzen. +- Tests: Pest, SQLite in-memory, `php artisan test --compact`. + +--- + +## 2. Gefundene Bugs & Optimierungen + +Beim Abgleich der Umsetzungsliste mit dem Code aufgefallen. + +**Stand 28.08.2026: alle Befunde behoben, Suite grün (699 Tests, 2715 Assertions).** + +| # | Befund | Status | +|---|---|---| +| T1 | Info-Tablet: Leeren per X wird nicht gespeichert | ✅ behoben | +| B1 | CMS-Seeder überschreibt redaktionelle Inhalte | ✅ behoben | +| B2 | Magazin-CMS nicht ans Frontend angeschlossen | ✅ behoben (Variante A: Slug-Routen + 301) | +| B3 | Ankündigungsleiste bleibt nach Umtexten unsichtbar | ✅ behoben | +| B4 | Footer hartkodiert, nicht pflegbar | ✅ behoben | +| B5 | Englische Footer-Labels auf deutscher Seite | ✅ behoben | +| B6 | 19 Seiten erben alte Dubai-Beschreibung | ✅ behoben (Fallback + canonical) | +| B7 | Content-Seeder nicht registriert | ✅ behoben | +| B8 | Klartext-Passwort im Seeder | ✅ behoben | +| B9 | Medien-Picker greift bei leeren Logo-Feldern nicht | ✅ behoben | +| B10 | Alt-Begriffe im Seiteninhalt | ✅ behoben in AP1 | +| B12 | `/service` und `/portfolio` lieferten 500 | ✅ behoben (301) | +| B11 | `/magazin/{unbekannt}` liefert 200 statt 404 | ✅ behoben | + +--- + +### T1 · Info-Tablet: Leeren der Öffnungszeiten wird nicht gespeichert ✅ + +Gemeldet am 28.08.2026: „Wenn ich den Inhalt weg-X, kommt nicht Geschlossen. Der Wert kommt +wieder, wenn ich in ein anderes Feld klicke. Setze ich Öffnung und Schluss auf X und speichere, +ist Öffnung wieder der alte Wert." + +**Drei Ursachen, alle in `cabinet-info-tablet.blade.php` bzw. `CabinetInfoTablet.php`:** + +1. **Zwei Submit-Handler auf demselben Formular.** `wire:submit.prevent="save"` **und** + `x-on:submit.prevent="… $wire.save(hours)"` waren gleichzeitig gebunden – `save()` lief pro + Klick zweimal, einmal mit den DOM-Werten und einmal ohne. Welcher Aufruf zuletzt schrieb, + war nicht deterministisch. Das erklärt „speichert nur den letzten". +2. **`wire:model.live` auf den Zeit-Pickern.** Jede Änderung löste einen Roundtrip aus; beim + erneuten Rendern hat Livewire ein zuvor geleertes Feld mit dem unveränderten Serverwert + überschrieben. Das erklärt „der Wert kommt wieder, wenn ich in ein anderes Feld klicke". +3. **Geöffnet/Geschlossen wurde serverseitig gerechnet** und konnte deshalb erst nach einem + Roundtrip umspringen. Das erklärt „es kommt nicht Geschlossen". + +**Behoben:** nur noch ein Submit-Pfad (das DOM ist die Quelle der Wahrheit), `.live` entfernt, +die Geöffnet/Geschlossen-Anzeige rechnet clientseitig per Alpine und reagiert damit sofort auf das X. + +**Zusätzlich:** `save(array $hours)` hat über `property_exists()` **jede** öffentliche Property +aus dem Client-Payload beschreibbar gemacht – auch `storeStatus` und `contactEmail`. Jetzt greift +eine Allowlist auf die 14 Zeitfelder. + +**Tests:** 5 neue Fälle in `tests/Feature/CabinetInfoTabletTest.php` (15 grün) – u. a. mehrere Tage +in einem Submit leeren, nur die Öffnung leeren, Fallback ohne DOM-Payload, Allowlist. + +**Noch am Gerät zu prüfen:** die drei Ursachen liegen im Browser-Verhalten; die Tests sichern den +Serverpfad ab. Bitte im Portal einmal gegenprüfen: mehrere Tage leeren → speichern → neu laden. + +### B1 · Der CMS-Seeder überschreibt alles, was Marcel pflegt ✅ + +`database/seeders/CmsContentSeeder.php:76-90` – bestehende Einträge werden bedingungslos +per `$content->update()` mit den Werten aus der Lang-Datei überschrieben. Geschützt sind nur +die zwei Sektionen in `$skipSections`. + +**Wirkung:** Jeder erneute Seeder-Lauf – auch der geplante nach der Umtextung – setzt sämtliche +redaktionellen Änderungen zurück. Die Zusage „von Marcel selbst pflegbar" hält so nicht. + +**Behoben:** Default ist jetzt „nur anlegen, wenn nicht vorhanden". Überschreiben nur noch über +`$seeder->overwriteExisting = true`. Der Lauf meldet, wie viele Einträge unangetastet blieben, und +leert den CMS-Cache, wenn er etwas geändert hat. +**Tests:** 3 neue Fälle in `tests/Feature/Cms/CmsContentSeederTest.php` – gepflegter Inhalt bleibt, +fehlende Sektionen werden trotzdem angelegt, bewusstes Überschreiben funktioniert. + +### B2 · Das Magazin-CMS ist nicht mit dem Frontend verbunden ✅ + +- Admin `admin/flux-cms/articles` schreibt nach `cms_articles` (Model `CmsArticle`). +- Frontend liest `trans('b2in.articles')`: + `app/Livewire/Web/Components/Sections/MagazinList.php:20` und `MagazinDetail.php:48`. +- `CmsArticle` wird **außerhalb des Admin-Bereichs nirgends verwendet** (verifiziert per Grep). + +**Wirkung 1:** Was Marcel im Magazin-CMS bearbeitet, erscheint nicht auf der Website. +**Wirkung 2 (für dieses Projekt entscheidend):** Die Umsetzungsliste sagt für die Kernmarken +„adaptiert vom **Magazin-Muster**". Das Admin-CRUD ist als Vorlage brauchbar, die +Frontend-Anbindung fehlt dort aber – **dieser Fehler darf nicht mitkopiert werden.** + +**Bei der Umsetzung aufgefallen – das ist kein reiner Verdrahtungsfehler:** +Die Artikel liegen in beiden Quellen (5 in `cms_articles`, 5 in der Lang-Datei, inhaltsgleich), +**aber unter verschiedenen Schlüsseln**: die Lang-Datei nutzt 1–5, die Datenbank die IDs 8–12. +Die öffentlichen URLs lauten heute `/magazin/1` … `/magazin/5`. Eine Umstellung auf das Model +**ändert damit die öffentlichen URLs** und braucht eine Slug-Route plus Weiterleitungen von den +alten numerischen IDs – sonst brechen bestehende Links und die Google-Indexierung. + +**Deshalb bewusst nicht einfach umgestellt.** Entscheidung nötig: + +| Variante | Aufwand | Wirkung | +|---|---|---| +| A · Slug-Routen `/magazin/{slug}` + 301 von den alten IDs | ≈3–4 Std. | sauber, CMS wird wirksam, URLs werden sprechend | +| B · Numerische Route beibehalten, Auflösung über die DB-ID | ≈2 Std. | CMS wird wirksam, aber `/magazin/1` … `/magazin/5` werden zu 404 | +| C · Vorerst so lassen | 0 | Magazin funktioniert, das Magazin-CMS bleibt aber wirkungslos | + +**Umgesetzt: Variante A.** + +- `CmsArticle::forFrontend()` liefert die veröffentlichten Artikel nach Slug indiziert. + Das CMS gewinnt; solange keine Artikel gepflegt sind, greift die Lang-Datei als Fallback – + dieselbe Reihenfolge wie bei `cms_theme_section()`, damit das Magazin auf einer frischen + Installation nicht leer ist. +- Die ID→Slug-Zuordnung lag als private Konstante im `CmsArticleSeeder` und ist jetzt + `CmsArticle::LEGACY_ID_TO_SLUG` – eine Quelle für Seeder, Fallback und Weiterleitung. +- `MagazinList` und `MagazinDetail` lesen aus dem Model statt aus `trans('b2in.articles')`; + die Übersicht verlinkt über `route('magazin.detail')` statt über die numerische ID. +- Neue Route `/magazin/{slug}`. Die alten `/magazin/1` … `/magazin/5` leiten dauerhaft (301) + auf den Slug um; sie stehen per `whereNumber()` **vor** der Slug-Route, sonst würde diese + die Ziffern selbst schlucken. Numerische IDs ohne Zuordnung liefern 404. +- Die Detailseite fragte die Artikel zweimal ab (Artikel + verwandte Artikel) – jetzt gemerkt, + eine Abfrage pro Seitenaufruf. + +**Tests:** `tests/Feature/MagazinPageTest.php` auf 13 Fälle erweitert – Slug-Auslieferung, +301 von jeder alten ID, 404 bei unbekanntem Slug, CMS schlägt Lang-Datei, unveröffentlichte +Artikel sind unsichtbar, Fallback bei leerer Tabelle. `LiveSiteReviewTest` prüft für jede alte +ID die Weiterleitung **und** dass das Ziel lädt. + +⚠️ **Beim Deployment:** `/magazin/1` … `/magazin/5` sind indexiert. Die 301 fängt sie ab, aber +nach dem Livegang bitte einmal in der Search Console gegenprüfen. Externe Links, die noch auf +die alten URLs zeigen, bleiben funktionsfähig. + +**Nebenbefund, nicht angefasst:** `MagazinDetail::$relatedArticles` wird berechnet, aber von +keiner View gerendert – entweder die Sektion „verwandte Artikel" nachziehen oder die Property +entfernen. Deine Entscheidung. + +### B3 · Ankündigungsleiste: alte Wegklicker sehen die neue Leiste nie ✅ + +`announcement-bar.blade.php:2` merkt sich das Wegklicken in +`localStorage['announcement_dismissed_']`. Bleibt die `id` beim Umtexten gleich, bleibt die +Leiste für alle Wiederkehrer unsichtbar. + +**Behoben:** Der Dismiss-Schlüssel wird jetzt aus Inhalt **und** `id` abgeleitet +(`AnnouncementBar::getDismissKeyProperty()`). Wird die Leiste im CMS neu belegt, sehen auch +Wiederkehrer die neue Meldung – ohne dass jemand daran denken muss, die `id` mitzuändern. +**Tests:** 2 neue Fälle in `tests/Feature/AnnouncementBarTest.php`. + +### B4 · Der Footer ist vollständig hartkodiert ✅ + +`footer.blade.php` – Claim „Connecting Design and Property" steht in Zeile 15 im Markup, +`Footer.php` lädt überhaupt keinen Content. Es gibt keine `footer`-Sektion in `cms_section_map.php`. + +**Wirkung:** Sowohl „Footer-Claim ersetzen" als auch „FAQ in den Footer" aus der Umsetzungsliste +erfordern einen kleinen Umbau; Marcel kann den Claim danach ohne CMS-Anbindung weiterhin nicht ändern. +**Behoben:** Neue CMS-Sektion `global.footer` (Claim, Byline, Linkliste) in `cms_section_map.php` +und in beiden Lang-Dateien. `Footer.php` lädt sie über `cms_theme_section('footer')`, die View +rendert Claim und Links daraus und fällt ohne CMS-Eintrag auf sinnvolle Defaults zurück. +Der Claim lautet jetzt „Premium-Einrichtung. Persönlich gemacht.", FAQ ist als erster Link drin. +**Tests:** `tests/Feature/FooterTest.php` (4 Fälle). + +### B5 · Englische Footer-Labels auf der deutschen Seite ✅ + +„Privacy Policy", „Terms of Service", „Cookie Policy" waren hartkodiert englisch, während +„Impressum" korrekt über `__('ui.legal_notice')` lief. +**Behoben:** neue Keys `privacy_policy`, `terms_of_service`, `cookie_policy`, `faq` in +`resources/lang/{de,en}/ui.php`; die deutsche Seite zeigt jetzt Datenschutz / AGB / +Cookie-Richtlinie / Häufige Fragen / Impressum. + +### B6 · 19 Seiten tragen die alte Dubai-Beschreibung ✅ + +`web-master.blade.php:11` und `:18` haben als Fallback fest verdrahtet: +„B2in – Connecting Design and Property. Exklusive Immobilien in Dubai & europäisches Einrichtungsnetzwerk." +19 Views unter `resources/views/web/` setzen **kein** `@section('meta_description')` und erben damit +diesen Text – darunter die Live-Seite `magazin-detail.blade.php`. + +**Behoben:** Der Fallback in `web-master.blade.php` (Description **und** OG-Description) trägt +jetzt den Interior-Text aus `umsetzung-inhalte.md` §0. Zusätzlich `` ergänzt, +das fehlte komplett. +**Offen als B10:** Der Alt-Begriff-Bestand im Seiteninhalt („Supply-Chain", „Local-for-Local", +„Ökosystem", „Investment", „Connecting Design") – **90 Treffer in 14 Dateien**, u. a. der +Hero-`card_text`. Das ist Content-Arbeit mit den freigegebenen Texten und gehört in AP1, nicht +in einen Bugfix. + +### B7 · Content-Seeder sind nirgends registriert ✅ + +`DatabaseSeeder::run()` ruft nur `TestDisplaySeeder`. `CmsContentSeeder`, `CmsArticleSeeder`, +`CmsProjectSeeder`, `CmsLegalSeeder`, `NetzwerkPageCmsSeeder` müssen von Hand aufgerufen werden; +ein frisch aufgesetztes System hat keine CMS-Inhalte. +**Behoben:** `CmsContentSeeder`, `CmsLegalSeeder`, `NetzwerkPageCmsSeeder`, `CmsArticleSeeder` +und `CmsProjectSeeder` sind in `DatabaseSeeder::run()` registriert – nach dem B1-Fix gefahrlos, +weil bestehende Inhalte unangetastet bleiben. + +### B8 · Klartext-Passwort im Seeder ✅ + +`database/seeders/DatabaseSeeder.php` enthielt ein echtes Passwort im Repo. +**Behoben:** Zugangsdaten kommen jetzt aus `config/seeding.php` bzw. `SEED_ADMIN_*` in der `.env`; +`.env.example` ist ergänzt. +⚠️ **Das alte Passwort steht weiterhin in der Git-Historie – bitte rotieren, falls es irgendwo +sonst benutzt wird.** + +### B9 · Medien-Picker greift bei leeren Logo-Feldern nicht ✅ + +`content-index.blade.php` → `_cmsFieldLooksLikeImage()` erkennt Bildfelder an einer festen +Feldnamen-Liste **oder** an der Dateiendung **im Wert**. `logo` steht nicht in der Liste, und ein +noch leeres Feld hat keinen Wert → wird als reines Textfeld gerendert. + +**Wirkung:** Marcel kann bei einer neu angelegten Marke bzw. bei den Sponsoring-Logos das Bild +nicht per Picker setzen, sondern müsste den Dateinamen abtippen. Betrifft AP2 und AP6 direkt. +**Behoben:** `logo` in die Feldnamen-Liste und `_logo$` in die Suffix-Regex aufgenommen. Zusätzlich +prüft `_cmsFieldLooksLikeImage()` den Feldnamen jetzt **vor** dem Wert – ein noch leeres Bildfeld +wird dadurch als Bild erkannt und bekommt den Picker. (`logo_width` bleibt korrekt ein Textfeld.) + +### B11 · `/magazin/{unbekannte-id}` liefert 200 statt 404 ✅ + +`MagazinDetail::loadArticle()` fiel bei unbekannten IDs still auf Artikel 1 zurück +(`$articles[$this->articleId] ?? $articles[1]`). `/magazin/999` lieferte damit Status 200 mit dem +Inhalt von Artikel 1 – beliebig viele URLs mit identischem Inhalt, schlecht für die Indexierung, +und bei fehlendem Artikel 1 ein Fehler statt einer 404. + +**Behoben:** `abort_unless(isset($articles[$this->articleId]), 404)`. +**Tests:** 2 neue Fälle in `tests/Feature/MagazinPageTest.php`. + +--- + +## 3. Arbeitspakete + +Gliederung folgt der Umsetzungsliste. Reihenfolge nach dem Vorschlag aus `umsetzung-inhalte.md`. + +### AP0 · Vorbereitung (im Rahmen von AP1) + +Branch `feature/b2in-interior`, DB-Backup, Backup der Startseite (Muster +`dev/2026-02-27/backup-before-relaunch/`), `php artisan test --compact` als Referenzstand. + +### AP1 · Website-Umstrukturierung & Umtextung — ✅ umgesetzt + +**Global** +- Meta-Title und Description auf Interior umgestellt; fünf Live-Seiten hatten gar keine eigene + Description und erbten den Fallback – jetzt gesetzt (`magazin-detail`, `impressum`, `privacy`, + `terms`, `cookie-policy`). OG-Tags leiten sich automatisch ab. +- Navigation: `Home · Marken · Magazin · Immobilien · Über B2in`. „Netzwerk" ist raus (Seite bleibt + erreichbar), FAQ steht im Footer. „Referenzen" kommt mit AP5 dazu. +- Footer-Claim „Premium-Einrichtung. Persönlich gemacht." (siehe B4). + +**Startseite** – neue Reihenfolge in `resources/views/web/home.blade.php`: +`header → hero → marcel-badge → weiche → kernmarken → über-marcel → sponsoring → immobilien-teaser → abschluss-cta → footer` +- Ankündigungsleiste neu belegt (Rotpunkt Küchen), inkl. neuer `id`. +- Hero: neue Headline, Subline, zwei Buttons, drei Checkmarks, Bild-Badge „Einrichtung, die bleibt." +- Marcel-Badge umgetextet. +- **Neu:** `Sections/AudienceSwitch` (Weiche Privat/Geschäft) – ersetzt „Zwei Welten. Ein Netzwerk." +- **Neu:** `Sections/CoreBrands` mit CABINET, Rotpunkt Küchen, Febrü (Anker `#marken`). + Febrü bewusst mit Home-Office zuerst. **Datenquelle ist vorerst das CMS-Sektionsfeld – + in AP2 wird sie durch das Model `CmsBrand` samt Detailseiten ersetzt.** Das Markup bleibt. +- **Neu:** `Sections/Sponsoring` (AP6) und `Sections/ImmobilienTeaser`. +- „Ein Ökosystem, drei Säulen" ist von der Startseite genommen, die Komponente bleibt als Archiv. + +**Sponsoring-Logos:** je Verein eine Datei gewählt, auf max. 400 px Breite herunterskaliert +(326 KB → 130 KB) und nach `public/img/assets/sponsoring/` übernommen. Die drei Seitenverhältnisse +sind sehr unterschiedlich (500×262, 689×689, 2443×741), deshalb eine feste Box je Logo. +`tc-bad-waldliesborn-horn` liegt nur als JPG vor und hat damit keinen transparenten Hintergrund. + +**Durchgang Alt-Begriffe:** auf allen Live-Seiten bereinigt – Startseite, `/about`, `/contact`, +`/immobilien` sind sauber; `/netzwerk` und `/faq` ebenfalls. Nicht angefasst: die +**Magazin-Artikel**, die inhaltlich über Supply-Chain und Investments handeln – das sind +redaktionelle Beiträge, keine Seitentexte. + +**Tests:** `tests/Feature/HomePageStructureTest.php` (11 Fälle: Reihenfolge, Hero-Buttons und +-Checkmarks, Kernmarken samt Anker, Febrü-Gewichtung, Navigation, SEO, Sponsoring-Logos); +`AnnouncementBarTest` und `LiveSiteReviewTest` auf die neuen Inhalte gezogen. + +--- + +#### ⚠️ Wichtig fürs Deployment: der Relaunch-Seeder + +`cms_theme_section()` bevorzugt das CMS gegenüber der Lang-Datei. 14 der neu getexteten Sektionen +lagen bereits mit den **alten** Texten im CMS und hätten die neuen Inhalte überdeckt – der reguläre +`CmsContentSeeder` fasst bestehende Einträge seit B1 bewusst nicht mehr an. + +Deshalb gibt es `InteriorRelaunchCmsSeeder`: er überschreibt **genau die 19 in AP1 geänderten +Sektionen** aus den Lang-Dateien und lässt alles andere in Ruhe. + +``` +php artisan db:seed --class=InteriorRelaunchCmsSeeder +``` + +Auf der lokalen Datenbank bereits gelaufen (5 angelegt, 14 aktualisiert). **Auf dem Live-System +vor dem Lauf ein DB-Backup ziehen** – er überschreibt in diesen Sektionen auch redaktionelle +Änderungen. Danach `npm run build:web`. + +--- + +#### Nebenbefund B12 · `/service` und `/portfolio` lieferten 500 ✅ + +Beide Seiten sind öffentlich erreichbar, aber ihre Content-Sektionen (`hero_image`, +`content_section_left/right`, `portfolio`) existieren in keiner Lang-Datei mehr – vermutlich seit +dem Februar-Relaunch. Sie warfen seitdem einen 500er; da sie in keinem Test vorkamen, ist es +niemandem aufgefallen. **Verifiziert: älter als AP1, keine Regression.** + +**Behoben** wie bei den anderen stillgelegten Seiten per 301 (`/service` → `/netzwerk`, +`/portfolio` → `/immobilien`); die Views bleiben als Archiv liegen. Beide Ziele sind eine +Zeile in `routes/web.php`, falls Du woandershin umleiten möchtest. + +--- + +#### Was in AP1 offen bleibt + +| Punkt | Grund | +|---|---| +| Hero-Bildmotiv, Kachelbilder, OG-Image | Zulieferung offen, Bestandsbild bleibt | +| Navigationspunkt „Referenzen" | kommt mit der Seite in AP5 | +| Teaser „Aktuelles aus unseren Showrooms" | kommt mit AP5, sonst zeigt er ins Leere | + +--- + +#### Logo mit Zusatz „Interior" ✅ (Zulieferung eingetroffen) + +Marcel hat die Dateien geliefert (`dev/2026-08-28/logos/`) – die typografische Eigenlösung +entfällt damit. Beide Varianten sind identisch aufgebaut und unterscheiden sich nur im Füllwert: +positiv `#314052`, negativ `#FFFFFF`; der blaue Akzent `#2C9FDA` bleibt in beiden. Trotz „CMYK" +im Dateinamen enthalten die SVGs RGB-Hexwerte, die Schrift liegt in Pfaden. + +**Zuschnitt war nötig:** Die Lieferung lag auf einem A4-Artboard (595,3 × 419,5) – gemessen +**74 % leerer Weißraum**. Ungeschnitten hätte das Logo bei gleicher CSS-Höhe rund halb so groß +gerendert wie das bisherige. Der Inhaltsrahmen wurde durch Rendern ermittelt und das viewBox auf +`153 96 289.3 227.5` gezogen (98 % Füllgrad, gleichmäßige Randluft, Verhältnis 1,27:1). + +Abgelegt als `public/img/logos/b2in-interior-logo-{positive,negative}.{svg,png}`; die alten +`b2in-logo-*`-Dateien bleiben als Archiv liegen. + +**Angepasst:** `ThemeHelper` (b2in → neue Dateien) · Header `h-10` → `h-12` und Footer `h-14` → +`h-16`, weil das neue Lockup gestapelt ist und die Wortmarke bei gleicher Höhe kleiner wirkt · +Footer- und Mail-`width`/`height`-Attribute auf das neue Verhältnis korrigiert (standen auf +2,14:1 bzw. 3,5:1 und passten schon vorher nicht) · Mail-Header nutzt das neue PNG. + +**Display ebenfalls umgestellt** (Marcel möchte es laut Mail einheitlich): + +- Beide Varianten liegen jetzt auch unter `public/_cabinet/assets/`. +- `DisplayModuleSettings`: Default-Logo und Claim getauscht. Der Claim stand dort noch auf + „Connecting Design & Property". +- **Variante nach Theme:** Das Standard-Theme ist `dark`, dort liegt das Logo auf einem dunklen + Scrim – bislang stand da die **dunkle** Variante (deshalb der `drop-shadow` im Player). Jetzt + dunkles Theme → negativ/weiß, helles Theme → positiv. +- Logo-Höhe im Player von `3.5vh` auf `4.6vh`, weil das neue Lockup gestapelt ist. +- `DisplayInteriorBrandingSeeder` vereinheitlicht die bestehenden Module. Vorher liefen dort + **vier verschiedene Logo-Quellen** nebeneinander (zwei Dateien aus der Medienbibliothek, ein + relativer und ein absoluter Asset-Pfad) und zwei Module trugen den Claim „Hello". + +--- + +#### B13 · Live-Displays zeigten auf eine lokale Entwicklungsdomain ⛔→✅ + +Beim Vereinheitlichen aufgefallen: Medien-URLs lagen als **absolute URLs mit fest verdrahtetem +Host** in den Moduleinstellungen und Item-Inhalten – teils `b2in.eu`, teils **`b2in.test`**. +Der Player gibt absolute URLs unverändert zurück, ein auf `b2in.test` verweisendes Medium kann auf +dem Live-Display also nicht laden. + +**Betroffen waren vier veröffentlichte Playlists:** „Display 4 – Innen", „Kundenstopper", +„Display 2" und „Test-Display" – unter anderem über das Modul „Cabinet-Influencerin", das auf +drei der vier Displays läuft. + +**Behoben:** `DisplayMediaUrlNormalizerSeeder` schreibt Schema + Host auf einen reinen Pfad um. +Relative Pfade löst der Player über `resolveDisplayUrl()` gegen die Portal-Basis auf und +funktionieren damit auf Test- **und** Live-System. 23 Verweise umgeschrieben, 0 verblieben. + +Ziel-Links (Footer-URL, QR-Ziel wie `cabinet-bielefeld.de`) bleiben bewusst absolut – der Filter +greift nur bei einem B2in-Host **und** einem Pfad unterhalb von `/storage/`. Nachgeprüft: die +fünf Ziel-Links stehen unverändert. + +**Tests:** `DisplayInteriorBrandingTest` (6) und `DisplayMediaUrlNormalizerTest` (6). + +⚠️ **Wichtig:** Ob die betroffenen Mediendateien auf dem Live-Server überhaupt vorhanden sind, +kann ich von hier nicht prüfen. Wurden sie nur lokal hochgeladen, fehlen sie dort weiterhin – +der relative Pfad ist dann trotzdem richtig, aber die Datei muss nachgezogen werden. +Nach dem Deployment bitte die vier Displays einmal sichten. + +**Deployment-Reihenfolge:** +``` +php artisan db:seed --class=InteriorRelaunchCmsSeeder +php artisan db:seed --class=DisplayInteriorBrandingSeeder +php artisan db:seed --class=DisplayMediaUrlNormalizerSeeder +npm run build:web +``` + +### AP2 · Kernmarken-Modul im CMS — ✅ umgesetzt + +**Model + Migration:** `CmsBrand` / Tabelle `cms_brands`. +⚠️ Bewusst **nicht** `Brand` – das Model existiert bereits im Produkt-/Partner-Kontext +(`Partner::brand()`, `Product::brand()`) und bleibt unangetastet. Ein Test hält das fest. + +Felder: `slug`, `name`, `tagline`, `teaser`, `description` (HTML), `logo`, `image`, `services`, +`gallery`, `website_url`, `showroom`, `is_published`, `order`. +Übersetzt werden `name`, `tagline`, `teaser`, `description`. + +**Die Lehre aus B2 ist eingebaut:** Das Frontend liest direkt aus dem Model, nicht aus einer +Lang-Datei. `CmsBrand::forFrontend()` liefert die veröffentlichten Marken nach Slug indiziert; +solange keine Marke gepflegt ist, greift die Lang-Sektion `core_brands` als Fallback. Die +Fallback-Einträge tragen `has_detail_page = false`, damit die Kachel dann nicht auf eine +Detailseite verlinkt, die es noch nicht gibt. + +**Admin:** `admin/flux-cms/brands` → `brands-index.blade.php` (Volt), aufgebaut nach dem +Magazin-Muster. Medien über den bestehenden `MediaPicker` (Logo, Stimmungsbild, Galerie), die +Einleitung über den Flux-Editor mit `CmsFluxEditorHtmlTransformer`. Slug wird auf Format und +Eindeutigkeit geprüft. Eigene Karte im CMS-Dashboard. + +**Frontend:** +- `Sections/CoreBrands` rendert die Kacheln aus dem Model (Anker `#marken`). +- Neue Route `/marken/{slug}` mit `Sections/BrandDetail` und der Vorlage-Struktur aus + `umsetzung-inhalte.md` §5: Header (Logo + Claim + Stimmungsbild) → Einleitung → Leistungen → + Galerie → CTA, dazu eine Leiste mit den übrigen Marken. +- Eigener Title und eigene Description je Marke. +- Unveröffentlichte Marken liefern 404 und verschwinden von der Startseite. + +**Seeder:** `CmsBrandSeeder` legt CABINET, Rotpunkt Küchen und Febrü mit den Texten aus +`umsetzung-inhalte.md` §5 sowie je vier Leistungen an – Febrü mit Home-Office zuerst. +Bestehende Marken werden **nicht** überschrieben, Marcel pflegt sie im Admin. + +**Tests:** `Cms/CmsBrandTest` (8), `BrandPageTest` (11), `Admin/Cms/CmsBrandsIndexTest` (11) – +darunter die Gegenprobe zu B2: eine im CMS neu angelegte Marke erscheint ohne Codeänderung auf +der Startseite **und** bekommt ihre Detailseite. + +#### Nachtrag: eigene Unterseite `/marken` + +Auf Wunsch nach der Sichtung – Grundlage `dev/2026-08-28/unterseite_marke.md`. Die Startseite +bleibt wie sie ist, die Kernmarken-Sektion dort ist jetzt ein **Teaser**. + +- **Neue Seite `/marken`** mit dem Aufbau aus der Spec: Seitenkopf mit Breadcrumb (Home → Marken) + → Kernmarken → Partnernetzwerk → „Markenwelt wächst" → Abschluss-CTA. Eigener Title und eigene + Description. +- **Zwei Textebenen je Marke.** Dafür kamen zwei Felder dazu (`summary`, `highlights`): + + | Feld | Wo | + |---|---| + | `teaser` | Kachel auf der Startseite (gekürzt) | + | `summary` | Text auf `/marken` (zwei Absätze) | + | `highlights` | die drei Merkmale auf `/marken` | + | `description` | Einleitung der Detailseite | + | `services` | Leistungen der Detailseite | + +- **Startseite:** Kacheln verlinken direkt auf die Detailseite, darunter der Button + „Alle Marken ansehen" → `/marken`. +- **Navigation:** „Marken" zeigt auf `/marken` statt auf den Anker `/#marken`; der Hero-Button + ebenfalls. Der Anker `#marken` bleibt für Direktsprünge erhalten. +- **Slug korrigiert:** Die Spec nennt `/marken/rotpunkt`, geseedet war `rotpunkt-kuechen`. + Angepasst, solange nichts live ist – später wäre das ein Redirect gewesen. +- **`/netzwerk` stillgelegt.** Der Inhalt geht im Abschnitt „Mehr als Marken: unser Netzwerk" auf + `/marken` auf. `/netzwerk`, `/interior`, `/partner` und `/service` leiten jetzt **direkt** auf + `/marken` – vorher liefen `/interior` und `/partner` über `/netzwerk`, also eine Redirect-Kette. + Die View bleibt als Archiv liegen. +- **WhatsApp-Button:** erscheint nur, wenn im CMS unter `global.contact.whatsapp` eine Nummer + hinterlegt ist (`whatsapp_link()`). Solange die Nummer nicht bestätigt ist, zeigt der CTA nur + „Termin anfragen" – kein Button auf eine erfundene Nummer. + +**Tests:** `MarkenPageTest` (9), `InteriorPageTest` neu geschnitten (4), dazu zwei Fälle in +`Admin/Cms/CmsBrandsIndexTest` – darunter die Gegenprobe, dass eine im Admin angelegte Marke +mitsamt Text und Merkmalen auf `/marken` erscheint. + +> **Notiz für spätere Reihenfolge-Tests:** `wire:snapshot` serialisiert die Komponentendaten als +> JSON ins Attribut und escaped Umlaute zu `\uXXXX`. Ein `strpos`-Vergleich auf dem rohen HTML +> misst dann den Snapshot statt des sichtbaren Textes. In `MarkenPageTest` werden die Snapshots +> vorher entfernt. + +**Offen:** Logos, Stimmungsbilder und Galerien fehlen als Zulieferung – Kacheln und Detailseiten +zeigen so lange einen Platzhalter. Der WhatsApp-Button im CTA-Block kommt mit AP3, sobald die +Nummer bestätigt ist. + +--- + +#### Nachtrag 2: Galerie je Marke – realisierte Projekte und Inspirationen getrennt + +Aus Marcels Mail: „Der Bereich Referenzen ist mir wichtig … Entscheidend ist für mich, dass dieser +Bereich langfristig mitwachsen und von mir selbst gepflegt werden kann. Für den Start können wir +ergänzend mit hochwertigen Visualisierungen und KI-unterstützten Darstellungen arbeiten. Dabei +sollte allerdings klar zwischen tatsächlich realisierten Referenzen und Entwürfen beziehungsweise +Inspirationen unterschieden werden." + +Umgesetzt als Galerie **auf der Detailseite jeder Kernmarke**, mit zwei Rubriken. + +- **Datenform.** Das bestehende JSON-Feld `cms_brands.gallery` bekommt je Eintrag + `image`, `category` (`project` | `inspiration`) und `caption`. **Keine Migration nötig.** +- **Sicherheitsnetz gegen die schädlichere Verwechslung:** `CmsBrand::normalizeGallery()` stuft + jeden Eintrag ohne oder mit unbekannter Kategorie als **Inspiration** ein – nie als Projekt. + Ein Entwurf, der versehentlich als Referenz durchgeht, wäre der teurere Fehler. Die + Normalisierung greift beim Laden, beim Speichern und beim Ausspielen. +- **Frontend** (`brand-detail.blade.php`): Abschnitt „Referenzen und Inspirationen" mit Umschalter, + sobald beide Rubriken gefüllt sind; ist nur eine gefüllt, steht sie mit eigener Überschrift da. + Jede Kachel trägt ein sichtbares Label („Realisiertes Projekt" / „Visualisierung"), über den + Inspirationen zusätzlich der Satz „Diese Darstellungen sind Entwürfe und Visualisierungen – + keine ausgeführten Projekte." Lightbox mit Pfeiltasten und Esc, Muster übernommen aus + `immobilien-show.blade.php`. +- **Admin** (`brands-index.blade.php`): zwei getrennte Buttons „+ Projekt" und „+ Inspiration", je + Eintrag ein Auswahlfeld und eine Bildunterschrift, dazu ein Hinweis, was in welche Rubrik gehört. + Die Kategorie wird beim Anlegen entschieden, nicht per stillem Vorgabewert. +- **Abgrenzung zu AP5:** AP5 bleibt die Rubrik-Seite „Referenzen" mit dem zweiten Display. Die + markenbezogene Galerie hier ist die pflegbare Grundlage dafür und ersetzt AP5 nicht. + +**Tests:** 5 Fälle in `BrandPageTest` (keine Galerie → kein Abschnitt; beide Rubriken beschriftet; +kein Umschalter bei nur einer Rubrik; Eintrag ohne Kategorie erscheint als Visualisierung; Hinweis +sichtbar), 5 in `Cms/CmsBrandTest` (Normalisierung, Gruppierung), 4 in +`Admin/Cms/CmsBrandsIndexTest` (Anlegen je Rubrik, Speichern, unbekannte Kategorie, Löschen). + +**Offen:** Bildmaterial. Marcel setzt Projektfotos und Visualisierungen selbst ein. + +--- + +### AP3 · Terminanfrage-Widget + WhatsApp — ✅ umgesetzt + +**Korrektur gegenüber Revision 1:** kein Inline-Abschnitt, sondern ein **schwebendes Element +unten rechts auf allen Seiten** → gehört ins Layout `web-master.blade.php`, nicht in `home.blade.php`. + +- Aufsetzen auf `Acme\ContactForm\Livewire\ContactForm` per `customFields` – Honeypot, + Rate-Limit und `SpamDetector` kommen damit geschenkt. +- Felder: Name*, E-Mail*, Telefon, Anliegen/Marke (Auswahl), Wunschtermin, Nachricht. +- **Markenauswahl speist sich aus `CmsBrand`** → Abhängigkeit zu AP2 (Reihenfolge einhalten), + plus feste Einträge „Projektausstattung" und „Sonstiges". +- WhatsApp-Button daneben, Nummer als CMS-Wert (`global.contact.whatsapp`), Link `https://wa.me/`. +- Cookie-Consent beachten (`packages/acme/CookieConsent`). + +**Tests:** `AppointmentWidgetTest` (17 Fälle: Einbindung auf allen Seiten, Markenauswahl aus +`CmsBrand`, Validierung inkl. Wunschtermin in der Vergangenheit, Übergabe an den +`ContactFormService`, Honeypot, WhatsApp sichtbar/unsichtbar); `ContactFormTest` bleibt grün. + +#### Umsetzungsnotizen + +- **Abweichung vom Plan:** nicht auf `Acme\ContactForm\Livewire\ContactForm` per `customFields` + aufgesetzt. Dessen mitgelieferte View bringt ein eigenes, blaues Layout mit, das nicht zum + Auftritt passt. Stattdessen eine eigene Komponente wie `ContactForm` und `ImmobilienContactForm` + der Seite, die `ContactFormService` und `SpamDetector` aus dem Paket nutzt – Honeypot, + Rate-Limit und Spam-Erkennung sind damit trotzdem drin. +- **Platzierung:** `web-master.blade.php`, unten rechts, `z-40`. Der Cookie-Button des + Consent-Managers sitzt unten links (ebenfalls `z-40`), sein Dialog auf `z-50` – die Einwilligung + bleibt also immer erreichbar und wird nie verdeckt. +- **Kein eigener Consent nötig:** Das Widget setzt nichts im Browser, der WhatsApp-Link ist ein + ausgehender Link ohne Einbettung. +- Die `[x-cloak]`-Regel liegt jetzt einmal zentral im Layout – die Seiten brachten sie bisher nur + teilweise selbst mit, das Widget braucht sie überall. +- Felder: Name*, E-Mail*, Telefon, Anliegen (Auswahl), Wunschtermin, Nachricht, Einwilligung*. + Der Wunschtermin ist auf heute oder später begrenzt, im Browser über `min` und serverseitig + über `after_or_equal:today`. +- Betreff der Mail: `Terminanfrage B2in Interior: `, Log-Kontext `appointment-widget` – + so lassen sich Widget-Anfragen von den übrigen Formularen unterscheiden. Die Seite, von der die + Anfrage kam, steht als `source` in der Mail. +- **WhatsApp** erscheint weiterhin nur, wenn unter `global.contact.whatsapp` eine Nummer im CMS + steht. Ohne Nummer zeigt das Widget allein den Termin-Button. + +#### WhatsApp: was technisch geht und was nicht + +Eine echte WhatsApp-Anbindung (Nachrichten empfangen, im CMS beantworten, Verlauf speichern) +setzt die WhatsApp Business Platform voraus: Meta-Verifizierung des Unternehmens, ein Anbieter +für den API-Zugang, laufende Kosten je Konversation. Das ist nicht Teil dieses Auftrags. + +Umgesetzt ist die dafür übliche Alternative, ein **Klick-zum-Chat-Link** (`wa.me`): + +- Der Button sitzt im Terminanfrage-Panel unter dem Absenden-Button. +- Auf dem Handy öffnet die installierte WhatsApp-App, am Rechner WhatsApp Web bzw. die + Desktop-App. Ist WhatsApp nirgends vorhanden, landet man auf der Hinweisseite von `wa.me`. +- Der Nachrichtentext ist **vorbereitet** und wird im Browser aus dem zusammengesetzt, was im + Formular schon steht (Anliegen, Wunschtermin, Name). Der Einstiegssatz ist im CMS pflegbar + (`global.appointment_widget.whatsapp_text`). +- **Abgeschickt wird die Nachricht vom Besucher selbst** – das steht auch so unter dem Button. + +Was das bedeutet, bewusst festgehalten: + +| | | +|---|---| +| Wo landet die Nachricht | in Marcels WhatsApp, nicht im CMS und nicht per Mail | +| Was sehen wir davon | nichts – kein Eintrag, keine Statistik, kein Spamschutz | +| Voraussetzung | eine Mobilnummer, die WhatsApp empfangen kann (sinnvoll: WhatsApp Business) | +| Datenschutz | ausgehender Link zu Meta. In die Datenschutzerklärung gehört ein Absatz dazu; ein Consent-Banner braucht es nicht, weil nichts eingebettet wird und nichts gesetzt wird | + +Wer eine Anfrage im System dokumentiert haben will, nutzt weiterhin das Formular – der +WhatsApp-Weg ist die schnelle, aber unprotokollierte Abkürzung. + +### Nachtrag 3 · Bestandsinhalte auf den Interior-Auftritt umgestellt ✅ + +Nach der Sichtung: Drei verlinkte Seiten erzählten noch die Dubai-/Plattform-Geschichte. +`/immobilien` bleibt bewusst unverändert – die Seite ist der „Außerdem"-Bereich. + +**`/faq`** – die beiden Rubriken „Fokus: Immobilien-Investoren (B2C)" und „Fokus: B2B-Partner" +sind ersetzt durch **„Für Ihr Zuhause"** und **„Für Projekte und Objekte"** (je vier Fragen: +Einstieg mit einem einzelnen Möbelstück, Kosten der Maßanfertigung, Montage, Showroom – +bzw. Projektgröße, Termintreue, Architekten, Netzwerk). Von den allgemeinen Fragen waren zwei +noch Dubai-lastig, die sind jetzt Beratungsablauf und Verlässlichkeit. Die englische Fassung war +noch komplett auf dem alten Stand und ist mitgezogen. + +**`/about`** – das Mission-Zitat sprach von „digitalen Werkzeugen" und „Brücken zwischen Märkten". +Neu: wenige ausgewählte Hersteller, Fachbetriebe aus der Region, ein Ansprechpartner. Die sechs +Werte waren Plattform-Vokabular (Innovation, Konnektivität, Design-Exzellenz) und heißen jetzt +Beratung statt Verkauf, Maßarbeit, Ausgewählte Marken, Regional verwurzelt, Ein Ansprechpartner, +Verlässlichkeit. In der Zeitleiste sind „Die Idee", „Das Fundament" und „Die Vision" umgeschrieben. + +**`/contact`** – die Betreffliste beginnt jetzt mit Beratungstermin, Maßanfertigung und +Küchenplanung; „Internationale Immobilien" rutscht nach hinten, bleibt aber erhalten. + +**`/magazin`** – zwei neue Beiträge, die **an erster Stelle** stehen: +`massanfertigung-warum-der-millimeter-zaehlt` und `kueche-planen-vom-wunsch-zum-grundriss`. +Die vier Dubai-Beiträge bleiben, sie gehören zum Immobilienbereich. + +> ⚠️ Die beiden Beiträge sind **Platzhalter**. Bewusst ohne Referenzen, Zahlen oder Namen +> geschrieben, damit nichts behauptet wird, was nicht belegt ist – vor dem Livegang von Marcel +> gegenlesen lassen. Als Bilder dienen vorhandene Motive aus dem Altbestand. + +**Zwei technische Punkte dabei:** + +- Neue Lang-Artikel bringen ihren Slug jetzt selbst mit (`'slug' => …`, aufgelöst über + `CmsArticle::slugForLangArticle()`). `LEGACY_ID_TO_SLUG` bleibt damit das, was der Name sagt: + die Karte für die alten `/magazin/{id}`-URLs. `/magazin/6` ist korrekt ein 404, weil es diese + URL nie gab. +- `CmsArticleSeeder` sortiert nicht mehr per `ksort`. Die Reihenfolge in der Lang-Datei bestimmt + jetzt die Reihenfolge im Magazin – im CMS über `order`, im Lang-Fallback über die + Array-Reihenfolge. Vorher konnten beide Wege auseinanderlaufen. + +**Tests:** vier Fälle in `MagazinPageTest` (Reihenfolge, beide Slugs, kein erfundener Legacy-Link, +Slug-Auflösung), drei in `LiveSiteReviewTest` (FAQ ohne Dubai mit neuen Rubriken, About mit den +neuen Werten, Kontakt mit den neuen Betreffen). + +**Nachkontrolle:** Gegen die Live-Seiten geprüft, nicht nur gegen die Sprachdatei – dabei fiel in +der FAQ eine dritte Frage auf, die noch vom „Local for Local"-Netzwerk sprach. Ebenfalls korrigiert. + +**Noch offen auf diesen Seiten:** eigene Beitragsbilder für die zwei neuen Artikel; die vier +Dubai-Beiträge bleiben inhaltlich unverändert stehen. + +--- + +### Nachtrag 4 · Markenseiten Rotpunkt und Febrü aus der Zulieferung ✅ + +**Grundlage:** zunächst `Rotpunkt_Kuechen_Webseitentext_B2in_FINAL.pdf` und +`Februe_Webseitentext_B2in_FINAL.pdf` (Stand 31.08.2026, im selben Ordner). Beide enthalten neben +dem Seitentext einen Abschnitt „UMSETZUNGSHINWEIS FÜR KEVIN – WEBSTRUKTUR UND CTA“. + +> Die als Aufgabenliste angekündigte Datei `umsetzung-03-09-2026.md` war zu diesem Zeitpunkt leer +> (0 Byte). Sie wurde nachgereicht – **die Auswertung steht in Nachtrag 5**, der auch die +> korrigierten Textfassungen (`*_FINAL.md`) einarbeitet. Für den Textstand gilt Nachtrag 5. + +**Was die Zulieferung verlangt:** + +1. Der normale Seitentext bleibt direkt sichtbar. +2. Die mit „AUFKLAPPBARER DETAILBEREICH“ gekennzeichneten Vertiefungen werden aufklappbar. +3. **Kein zweiter CTA-Button.** Stattdessen bekommt das vorhandene schwebende + Terminanfrage-Widget auf der jeweiligen Markenseite eine kontextbezogene Beschriftung. +4. Das Widget bleibt beim Scrollen sichtbar und darf auf dem Smartphone nichts verdecken. +5. Die internen Quellenhinweise am Ende der PDFs werden **nicht** veröffentlicht. + +#### Umsetzung + +**Datenstruktur.** `description` (Einleitung) und `services` (Kacheln) reichten für diese Texte +nicht aus. Neu in `cms_brands`: + +| Feld | Inhalt | +|---|---| +| `sections` | Abschnitte der Seite: Titel, Absätze, optional Schlusszeile, Zitat und Vertiefung | +| `widget_label` | Beschriftung des Terminanfrage-Widgets auf dieser Markenseite | +| `cta_title` / `cta_text` | Abschlussblock der Seite | + +`sections` ist – wie `services`, `highlights` und `gallery` – bewusst **nicht** übersetzbar; die +Texte liegen nur auf Deutsch vor. Die drei Textfelder folgen den übrigen Textfeldern und sind +übersetzbar. `CmsBrand::normalizeSections()` bringt jeden Eintrag in eine feste Form und nimmt +Absätze wahlweise als Liste oder als Textblock entgegen (Leerzeile trennt) – dadurch lässt sich im +Admin einfach in ein Textfeld schreiben. + +**Darstellung.** Die Abschnitte stehen zwischen Einleitung und Leistungen. Vertiefungen sind +aufklappbar, mit `aria-expanded` und `aria-controls`. Bewusst `x-transition` statt `x-collapse`: +Das Collapse-Plugin ist in diesem Projekt nicht registriert, die Bewegung entspricht jetzt dem +FAQ-Akkordeon. Zitate stehen abgesetzt mit Nennung des Sprechers, Schlusszeilen hervorgehoben. + +**Widget-Beschriftung.** Das Widget steckt im Layout, nicht in der Seite – es liest den Kontext +deshalb aus der Route: Auf `marken.show` greift `widget_label` der Marke, sonst die allgemeine +Beschriftung. Ein Test prüft gegen, dass dabei **kein zweiter Button** entsteht. + +**Platz auf dem Smartphone.** Der Footer bekommt unten zusätzlichen Abstand (`pb-28 sm:pb-16`), +und der Button bricht lange Beschriftungen um, statt über den Bildschirmrand zu laufen – „Persönliche +Arbeitsplatzberatung vereinbaren“ ist deutlich länger als das vorherige „Termin anfragen“. + +**Pflegbarkeit.** Die Abschnitte sind vollständig im Admin pflegbar: hinzufügen, löschen, per Pfeil +sortieren, je Abschnitt Überschrift, Text, Schlusszeile, Zitat und Vertiefung. Dazu die drei neuen +Felder für Abschluss und Widget-Beschriftung. + +**Einspielen.** `BrandPageTextSeeder` schreibt die Texte. Er fasst **nur** `tagline`, +`description`, `sections`, `widget_label`, `cta_title` und `cta_text` an – Bilder, Galerie, +Leistungen und Reihenfolge bleiben unangetastet. Ein Test prüft genau das. + +**Nebenbei korrigiert:** Febrüs Claim hieß „Arbeiten, wo man gerne ist.“, die Zulieferung schreibt +„Arbeiten, wo man gerne **bleibt**.“ + +**Tests:** `BrandPageSectionsTest` (17 Fälle: Abschnitte beider Marken, Anzahl der aufklappbaren +Bereiche, Zitat, Schlusszeilen, keine Quellenhinweise im Ausgabe-HTML, markenspezifischer +Abschlussblock mit Rückfall auf den allgemeinen, Widget-Beschriftung je Marke, kein zweiter Button, +Normalisierung, Redaktionsschutz des Seeders) und vier neue Fälle in `Admin/Cms/CmsBrandsIndexTest`. + +> ⚠️ **Vor der Veröffentlichung freigeben lassen.** Die PDFs halten fest: Aussagen nur im belegten +> Umfang veröffentlichen, Herstellerfreigabe einholen, und die Rotpunkt-Aussage zur jährlich +> erhaltenen **Waldfläche von ungefähr 50 Fußballfeldern** nur mit ausdrücklicher Bestätigung +> verwenden. Sie steht als eigener Absatz in der Vertiefung „Zahlen, Zertifizierungen und +> Raumklima“ und lässt sich dort einzeln entfernen. Als Punkt in Abschnitt 8 aufgenommen. + +**Offen:** CABINET hat noch keinen ausführlichen Seitentext – die Seite läuft weiter über +Einleitung und Leistungskacheln. Bilder fehlen weiterhin für alle drei Marken. + +--- + +### AP4 · Display-Spiegelung auf der Website — ✅ umgesetzt + +**Korrektur gegenüber Revision 1:** Revision 1 empfahl, die Slides nativ zu rendern. Bei 3 Std. +ist das nicht zu halten, und die Umsetzungsliste schreibt „nutzt die vorhandene Display-/Player-API +als Datenquelle". → **Einbettung des vorhandenen Players im 9:16-Container.** + +- Sektion `Sections/DisplayFeed` mit `aspect-ratio: 9/16`, darin der Player. +- **Vorher zu klären:** Die `/preview/…`-Routen sind token- bzw. modulbasiert und für den internen + Gebrauch gedacht. Für die öffentliche Domain braucht es eine schmale, read-only Route + (z. B. `/embed/display/{display}`), die keine Preview-Tokens nach außen gibt. +- Keine doppelte Pflege: Marcel pflegt weiterhin nur im Display-CMS. + +#### Umsetzung + +- **Route `GET /embed/display/{display}`** (`DisplayEmbedController`), bewusst getrennt von den + Preview-Routen: Die arbeiten mit `preview_token` und zeigen den **Entwurf**. Nach außen darf + weder ein Token noch ein unveröffentlichter Stand gelangen. Die Embed-Route kennt nur die + numerische ID, liefert 404 bei inaktivem Display, bei reinem Entwurf und bei leerer Playlist, + und setzt `X-Robots-Tag: noindex`. +- **Kein Proxy, keine CORS-Frage:** Der Player liest die ID aus dem Pfad (`/display/{id}` steckt in + `/embed/display/{id}`) und holt seine Konfiguration über die bereits öffentliche Route + `/api/display/{display}/config` – dieselbe Quelle wie das physische Display. Da die API-Routen + für alle Domains registriert sind, läuft der Abruf gleichursprünglich über `b2in.test`. + Möglich wurde das durch **B13**: Vorher standen absolute `b2in.test`-URLs in den Playlists. +- **Sektion `Sections/DisplayFeed`** im 9:16-Rahmen. Welches Display gezeigt wird, steht im CMS + (`referenzen.display_feed.display_id`); ohne Eintrag greift das erste aktive Display mit + veröffentlichter Playlist. Gibt es keins, rendert die Sektion **nichts** – lieber keine Sektion + als ein Rahmen mit ewigem Ladebalken. Auch die Texte bleiben dann leer, sonst stünden sie + im Livewire-Snapshot der Seite. +- Eingebunden auf der Startseite (an der dafür vorgesehenen Stelle) und auf `/referenzen`. + +**Tests:** `DisplayWebFeedTest` (10 Fälle: Embed liefert die Datei, kein Token im Ausgabe-Inhalt, +404 bei inaktiv/Entwurf/leer/unbekannt, Einbindung auf der Startseite, CMS-Auswahl und Fallback). + +### AP5 · Rubrik-Seite „Referenzen" — ✅ umgesetzt (Pflege seit Nachtrag 13 als eigenes Modul) + +**Korrektur gegenüber Revision 1:** Revision 1 schlug einen neuen `DisplayVersionType`-Case vor. +Die Umsetzungsliste sagt „zweites, separates **Display** im Display-CMS" – das ist ein weiterer +`Display`-Datensatz und braucht **keine Enum-Änderung**. Damit entfallen die Folgeänderungen an +`DisplayPlaylistConfigBuilder::moduleData()`, `DisplayModuleSettings` und den +`version-editor-*`-Partials. Deutlich risikoärmer und billiger. + +- Zweites `Display` anlegen, Route `/referenzen`, View + Sektion, Aufnahme in die Navigation. +- Startseiten-Teaser „Aktuelles aus unseren Showrooms" mit Button „Alle Referenzen ansehen →". +- 2–3 Platzhalter-Einträge. +- YouTube-Verlinkungen mit Consent-Gate. +- Inhaltliche Regel dokumentieren: unter „Referenzen" nur realisierte Projekte; Visualisierungen + und Entwürfe gehören in die Kernmarken-Detailseiten. +- **Bereits vorhanden:** die markenbezogene Galerie mit den Rubriken „Realisierte Projekte" und + „Inspirationen und Entwürfe" (siehe Nachtrag 2 zu AP2). AP5 baut darauf auf, statt eine zweite + Pflegestelle für dieselben Bilder zu schaffen. + +#### Umsetzung + +- Seite `/referenzen`: Seitenkopf → realisierte Projekte → Showroom-Display → Abschluss-CTA. + Navigationspunkt zwischen „Marken" und „Magazin". +- **Kein zweites Display nötig, keine zweite Pflegestelle:** Die Projekte kommen aus den + Markengalerien (AP2) und werden über alle Marken hinweg gesammelt. Es erscheinen ausschließlich + Einträge der Rubrik **„Realisiertes Projekt"** – Visualisierungen bleiben draußen, damit + „Referenzen" hält, was das Wort verspricht. Jede Kachel verlinkt zurück auf ihre Markenseite. +- **Ehrlicher Leerzustand:** Solange keine Projekte gepflegt sind, steht dort ein Satz dazu und ein + Terminlink – keine erfundene Referenz und keine leere Fläche. +- Der Seitenkopf ist jetzt eine wiederverwendbare Sektion (`PageHero` mit `section` und + `breadcrumb`), vorher war er auf `/marken` festgelegt. + +**Tests:** `ReferenzenPageTest` (6 Fälle: Seite lädt mit eigenem Titel, Navigationspunkt, +Projekte aus allen Marken, Visualisierungen bleiben draußen, Rückverlinkung, Leerzustand). + +### AP6 · Engagement / Sponsoring — ✅ umgesetzt (im Rahmen von AP1) + +Schlanke Sektion „Regional verbunden" nach der Marcel-Sektion: ein Einleitungssatz plus drei +Logos in ruhiger Reihe (Graustufen/gedeckt). + +Logos liegen bereits unter `dev/2026-08-28/sponsoren-logos/` – **7 Dateien für 3 Vereine** +(Arminia, TCBWH, TCH in mehreren Varianten und Formaten). Vor der Umsetzung je Verein **eine** +Datei auswählen, nach `public/img/assets/` bzw. in die Medienbibliothek übernehmen und +vereinheitlichen (gleiche Höhe, transparenter Hintergrund – die `.jpg`-Varianten haben keinen). +Setzt **B9** voraus, damit die Logos per Picker pflegbar sind. + +--- + +--- + +### Nachtrag 5 · Abstimmungsrunde 03.09.2026 ✅ + +**Grundlage:** `dev/2026-08-28/umsetzung-03-09-2026.md`. Die Datei war beim ersten Zugriff leer +und wurde nachgereicht. Dazu kamen die korrigierten Textfassungen als Markdown: +`Rotpunkt_Webseitentext_FINAL.md` und `Februe_Webseitentext_FINAL.md`. **Sie lösen die PDFs vom +31.08. ab** – die PDFs bleiben nur als Beleg im Ordner liegen. + +Vier Punkte, alle umgesetzt: + +| # | Punkt | Stand | +|---|---|---| +| 1 | Markenseiten umfangreicher: Rotpunkt und Febrü korrigiert, CABINET neu | ✅ | +| 2 | „BEISPIEL"-Kennzeichnung bei Visualisierungen entfernen | ✅ | +| 3 | Hinweis zu Visualisierungen eleganter formulieren | ✅ | +| 4 | Abschluss-CTA hochwertiger | ✅ | + +#### 1a · Korrigierte Fassungen Rotpunkt und Febrü + +Die beiden Markdown-Dateien führen ihre Änderungen gegenüber dem 31.08. selbst auf. Übernommen: + +- **Rotpunkt:** „Nachhaltigkeit mit konkreter Substanz" und „Greenline hält dem Vergleich stand" + sind **zusammengeführt**; der doppelte Satz „Nachhaltigkeit braucht keine großen Versprechen…" + steht nur noch einmal. Rotpunkt hat damit **8 statt 9 Abschnitte**, weiterhin 4 Vertiefungen. +- **Febrü:** Der erklärende Satz zum Blauen Engel („Die Aussage bezieht sich ausdrücklich auf die + offiziell gelisteten Produktgruppen…") ist aus dem Kundentext **entfernt** – der Produktbezug + steckt jetzt im Satz selbst („Ausgewählte Febrü-Tischsysteme und Stauraummöbel"). Ein Test + hält diese Formulierung fest, damit sie beim Redigieren nicht pauschal wird. +- Die Schlusszeile „Nachhaltig ist nicht das Möbelstück mit dem längsten Werbetext…" steht laut + korrigierter Fassung **innerhalb** der Vertiefung, nicht als Abschnitts-Claim. + +Ein Prüfskript hat jeden veröffentlichten Satz des Seeders gegen die Markdown-Datei gehalten: +0 Abweichungen, alle Überschriften der Vorlage vorhanden. Einzige bewusste Abweichung sind +typografische Anführungszeichen („…“ statt „…"). + +#### 1b · CABINET nach demselben Muster + +Für CABINET **lag keine Zulieferung vor**. Die Seite ist nach dem Vorbild der beiden abgestimmten +Texte von uns verfasst: Einleitung mit Claim, 8 Abschnitte, 3 davon mit Vertiefung, eigener +Abschlussblock „Ihr Raum. Persönlich geplant." und die Widget-Beschriftung „Persönliche +Schrankplanung vereinbaren". + +> ⚠️ **Bewusste Zurückhaltung:** Der Text beschreibt ausschließlich die eigene Arbeitsweise – +> Aufmaß, Planung, Innenausstattung, Fronten, Montage, Schnittstelle zur Tischlerei. Er enthält +> **keine Zahlen, Zertifizierungen oder Herstelleraussagen**, weil es dafür keine Quelle gibt. +> Die Rotpunkt- und Febrü-Seiten stützen solche Aussagen auf die Quellenhinweise der Zulieferung; +> für CABINET wäre das erfunden. **Der Text braucht Marcels Freigabe** (Punkt in Abschnitt 8). + +**Nebenbei korrigiert:** Febrüs Claim stand in `CmsBrandSeeder` und `b2in.php` weiter als +„Arbeiten, wo man gerne ist." – die Zulieferung schreibt „…gerne **bleibt**." + +#### 2 · „BEISPIEL"-Kennzeichnung entfernt + +Die Demobilder trugen den Vermerk „BEISPIEL – " in der Bildunterschrift, damit ein Stockmotiv +nicht versehentlich als echte Referenz durchgeht. Der Vermerk ist entfallen. + +Zwei Stellen waren nötig, weil die Bilder auf Vorschau und Live **bereits in der Datenbank +stehen**: + +- `DemoBrandGallerySeeder` – Bildunterschriften ohne Vermerk (für frische Installationen). +- `BrandGalleryCaptionNormalizerSeeder` **(neu)** – entfernt den Vermerk in vorhandenen Daten. + Fasst **ausschließlich den Text** an; Bild, Kategorie und Reihenfolge bleiben. Mehrfaches + Ausführen ist unbedenklich. + +> ⚠️ Die Unterscheidung hängt damit allein an der **Kategorie** (Badge „Realisiertes Projekt" / +> „Visualisierung"). Die Demobilder der Kategorie `project` sind Stockmotive und KI-Renderings – +> sie behaupten jetzt ohne den Vermerk, echte Referenzen zu sein. **Vor dem Livegang ersetzen +> oder auf „Inspiration" umstellen** (Punkt in Abschnitt 8). + +#### 3 · Hinweis zu Visualisierungen + +| Wo | Vorher | Jetzt | +|---|---|---| +| Markengalerie, Rubrik Inspirationen | „Diese Darstellungen sind Entwürfe und Visualisierungen – keine ausgeführten Projekte." | „Entwürfe und Visualisierungen. Sie zeigen gestalterische Möglichkeiten, noch bevor das erste Möbel steht." | +| Markengalerie, Einleitung | „…und Visualisierungen, die zeigen, was möglich ist." | „…und Visualisierungen, die zeigen, was in einem Raum möglich ist." | +| `/referenzen`, Seitenkopf | „…keine Entwürfe und keine Visualisierungen." | „Hier zeigen wir ausschließlich Arbeiten, die wir tatsächlich ausgeführt haben." | +| `/referenzen`, Projektliste | „…finden Sie bewusst getrennt davon auf den Markenseiten." | „…zeigen wir bewusst getrennt davon – auf den Markenseiten." | + +Die Trennung bleibt inhaltlich unverändert, sie wird nur nicht mehr über eine Verneinung +transportiert. Der Badge am Bild („Visualisierung") trägt die Unterscheidung ohnehin. + +#### 4 · Abschluss-CTA + +Der Block war eine einfarbige Fläche mit Überschrift, Text, Button und einem unterstrichenen +Textlink. Neu: + +- Eine schmale Linie über der Überschrift setzt den Abschluss ab. +- Hauptbutton weiß auf Markenfarbe, mit Pfeil, der beim Hovern mitgeht. +- Die Herstellerseite ist jetzt ein gleichwertiger Outline-Button statt eines Textlinks. +- Der Showroom steht als kleine Zeile mit Pin-Symbol darunter. + +**Nachgebessert (dritte Rückmeldung):** Nach dem Build stand der Abschluss hellgrau mit weißer +Schrift da. Ursache: `.variante-glass-flow section` in `shared-styles.css` färbt **jede** Sektion +in diesem Wrapper hell ein und ist mit `(0,1,1)` spezifischer als `.cta-band` mit `(0,1,0)`. Für +`.bg-secondary` und `.bg-accent` gibt es dort längst Ausnahmen – die neue Klasse brauchte +dieselbe. `/marken/{slug}` hängt in genau diesem Wrapper, deshalb fiel es erst dort auf. Der +Verlauf steht jetzt in `--cta-band-gradient` und wird von beiden Regeln benutzt, damit er nicht +doppelt gepflegt werden muss. Ein Test hält die Ausnahme fest. + +**Nachgebessert (zweite Rückmeldung):** Der erste Versuch legte zwei weiche Kreise (`blur-3xl`) +über das Hellblau – die wirkten als sichtbare Flecken, besonders der dunkle rechts unten. Ersetzt +durch einen durchgehenden Verlauf über die volle Breite: `.cta-band` in `shared-styles.css`, von +Anthrazit (`--primary-dark`) diagonal in das Dynamic Blue (`--secondary-dark`). Die Tiefe kommt +aus dem Verlauf selbst, die Kontur aus zwei Haarlinien – eine oben über die Breite, eine als +Auftakt über der Überschrift, beide zu den Seiten auslaufend. Buttons und Fußzeile dabei +zurückhaltender: dünnerer Rahmen, weicherer Schatten. + +> Der Verlauf liegt bewusst als CSS-Klasse vor und nicht als Utility-Kette im Blade: er arbeitet +> mit den Theme-Variablen und bleibt so über alle Themes hinweg stimmig. + +Die Textinhalte kommen unverändert aus dem CMS (`cta_title` / `cta_text`) – Punkt 4 der Liste war +inhaltlich bereits durch die neuen Texte erledigt („Ihre Küche. Persönlich geplant."). + +#### 5 · Akkordeons weicher (Nachreichung aus derselben Runde) + +Rückmeldung: Die Klappelemente springen zu schnell auf und zu, der Hover-Effekt ist zu stark. + +Ursache war `x-show` mit einer Opacity-Bewegung: Das Element nimmt sofort seine volle Höhe ein +und blendet nur den Inhalt ein – es sieht aus wie ein Sprung. Ersetzt durch eine Animation von +`grid-template-rows: 0fr → 1fr` über 500 ms mit `cubic-bezier(0.33, 1, 0.68, 1)`, die die +tatsächliche Höhe bewegt. Das Alpine-Collapse-Plugin ist in diesem Projekt nicht registriert; +diese Lösung kommt ohne neue Abhängigkeit aus. + +- Der zugeklappte Zustand steht **auch statisch im `class`-Attribut**, damit vor dem Start von + Alpine nichts aufgeklappt aufblitzt. Die Objekt-Schreibweise von `x-bind:class` entfernt ihn + beim Öffnen wieder. +- `aria-hidden` hängt am Zustand, weil der Inhalt jetzt dauerhaft im DOM steht. +- **Hover:** Die Flächenaufhellung (`hover:bg-muted/30`) ist raus. Geblieben ist ein feiner + Farbwechsel der Überschrift auf die Sekundärfarbe. Im FAQ entfällt zusätzlich der + Hintergrundwechsel am Icon-Kreis. +- Der Pfeil dreht in derselben Dauer und Kurve wie das Aufklappen, damit beides zusammenläuft. + +Betrifft **beide** Akkordeons – die Vertiefungen auf den Markenseiten und das FAQ; sie hatten +dasselbe Verhalten. + +#### 6 · Markenlogos (Zulieferung 03.09.2026) + +Grundlage: `dev/2026-08-28/markenlogos/` – CABINET und Rotpunkt als SVG, Febrü als PNG. Sie +liegen jetzt unter `public/img/assets/marken/` und hängen als `logo` an der jeweiligen Marke. + +| Wo | Vorher | Jetzt | +|---|---|---| +| Kopf der Markenseite | Schriftzug als `

` | Logo **anstelle** des Schriftzugs, im `

` | +| Kachel auf der Startseite | ohne Logo | Logo über Name und Claim | +| Block auf `/marken` | ohne Logo | Logo über Name und Claim | +| „Weitere Marken" am Seitenfuß | ohne Logo | Logo über Name und Claim | + +Das Logo sitzt **im** `

`, nicht daneben: So bleibt die Seitenüberschrift erhalten, den Text +liefert das `alt`-Attribut. Fehlt ein Logo, erscheint weiterhin der Schriftzug – ein Test hält +beide Wege fest. + +**Feste Box statt fester Höhe.** Die drei Logos haben sehr unterschiedliche Seitenverhältnisse +(Febrü 2,3:1, Rotpunkt 1,2:1). Mit einer reinen Höhenangabe hätte Febrü doppelt so breit gewirkt +wie Rotpunkt. Jedes Logo bekommt deshalb Höhe **und** Maximalbreite plus `object-contain` – die +Konvention aus der Sponsoring-Sektion. + +**Alle drei Dateien auf ihren Inhalt beschnitten.** Jede Zulieferung brachte leeren Rand mit, +und zwar unterschiedlich viel – dadurch wirkten die Logos trotz gleicher Box unterschiedlich +groß: + +| Logo | genutzte Höhe der Datei | nach dem Beschnitt | +|---|---|---| +| CABINET | **29 %** | 98 % | +| Rotpunkt | 70 % | 98 % | +| Febrü | 27 % | 100 % | + +CABINET ist ein 4:1-Schriftzug, der in einer nahezu quadratischen Fläche saß – im Seitenkopf +blieben davon rund 28 px sichtbare Höhe. Nach dem Beschnitt sind es 69 px bei voller Boxbreite, +also gut zweieinhalbmal so groß. Rotpunkt wächst um gut das Anderthalbfache und steht jetzt auf +derselben Höhe wie Febrü. + +Bei den beiden SVGs genügte dafür der `viewBox` (Ursprung und Maße auf die Tuschekante gesetzt, +plus 1 % Luft); die Pfade selbst sind unverändert. Der Febrü-PNG wurde tatsächlich beschnitten +und auf 760 px Breite gerechnet – 53 KB → 15 KB. Die Originale liegen unverändert in +`dev/2026-08-28/markenlogos/`. + +**Zweite Feinabstimmung nach Sichtung:** CABINET wirkte noch zu groß, Rotpunkt zu klein – +gewünscht waren −15 % und +20 % bei unverändertem Febrü. Rotpunkt füllte die Box bereits ganz +aus, konnte also nur über eine größere Box wachsen. Deshalb: + +- Alle vier Logo-Boxen **20 % höher** (Seitenkopf 96 → 115 px, Kacheln 44 → 53 px, `/marken` + 56 → 67 px). Rotpunkt füllt sie weiter aus und wächst damit um genau 20 %. +- **Febrü** gleicht das über 20 % Luft oben und unten in der Datei aus und rendert unverändert. +- **CABINET** bekommt 18 % Luft rechts – die Box begrenzt den 4:1-Schriftzug über die *Breite*, + nicht über die Höhe. Die Luft sitzt nur rechts, damit das Logo links bündig zum Text darunter + bleibt. + +Nachgerechnet an allen drei Stellen: CABINET 85 %, Rotpunkt 120 %, Febrü 100 %. + +> Die optische Abstimmung steckt bewusst in den **Zeichenflächen der Dateien** und nicht im +> Blade. So gilt sie an allen vier Stellen gleichzeitig, und die Boxgrößen bleiben eine reine +> Layoutentscheidung. Der Merksatz für neue Logos steht im Kopf von `BrandLogoSeeder`: knapp +> beschnitten rendert ein Logo in Rotpunkt-Größe, mit Rand entsprechend kleiner. + +**Nachziehen auf bestehenden Installationen:** `CmsBrandSeeder` überspringt vorhandene Marken, +trägt die Logos also nur bei einer frischen Installation ein. `BrandLogoSeeder` **(neu)** setzt +sie auf bereits angelegten Marken nach – nur das Feld `logo` und nur, wenn es leer ist. Ein +selbst hochgeladenes Logo bleibt damit stehen; mehrfaches Ausführen ist unbedenklich. + +#### Tests + +`BrandPageSectionsTest` und `BrandPageTest` erweitert: + +- CABINET rendert seine Abschnitte und seinen eigenen Abschlussblock. +- Widget-Beschriftung jetzt für alle drei Marken (Datensatz-Test). +- Rotpunkt: der zusammengeführte Abschnitt existiert, der alte ist weg, der doppelte Satz steht + genau einmal auf der Seite. +- Febrü: der Blaue-Engel-Satz behält seinen Produktbezug. +- Der Rückfall auf den generischen Abschlussblock funktioniert weiterhin – **beide Sprachen + müssen dafür leer sein**, sonst greift die Übersetzungs-Fallbackkette und der englische Text + erscheint auf der deutschen Seite. +- Demogalerien tragen keinen „BEISPIEL"-Vermerk mehr, dafür durchgehend eine Kategorie. +- Der Normalizer entfernt den Vermerk, ohne Bild, Kategorie oder Reihenfolge zu verändern. +- Jede Vertiefung rendert zugeklappt und mit der Höhen-Animation; die alte Sprung-Bewegung ist + weg. +- Weder Markenseite noch FAQ verwenden noch den Flächen-Hover. +- Der Abschlussblock trägt das Verlaufsband; die weichen Kreise sind weg. +- Die Ausnahme für `.variante-glass-flow` ist vorhanden – ohne sie steht der Abschluss hellgrau da. +- Das Logo steht im `

` der Markenseite; ohne Logo erscheint weiter der Schriftzug. +- Alle drei Logos erscheinen auf Startseite, `/marken` und den „Weitere Marken"-Kacheln. +- Die Dateien, auf die der Seeder zeigt, liegen tatsächlich unter `public/`. +- `BrandLogoSeeder` überschreibt kein selbst hochgeladenes Logo. +- Die SVGs unter `public/` sind die beschnittenen Fassungen, nicht die Zulieferungen (erkennbar + am `viewBox`-Ursprung, der nach dem Beschnitt nicht mehr `0 0` ist). + +`php artisan test --compact`: **873 grün** (3217 Assertions), Pint sauber, `npm run build:b2in` +gebaut. + +--- + +## 4. Nicht Bestandteil dieses Auftrags ⏸ + +Referenzbereich voll ausgebaut · 16:9-Display-Modul · Immobilien-CMS · Dubai-Map · +Markenrichtlinie Fahrzeug/Print · weitere frei anlegbare Rubriken · eigene Videolösung. +**Zusätzlich neu zu bewerten:** B2 (Magazin-CMS ans Frontend anschließen, ≈2–3 Std.) +und B8 (Passwort aus dem Seeder). + +--- + +## 5. Abhängigkeiten + +``` +AP1 (Struktur, Umtextung, B1/B3/B4/B5/B6/B7) + ├─ AP2 (Kernmarken, B9) ──┐ + ├─ AP4 (Display-Spiegelung)│ + ├─ AP5 (Referenzen) │ + ├─ AP6 (Sponsoring) ◄──────┤ braucht B9 + └─ AP3 (Termin-Widget) ◄───┘ Markenauswahl braucht CmsBrand +``` + +**B1 zuerst.** Solange der Seeder überschreibt, ist jede redaktionelle Arbeit flüchtig. + +--- + +## 6. Restrisiken & offene Punkte + +| Punkt | Stand | Umgang | +|---|---|---| +| **Rechtstexte** nennen weiter „Connecting Design and Property", Dubai/Lissabon, Supply-Chain | ⚠️ offen | Formulierung freigeben lassen, dann eintragen – nicht selbst getextet | +| **OG-Bild fehlt komplett** (`b2in-og-default.jpg` existiert nicht) | ⚠️ offen | Motiv wählen, ablegen | +| WhatsApp-Nummer (+49 151 51002992?) | offen | bestätigen lassen; ohne Nummer bleibt der Button unsichtbar | +| Logos, Stimmungsbilder, Galeriefotos der drei Marken | offen | Platzhalter stehen, Marcel trägt im CMS nach | +| Zwei neue Magazin-Beiträge sind Platzhalter | offen | gegenlesen lassen | +| Sponsoren-Kurztexte sind Entwürfe | offen | gegenlesen lassen | +| Vier Dubai-Beiträge bleiben im Magazin | bewusst | gehören zum Immobilienbereich, der bestehen bleibt | +| `ecosystem_stats` behauptet „1,7K+ Partner", „510+ Projekte", „98 %" | ruhend | Sektion wird auf keiner erreichbaren Seite gerendert – vor einer Wiederverwendung prüfen | +| B1/B2 Entscheidung | ✅ erledigt | Redaktionsschutz im Seeder, Magazin am Frontend | +| Logo mit Zusatz „Interior" | ✅ erledigt | Zulieferung eingetroffen und zugeschnitten | +| Sponsoring-Logos uneinheitlich | ✅ erledigt | Kacheln mit weißer Bühne, JPG ohne Transparenz fällt nicht mehr auf | + +**Spielregel aus der Umsetzungsliste:** eine Korrekturschleife je Bereich ist enthalten. +Weitere Runden vorher melden und beziffern. + +--- + +## 7. Definition of Done + +- [x] Alle Live-Seiten laden (`LiveSiteReviewTest` grün) +- [x] Marcel kann Marke anlegen, Logo per Picker setzen, Galerie pflegen – und die Änderung + erscheint auf der Website (Gegenprobe zu B2, getestet in `CmsBrandsIndexTest`) +- [x] Erneuter `CmsContentSeeder`-Lauf löscht keine redaktionellen Inhalte (Gegenprobe zu B1) +- [x] `./vendor/bin/pint` +- [x] `npm run build:b2in` (Build-Verzeichnis `build/b2in`) +- [x] `php artisan test --compact` vollständig grün — 810 Tests, 3037 Assertions +- [ ] Keine Treffer mehr für „Supply-Chain", „Local for Local", „Ökosystem", „Connecting Design" + auf den Live-Seiten. **Stand: 8 statt ursprünglich 90.** Davon + 5 in `/magazin` (die vier Dubai-Beiträge, bleiben bewusst), + 1 in `/privacy` und 2 in `/terms` (Rechtstexte, siehe Abschnitt 0, Schritt 2). + Erst abhakbar, wenn die Rechtstexte freigegeben sind. +- [ ] OG-Bild vorhanden +- [ ] Rechtstexte freigegeben und eingetragen + +--- + +## 7a. Vorschau-Instanz für die Abstimmung + +Für die erste Abstimmung läuft der neue Stand als **eigenständige Vorschau** unter +`preview.b2in.eu` – eigenes Verzeichnis, eigene `.env`, eigene Datenbank. Live bleibt unangetastet. + +**Ablauf Schritt für Schritt: `dev/2026-08-28/preview-deployment.md`.** +Dateien dafür: `dev/2026-08-28/deploy/b2in-interior-update.tar.gz` (geänderte Dateien plus +gebaute Assets) und `deploy/dateiliste.txt`. + +Zwei Punkte, die dabei leicht übersehen werden: + +- **Die Vorschau braucht `DOMAIN_B2IN=preview.b2in.eu` in ihrer `.env`.** Der + `ThemeServiceProvider` setzt `URL::forceRootUrl()` auf die konfigurierte Domain; ein unbekannter + Host fällt auf `APP_URL` zurück. Ohne diesen Eintrag rendert die Vorschau zwar, aber jeder + interne Link springt auf die Live-Seite. +- **Eigene Datenbank, keine geteilte.** `InteriorRelaunchCmsSeeder` überschreibt 23 CMS-Sektionen – + auf der Live-DB ausgeführt wäre der alte Stand weg. + +Neu dafür im Code: `config('app.indexable')`. Außerhalb von `APP_ENV=production` liefert jede Seite +`noindex, nofollow`, damit eine Vorschau nicht mit dem Original um Suchergebnisse konkurriert. +Über `SITE_INDEXABLE` einzeln steuerbar. + +--- + +## 8. Deployment-Checkliste (Livegang) + +> **Diese Liste beim Livegang von oben nach unten abarbeiten.** Sie wird mit jedem Arbeitspaket +> ergänzt – zuletzt aktualisiert nach AP1 und der Display-Umstellung. + +### 8.1 Vorher + +- [ ] **DB-Backup ziehen.** Die Seeder unter 8.2 schreiben in `flux_cms_contents`, + `display_versions` und `display_version_items`. +- [ ] `.env` prüfen: `SEED_ADMIN_NAME`, `SEED_ADMIN_EMAIL`, `SEED_ADMIN_PASSWORD` gesetzt + (neu seit B8 – vorher stand das Passwort im Repo). +- [ ] Wartungsfenster mit Marcel abstimmen: die Displays holen ihre Konfiguration zyklisch, + ein Neustart ist nicht nötig, aber ein sichtbarer Wechsel mitten im Ladengeschäft schon. + +### 8.2 Deployment + +```bash +php artisan migrate --force # legt u. a. cms_brands an (AP2) + +# 0. Kernmarken anlegen (CABINET, Rotpunkt Küchen, Febrü). +# Überschreibt nichts – bereits gepflegte Marken bleiben unberührt. +php artisan db:seed --class=CmsBrandSeeder --force + +# 1. Neue Texte ins CMS. Überschreibt GENAU die in AP1 geänderten Sektionen (seit 06.10. 15, die vier Netzwerk-Sektionen sind entfernt), +# alles andere bleibt unangetastet. +php artisan db:seed --class=InteriorRelaunchCmsSeeder --force + +# 2. Display-Branding auf das Interior-Logo vereinheitlichen (Logo je Theme + neuer Claim). +php artisan db:seed --class=DisplayInteriorBrandingSeeder --force + +# 3. Medien-URLs host-unabhängig machen. Ohne diesen Schritt zeigen vier veröffentlichte +# Playlists weiterhin auf b2in.test und laden auf dem Live-Display nicht. +php artisan db:seed --class=DisplayMediaUrlNormalizerSeeder --force + +# 4. Ausführliche Markenseiten (CABINET, Rotpunkt, Febrü). Schreibt NUR tagline, description, +# sections, widget_label, cta_title und cta_text – Bilder, Galerie, Leistungen und +# Reihenfolge bleiben unberührt. +php artisan db:seed --class=BrandPageTextSeeder --force + +# 5. Entfernt den Vermerk „BEISPIEL – “ aus vorhandenen Bildunterschriften (Nachtrag 5). +# Fasst nur den Text an, mehrfaches Ausführen ist unbedenklich. +php artisan db:seed --class=BrandGalleryCaptionNormalizerSeeder --force + +# 6. Markenlogos nachtragen. Setzt `logo` nur, wenn das Feld leer ist – ein im Admin +# hochgeladenes Logo bleibt stehen. Braucht public/img/assets/marken/ aus dem Archiv. +php artisan db:seed --class=BrandLogoSeeder --force + +# 7. Welten-Trennung (Nachtrag 7): Navigation und Inhalte der Immobilien-Welt anlegen, +# Interior-Navigation ohne „Immobilien“ und Magazin-Einleitung ohne Dubai-Bezug setzen. +# Die Migration ordnet die drei Dubai-Beitraege der Immobilien-Welt zu. +php artisan db:seed --class=WorldSplitCmsSeeder --force + +# 8. Vierte Kernmarke Otterpohl, Slug „tischlerei“ (Nachtrag 9 + 15) – legt nur an, was fehlt. +php artisan db:seed --class=CmsBrandSeeder --force + +# 9. Herkunfts-Sektion „Aus der Region gefertigt“ (Nachtrag 10) – legt die Sektion nur an, wenn sie +# fehlt. Entfernt aus einem bestehenden Eintrag nur den veralteten Schlüssel „locations“ (Nachtrag 11). +php artisan db:seed --class=OriginSectionCmsSeeder --force + +# 10. Fertigungsort je Kernmarke (Nachtrag 11) – setzt Ort, Entfernung und Rolle nur bei Marken, +# deren Ort noch leer ist. Die Migration davor legt die drei Spalten an. +php artisan db:seed --class=BrandOriginSeeder --force + +# 11. Otterpohl (Nachtrag 15 + 19): ersetzt den Platzhalter „Tischlerei“ durch Name, Claim, Texte, +# Leistungen, Abschnitte, Abschlussblock und Fertigungsort aus der Zulieferung v2 vom 24.09. +# Überschreibt auch einen Stand mit dem Text vom 17.09. Bild, Galerie und Reihenfolge +# bleiben; das Logo wird nur gesetzt, wenn es leer ist. +# Schritt 4 (BrandPageTextSeeder) bringt das Feedback vom 17.09. für CABINET, Rotpunkt +# und Febrü mit – er überschreibt dort wie dokumentiert die Textfelder. +php artisan db:seed --class=OtterpohlBrandSeeder --force + +# 12. Bilder für CABINET, Rotpunkt, Febrü (Nachtrag 16) und Otterpohl (Nachtrag 19): Titelbild nur, +# wenn keins gepflegt ist; Galeriebilder nur, wenn die Datei noch nicht in der Galerie steht. +# Die WebP-Dateien liegen unter public/img/assets/marken/{cabinet,rotpunkt,februe,otterpohl}/ +# im Repository. +php artisan db:seed --class=BrandImageSeeder --force + +# 13. Demobilder aus den Galerien entfernen (Nachtrag 17) – erkennt sie am Dateinamen des +# Demo-Seeders, echte Bilder bleiben. Nach Schritt 12 ausführen. +php artisan db:seed --class=DemoBrandGalleryCleanupSeeder --force + +# 14. WhatsApp-Business-Nummer 0521-98620100 (Nachtrag 18): ersetzt nur den Platzhalter +# „+49 151 00000000“, die falsche Nummer vom 23.09. (…98610020) oder ein leeres Feld – +# eine im Admin gepflegte andere Nummer bleibt. +php artisan db:seed --class=WhatsappNumberSeeder --force + +# 15. Projekttext auf der Startseite (Briefing 24.09., Punkt 7; Nachtrag 19): ersetzt in +# home/audience_switch nur den Satz „Mit deutscher Vertragssicherheit …“. Idempotent. +php artisan db:seed --class=AudienceSwitchProjectTextSeeder --force + +# 16. Abstimmung 01.10. (Nachtrag 20): Hero-Überschrift „Räume aus einer Hand.“ und zweiten +# Hero-Button entfernen (nur wenn noch die alte Überschrift im CMS steht), Projekttext mit +# Punkt (Schritt 15 erneut, idempotent), Otterpohl: Titelbild tauschen + Abschnitt „Montage“. +# Die Hinweisleiste ist per Standard aus (B2IN_ANNOUNCEMENT_BAR, nichts in die .env nötig). +php artisan db:seed --class=HomeHeroTextSeeder --force +php artisan db:seed --class=AudienceSwitchProjectTextSeeder --force +php artisan db:seed --class=OtterpohlBrandSeeder --force + +php artisan config:cache +php artisan view:clear + +# Assets. WICHTIG: `build:web` baut nur die vier Frontend-Themes, NICHT das Portal. +# Fehlt public/build/portal/manifest.json, liefert das Admin-Portal 500. +npm ci +npm run build:web +npm run build:portal +``` + +Danach prüfen, dass alle fünf Manifeste liegen: + +```bash +for d in b2in b2a stileigentum style2own portal; do + test -f "public/build/$d/manifest.json" && echo "$d ok" || echo "$d FEHLT" +done +``` + +### 8.3 Nachher prüfen + +- [ ] Startseite: Reihenfolge, Kernmarken-Anker `#marken`, Sponsoring-Logos +- [ ] Markenseite `/marken` – Aufbau, Merkmale, „Alle Marken ansehen" von der Startseite +- [ ] Kernmarken-Detailseiten `/marken/cabinet`, `/marken/rotpunkt`, `/marken/februe` – je mit + Logo im Kopf, ausführlichem Text, aufklappbaren Vertiefungen und eigenem Abschlussblock +- [ ] Logos erscheinen auf der Startseite, auf `/marken` und in den „Weitere Marken"-Kacheln +- [ ] Auf dem Smartphone prüfen: Das Terminanfrage-Widget trägt auf der Markenseite die längere + Beschriftung und darf keine Inhalte verdecken +- [ ] `/netzwerk`, `/interior`, `/partner`, `/service` leiten auf `/marken` +- [ ] Im Admin unter „Kernmarken" eine Marke ändern und prüfen, dass es auf der Seite ankommt +- [ ] Ankündigungsleiste erscheint (Dismiss-Key hängt seit B3 am Inhalt – wer die alte Leiste + weggeklickt hatte, sieht die neue wieder) +- [ ] Logo in Header, Footer **und** in einer Test-Mail +- [ ] Alte Magazin-URLs `/magazin/1` … `/magazin/5` leiten per 301 auf den Slug +- [ ] `/service` und `/portfolio` leiten um statt 500 zu liefern +- [ ] Terminanfrage-Widget: WhatsApp-Button oben, Link führt auf `wa.me/4952198620100`, darunter + „oder per Formular“ und das Formular +- [ ] Interior-Seiten laufen in „Neu“ (``), kein Farb-Schalter; + `/immobilien` unverändert blau +- [ ] `/entwurf`: Gold-Logo in Kopf und Fuß, Hero mit Goldkante und laufender Slideshow (Marken- + Titelbilder), keine Ankündigungsleiste, ein Button im Hero, Termin-Widget unten rechts +- [ ] `/marken/tischlerei`: Text v2 (drei Abschnitte, acht Leistungen, Abschluss „Das Ganze statt + nur das Einzelne“), Werkstatt-Titelbild, Galerie „Referenzen und Einblicke“ mit den Badges + „Realisiertes Projekt“ und „Aus der Werkstatt“ +- [ ] **Die vier Displays sichten:** „Display 4 – Innen", „Kundenstopper", „Display 2", + „Test-Display". Besonders das Modul „Cabinet-Influencerin" – dessen Video lag auf + `b2in.test`. Ob die Datei auf dem Live-Server überhaupt existiert, ließ sich lokal nicht + prüfen; fehlt sie, muss sie nachgeladen werden. +- [ ] Search Console: die alten Magazin-URLs waren indexiert, die 301 fängt sie ab +- [ ] Search Console: `/netzwerk` war indexiert und leitet jetzt auf `/marken` + +### 8.4 Zurückrollen + +Die Seeder sind nicht umkehrbar. Rückweg ist das Backup aus 8.1 – für die betroffenen Tabellen +genügt ein selektives Zurückspielen von `flux_cms_contents`, `display_versions` und +`display_version_items`. + +### 8.5 Nicht vergessen + +- [ ] Altes Seeder-Passwort rotieren, falls es anderswo benutzt wird – es steht weiterhin in der + Git-Historie (B8). +- [ ] WhatsApp-Nummer bestätigen lassen – erst dann erscheint der Button im Terminanfrage-Widget + und in den CTA-Blöcken (CMS: `global.contact.whatsapp`). +- [ ] `CONTACT_FORM_RECIPIENT` in der Live-`.env` prüfen: dorthin gehen auch die Terminanfragen + aus dem Widget. +- [ ] Datenschutzerklärung um einen Absatz zum WhatsApp-Link ergänzen, sobald die Nummer steht. +- [ ] **Rechtstexte:** AGB (`b2in_legal.php` Zeile 117) und Datenschutzerklärung (Zeile 221) + nennen weiter „Connecting Design and Property", Dubai/Lissabon und Supply-Chain-Management. + Von Marcel prüfen lassen, dann eintragen. +- [ ] Prüfen, welches Display auf der Website laufen soll (`referenzen.display_feed.display_id`). + Ohne Eintrag zeigt die Seite das erste aktive Display mit veröffentlichter Playlist. +- [ ] Die zwei neuen Magazin-Beiträge von Marcel gegenlesen lassen – sie sind Platzhalter. +- [ ] **Herstellerfreigabe für die Markentexte** (Rotpunkt, Febrü) einholen – so verlangt es die + Zulieferung selbst. Beide Fassungen nennen zusätzlich die EmpCo-Regeln (ab 27.09.2026): + die Umweltaussagen vorher rechtlich prüfen lassen. +- [ ] **CABINET-Seitentext von Marcel freigeben lassen.** Für CABINET lag keine Zulieferung vor; + der Text ist von uns nach dem Muster der beiden abgestimmten Seiten verfasst und beschreibt + bewusst nur die eigene Arbeitsweise (Nachtrag 5). +- [ ] **Febrü, Vertiefung „Konkrete Standards statt allgemeiner Versprechen“:** Der Blaue Engel + gilt nur für ausgewählte Tischsysteme und Stauraummöbel. Beim Redigieren darf daraus keine + pauschale Aussage über das Gesamtsortiment werden. +- [ ] **Demobilder der Rubrik „Realisiertes Projekt" ersetzen.** Der Vermerk „BEISPIEL" ist auf + Kundenwunsch entfallen (Nachtrag 5); die Stockmotive und KI-Renderings aus + `DemoBrandGallerySeeder` geben sich damit als echte Referenzen aus. Entweder durch echte + Projektfotos ersetzen oder auf „Inspiration" umstellen. +- [ ] **Rotpunkt, Vertiefung „Zahlen, Zertifizierungen und Raumklima“:** Die Aussage zur jährlich + erhaltenen Waldfläche von ungefähr 50 Fußballfeldern darf laut Zulieferung nur mit + ausdrücklicher Bestätigung veröffentlicht werden. Ohne Bestätigung den Absatz entfernen + (Admin: Kernmarken → Rotpunkt → Abschnitte → Vertiefung). +- [ ] OG-Bild anlegen: das Layout verweist auf `img/assets/b2in-og-default.jpg`, die Datei + existiert nicht. Bis dahin zeigt jede geteilte Seite eine Vorschau ohne Bild. +- [ ] Sponsoring-Logo `tc-bad-waldliesborn-horn` liegt nur als JPG vor, also ohne transparenten + Hintergrund. Falls Marcel eine PNG-Variante hat, austauschen. +- [ ] Markengalerien vor dem Livegang durchsehen: jedes Bild muss in der richtigen Rubrik stehen. + Ohne gesetzte Kategorie erscheint ein Bild als „Visualisierung" – für ein echtes Projektfoto + also bewusst „Realisiertes Projekt" wählen. + +--- + +## Nachtrag 6 · Arbeitsplan 14.09.2026, Punkt 1.1: Farbwelt und Logo (14.09.2026) + +Grundlage: `umsetzungen-14-09-2026.md` (freigegebener Umfang Phase 1) und die Shop-Screenshots +unter `_b2in_interior_shop/screenshots/web/` als optische Richtung: warme Creme-/Sandflächen, +dunkles Tannengrün als Kontrast, Serifen-Überschriften, ruhige Flächen ohne Leuchteffekte. + +### Zwei Welten auf einem Themensystem + +`theme-b2in.css` definiert die **Interior-Welt als Standard** auf `:root` und die +**Immobilien-Welt** als Override unter `.world-immobilien` – dieselben Token-Namen, andere Werte. +Das Layout setzt die Welt als Body-Klasse (`world-interior` / `world-immobilien`), ermittelt +über `b2in_world()` in `app/helpers.php`: Immobilien sind alle Routen `immobilien*` und +`dev.immobilien*`, alles andere ist Interior. Bestehende Sektionen mussten dafür nicht angefasst +werden – sie nutzen bereits die Tokens (`text-secondary`, `bg-accent`, `cta-band` …). + +| Token | Interior (neu) | Immobilien (wie bisher) | +|---|---|---| +| `--background` | Creme `#f7f4ef` | helles Beige `#f5f4f2` | +| `--foreground` | Anthrazit `#2d2926` | `#2a2a2a` | +| `--primary` (Buttons, dunkle Sektionen, Wortmarke) | Tanne `#202c2b` | Anthracite `#2b3f51` | +| `--secondary` (Akzent, Hervorhebungen, Logo-Bogen) | Ocker `#d39e46` | Dynamic Blue `#20a0da` | +| `--accent` (Sektionswechsel) | Sand `#d9cbbf` | helles Grau | +| `--clay` (neu) | Clay `#a38f82` | gedämpftes Blau | +| `--footer-*` (neu) | Sand mit Tanne | Anthracite mit Weiß | +| `--cta-band-end` (neu) | helleres Tannengrün (Ton in Ton, Korrektur 15.09.) | Dynamic Blue | +| `--font-secondary` (Überschriften) | EB Garamond (liegt lokal vor) | IBM Plex Sans | + +**Kontrast-Entscheidungen:** Ocker trägt keinen hellen Text (Creme auf Ocker ≈ 2,5:1). Deshalb +ist Ocker in der Interior-Welt Akzent, kein Flächenton unter Text: der Kontakt-Button im Kopf +und der zweite Hero-Button laufen jetzt auf Tanne (gefüllt bzw. als Kontur, `.world-interior +.btn-secondary-accent`), der Abschluss-CTA der Startseite liegt auf dem Abschlussband +(`cta-band`) mit weißem Button – wie auf den Markenseiten. **Korrektur 15.09.:** Der Verlauf +Grün → Ocker wirkte unharmonisch; das Band läuft jetzt Ton in Ton in ein helleres Tannengrün aus, +Ocker sitzt nur noch in der Haarlinie oben. Hervorgehobene Wörter im Bandtitel („Ihr nächster +Schritt") tragen im CMS `text-primary` und waren auf dem dunklen Band unlesbar – in beiden +Welten. `.cta-band .text-primary` setzt sie auf den Akzent der Welt (Ocker bzw. Blau). Ocker-Text +im Footer auf Sand nutzt die tiefe Stufe `--secondary-deep`. `--muted-foreground` ist ein +abgedunkelter Clay, damit Fließtext auf Creme lesbar bleibt (Clay pur ≈ 2,9:1). + +**Aufgeräumt:** Die Glow- und Schattenklassen in `shared-styles.css` (`glow-*`, `shadow-elegant`, +`shadow-premium`, Button-Hover im Glass-Flow) hatten ein festes Blau (`rgba(0,136,204)`, +`hsla(199 …)`) – jetzt hängen sie am Akzent der Welt. Karten im Glass-Flow nutzen `--card` +statt festem Weiß. + +### Logo je Welt + +Zulieferung 07.09.2026 (`dev/2026-08-28/logos/`): das Interior-Logo in Tanne mit Ocker-Bogen +(positiv) bzw. Creme mit Ocker-Bogen (negativ) und das B2In-Logo ohne Zusatz mit blauem Bogen. +Beide Familien sind auf den Inhalt beschnitten (Interior `viewBox="152.5 94.5 289 228"`, +B2In `viewBox="4.5 2 301 176"`) und liegen als SVG und PNG (240 px hoch) unter +`public/img/logos/`; die Interior-Varianten zusätzlich unter `public/_cabinet/assets/` für das +Display. `ThemeHelper::getLogoPath($type, $world)` liefert die Datei je Welt. + +Header und Footer halten Welt und Logo-Pfad in `mount()` fest, weil ein späterer +Livewire-Request keine Seitenroute mehr trägt. Der Interior-Footer liegt auf Sand und zeigt das +**positive** Logo; der Immobilien-Footer bleibt dunkel mit dem negativen. + +**Favicons** (`public/favicon/`, alle Größen plus `favicon.ico`) neu aus der Wortmarke in +Tanne/Ocker erzeugt; `theme-color` auf Creme. Die bisher tote Referenz +`img/favicons/b2in-favicon.ico` (`ThemeHelper::getFaviconPath()`) existiert jetzt. +Mail-Kopf auf Tanne. + +### Welten-Wechsler + +Kopfzeile (Desktop rechts neben dem Sprachwechsel, mobil als erster Block im Menü) und Footer +tragen einen Umschalter „Interior | Immobilien" (`b2in_worlds()`, Labels in `ui.php` de/en). +Die aktive Welt ist gefüllt und trägt `aria-current="page"`. + +### Tests + +`tests/Feature/ColorWorldsTest.php` (neu, 14 Fälle): Body-Klasse und Logo je Welt für +Startseite, `/immobilien`, Detailseite und weitere Seiten; `ThemeHelper::getLogoPath()` je Welt +und für Fremd-Themes; Dateien und Farbwerte beider Logo-Familien; Wechsler in Kopf und Fuß mit +korrekter Markierung; Tokens im Theme; kein festes Blau mehr in den Effekten. +`HomePageStructureTest` an den neuen Zuschnitt und den Sand-Footer angepasst. + +### Offen nach diesem Nachtrag + +- **Freigabe Marcel:** Farbwerte sind laut Plan „blockierend für 1.1" und wurden wie geliefert + umgesetzt. Die **Serife für Überschriften** (EB Garamond) ist eine Ableitung aus den + Shop-Screenshots, kein Planpunkt – ein Token in `theme-b2in.css`, bei Ablehnung in einer Zeile + zurück auf IBM Plex Sans. +- **Bildwelt:** Die Farbwelt wirkt erst mit warmem Bildmaterial (Hero, Kacheln) vollständig; die + Bestandsbilder aus der Immobilien-Zeit sind kühl. Zulieferung weiterhin offen. +- **Display-Player:** nutzt die neuen Interior-Dateien automatisch; der Theme-Scrim im Player + ist weiter neutral dunkel, keine Anpassung an Tanne vorgenommen. +- Nächste Schritte laut Reihenfolge im Arbeitsplan: 1.2 Tischlerei-Markenseite (blockiert durch + Name, Logo, Bilder), 1.3 Herkunfts-Sektion (blockiert durch CABINET-Klärung), 1.4 Akkordeon + und Widget-Beschriftung. + +--- + +## Nachtrag 7 · Saubere Trennung der beiden Welten (14.09.2026) + +Abgestimmt mit Kevin am 14.09.: Nach der Farbwelt-Umstellung zeigte die Immobilien-Welt noch die +Interior-Navigation, und das Magazin mischte Dubai- und Einrichtungsthemen. Entscheidung: **jede +Welt hat ihre eigene Navigation, der Welten-Wechsler ist die einzige Brücke.** Umfang ist eine +Erweiterung zu 1.1 des Arbeitsplans (nicht im freigegebenen Plan enthalten, Aufwand ca. 6–9 h). + +### Was je Welt getrennt ist + +| Bereich | Interior | Immobilien | +|---|---|---| +| Navigation (CMS) | `global.header`: Home · Marken · Referenzen · Magazin · Über B2in | `global.header_immobilien`: Immobilien · Projekte · Magazin · Über B2in | +| Ankündigungsleiste (CMS) | `global.announcement_bar`: aktuelles Interior-Thema (Rotpunkt) | `global.announcement_bar_immobilien`: aktuelles Projekt (Azizi Creek Views 4, wie vor dem Relaunch), eigener Dismiss-Schlüssel | +| Magazin | `/magazin` – nur Interior-Beiträge | `/immobilien/magazin` – nur Immobilien-Beiträge | +| Über uns | `/about` (unverändert) | `/immobilien/ueber-b2in` – Inhalte aus der Zeit vor dem Relaunch, leicht angepasst, als „B2in Immobilien" gekennzeichnet, Claim „Connecting Design and Property" | +| FAQ | `/faq` (unverändert) | `/immobilien/faq` – Fragen zu Investment, Reisen, Steuern, Einrichtung nach dem Kauf | +| Kontakt | `/contact` (unverändert) | `/immobilien/kontakt` – gleiche Seite, eigener Einstieg und eigene Betreffe (Overlay `contact_form_immobilien` über `contact_form`), Mail-Betreff „Kontaktanfrage B2in Immobilien: …"; Kontakt-Button im Kopf und CTAs der Immobilienseite zeigen dorthin | +| Footer-Links | wie bisher | FAQ, Über uns und Magazin zeigen auf die Immobilien-Seiten | +| Terminanfrage-Widget | Anliegen offen | Anliegen „Immobilien" vorbelegt, Mail-Betreff „Terminanfrage B2in Immobilien" | + +**Gemeinsam bleiben** Rechtstexte und die Cookie-Seiten. (Kontakt war zunächst gemeinsam, seit 15.09. je Welt.) + +### Magazin: Beiträge haben eine Welt + +Neues Feld `world` (`interior` | `immobilien`) an `cms_articles`, im Admin als Auswahl „Welt" +mit Badge in der Liste. Die Migration ordnet die drei Dubai-Beiträge (Escrow, Al Jaddaf, +Turnkey) der Immobilien-Welt zu; der Supply-Chain-Beitrag bleibt laut Abstimmung unter B2B in +Interior. `CmsArticle::forFrontend($world)` filtert, Lang-Fallback inklusive. + +Die **Detailseite behält ihre URL** (`/magazin/{slug}`, SEO und 301-Weiterleitungen bleiben), +rendert aber in der Welt ihres Beitrags: die Route setzt die Welt per `b2in_world_set()` vor dem +Rendern, weil Kopf- und Fußzeile sie in `mount()` festhalten. Verwandte Beiträge und der Rückweg +zur Liste bleiben in derselben Welt. + +### Technik + +- `b2in_world()` prüft zuerst einen expliziten Override (`b2in_world_set()`), dann die Route. +- Header: Navigation je Welt; der aktive Pfad wird in `mount()` festgehalten (vorher ging die + Markierung bei jedem Livewire-Request verloren) und nur der spezifischste Eintrag ist aktiv + (`/immobilien/magazin` markiert „Magazin", nicht „Immobilien"). +- `AboutHero`, `OurStory`, `OurValues` nehmen jetzt wie `ImageBreak` einen Sektionsschlüssel. +- Kontaktformular: Betreffe in drei Gruppen (Interior · Immobilien · B2in, `form.subject_groups`). + Die Kernmarken aus dem CMS stehen automatisch am Anfang der Interior-Gruppe, die Welt der Seite + bestimmt, welche Gruppe oben steht. Betreff wird jetzt gegen die Liste validiert. Ältere + CMS-Stände mit flacher `subjects`-Liste funktionieren weiter (Fallback ohne Gruppen). +- Abschluss-CTA („Ihr nächster Schritt") je Welt: `global.cta_section_immobilien` mit eigenem Text + und Link auf `/immobilien/kontakt`; greift automatisch auf allen Seiten der Immobilien-Welt. +- Neue CMS-Sektionen (alle im Admin pflegbar): `header_immobilien`, `announcement_bar_immobilien`, `contact_form_immobilien`, `cta_section_immobilien`, `magazin_list_immobilien`, + `faq_immobilien`, `immobilien_about_hero`, `immobilien_our_story`, + `immobilien_about_image_break`, `immobilien_our_values`. +- `WorldSplitCmsSeeder` legt die neuen Sektionen an und setzt **zwei** Interior-Sektionen aus + den Lang-Dateien zurück: `header` (ohne „Immobilien") und `magazin_list` (ohne Dubai-Bezug). + Lokal ausgeführt, beim Deployment mit erledigen (Abschnitt 8). + +### Tests + +`tests/Feature/WorldSplitTest.php` (neu, 18 Fälle): Navigation je Welt inkl. aktiver Markierung, +Footer-Links, beide Magazinlisten, Detailseite in der Welt des Beitrags, verwandte Beiträge, +CMS-Beiträge je Welt, Editor-Auswahl und -Validierung, Über-uns- und FAQ-Seite der +Immobilien-Welt, Widget-Vorbelegung. `MagazinPageTest`, `HomePageStructureTest`, +`LiveSiteReviewTest` und `CmsAdminTest` an die Trennung angepasst. + +### Offen + +- Navigationspunkt „Projekte" zeigt auf den Anker `#projekte` der Immobilienseite. +- Die Immobilien-Seite selbst nutzt weiter feste Farben (`bg-zinc-950`, Status-Badges in + emerald/sky/amber) außerhalb des Token-Systems – funktioniert in der blauen Welt, ist aber + nicht themenfähig. +- `LiveSiteReviewTest` prüft die Startseite noch auf das Wort „Netzwerk" (steht im Fließtext); + kein Navigationspunkt. + +--- + +## Nachtrag 8 · Terminanfrage-Buttons öffnen das Widget (15.09.2026) + +Auf der Seite gibt es mehrere Sektionen mit „Termin anfragen"-Buttons (Hero, Weiche, Abschluss-CTA, +`/marken`-Abschluss, Markenseiten, Referenzen, Immobilienseite). Bisher führten sie auf die +Kontaktseite. Jetzt öffnen sie das schwebende Terminanfrage-Widget; von einer Markenseite aus ist +die Marke im Anliegen vorbelegt. Die Anliegen-Auswahl des Widgets bleibt wie sie ist (Marken plus +feste Einträge, keine Gruppen – die gibt es nur auf der Kontaktseite). + +**Wie:** Blade-Komponente ``. Zeigt `href` auf `/contact` oder +`/immobilien/kontakt`, trägt der Link `data-open-appointment` (und `data-appointment-topic`); ein +Klick-Delegat in `resources/js/app.js` fängt ihn ab und feuert `open-appointment`, das Widget +öffnet sich, übernimmt das Anliegen (nur wenn es in der Auswahl existiert) und fokussiert das +Namensfeld. Ohne JavaScript bleibt es ein normaler Link; zeigt der CMS-Link woandershin, bleibt +er ein gewöhnlicher Link. Der Kontakt-Button im Kopf bleibt bewusst ein Link zur Kontaktseite. + +**Formularfelder** in Widget und Kontaktformular tragen jetzt die tokenbasierten Klassen +`.form-field` / `.form-select` (shared-styles.css): Kartenton als Grund, Fokusring im Akzent der +Welt, eigener Chevron und lesbare Gruppenüberschriften in der Betreff-Auswahl – statt +Tailwind-Grau. + +**Tests:** `tests/Feature/AppointmentTriggerTest.php` (9 Fälle). + +--- + +## Nachtrag 9 · Tischlerei als vierte Kernmarke, Platzhalter (15.09.2026) + +Arbeitsplan 14.09., Punkt 1.2. Name, Logo, Basisinfos und Bilder fehlen noch (blockierend laut +Plan), Platzhalter sind ausdrücklich erlaubt. Die Marke ist deshalb als **Denkanstoß** angelegt: + +- **Marke `tischlerei`** im `CmsBrandSeeder` (vierter Eintrag, wird bei bestehenden Marken nicht + doppelt angelegt). Inhalte entlang der Ausrichtung aus dem Plan – Aufbau, Sonderlösungen, + Veredelung, Maßarbeit; ergänzt CABINET und Rotpunkt, steht nicht daneben; Werkstatt in + Ostwestfalen ohne Nennung des Partnerbetriebs. Drei Abschnitte mit Vertiefungen, eigener + Abschlussblock, Widget-Beschriftung „Persönliche Beratung zur Maßarbeit vereinbaren“. +- **Ohne Logo**: der Seitenkopf zeigt den Schriftzug, Kacheln kommen ohne Logo aus. Kein + Stimmungsbild, die Kacheln zeigen den Platzhalter. +- **Kachelraster** der Startseite: `sm:grid-cols-2` – 2×2 auf allen Breiten. Vier nebeneinander + war kurz drin, wurde aber als zu schmal verworfen (Abstimmung 15.09.). „Weitere Marken“ auf den + Detailseiten: drei nebeneinander ab `lg`. +- Automatisch dabei: `/marken`, Anliegen im Widget, Betreff-Gruppe Interior der Kontaktseite. +- Seitentitel von `/marken` nennt die vierte Marke. +- Lang-Fallback (`core_brands.brands`) um die Tischlerei ergänzt. + +**Lokal ausgeführt:** `php artisan db:seed --class=CmsBrandSeeder` (legt nur die fehlende Marke an). +Beim Deployment mit erledigen (Abschnitt 8). + +**Was Marcel nachträgt (alles im Admin):** Name der Marke, Logo, Stimmungsbild, echte Texte – +die Platzhalter sind bewusst so geschrieben, dass sie ohne Änderung nicht live gehen sollten +(„Tischlerei“ ist kein Markenname). Slug `tischlerei` bleibt stabil, auch wenn der Name kommt. + +**Tests:** `tests/Feature/FourthBrandTest.php` (7 Fälle). + +--- + +## Nachtrag 10 · Herkunfts-Sektion „Aus der Region gefertigt“ (15.09.2026) + +Arbeitsplan 14.09., Punkt 1.3. Die Klärung „CABINET Hersteller oder Vertrieb“ kam am 15.09. von +Kevin nach seinem Verständnis: CABINET **fertigt selbst in Köln** und **vertreibt über die +CABINET Stores**; der Store Bielefeld ist einer davon. Dort laufen Beratung und Planung für +Bielefeld und Umkreis, gefertigt wird in Köln, aufgebaut beim Kunden – und hier kommt die +Tischlerei ins Spiel, die den Aufbau übernimmt und Sonderwünsche umsetzt. ⚠️ **Von Marcel +bestätigen lassen** (bietet CABINET selbst Aufbau an? Läuft der Aufbau immer über die eigene +Tischlerei?). Die Sektion ist so formuliert, dass sie diesem Verständnis folgt. + +### Aufbau + +- **Neue Sektion `origin_section`** (`OriginSection`, CMS-Gruppe `home`), eingebunden auf der + Startseite zwischen Kernmarken und „Gebaut auf Expertise“ sowie auf `/marken` zwischen + Markenübersicht und „Mehr als Marken: unser Netzwerk“. Anker `#herkunft`. +- **Schematische Karte** (SVG, ab `md`): Bielefeld als Drehscheibe in Ocker, die vier Standorte + als Punkte in Tanne mit gestrichelten Speichen und Entfernungsangabe, gestrichelte Ellipse + „Ostwestfalen“ um die drei OWL-Standorte. Keine Geografie, nur Richtung und Entfernung. + Positionen und Beschriftungsseite lagen zunächst im Inhalt; seit Nachtrag 11 stehen sie im + Code, die Standorte kommen aus den Marken. Unter `md` entfällt die Karte, die Kacheln tragen alles. +- **Vier Standort-Kacheln** (2×2 ab `sm`): Stadt, Marke, Rolle, Entfernung „von Bielefeld“ und + Link „Zur Marke“. Ursprünglich lagen die Standorte im Sektions-JSON, der Link kam aus den + veröffentlichten Marken. Seit Nachtrag 11 gilt: Standort = Marke, siehe dort. +- **Ablauf-Block „Gefertigt in Köln, geplant in Bielefeld“**: drei nummerierte Schritte am + Beispiel CABINET (Beratung und Planung in Bielefeld → Fertigung in Köln → Aufbau vor Ort mit + Sonderwünschen aus der Tischlerei). Das ist die saubere Trennung „gefertigt“ / „vertrieben“ + aus dem Plan. Entfällt, wenn `steps` im CMS leer ist. +- **Entfernungen** gerundet, Straße ab Bielefeld Mitte: Herford rund 20 km, Bünde rund 30 km, + Rheda-Wiedenbrück rund 35 km, Köln rund 200 km. Bei Bedarf im Admin anpassen. +- Styles `.origin-map-*` in `shared-styles.css` (Token-basiert, in beiden Welten gültig, die + Sektion liegt aber nur in der Interior-Welt). Build `npm run build:b2in` ausgeführt. + +**Lokal ausgeführt:** `php artisan db:seed --class=OriginSectionCmsSeeder` (legt nur an, was +fehlt, überschreibt nichts). Beim Deployment mit erledigen (Abschnitt 8, Schritt 9). + +**Offen:** Bestätigung des CABINET-Ablaufs durch Marcel; Wortlaut der Tischlerei-Kachel folgt +dem Platzhalter aus Nachtrag 9 und wandert mit dem echten Markennamen. + +**Tests:** `tests/Feature/OriginSectionTest.php` (12 Fälle, mit Nachtrag 11 umgeschrieben). + +--- + +## Nachtrag 11 · Standorte an der Marke, Marken in der Sidebar (15.09.2026) + +Prüfung der Inhaltspflege im Admin auf Kevins Frage, ob Marken wie das Magazin einen eigenen +Punkt brauchen. Ergebnis: **Die Markenverwaltung gab es schon** („Kernmarken verwalten“, AP2), +sie war nur nicht in der Sidebar verlinkt – erreichbar allein über die Kachel auf der +CMS-Übersicht. Die Herkunfts-Sektion aus Nachtrag 10 lag dagegen komplett im generischen +Inhalte-Editor, inklusive der Kartenkoordinaten `x`/`y` und der Beschriftungsseite als nackte +Felder. Das war für Marcel nicht pflegbar. Abgestimmt mit Kevin: **Weg 1**, Standort an die Marke. + +### Was sich ändert + +- **Sidebar:** neuer Eintrag „Marken“ unter CMS → Website-Inhalte, zwischen Projekte und + Magazin. Die Gruppe klappt auf der Markenseite jetzt auch auf. +- **Drei neue Felder je Marke** (Migration `add_origin_to_cms_brands_table`, übersetzbar wie die + übrigen Textfelder): `origin_city` (Fertigungsort), `origin_distance` (Entfernung als Text, + „rund 30 km“), `origin_role` (ein Satz zur Rolle). Im Admin als Block „Fertigungsort“ unter + den Stammdaten, mit Hinweis: ohne Ort erscheint die Marke nicht in der Sektion. +- **`OriginSection` liest die Standorte aus `CmsBrand::forFrontend()`**: nur veröffentlichte + Marken mit Ort, in der Reihenfolge der Marken. Eine unveröffentlichte Marke fällt damit ganz + heraus (vorher blieb ihr Standort ohne Link stehen – jetzt gibt es keinen Standort ohne + Marke mehr). Der Link „Zur Marke“ hängt an `has_detail_page`, der Text `link_text` liegt + einmal auf Sektionsebene statt je Standort. +- **Kartenpositionen im Code:** `OriginSection::MAP_POSITIONS`, je Slug `x`/`y`/`label`. Eine + neue Marke mit Ort, aber ohne Position, erscheint in den Kacheln, nicht in der Karte – dafür + muss ein Entwickler eine Position ergänzen. Das ist gewollt: die Karte ist Zeichnung, kein + Inhalt. +- **Sektions-JSON `home/origin_section`** enthält nur noch Überschrift, Untertitel, Alt-Text, + Regionslabel, Entfernungs-Suffix, Drehscheibe, Link-Text und Ablauf-Block. Der alte Schlüssel + `locations` wird von `OriginSectionCmsSeeder` aus einem bestehenden Eintrag entfernt, damit er + im Inhalte-Editor nicht mehr als Pflegefeld auftaucht (idempotent, sonst weiterhin nur + anlegen-wenn-fehlt). +- **Lang-Fallback:** die vier Einträge in `core_brands.brands` tragen jetzt `slug` und die drei + Herkunftsfelder, damit die Sektion auch ohne gepflegte Marke steht – dann ohne Links, wie die + Kacheln der Kernmarken. +- **Seeder:** `CmsBrandSeeder` bringt die Herkunft für frische Installationen mit; neu + `BrandOriginSeeder` trägt sie bei bestehenden Marken nach, nur wenn der Ort leer ist (Muster + wie `BrandLogoSeeder`). Keine Dubletten möglich, beide arbeiten über den Slug. +- Ohne Marke mit Ort bleiben Überschrift und Ablauf-Block stehen, Karte und Kacheln entfallen. + +**Lokal ausgeführt:** `php artisan migrate`, `db:seed --class=BrandOriginSeeder` (4 gesetzt), +`db:seed --class=OriginSectionCmsSeeder` (`locations` entfernt). Beim Deployment: Abschnitt 8, +Schritte 9 und 10, die Migration läuft mit `migrate` vorweg. + +**Offen:** wie Nachtrag 10 (Bestätigung des CABINET-Ablaufs durch Marcel). Der generische +Inhalte-Editor bleibt für die übrigen Sektionen ohne Schema; wo Listen mit technischen Feldern +auftauchen, ist derselbe Weg möglich: Daten an ein Modell hängen, Darstellung in den Code. + +**Tests:** `tests/Feature/OriginSectionTest.php` (15 Fälle), drei neue Fälle in +`tests/Feature/Admin/Cms/CmsBrandsIndexTest.php` (Herkunft je Sprache speichern, Ort leeren, +Sidebar-Link). + +--- + +## Nachtrag 12 · Inhalte-Editor: Seitenbaum und Vorschau (15.09.2026) + +Kevins Rückmeldung nach der Prüfung des CMS: der Punkt „Inhalte“ zeigt Datenbank-Gruppen +alphabetisch, ohne Bezug zur Seite, mit JSON-Schlüsseln als Beschriftung – zu abstrakt für +Marcel. Abgestimmt: Stufe 1 (Seitenbaum, Klartext) und Stufe 2 (Vorschau im Rahmen) umsetzen, +Stufe 3 (Stift-Markierungen in der Vorschau, die den Editor öffnen) erst nach Marcels Feedback. + +### Stufe 1 · Seitenbaum statt Gruppen + +- **Registry `config/cms_pages.php`:** je Seite (Startseite, Marken, Referenzen, Magazin, Über + uns, Kontakt, FAQ, „Auf jeder Seite“, Immobilien-Welt, Rechtliches) die Sektionen in der + Reihenfolge, wie sie auf der Website stehen, mit Titel, einem Satz Beschreibung, Pfad und + Sprungmarke. Dazu ein Wörterbuch `field_labels` (`button_text` → „Button-Beschriftung“, + `x`/`y` → „Position (Entwickler)“ …), je Sektion überschreibbar über `fields`. +- **`App\Services\CmsPageTree`** verbindet die Registry mit der Datenbank: welche Sektion + existiert (`content_id`), welche fehlt, was in der Datenbank liegt, aber auf keiner Seite + eingetragen ist. Letzteres landet als Sammelpunkt **„Nicht mehr verwendet“** ganz unten + (Netzwerk-, Partner- und alte Immobilien-Sektionen, `home/synergie_section` & Co.) – nichts + geht verloren, nichts steht im Weg. +- **Editor (`admin.cms.content-index`):** linke Spalte zeigt den Seitenbaum, nummeriert von + oben nach unten. Ein Klick wählt genau eine Sektion (`selectSection`), der Kopf zeigt Titel, + Beschreibung, Seite und den technischen Schlüssel klein darunter. Felder tragen die + Klartext-Beschriftung, der Schlüssel steht als `code` daneben; Typ-Badges heißen „Text“, + „Formatierter Text“, „Bild“, „Liste“. Der Listen-Editor (Overlay) beschriftet seine Felder + genauso. `selectGroup` bleibt für die Gruppenansicht erhalten. +- **Fehlende Sektion anlegen:** steht eine Sektion in der Registry, aber nicht in der + Datenbank (heute z. B. das Terminanfrage-Widget), erscheint sie grau mit „+“. Ein Klick + legt sie über `CmsContentSeeder` mit den Texten aus `b2in.php` an. Rechtliches und die + Kontaktdaten (`global/contact`) haben keine Vorlage, dort erscheint ein Hinweis. + +### Stufe 2 · Vorschau + +- Rechts neben dem Editor ein **iframe mit der echten Website** (Domain aus + `config('domains')`, Pfad der Seite, `?cms-preview=` als Cache-Brecher, `#anker`). Beim + Wechsel der Sektion springt die Vorschau zur Sprungmarke, nach jedem Speichern lädt sie + neu (`previewVersion`). Buttons: neu laden, in neuem Tab öffnen, Vorschau aus/ein. + Keine Anmeldung nötig, die Website ist öffentlich; Frame-Header setzt die App keine. +- **Sprungmarken nachgezogen:** `id` an den Wurzelelementen der lebenden Sektionen (`hero`, + `gruender`, `wege`, `marken`, `herkunft`, `vision`, `engagement`, `displays`, `immobilien`, + `cta`, `seitenkopf`, `netzwerk`, `wachstum`, `marken-cta`, `projekte`, `magazin`, + `geschichte`, `bild`, `werte`, `kontakt`, `faq`, `header`, `footer`). Beim Display-Feed + sitzt der Anker am Wurzel-`div`, weil die Sektion ohne veröffentlichtes Display leer bleibt. +- Sektionen ohne Seite (Beitragsseite, Widget, Rechtliches) zeigen die Seite ohne Sprung. + +### Erkenntnisse beim Kartieren + +- `/immobilien` rendert `web/dev/immobilien-azizi.blade.php` mit statischen Texten aus + `immobilien-azizi.json`; die CMS-Sektionen `immobilien/hero`, `warum_dubai`, `kaufprozess` + usw. gehören zur stillgelegten `web/immobilien.blade.php` und stehen deshalb unter „Nicht + mehr verwendet“. Gleiches gilt für `about/leadership_team`. +- `display_feed` liegt in der Gruppe `referenzen`, steht aber zuerst auf der Startseite – + im Baum unter Startseite mit Hinweis auf /referenzen. + +**Tests:** `tests/Feature/Cms/CmsPageTreeTest.php` (9 Fälle, darunter: jede Sprungmarke der +Registry existiert auf der jeweiligen Seite, jede Sektion mit Vorlage ist in `b2in.php` +auffindbar) und sechs neue Fälle in `tests/Feature/Cms/CmsAdminTest.php` (Seitenbaum, +Sektion wählen mit Klartext-Labels und Vorschau-Adresse, Sammelpunkt, Anlegen aus Vorlage, +Anlegen ohne Vorlage, Vorschau ausblenden). Kein Deployment-Schritt nötig: Registry und +Editor sind Code, die Datenbank bleibt unverändert. + +**Offen:** Stufe 3 nach Marcels Rückmeldung. Neue Sektionen müssen in `cms_pages.php` +eingetragen werden, sonst landen sie unter „Nicht mehr verwendet“ – als Erinnerung steht das +im Kopf der Datei. + +--- + +## Nachtrag 13 · Referenzen als eigenes Modul, Immobilien-Projekte ausgeblendet (15.09.2026) + +Kevin nach der Abnahme von Nachtrag 12: „Projekte“ im Portal (die Immobilienprojekte aus +Dubai) ist nicht freigegeben und kommt raus; an die Stelle gehören die Projekte/Referenzen der +Interior-Welt. Das ist eine **Korrektur zu AP5**, das die Referenzen bewusst aus den +Markengalerien zusammengesammelt hatte, um keine zweite Pflegestelle zu schaffen. Ein +realisiertes Projekt hat aber mehr als ein Bild und oft mehr als eine Marke (CABINET plus +Tischlerei), darum jetzt ein eigener Eintrag. + +### Was sich ändert + +- **Neues Modell `CmsReference`** (Tabelle `cms_references`): Titel und Beschreibung + übersetzbar, Ort und Jahr als Text, Titelbild, weitere Bilder mit Bildunterschrift, + beteiligte Marken als Liste von Slugs aus `cms_brands`, Veröffentlicht, Sortierung. +- **Portal → CMS → „Referenzen“** (`admin.cms.references-index`, Route + `cms.references.index`): Liste mit Vorschaubild, Marken-Badges und Bildanzahl; Formular + nach dem Muster des Magazins mit Sprachumschalter, Marken als Checkboxen, Titelbild und + Galerie über den Media-Picker, Galeriebilder sortierbar. Der Kopf der Seite sagt die Regel: + nur ausgeführte Aufträge, Entwürfe gehören in die Galerie der Marke. +- **Sidebar und CMS-Übersicht:** „Referenzen“ ersetzt „Projekte“. Die Route + `cms.projects.index` bleibt bestehen und ist per Adresse erreichbar, nur nicht mehr + verlinkt – die Dubai-Daten bleiben unangetastet, falls die Freigabe später kommt. +- **`/referenzen`** zeigt die veröffentlichten Referenzen: Titelbild, Titel, „Ort · Jahr“, + Beschreibung, weitere Bilder als kleine Reihe, darunter die beteiligten Marken verlinkt auf + ihre Markenseiten (unveröffentlichte Marken fallen heraus). Ohne Titelbild dient das erste + Galeriebild als Titelbild, ohne jedes Bild wird die Referenz übersprungen. +- **Fallback bleibt:** Solange keine Referenz veröffentlicht ist, greift der Stand aus AP5 + (Bilder der Rubrik „Realisiertes Projekt“ aus den Markengalerien). Der Leerzustand von AP5 + gilt weiter, wenn beides leer ist. So sieht die Preview beim Deployment keinen Unterschied, + bis Marcel die erste Referenz anlegt. +- Registry `cms_pages.php`: Beschreibung von „Realisierte Projekte“ verweist auf das neue Modul. + +**Deployment:** nur `php artisan migrate --force` (Abschnitt 8.2, Schritt 1 deckt die neue +Tabelle ab). Kein Seeder, keine Daten. + +**Offen:** Marcel legt die ersten Referenzen selbst an; die bisherigen Galeriebilder der Marken +bleiben dort, wo sie sind. Ob die Bilder aus den Markengalerien später automatisch als Referenz +übernommen werden sollen, klärt sich mit den ersten echten Einträgen. + +**Tests:** `tests/Feature/Admin/Cms/CmsReferencesIndexTest.php` (9 Fälle), vier neue Fälle in +`tests/Feature/ReferenzenPageTest.php` (Referenzen vor Galerien, Entwurf ausgeblendet und +Fallback, unveröffentlichte Marke und Referenz ohne Bild, Galeriebild als Titelbild), +Dashboard-Statistik in `CmsAdminTest` auf Referenzen umgestellt. + +--- + +## Nachtrag 14 · Bilddauer im b2in-Display mit Nachkommastelle (17.09.2026) + +Kevins Wunsch: Im Store-Display-Modul „b2in Display“ soll die „Dauer (Sekunden)“ eines Bildes +auch 1,5 annehmen. Das Feld war ganzzahlig (`int`, Zahlenfeld mit `min=1`). + +- **Eingabe als Text** mit Dezimal-Tastatur: „10“, „1,5“ und „1.5“ sind gültig, Leerzeichen + egal, gerundet auf Zehntel. Erlaubt sind 0,5 bis 120 Sekunden; alles andere bringt beim + Speichern eine Fehlermeldung am Feld und speichert nichts. Bei Videos wird das Feld ignoriert. +- **Gespeichert wird eine Zahl** (`duration_seconds` = 1.5). Der Player in + `public/_cabinet/b2in/index.html` rechnet ohnehin `duration_seconds × 1000`, kommt also ohne + Änderung mit 1500 ms klar. Bestehende Einträge mit ganzen Sekunden bleiben unverändert. +- Anzeige in der Eintragsliste mit Komma („1,5s“), ganze Zahlen ohne Nachkommastelle. +- Doku `public/_cabinet/_docs/b2in-displays.md` ergänzt. + +**Tests:** vier neue Fälle in `tests/Feature/DisplayVersionTest.php` (Komma-Eingabe, +Parser/Formatierer, Ablehnung unter 0,5 s, Video ignoriert das Feld). Kein Deployment-Schritt. + +--- + +## Nachtrag 15 · Otterpohl als vierte Marke, Feedback 17.09. eingearbeitet (17.09.2026) + +Zulieferung 17.09.2026: `dev/2026-08-28/otterpohl_Webseitentext_FINAL.md` (Text der +Tischlerei-Seite), `dev/2026-08-28/markenlogos/otterpohl.jpg` (Logo) und +`dev/2026-08-28/feedback-17-09-2026.md` (Marcels Rückmeldung zu CABINET, Febrü und Rotpunkt). + +### Otterpohl ersetzt den Platzhalter „Tischlerei“ + +- **Marke:** Name „Otterpohl“, Claim „Nicht easy to click & buy. Aber easy to get.“, Kacheltext, + Text für /marken, drei Merkmale, Einleitung (erster Block des Textes), vier Leistungen, **13 + Abschnitte** mit den Überschriften der Zulieferung 1:1, die pointierten Schlusssätze als + Schlusszeile je Abschnitt, Abschlussblock „Ihre Idee. Handwerklich umgesetzt.“, Fertigungsort + Rheda-Wiedenbrück mit Rolle „seit 2014 an unserer Seite“. Slug `tischlerei` bleibt (Links, + Widget-Thema, Kartenposition). +- **Logo:** `public/img/assets/marken/otterpohl.png`, aus der JPG-Zulieferung freigestellt und + knapp beschnitten (Imagick), damit es in der gemeinsamen Logo-Box wie die anderen wirkt. + Das Logo trägt „25 Jahre“ – so geliefert, so übernommen. +- **Seeder:** neu `OtterpohlBrandSeeder` (überschreibt bei der bestehenden Marke alle Textfelder, + lässt Bild, Galerie und Reihenfolge stehen, Logo nur wenn leer); `CmsBrandSeeder` nutzt + dieselben Daten für frische Installationen; `BrandLogoSeeder` und `BrandOriginSeeder` kennen + die Marke. Lang-Fallback, Seitentitel von /marken und der Ablauf-Block der Herkunfts-Sektion + nennen jetzt Otterpohl. + +### Feedback 17.09. in den Markentexten (`BrandPageTextSeeder`) + +- **CABINET:** Der Abschnitt „Aufmaß vor Ort statt Schätzung am Telefon“ widersprach Marcels + Ablauf (erst Foto und grobes Maß, Aufmaß erst nach Angebot). Ersetzt durch „Ein Bild und ein + grobes Maß reichen für den Anfang“ mit Marcels Fassung wörtlich und der Ablaufzeile + „So läuft’s: Foto + grobe Maße → … → Bestellung“ als Schlusszeile. Zweiter Absatz von + „Die Fragen, die wir vorher stellen“ ersetzt (Karnevalskostüme, Sportsachen). +- **Febrü:** nur die vereinbarten Stellen: „Bei uns gibt es Kunden – keine Schubladen“ (drei + Absätze), „Aus Herford“ mit „sehr hohe Fertigungstiefe“ statt 95 Prozent, „Wertschätzung ist + keine Frage der Stückzahl“ (Familienalltag statt Mütter-Passage). Der doppelte Schlusssatz + „Ob im Kleinen oder im Großen …“ steht nur noch beim ersten Abschnitt. „Nicht drei Marken“, + „Das Wir und das Ich“ und der mitlaufende CTA unverändert. +- **Rotpunkt:** „Mehr als Küchen“ mit Marcels drei Absätzen ersetzt. +- **Handwerk als gemeinsamer Abschluss (Punkt 3b):** Die markeneigenen Abschnitte + „Schranksystem plus Handwerk“ (CABINET) und „Küchenstudio plus Handwerk“ (Rotpunkt) sind + entfallen. Stattdessen gibt es **eine** Sektion `brand_craft` („Planung plus Handwerk“, Lang- + Datei, im Inhalte-Editor unter Marken → „Handwerk-Abschluss auf jeder Markenseite“ anlegbar), + die `BrandDetail` als letzten Abschnitt auf jeder Markenseite anhängt – außer auf der + Otterpohl-Seite selbst. Der Link „Mehr zu Otterpohl“ erscheint nur, wenn die Marke + veröffentlicht ist. Anker `#handwerk`. Einmal gepflegt, überall gleich – genau wie gewünscht. + +**Lokal ausgeführt:** `OtterpohlBrandSeeder`, `BrandPageTextSeeder`, `BrandLogoSeeder`. +Beim Deployment: Abschnitt 8.2, Schritt 4 (Feedback) und Schritt 11 (Otterpohl). + +**Offen:** Stimmungsbild und Galerie für Otterpohl (im Admin nachtragen); Nachtrag 10 bleibt +offen, ob CABINET selbst Aufbau anbietet. Der Text bestätigt Rheda-Wiedenbrück und die +Montage-Partnerschaft seit 2014 – die Herkunfts-Sektion passt damit. + +**Tests:** `tests/Feature/BrandFeedbackTest.php` (10 Fälle: CABINET-Einstieg und Fragen, Febrü- +Passagen und einmaliger Schlusssatz, Rotpunkt „Mehr als Küchen“, Handwerk-Abschluss auf drei +Seiten mit Link und Position, nicht auf Otterpohl, ohne Link bei unveröffentlichter Marke, +CMS-Vorrang, Otterpohl-Seeder behält Logo/Bild/Reihenfolge); `FourthBrandTest`, +`MarkenPageTest` und `BrandPageSectionsTest` auf die neuen Texte umgestellt. + +--- + +## Nachtrag 16 · Erste Bilder für CABINET und Rotpunkt (22.09.2026) + +Zulieferung 22.09.2026 unter `dev/2026-08-28/images/{cabinet,rotpunkt}/`, das Titelbild je +Marke mit `_title_` markiert. 12 Bilder CABINET, 14 Bilder Rotpunkt, alles Visualisierungen des +Herstellers (Renderings), 3–6 MB je Datei. + +- **Optimierung:** alle Bilder als WebP mit maximal 1920 px Kantenlänge, Qualität 82, ohne + Metadaten (Imagick) nach `public/img/assets/marken/cabinet/` und `…/rotpunkt/`; 55–330 KB je + Datei statt mehrerer MB. Sprechende Dateinamen aus den Motiven („dachschraegenschrank-filo- + cashmere.webp“, „kueche-07.webp“). Die Originale bleiben per `.gitignore` außerhalb des + Repositorys, nur die WebP-Fassungen werden deployt. +- **Titelbild** (`image`): CABINET „Ankleide Solitär, Eiche Tano“, Rotpunkt „Küche 01“. Es + erscheint im Seitenkopf der Markenseite, auf der Startseiten-Kachel und im Markenblock auf + /marken – dort, wo bisher der Platzhalter stand. +- **Galerie:** die übrigen Bilder als **Visualisierung** mit Bildunterschrift aus dem Motiv. + Die Rubrik passt: Badge „Visualisierung“, Hinweis „Entwürfe und Visualisierungen“. Unter + „Referenzen“ erscheinen sie damit bewusst nicht – das sind keine von uns ausgeführten Projekte. + Marcel kann jedes Bild im Admin umkategorisieren, sobald ein echtes Projekt dahintersteht. +- **`BrandImageSeeder`:** Titelbild nur, wenn keins gepflegt ist; Galeriebilder nur, wenn die + Datei noch nicht in der Galerie steht; vorhandene Einträge bleiben samt Kategorie und + Unterschrift. Mehrfach ausführbar. Febrü und Otterpohl bleiben unberührt (keine Zulieferung). + +**Lokal ausgeführt:** `php artisan db:seed --class=BrandImageSeeder`. Beim Deployment: +Abschnitt 8.2, Schritt 12 – die Dateien kommen mit dem Repository. + +**Ergänzung 23.09.2026:** Febrü nachgeliefert (`dev/2026-08-28/images/februe/`, 16 Bilder, +Titelbild „Base Thekenlösung“). Gleiche Behandlung, Bildunterschriften nach den Febrü- +Produktlinien aus den Dateinamen („Active 2.0 mit Bureo“, „Arena Stage“, „Vio“ …). Der Seeder +und `BrandImageSeederTest` decken jetzt drei Marken ab. + +**Offen:** Bilder für Otterpohl; Freigabe der Bildunterschriften durch Marcel +(aus den Dateinamen abgeleitet, z. B. Frontdekore „Filo Cashmere“, „Velluto Fango“, bei Febrü +die Produktlinien). + +**Tests:** `tests/Feature/BrandImageSeederTest.php` (4 Fälle: Titelbild und Galerie, jede +referenzierte Datei existiert als optimierte Datei unter 400 KB und 1920 px, zweiter Lauf +lässt Gepflegtes stehen, Anzeige auf Startseite, /marken, Markenseite und nicht unter Referenzen). + +--- + +## Nachtrag 17 · Demobilder raus, Galerie ohne Rubrikwechsel (22.09.2026) + +Abstimmung 22.09. nach den ersten echten Bildern: die Demobilder aus AP2 müssen weg, der +Rubrikwechsel „Realisierte Projekte / Inspirationen“ ist ausgesetzt, solange es keine +realisierten Projekte gibt, und die zwei Zeilen unter der Galerie-Überschrift werden eine. + +- **`DemoBrandGalleryCleanupSeeder`** entfernt die elf Demobilder (CABINET 4, Rotpunkt 3, Febrü + 4) aus den Galerien. Erkennung am Dateinamen aus `DemoBrandGallerySeeder`, nicht an der + Unterschrift – den Vermerk „BEISPIEL“ hatte Schritt 5 auf der Vorschau bereits entfernt. + Alle anderen Bilder bleiben. Idempotent. +- **Galerie** auf der Markenseite: ein Raster, realisierte Projekte zuerst, jedes Bild trägt + weiter sein Badge („Realisiertes Projekt“ / „Visualisierung“). Kein Tab-Wechsel, keine + Gruppenüberschriften, kein separater Hinweistext. Die Kategorie im Admin bleibt bestehen, + der Wechsel lässt sich wieder einschalten, sobald echte Projekte da sind. +- **Texte:** Überschrift „Inspirationen und Entwürfe“, eine Zeile darunter: „Visualisierungen, + die zeigen, was in einem Raum möglich ist – noch bevor das erste Möbel steht.“ (vorher + „Referenzen und Inspirationen“ plus Hinweis unter der Rubrik). + +**Lokal ausgeführt:** `php artisan db:seed --class=DemoBrandGalleryCleanupSeeder` (11 entfernt). +Beim Deployment: Abschnitt 8.2, Schritt 13, nach Schritt 12. + +**Tests:** `BrandPageTest` umgestellt (ein Raster mit Badges und Projekten zuerst, genau eine +Zeile unter der Überschrift, Aufräum-Seeder entfernt nur Demobilder und ist idempotent). + +## Nachtrag 18 · WhatsApp zuerst, Business-Nummer, Farbvariante „Modern“ (23.09.2026) + +Rückmeldung von Marcel über Kevin am 23.09.: Im Termin-Widget soll WhatsApp oben stehen und das +Formular darunter; als Nummer gilt die Business-Nummer 0521-98620100 (am 23.09. kam zunächst +…98610020, Korrektur von Marcel am 24.09.). Außerdem wirkt ihm die +Farbwelt „zu altbacken“ – die beigen Flächen. Gewünscht ist eine klarere, modernere Variante, die +farblich am Logo bleibt (Tanne und Ocker unverändert), sowie ein schwimmender Schalter, um beide +Stände direkt zu vergleichen. + +### Termin-Widget + +- **Reihenfolge:** WhatsApp-Block direkt unter der Einleitung, darunter eine Trennzeile „oder per + Formular“, dann das Formular. Einleitung jetzt „Am schnellsten per WhatsApp – wir bereiten die + Nachricht mit Ihren Angaben vor.“ Der Hinweis, dass der Besucher selbst abschickt, bleibt. + Der vorbereitete Text liest weiter Anliegen, Wunschtermin und Name aus dem Formular, auch wenn + es jetzt unter dem Button steht. Ohne Nummer im CMS erscheint weder Button noch Trennzeile. +- **Nummer:** `WhatsappNumberSeeder` trägt `+49 521 98620100` in `global.contact.whatsapp` ein + (de und en), aber nur, wenn das Feld leer ist, noch den Platzhalter „+49 151 00000000“ aus der + ersten Einrichtung enthält oder die falsche Nummer vom 23.09. (`+49 521 98610020`) – die hatte + Marcel versehentlich geschickt, auf der Vorschau lief der Button deshalb ins Leere. Eine im + Admin gepflegte andere Nummer bleibt stehen. Fehlt der Eintrag, wird er angelegt. Idempotent. + Ergebnis-Link: `https://wa.me/4952198620100`. Auf einer Vorschau ohne Portal reicht + `php artisan db:seed --class=WhatsappNumberSeeder --force`. + +### Farbvariante „Modern“ + +Eine zweite Interior-Palette als Override in `theme-b2in.css` (`.palette-modern .world-interior`). +Sie ändert **nur Flächen**, keine Logofarben: + +| Token | Bisher (Creme) | Modern | +|---|---|---| +| Hintergrund | Creme `#f7f4ef` | fast weiß, leicht warm `#fbfaf8` | +| Karten | `#fbf9f5` | reinweiß | +| Sektionswechsel (`bg-accent`) | Sand `#d9cbbf` | helles Grau-Beige `#efece7` | +| Ruhige Flächen (`bg-muted`) | helles Sand | `#f2f0ed` | +| Linien / Eingabefelder | Sand-Töne | `#e6e2dc` / weiß | +| Hero-Bühne | Sand | helles Grau-Beige | +| Footer | Sand mit Tanne | Tanne mit Creme, Ocker als Akzent | +| Tanne, Ocker, Clay, dunkle Sektionen, CTA-Band | unverändert | unverändert | + +Karten liegen jetzt weiß auf fast weiß, deshalb haben `--shadow-card` und `--shadow-elevated` in +der Variante etwas mehr Tiefe. Weil der Footer dunkel ist, trägt er in „Modern“ das **negative +Logo** (Rückmeldung Kevin 23.09.): der Footer rendert beide Logos (`footer-logo-light` / +`footer-logo-dark`), das Stylesheet blendet je Palette das passende ein – die Umschaltung läuft +im Browser, ohne Server-Roundtrip. Die Immobilien-Welt bleibt bei ihrem einen negativen Logo. +Zwei Nachbesserungen nach dem ersten Blick (Kevin 23.09.): Abschlussband und Footer sind in +„Modern“ beide dunkel, deshalb trennt eine helle Haarlinie (`--footer-muted` bei 35 %) den Footer +oben ab. Und der schwebende Termin-Button war als reine Kontur über Bildern und weißen Karten +kaum zu sehen – er trägt jetzt in beiden Paletten eine Fläche in Kartenfarbe +(`.appointment-toggle`), Hover bleibt Tanne. + +Dritte Nachbesserung (Kevin 23.09.): der **Cookie-Button** unten links kam noch in Blau aus +`config/cookie-consent.php` – das ist die Immobilien-Welt. `theme-b2in.css` überschreibt die +Paketvariablen (`--cc-*`) für `.world-interior`: Button in Tanne mit dem Verlauf des +Akzent-Buttons, Icon, Schalter, Fokusring und Link-Hover in Ocker, „Speichern“ in Tanne, +„Akzeptieren“ bleibt grün. Gilt in beiden Paletten; `/immobilien` behält das Blau. Der dunkle Footer ist die eine bewusste Abweichung, die über +„heller“ hinausgeht: er gibt der hellen Seite unten einen klaren Abschluss. Wenn Marcel ihn +lieber hell hätte, sind es vier Token. + +### Schalter + +- `` schwimmt links in der Mitte (unten links sitzt der Cookie-Button, unten + rechts das Termin-Widget): eine senkrechte Pille „Farbwelt · Bisher / Neu“. Nur auf den + Interior-Seiten von b2in, nicht auf `/immobilien`. +- Die Wahl liegt im `localStorage` (`b2in-palette`) und wird schon im `` gesetzt, bevor das + Stylesheet greift – kein Aufblitzen in Creme. `?palette=modern` bzw. `?palette=classic` an einer + URL überschreibt die gemerkte Wahl; damit lässt sich Marcel ein Link auf die neue Variante + schicken: `https:///?palette=modern`. +- Abschalten, sobald entschieden ist: `B2IN_PALETTE_SWITCH=false` in `.env` + (`config('app.palette_switch')`). Dann erscheint weder Schalter noch Skript, die Seite läuft in + der Standard-Palette. Soll „Modern“ dauerhaft werden, werden die Token in `:root` übernommen und + der Override entfernt – ein Nachtrag, kein Umbau. + +**Lokal ausgeführt:** `php artisan db:seed --class=WhatsappNumberSeeder` (2 Sprachen gesetzt), +`npm run build:b2in`. Beim Deployment: Abschnitt 8.2, Schritt 14, dazu `npm run build:web`. + +**Tests:** `WhatsappNumberSeederTest` (6: anlegen, Platzhalter ersetzen, falsche Nummer vom 23.09. +korrigieren, gepflegte Nummer behalten, idempotent, Link auf der Seite), `AppointmentWidgetTest` (+2: WhatsApp vor dem Formular, keine +Trennzeile ohne Nummer), `ColorWorldsTest` (+6: Schalter auf Interior-Seiten, nicht auf +Immobilien, per Config abschaltbar, Override ohne Logofarben, negatives Logo im Footer der +Variante, Immobilien-Footer unverändert). + +**Offen:** Marcel entscheidet zwischen „Bisher“ und „Neu“ – oder benennt, was an „Neu“ noch +fehlt (Footer hell/dunkel, Grad der Aufhellung). Danach Schalter abschalten. + +## Nachtrag 19 · Otterpohl: Text v2 und erste Bilder (24.09.2026) + +Zulieferung vom 24.09.: `dev/2026-08-28/otterpohl_Webseitentext_FINAL_v2.md` löst die lange Fassung +vom 17.09. komplett ab, dazu 13 Bilder in `dev/2026-08-28/images/otten/` (Titel plus 2–5 vom +Unternehmen, der Rest Referenzen). + +### Text v2 + +Deutlich kürzer als v1: eine Einleitung, zwei Abschnitte, acht Leistungen, ein Schlussblock. Die +Fassung vom 17.09. mit zwölf Abschnitten (u. a. „Seit 2014 an unserer Seite“, „Farbe darf auch +genau die Farbe sein“) ist damit vollständig ersetzt. Zuordnung auf die Markenseite: + +| Zulieferung v2 | Feld | Auf der Seite | +|---|---|---| +| „Ziemlich nah an der eierlegenden Wollmilchsau“ + 4 Absätze | `sections[0]`, Claim „Genau dort beginnt der individuelle Innenausbau.“ | erster Abschnitt | +| „Vom einzelnen Möbel bis zum ganzen Raum“ | `sections[1]`, Claim „So können wir Räume ganzheitlicher denken …“ | zweiter Abschnitt | +| „Planung trifft Handwerk“ | `sections[2]`, Claim „Das Ergebnis kann ein einzelnes Möbel sein. Oder ein kompletter Raum.“ | dritter Abschnitt | +| „Leistungen und Möglichkeiten“ (8 Punkte) | `services` | Leistungsraster, zwei Reihen à vier | +| „Das Ganze statt nur das Einzelne“ | `cta_title` / `cta_text` | Abschlussblock hinter Leistungen und Galerie – so bleibt die Reihenfolge der Zulieferung erhalten | +| „Nicht easy click & buy. Aber dennoch easy to get.“ | `tagline` und Ende des `cta_text` | Claim im Seitenkopf und Schlusssatz | + +- **Name** jetzt „Otterpohl Möbelservice“ – so nennt die Zulieferung den Partner durchgängig. + Überall dort, wo der Name aus der Marke kommt (Kacheln, Widget-Anliegen, Herkunfts-Kachel). + Der Link im Handwerk-Abschnitt der anderen Markenseiten heißt weiter „Mehr zu Otterpohl“. +- **Kein „seit 2014“ mehr:** v2 erwähnt die gemeinsame Zeit nicht. Der Hinweis ist aus Teaser, + Fertigungsort (`origin_role`), Lang-Fallback und dem Handwerk-Abschnitt (`brand_craft`) + entfernt. ⚠️ Falls Marcel die Angabe bewusst behalten wollte, ist sie in drei Sätzen zurück. +- `description` bleibt leer, damit der Text in der Reihenfolge der Zulieferung steht; `summary` + (Markenübersicht) fasst die Einleitung zusammen; `highlights` sind drei Stichzeilen aus den + Leistungen. Englisch: eigene Übersetzung in gleicher Struktur. +- `widget_label` „Persönliche Beratung zur Maßarbeit vereinbaren“ bleibt. + +### Bilder + +13 Dateien, konvertiert wie in Nachtrag 16 (WebP, max. 1920 px, unter +`public/img/assets/marken/otterpohl/`, zusammen rund 2,4 MB; ein Bild per GD nachverdichtet). + +- **Titelbild** `werkstatt-titel.webp`: zwei Mitarbeiter in der Werkstatt. +- **Aus der Werkstatt** (2–5): CNC-Bearbeitungszentrum, Türeinbau vor Ort, Handwerkzeug, + Anlieferung per Möbellift. Dafür gibt es eine **dritte Galerie-Kategorie** `company` + (`CmsBrand::GALLERY_COMPANY`, Badge „Aus der Werkstatt“). Im Admin: Button „Werkstatt“ und + Option „Aus der Werkstatt“ in der Kategorie-Auswahl, Hinweistext ergänzt. +- **Referenzen** (8, Kategorie `project`, Badge „Realisiertes Projekt“): Treppen, Lamellenwand mit + Sitzbank, Tür und Kommode, Wandregale, Objektbau-Verkaufsraum, Büro-Sideboard. Unterschriften + beschreiben das Motiv; die Kundennamen aus den Dateinamen (Lücke, Berkemeier, Neugebauer, + Dziuballe) stehen bewusst nicht auf der Seite. ⚠️ `Otterpohl_11.jpg` (Sideboard im Büro) ist + nach Kevins Angabe eine Referenz, nicht Werkstatt – falls es das eigene Büro ist, im Admin auf + „Aus der Werkstatt“ umstellen. +- **Reihenfolge in der Galerie:** Projekte, dann Werkstatt, dann Visualisierungen. +- **Überschrift der Galerie** richtet sich jetzt nach dem Inhalt: nur Visualisierungen → + „Inspirationen und Entwürfe“ (wie bisher, CABINET/Rotpunkt/Febrü); nur Projekte → „Referenzen“; + Projekte und Werkstatt → „Referenzen und Einblicke“ (Otterpohl); mit Visualisierungen → + „Projekte und Entwürfe“. Die Zeile darunter passt jeweils. +- ⚠️ **Referenzen-Seite:** `/referenzen` zeigt, solange im Modul „Referenzen“ nichts gepflegt ist, + die Projekte aus den Markengalerien – jetzt also die acht Otterpohl-Referenzen mit Link auf die + Markenseite. Werkstattbilder erscheinen dort nicht. Wenn Marcel das nicht will: Bilder im Admin + auf „Aus der Werkstatt“ stellen oder eigene Referenzen anlegen, dann greift der Fallback nicht. + +**Lokal ausgeführt:** `php artisan db:seed --class=OtterpohlBrandSeeder`, `php artisan db:seed +--class=BrandImageSeeder`. Beim Deployment: Abschnitt 8.2, Schritte 11 und 12 (Texte +unverändert, sie decken v2 mit ab). + +**Tests:** `FourthBrandTest` (v2-Überschriften, acht Leistungen, drei Abschnitte, Schlussblock hinter +den Leistungen, kein „Seit 2014“), `BrandFeedbackTest` (Seeder setzt Name, acht Leistungen, +Abschluss), `BrandImageSeederTest` (+3: Otterpohl-Galerie 8 Projekte + 4 Werkstatt ohne +Kundennamen, Badges und Überschrift „Referenzen und Einblicke“, Referenzen-Fallback zeigt Projekte +und keine Werkstattbilder), `BrandPageTest` (gemischte Galerie → „Projekte und Entwürfe“, Aufräum- +Seeder lässt Otterpohl 12). + +**Offen:** Marcel prüft Unterschriften, die Zuordnung von `Otterpohl_11`, das gestrichene „seit +2014“ und ob die Otterpohl-Referenzen unter `/referenzen` erscheinen sollen. + +## Nachtrag 19 · Entwurf der Startseite in der Farbwelt „Greige“ (24.09.2026) + +Briefing von Marcel (`dev/2026-08-28/farbwelt-kunde-24-09-2026.md`, Visualisierung +`Farbwelt und Stil.png`): die Creme-Palette wird nicht weiterverfolgt, die Richtung „Neu“ soll +heller, klarer und hochwertiger werden – heller, leicht kühler Grundton (Greige, kein steriles +Weiß), deutlich präsenteres Tannengrün, Gold nur als feine Linie. Dazu eine Slideshow im Hero, +neue Überschrift, keine Aktionsleiste, ein Button im Hero, neuer Projekttext, Logo mit Goldbogen. +Kevins Auftrag: eine **separate Version der Startseite** zum Vergleich, das Logo als Kopie. + +### Was gebaut ist + +- **Entwurfsseite `/entwurf`** (Route `home.draft`, View `web/home-draft.blade.php`): die reguläre + Startseite mit neuem Hero, ohne Ankündigungsleiste, Body-Klasse `palette-greige`, `noindex`. + Alle übrigen Sektionen sind unverändert eingebunden und färben sich über die Tokens. Die Seite + hängt am Farb-Schalter: mit `B2IN_PALETTE_SWITCH=false` liefert sie 404. +- **Palette „Greige“** als drittes Token-Set in `theme-b2in.css` (`.world-interior.palette-greige`, + am Body, nicht am `` wie der Browser-Schalter – so überlagern sich beide nicht): + + | Token | Wert | + |---|---| + | Grund | `#f0eeeb` Greige, Off-White (Kopfzeile der Visualisierung) | + | Karten / Hero-Bühne | `#f8f7f4` | + | Sektionswechsel (`bg-accent`) | `#e8e6e0` | + | Tannengrün (`--primary`) | `#14342c`, Buttons, dunkle Sektionen, Footer | + | Gold (`--secondary`) | `#aa8341` gedeckt; als Text `--secondary-deep` (dunkler) | + | Text | Tannengrau `hsl(166 25% 13%)` | + | Footer | Tannengrün mit Greige-Text, Goldlinie oben, negatives Logo | + +- **Logo-Kopien** `public/img/logos/b2in-interior-logo-gold-{positive,negative}.svg`: Bogen + `#AA8341` statt Ocker, Wortmarke im neuen Tannengrün `#14342C` (negativ: Schrift `#F0EEEB`). + Flächig, ohne Verlauf – die Verläufe liefert Marcel nach; die Dateien lassen sich dann 1:1 + ersetzen. Die bisherigen Logos sind unangetastet. `ThemeHelper::getLogoPath()` liefert die + Gold-Variante, sobald `b2in_palette()` (neuer Helper, Binding `b2in.palette`) „greige“ meldet + – das setzt nur die Entwurfsroute. Kein PNG erzeugt (kein SVG-Rasterizer im Container). +- **Hero mit Slideshow** (`HeroSlider`, Sektion `home/hero_slider`, im Seitenbaum unter Startseite + mit Vorschau auf `/entwurf`): Rahmen mit 1-px-Goldkante und Schatten, tannengrüne Flanken rechts + (volle Höhe) und links unten wie in der Visualisierung, Eyebrow „B2IN INTERIOR ——“, Überschrift + „*Räume aus einer Hand.* Mit starken Marken und persönlichen Lösungen.“ (erste Zeile in Gold, + Serife), Einleitungstext aus der Visualisierung, **ein** Button „Unsere Marken entdecken“ mit + Goldkante unten und Pfeil. Kein zweiter Button (Briefing Punkt 5), das Termin-Widget bleibt. + - Bild rechts im festen Seitenverhältnis 4:3 → auf großen Bildschirmen nicht mehr unten + beschnitten (Briefing Punkt 2). + - Slides: Liste `slides` der Sektion (je `image`, `label`, `caption`, `active`), solange leer + die **Titelbilder der veröffentlichten Kernmarken** in ihrer Reihenfolge (aktuell CABINET, + Rotpunkt, Febrü, Otterpohl sofern Bild). Kleine Marken-Pille unten links im Bild. + - Ruhig: Überblendung 1,4 s, Wechsel alle 7 s (`interval`, begrenzt auf 3–30 s), Pause bei + Hover/Fokus, Pfeiltasten, Punkte unter dem Rahmen als Tabs; bei „reduzierter Bewegung“ kein + Autowechsel. Läuft ohne eigenes JS-Bundle (Alpine im Markup). +- **Farb-Schalter** hat jetzt drei Einträge: Bisher / Neu (Browser, wie gehabt) / **Entwurf** + (Link auf `/entwurf`). Auf dem Entwurf ist „Entwurf“ aktiv, „Bisher“/„Neu“ führen mit + `?palette=…` zurück auf die Startseite. +- **Projekttext** (Briefing Punkt 7) global: Lang de/en geändert, `AudienceSwitchProjectTextSeeder` + tauscht den Satz in einem vorhandenen CMS-Eintrag (nur diesen Satz, idempotent). Lokal + ausgeführt (2 Stellen). Deployment Schritt 15. + +**Nachbesserung nach Kevins Screenshot (24.09., 17:30):** Die Goldkante war auf Greige nicht zu +sehen – jetzt ein Verlauf (hell oben links, auslaufend, in der Ecke wieder anziehend) über einen +maskierten Pseudo-Rand von 1,5 px. Die Flanken sind gerundet (Radius 2,75 rem rechts, 2 rem +links) und laufen hinter das Bild; ihre Goldlinie folgt der Rundung. Das Bild füllt den Rahmen +fast ganz (5:4, nur 1,25 rem Luft oben und unten, rechts über der Flanke), die Überschrift ist +kleiner (max. 3,3 rem statt 4,1 rem) und der Einleitungstext eine Stufe kleiner. + +**Zweite Nachbesserung (25.09.):** Hinter der Goldkante schien eine helle Linie durch – die +Masken-Technik ließ die gerundete Kante des Rahmens außerhalb des Rings sichtbar. Jetzt sind +Rahmen und Bild-Rahmen echte Verlaufs-Borders (transparenter Rand, Fläche auf `padding-box`, +Goldverlauf auf `border-box`), ohne Pseudo-Element. Der Button trägt den Goldrand rundum, unten +3 px, der Pfeil ist Gold. Die grünen Flanken sind **Inline-SVGs** +(`components/web/hero-flank-right|left.blade.php`): grüner Verlauf, Goldlinie entlang der +Rundung, rechts zusätzlich die kurze Zierlinie aus der Visualisierung. Sie skalieren über die +Rahmenhöhe (`height: 100 %` bzw. `46 %`, Breite aus dem viewBox-Verhältnis, Strichstärke bleibt +1,5 px dank `vector-effect`), Farben aus den Tokens. Liefert Marcel eigene SVGs, werden die +beiden Dateien getauscht – der Platz im Rahmen bleibt. + +**Abstimmung 25.09. (Kevin):** Für die nächste Runde ist der Farb-Schalter **aus** und die Seite +steht fest auf „Neu“. Dafür zwei neue Konfigurationswerte in `config/app.php`: +`B2IN_PALETTE_SWITCH` (Standard jetzt `false`), `B2IN_PALETTE` (Standard `modern`; ohne Schalter +setzt das Layout die Klasse `palette-modern` serverseitig an ``, mit Schalter ist es die +Vorbelegung, solange nichts im localStorage liegt) und `B2IN_HOME_DRAFT` (Standard `true`) – der +Entwurf `/entwurf` hängt nicht mehr am Schalter, sondern an diesem Wert. Der Schalter selbst +bleibt im Code und lässt sich mit `B2IN_PALETTE_SWITCH=true` wieder einblenden. + +### Was aus dem Briefing noch offen ist + +| Punkt | Stand | +|---|---| +| 1 Slideshow selbst pflegen (Upload, Reihenfolge, an/aus) | Datenmodell steht (Liste `slides` mit `active`), Pflege bisher nur über den JSON-Editor unter Inhalte. Eigene Oberfläche wie bei den Displays: nächster Schritt nach Freigabe des Entwurfs. | +| 6 Persönliches Foto | Kein Foto geliefert. Vorschlag: in der Gründer-Leiste („B2in by Marcel Scheibe“), Bildfeld ist dort schon vorhanden (`founder_bar.image`). | +| 8 Feinabstimmung der Töne | Werte oben sind aus der Visualisierung gesampelt und leicht aufgehellt („noch etwas heller“). Marcel entscheidet am Entwurf. | +| 9 Logo mit Verläufen | Kommt von Marcel; bis dahin flache Gold-Kopie. | +| Entwurf → Standard | Wenn freigegeben: Tokens von `.palette-greige` nach `:root`, Gold-Logos umbenennen, `home.blade.php` auf `hero-slider` umstellen, Ankündigungsleiste global aus, Schalter und `/entwurf` abschalten. Ein Nachtrag, kein Umbau. | + +**Lokal ausgeführt:** `php artisan db:seed --class=AudienceSwitchProjectTextSeeder`, `npm run build:b2in`. +Beim Deployment: Abschnitt 8.2, Schritt 15, dazu `npm run build:web`; die SVG-Logos liegen im +Repository. Link für Marcel: `https:///entwurf`. + +**Tests:** `HomeDraftTest` (16: Palette und Gold-Logos nur auf dem Entwurf, Überschrift/ein +Button/keine Leiste, Sektionsreihenfolge, 404 ohne Schalter, Slides aus Marken, ohne Bild, +CMS-Slides mit `active`, Intervall-Grenzen, Schalter hin und zurück, Logo-Dateien, Tokens, +Projekttext in Lang und per Seeder), `CmsPageTreeTest` (Reihenfolge um `hero_slider` ergänzt). +Gesamt: 1049 grün. + +--- + +## Nachtrag 20 · Korrekturen Startseite und Otterpohl (01.10.2026) + +Farbwelt bleibt vorerst „Modern“ ohne Schalter. Umgesetzt auf der regulären Startseite `/`: + +- **Hinweisleiste oben** aus über die Flag `B2IN_ANNOUNCEMENT_BAR` (`config('app.announcement_bar')`, + Standard `false`, gilt für beide Welten). Inhalt und CMS-Pflege bleiben, `=true` blendet sie wieder ein. +- **Hero-Überschrift** „Räume aus einer Hand.
Mit starken Marken + und persönlichen Lösungen.“ (erste Zeile in `.text-secondary`). Lang de/en und `HomeHeroTextSeeder` + für den CMS-Eintrag `home/hero` (ersetzt nur die alte Überschrift). +- **Zweiter Hero-Button** „Termin anfragen“ entfernt: aus Lang und CMS gelöscht; das Blade zeigt ihn nur + noch, wenn `cta2_text` gepflegt ist. Der feste Termin-Button unten rechts bleibt. +- **Projekttext**: „… Projektentwicklungen. Koordiniert aus einer Hand …“ (Punkt statt Gedankenstrich), + Lang de/en und `AudienceSwitchProjectTextSeeder` erweitert. +- **Otterpohl Titelbild**: `tittle_otter.png` → `marken/otterpohl/titel-treppe.webp` (1920 px, WebP 82). + Gleiches Motiv wie das Galeriebild `referenz-luecke-01` – daher echter Tausch: die Treppe wird Titelbild, + das bisherige Werkstattbild nimmt ihren Galerieplatz ein (Aus der Werkstatt). Nur wenn noch das alte + Titelbild gesetzt ist (`OtterpohlBrandSeeder::swapTitleImage()`). +- **Otterpohl Abschnitt „Montage“** als vierter Abschnitt. Neu für alle Markenabschnitte: Absätze mit + „- “ am Anfang werden zur Liste, der Teil vor dem ersten Doppelpunkt fett (`CmsBrand::paragraphBlocks()`) + – pflegbar im normalen Textfeld im Admin. + +Lokal ausgeführt: die drei Seeder aus Schritt 16. Tests: `HomeCorrectionsTest` (neu), angepasst +`AnnouncementBarTest`, `HomePageStructureTest`, `HomeDraftTest`, `BrandImageSeederTest`, +`FourthBrandTest`, `AppointmentTriggerTest`, `CmsContentSeederTest`. Gesamt 1071 grün +(mit `B2IN_HOME_DRAFT=true`; die lokale `.env` hat den Entwurf aus, dann schlagen die `/entwurf`-Tests fehl). + +--- + +## Seeder für das nächste Deployment (Stand 01.10.2026) + +Alles, was seit dem letzten Commit (`3211569f`, Bilddauer im Display) neu ist: Nachträge 15–20. +Annahme: Der Stand bis zu diesem Commit ist live. Genau diese Seeder, in dieser Reihenfolge: + +```bash +php artisan db:seed --class=CmsBrandSeeder --force # legt Otterpohl („tischlerei“) an, falls die Marke fehlt – überschreibt nichts +php artisan db:seed --class=BrandPageTextSeeder --force # Feedback 17.09. für CABINET, Rotpunkt, Febrü (überschreibt deren Textfelder) +php artisan db:seed --class=OtterpohlBrandSeeder --force # Otterpohl-Texte v2, Abschnitt „Montage“, Titelbild-Tausch +php artisan db:seed --class=BrandImageSeeder --force # Titelbilder und Galerien aller vier Marken +php artisan db:seed --class=DemoBrandGalleryCleanupSeeder --force # Demobilder raus – nach BrandImageSeeder +php artisan db:seed --class=WhatsappNumberSeeder --force # WhatsApp-Business-Nummer 0521-98620100 +php artisan db:seed --class=AudienceSwitchProjectTextSeeder --force # Projekttext „… Projektentwicklungen. Koordiniert …“ +php artisan db:seed --class=HomeHeroTextSeeder --force # Hero „Räume aus einer Hand.“, zweiter Button weg; 07.10.: Zeile „B2in Interior“, Untertitel „Wir vereinen …“, erste Slide „B2in Interior“ +php artisan db:seed --class=UnusedCmsContentCleanupSeeder --force # tote CMS-Sektionen (inkl. Entwurfs-Hero home.hero_slider) + ungenutzte Felder (u. a. Markenliste in home.core_brands) löschen (sichert vorher nach storage/app/private/cms-archiv/) +php artisan db:seed --class=AboutPageTextSeeder --force # /about: „auch dafür geradesteht“ und Textkorrekturen (06.10.) +php artisan db:seed --class=ProofreadingCorrectionsSeeder --force # Lektorat aller angezeigten Texte (06.10.) +php artisan db:seed --class=LegalTextUpdateSeeder --force # Rechtstexte: DDG/MStV/TDDDG, GA4, Leistungsbeschreibung (06.10.) +php artisan db:seed --class=ReferencesPageSwitchSeeder --force # Referenzen ausblenden (Seite + Menüpunkt), nur wenn noch nicht geschaltet +php artisan db:seed --class=HomeHeroSlidesSeeder --force # Slideshow im Hero der Startseite (9 Bilder), nur wenn noch keine Slides gepflegt +php artisan db:seed --class=PageHeroEyebrowSeeder --force # Zeile über der Hero-Überschrift auf Marken, Über uns, Kontakt (07.10.); „Über B2in:“ aus der h1 auf /about +php artisan db:seed --class=HeroTrustItemsSeeder --force # Vertrauenspunkte im Hero: Startseite neu, Marken ergänzt (07.10.) +php artisan db:seed --class=HomeVisionTitleSeeder --force # „Gebaut auf Expertise und Vertrauen“: Hervorhebung in Ocker (07.10.) +php artisan db:seed --class=ContentCorrections20261008Seeder --force # Korrekturen 08.10.: Febrü-Slides, Vereine, Ablauf Maßanfertigung, Magazin, FAQ, Otterpohl +php artisan db:seed --class=CmsSectionFieldsSeeder --force # zuletzt: fehlende Felder aus der Lang-Datei in CMS-Einträgen ergänzen (überschreibt nichts) +php artisan db:seed --class=AssetMediaImportSeeder --force # ganz zuletzt: verwendete Bilder aus public/img/assets in die Mediathek (braucht php artisan storage:link) +``` + +Danach: + +```bash +php artisan config:cache +php artisan view:clear +npm ci && npm run build:web && npm run build:portal +``` + +- Alle Seeder sind idempotent, ein zweiter Lauf schadet nicht. +- In der `.env` muss nichts ergänzt werden: Die Hinweisleiste ist standardmäßig aus. `B2IN_PALETTE_SWITCH`, + `B2IN_PALETTE` und `B2IN_HOME_DRAFT` werden nicht mehr gelesen (Nachtrag 24) und können aus der `.env` raus. +- Nicht nötig: `BrandLogoSeeder` und `BrandOriginSeeder` – Logo und Fertigungsort von Otterpohl setzt + bereits der `OtterpohlBrandSeeder`. + +--- + +## Nachtrag 22 · Tote Inhalte entfernt, Lektorat aller angezeigten Texte (06.10.2026) + +- **Aufgeräumt:** 48 Sektionen, die keine erreichbare Seite mehr zeigt (Netzwerk, Partner, Ecosystem, + Interior, alte Immobilien-Seite, Startseiten-Blöcke vor dem Relaunch, Führungsteam), aus Lang-Dateien, + `cms_section_map`, CMS-Datenbank (`UnusedCmsContentCleanupSeeder`, sichert vorher nach + `storage/app/private/cms-archiv/`) und Seedern. Dazu 15 alte Views, die Dev-Archivseiten + `/dev/{immobilien,interior,partner}-v1`, 19 Livewire-Sektionen, `NetzwerkPageCmsSeeder`, + `config/content.php` und ungenutzte Felder (`stats`, `social_media`, `load_more`, `share_article`) samt + auskommentiertem Markup. `partner_cta` liegt jetzt in der Gruppe `about`, die Gruppe `netzwerk` gibt es + nicht mehr. Lang-Sektionen und Section-Map decken sich jetzt 1:1 (Test). +- **Archiv:** `dev/2026-08-28/archiv-2026-10-06/` (README dort). +- **Lektorat:** `ProofreadingCorrectionsSeeder` (40 Stellen in CMS, Marken, Magazin, Rechtstexten), + dieselben Korrekturen in Lang-Dateien und Marken-Seedern, rund 50 Stellen in `immobilien-azizi.json`. + Offene inhaltliche Punkte: `dev/2026-08-28/lektorat-rueckfragen-06-10-2026.md`. +- **/about:** Kennzahlen im Abschluss entfernt (wurden nie angezeigt), Alternativtext der Bildpause + beschreibt jetzt das Bild. + +Deployment: siehe Seeder-Liste oben (`UnusedCmsContentCleanupSeeder`, `AboutPageTextSeeder`, +`ProofreadingCorrectionsSeeder`). Tests: 1072 grün (mit `B2IN_HOME_DRAFT=true`). + +**Nachgang 06.10. (Kevin):** Kachel „Datenstand“ samt `confidence_labels`/`data_confidence` und die +internen Prüfnotizen auf /immobilien entfernt; „unsere Tischlerei“ → „die Tischlerei Otterpohl“ +(Herkunfts-Sektion, über `ProofreadingCorrectionsSeeder`); Rechtstexte aktualisiert +(`LegalTextUpdateSeeder` + `resources/lang/de/b2in_legal.php`, Banner-Texte des Cookie-Pakets per +`resources/lang/vendor/cookie-consent/de/`). Immobilien-Daten bleiben wie sie sind. + +**Referenzen-Schalter (06.10.):** Im CMS-Modul „Referenzen“ gibt es oben den Schalter „Seite ‚Referenzen‘ +auf der Website anzeigen“ (Einstellung `settings` → `pages.referenzen_enabled`, Helper +`references_page_enabled()`). Aus: Menüpunkt weg, /referenzen liefert 404, der Button unter dem +Showroom-Feed entfällt, sofern er auf /referenzen zeigt. Die Referenzen selbst bleiben gepflegt. +`ReferencesPageSwitchSeeder` schaltet beim Deployment aus (nur ohne bestehenden Eintrag). + +--- + +## Nachtrag 23 · Slideshow im Hero der Startseite (07.10.2026) + +Die Slideshow aus dem Entwurf (`/entwurf`) läuft jetzt im Hero der aktiven Startseite („Modern“). Das +Layout bleibt: Text links, rechts statt des festen Bildes die Slideshow, Infokarte unten links, kleine +Marken-Pille oben links, Punkte unter dem Bild. + +- **Bilder:** `dev/2026-08-28/images/slideshow/` (9 JPEGs, 1,7–5,7 MB) → `public/img/assets/b2in/slideshow/*.webp` + (1920 px, Qualität 82, ohne Metadaten, 86–265 KB). Reihenfolge wie geliefert: Rotpunkt Fenix House, + CABINET Ankleide, Rotpunkt Küche, CABINET Schlafzimmer, Rotpunkt Küche, CABINET Flur, Rotpunkt Küche, + CABINET Dachschräge, Rotpunkt Bad. +- **Pflege im CMS:** Seiten → Startseite → Hero, Liste `slides` (je `image`, `label`, `alt`, `active`), Reihenfolge + der Liste = Reihenfolge der Slideshow, `interval` in Sekunden (3–30, Standard 7). Ohne aktive Slides + steht wieder das einzelne Bild `image`. +- **Verhalten:** Überblendung 1,4 s, Pause bei Hover/Fokus, Pfeiltasten, bei „reduzierter Bewegung“ kein + Autowechsel; erstes Bild sofort, die übrigen lazy. Festes Seitenverhältnis 4:3, damit nichts unten + abgeschnitten wird. +- **Code:** `Hero` (Livewire) mit `activeSlides()`, Blade `sections/hero.blade.php`, Lang de/en + `hero.slides`/`hero.interval`, `HomeHeroSlidesSeeder` für bestehende Installationen. Tests: + `HomeHeroSlideshowTest`. `npm run build:b2in` (neue Utility-Klassen). + +**Nachbesserung 07.10. (nach „Farbwelt und Stil.png“):** Die Slideshow ist jetzt das Hauptelement des +Rahmens: zweispaltig (Text 5/12, Bild 7/12), das Bild reicht oben, unten und rechts bis auf 16 px an den +Rand, auf großen Bildschirmen mindestens 560 px hoch (mobil 4:3 unter dem Text). Die Punkte stehen mittig +unter dem ganzen Block. Die Infokarte über dem Bild bleibt und wechselt mit: Marke (`label`) und Motiv +(neues Feld `caption`), ohne Angaben die festen `card_title`/`card_text`. Die Marken-Pille oben links +entfällt. `HomeHeroSlidesSeeder` ergänzt fehlende `caption` bei bereits eingetragenen Slides. + +**Nachbesserung 07.10. (2):** Rahmenschatten `rgba(0, 0, 0, 0.1) 0px 10px 20px 5px`. Die Infokarte +saß oben im Bild, weil die Glass-Flow-Regel `[class*="card"]` ihr `position: relative` gab – jetzt +`absolute!`. Der Kartentext überblendet nicht mehr gleichzeitig: der alte blendet in 0,3 s aus, der neue +danach in 0,5 s ein. + +--- + +## Nachtrag 24 · Alte Entwürfe entfernt (07.10.2026) + +Mit der Slideshow im Hero und der festen Palette „Modern“ sind die Abstimmungsstände erledigt. Entfernt, +Kopien unter `dev/2026-08-28/archiv-2026-10-07-entwurf/`: + +- **Entwurf `/entwurf`** (Nachtrag 19): Route, View `home-draft`, Farbwelt „Greige“, Gold-Logos, + Hero mit Goldkante und Flanken (`hero-flank-*`), CSS `.hero-draft`, CMS-Sektion `home.hero_slider` + (Seitenbaum, Section-Map, Lang de/en; auf dem Server löscht sie der `UnusedCmsContentCleanupSeeder`). +- **Farb-Schalter und Palette „Bisher“ (Creme)** (Nachtrag 18): Komponente `palette-switch`, Skript im + ``, Klasse `palette-modern` am ``, `b2in_palette()`, Config `app.palette_switch`, + `app.palette`, `app.home_draft`. Die hellen Flächen hängen jetzt fest an `.world-interior`. +- **HeroSlider** bleibt, weil b2a, Stileigentum und Style2own ihn einbinden – zurück auf den Stand vor + dem Entwurf. Ohne gepflegte Sektion zeigt er nichts statt eines Fehlers (deren Inhalte lagen in + `config/content.php`, siehe Archiv vom 06.10.). + +Tests laufen jetzt ohne `B2IN_HOME_DRAFT=true`. + +**Nachbesserung 07.10. (3):** Kartentexte überlagerten sich – Alpine ließ die fest gesetzten Klassen +stehen; der Zustand hängt jetzt an `data-active`. Über der Überschrift steht „B2IN INTERIOR“ mit +Ockerlinie (neues Feld `eyebrow`), Untertitel „Wir vereinen CABINET, Rotpunkt Küchen, Febrü und ein +Netzwerk regionaler Experten …“, das erste Bild trägt in der Karte „B2in Interior“. Auf dem Server +setzt das der `HomeHeroTextSeeder`. + +**Nachbesserung 07.10. (4):** Gründer-Leiste auf der Startseite auf `bg-accent` (Verlauf Accent/Accent-dark +50 %). Der Hero-Stil der Startseite gilt jetzt auch für Marken, Über uns und Kontakt: Klasse `hero-frame` +(Goldverlauf, Hintergrund `linear-gradient(to bottom right, hsl(40, 5.65%, 95.65%), hsl(40, 15.95%, 93.9%))`, +nur in der Interior-Welt), weißer 1-px-Rand an den Bildern (`border-white!` – die globale Regel +`* { border-color }` in shared-styles.css schlägt sonst die Utility), Zeile über der Überschrift als +Komponente `x-web.hero-eyebrow` (Felder `eyebrow`; Kontakt: `hero.eyebrow`), im CMS ergänzt durch +`PageHeroEyebrowSeeder`. + +**Nachbesserung 07.10. (5):** Breadcrumb im Seitenkopf entfernt, Heroes oben/unten mit weniger +Abstand (lg 48 px). Vertrauenspunkte als Komponente `x-web.hero-trust` (Feld `stats`): Startseite +„Deutsche Manufakturen“, „Planung bis Montage“, „Zwei Showrooms in Bielefeld“; Marken „Maßarbeit vom +Handwerk“, „Werk und Ausstellung erlebbar“, „Küche, Einbau, Arbeitsplatz“ (`HeroTrustItemsSeeder`). + +**Nachbesserung 07.10. (6):** Gründer-Leiste auch unter dem Hero von /marken, auf /about und /marken +wie auf der Startseite mit `bg-accent`. + +**Nachtrag 25 · Aufräumen (07.10.2026):** Sicherungskopien (`sections_bak/`, `setup-wizard_bak`), doppelte +`AboutHero`-Klasse, ungenutzte Layouts und Starter-Vorlagen, Bildkopien, macOS-Metadaten, Bild +„Integriertes Modell“ und die Dubai-Karte nach `dev/2026-08-28/archiv-2026-10-07-aufraeumen/`. Dazu `/welcome` (Demo-Seite) und 118 ungenutzte +Bilder der ruhenden Domains b2a, Stileigentum und Style2own; die Domains selbst bleiben, `/theme-demo` bleibt. + +**Nachtrag 26 · Test-Routen nur lokal (07.10.2026):** `routes/test.php` (E-Mail-Vorschauen mit echten Namen +und Adressen, Login-Tests) lädt nur noch bei `APP_ENV=local`. Live liefern `/test/emails/…`, `/test-login`, +`/login-simple`, `/debug-login` und `/simple-test` im Portal 404. Auf dem Server `php artisan route:cache` neu bauen, +falls Routen gecacht sind. + +**Nachbesserung 07.10. (7):** /marken: Bildpause `marken.image_break` (Section `id="bild"` wie auf /about) +zwischen Markenblöcken und „Aus der Region gefertigt“, Bild = letztes Slideshow-Bild (Rotpunkt Bad), Zitat +Marcel Scheibe „Hinter jeder unserer Marken stehe ich persönlich. Ich kenne die Werke und die Menschen, die dort arbeiten.“ +Kein Seeder nötig – ohne CMS-Eintrag gilt die Lang-Datei; im Seitenbaum unter Marken → Bildpause pflegbar. + +**Nachbesserung 07.10. (8):** Startseite „Gebaut auf Expertise und Vertrauen“: Fläche `bg-secondary` +(Verlauf Ocker → Ocker dunkel), Inhalt in weißer Box mit Schatten, Porträt klein (4/12, 4:5) – Parameter +`boxed` an `vision-section`, die anderen Themes bleiben offen. Bildunterschrift mit `absolute!` (Glass-Flow-Regel). + +**Nachbesserung 07.10. (9):** „Expertise und Vertrauen“ in Ocker (`HomeVisionTitleSeeder`; in der weißen Box +gilt wieder Ocker statt der Tanne-Regel für Ockerflächen). „Aktuelles aus unserem Showroom“ in weißer Box; +„Größer ansehen“ öffnet das Display als Overlay über die volle Fensterhöhe (9:16), dort „Vollbild“ per +Fullscreen-API, wo der Browser es kann (nicht auf dem iPhone). Das große Display lädt erst beim Öffnen. + +**Nachbesserung 07.10. (10):** Hero-Slideshow: feine Laufzeit-Linie unten im Bild (füllt sich bis zum +Wechsel, hält bei Hover/Fokus an; Zähler über requestAnimationFrame statt setInterval). Punkte mit +unsichtbarer Klickfläche (py-4) um den Balken, ohne Glass-Flow-Button-Schatten. + +**Nachtrag 27 · CMS-Durchsicht (07.10.2026):** Section-Map, Seitenbaum, Datenbank und Lang-Datei decken sich +(41 Sektionen; Rechtstexte und Kontaktdaten laufen über eigene Helfer). Sections ohne DB-Eintrag (Termin-Widget, +Marken-Bildpause, Handwerk-Abschluss) lassen sich im Seitenbaum mit „+“ anlegen. Korrigiert: Markenliste +`brands` in „Kernmarken“ war im CMS ohne Wirkung (Kacheln aus der Markenverwaltung) – entfernt, Fallback liest +die Lang-Datei direkt. „Zur Marke“ in „Aus der Region gefertigt“ fehlte im CMS-Eintrag – `CmsSectionFieldsSeeder` +ergänzt fehlende Felder generell. Beschreibungen im Seitenbaum aktualisiert (eyebrow, stats, Bildpause, Vision). +Marken, Magazin, Projekte und Referenzen: alle Felder im Admin bearbeitbar. Alle 135 Bildpfade vorhanden. + +**Nachtrag 28 · Admin-Bildvorschauen (07.10.2026):** `media_url()` verwies für Bilder außerhalb der Mediathek +auf das nicht existierende `assets/images/` (404 in Marken, Magazin, Projekten, Referenzen) – jetzt +`img/assets/` wie `theme_image_url()`. Ungenutzte `cms_media_url()` entfernt. Alle 80 Bilder der +Admin-Ansichten lokal geprüft. + +**Nachtrag 29 · Bilder in der Mediathek (07.10.2026):** `AssetMediaImportSeeder` übernimmt die 82 Bilder, die +Marken, Magazin und CMS aus `public/img/assets/` verwenden, in die Mediathek (Sammlungen Marken, Magazin, +Website, mit Vorschaubild). Name = bisheriger Pfad, daher bleiben alle Verweise gültig. Die Website liefert weiter aus +`public/img/assets/` (WebP-Fassungen), der Admin zeigt die Mediathek-Kopie. Auf dem Server muss `storage:link` bestehen (sonst liefern Mediathek-Bilder 404). + +**Nachtrag 30 · Beschreibungen im Seitenbaum (07.10.2026):** alle Beschreibungen gegen die Seiten geprüft und +korrigiert – u. a. Hinweisleiste (über B2IN_ANNOUNCEMENT_BAR aus, Feld „enabled“), Abschluss „Termin anfragen“ +(nur Startseite und /referenzen), Fußbereich (Claim, byline, Links – kein Social Media), Showroom-Display +(display_id, „Größer ansehen“), Hero (Ersatzkarte/-bild), Geschichte (Zeitleiste), „AGB“ → Nutzungsbedingungen. + +## Nachtrag 31 · Korrekturen vom 08.10.2026 (`Korrekturen-2026-10-08.md`) + +- **Slideshow:** Febrü „Active 2.0 Büro“ an Position 4, „Elements Soul Großraum“ an Position 9 (WebP 1920 px). +- **Regional verbunden:** Arminia, TC Bad Salzuflen, TC Hiddenhausen (Logo war schon da, hieß „TC Hövelhof“), + TC Blau Weiss Halle – einheitliche Kurztexte, Kachel verlinkt auf die Vereinsseite, wo eine URL gepflegt ist + (neues Feld `url`, neuer Tab). TC Bad Waldliesborn-Horn raus, alte Logos im Archiv `archiv-2026-10-08/`. +- **Ablauf Maßanfertigung überall gleich:** Foto / Grundriss + grobe Maße → Beratung → Planung & Angebot → + Angebotsannahme → Anzahlung → professionelles Aufmaß → Feinplanung / Fertigungsfreigabe → Bestellung / Fertigung. + Angepasst: CABINET (Ablauf, „Aufmaß vor Ort“), Herkunft (Ablauf am Beispiel CABINET), Marken-Netzwerk + („Planung & Aufmaß“), Über uns (Zitat), FAQ (Beratung, Kosten). +- **Magazin:** Maßanfertigungs-Beitrag neu (Text von Marcel); Beitragsseite kann jetzt Absätze (Leerzeile im Text); + Abschluss „Weitere Einblicke rund um Einrichtung, Planung und Projekte …“; „Supply-Chain“ und „Local for Local“ + offline; Datum und Lesezeit deutsch („26. August 2026 · 5 Min. Lesezeit“). +- **FAQ Projektausstattung** nach heutiger Positionierung (ein Vertragspartner, Koordination, Netzwerk) ohne + Garantie-/Eskalationssprache. **Otterpohl:** „Das erhöht die Planungssicherheit deutlich.“ +- Gemeinsamer Ersetzungs-Baustein `Database\Seeders\Concerns\ReplacesCmsTexts` (auch vom Lektorats-Seeder genutzt). + +**Nachbesserung 08.10.:** Hero mobil – die Infokarte steht unter dem Bild (Bild 4:3 oben, Karte als weißer +Streifen darunter), ab lg schwebt sie wie bisher unten links. Karte weiß statt `bg-card`, damit die +Glass-Flow-Regel `[class*="card"]` nicht greift; `absolute!` entfällt. + + +--- + +## Nachtrag 32 · Git-Deploy, Monitoring und Ablauf für den Livegang (08.10.2026) + +- **Git-Deploy per Tag:** `dev/betrieb/deploy.sh` (aus `dev/git-deploy-monitoring/`) liefert nur Tags aus, + `origin` = forge.adametz.media, `NAS` = Sicherung. `public/build` ist jetzt versioniert. Neu: + `--seed=` (Seeder im Wartungsmodus) und `--initial` (Vorschau und Live einmalig an Ort und + Stelle auf Git umstellen, mit Code-Sicherung und Parken der Nur-Server-Dateien). + `.gitignore`: Das macOS-Muster `Icon` traf `resources/views/flux/icon/`, die vier Icons wären mit + Git-Deploy auf Live verloren gegangen; das Muster heißt jetzt `Icon[\r]`. +- **Monitoring:** GlitchTip (Server und Browser, Website und Portal), `/health` mit Token (jede Domain, + ohne Basic Auth), Scheduler-Herzschlag, Alarme bei fehlgeschlagenen Tasks per Mail und ntfy, + Version in `php artisan about` und `/health`. Pakete: `sentry/sentry-laravel`, `@sentry/browser`. +- **Livegang ohne Datenmigration:** Die Live-Datenbank bleibt die Grundlage (Displays, Playlists, + Mediathek, Benutzer), `InteriorReleaseSeeder` bringt die Website-Inhalte in einem Lauf auf den neuen + Stand. Er fasst alle Seeder aus 8.2 und „Seeder für das nächste Deployment“ zusammen, ist idempotent + (Test) und lässt Display-Daten unberührt. Ausnahme: Branding, nur bei Modulen ohne Interior-Logo; + `DisplayInteriorBrandingSeeder` überschreibt seit heute keinen inzwischen gepflegten Claim mehr. + Generalprobe: `dev/betrieb/vorschau-auffrischen.sh` kopiert Live-DB und Live-Medien in die Vorschau. +- **Ablauf:** `dev/betrieb/README.md`. Er ersetzt für den Livegang die Einzelbefehle aus 8.2 und die + Seeder-Liste oben. Die Prüfliste 8.3 gilt weiter. +- **Offen:** Datenschutzerklärung um die Fehlerprotokollierung ergänzen, bevor die DSNs auf Live gesetzt + werden (Textvorschlag in `dev/betrieb/README.md`, Abschnitt 6). diff --git a/dev/2026-08-28/farbwelt-kunde-24-09-2026.md b/dev/2026-08-28/farbwelt-kunde-24-09-2026.md new file mode 100644 index 00000000..986a4859 --- /dev/null +++ b/dev/2026-08-28/farbwelt-kunde-24-09-2026.md @@ -0,0 +1,69 @@ +1. Hero-Bereich / Slideshow +Das aktuelle große Hero-Bild würde ich gerne durch eine Slideshow mit unterschiedlichen Herstellern und Themen ersetzen, zum Beispiel: +Rotpunkt / Küche +CABINET +Febrü +Tischlerei / individueller Innenausbau +komplette Raum- und Einrichtungskonzepte +Wichtig wäre mir, dass ich diese Slideshow selbstständig pflegen und steuern kann, ähnlich wie unsere Displays. +Ideal wäre eine Möglichkeit im Backend, mit der ich: +Bilder selbst hochladen kann +die Reihenfolge verändern kann +einzelne Slides aktivieren oder deaktivieren kann +Bilder später unkompliziert austauschen kann +Die Slideshow selbst sollte dabei ruhig und hochwertig wirken – also langsame, dezente Übergänge und kein klassischer Werbebanner-Effekt. + +2. Darstellung und Größe des Hero-Bildes +Wichtig wäre mir außerdem, dass das Hero-Bild auf größeren Bildschirmen nicht unten abgeschnitten wird. +Auf meinem Monitor – ich meine, es sind 27 Zoll – wird das aktuelle Motiv unten sichtbar beschnitten. Dadurch wirkt der Bildausschnitt aus meiner Sicht nicht ganz stimmig. +Bei der mitgeschickten Visualisierung ist das wesentlich besser gelöst: Das Motiv ist nahezu vollständig sichtbar und bekommt dadurch deutlich mehr Wirkung. +So würde ich es gerne haben – natürlich responsive für unterschiedliche Bildschirmgrößen. + +3. Headline +Die bisherige Headline würde ich gerne ändern zu: +„Räume aus einer Hand. Mit starken Marken und persönlichen Lösungen.“ +Die Formulierung B2in Interior kann dabei gerne, ähnlich wie in der Visualisierung, etwas zurückhaltender oberhalb bzw. im Umfeld der Headline eingesetzt werden. + +4. Obere Aktionsleiste +Die derzeitige Aktionsleiste ganz oben würde ich komplett entfernen. +Ohne diese Leiste wirkt die Seite aus meiner Sicht ruhiger, klarer und insgesamt hochwertiger. + +5. Buttons im Hero +Den zusätzlichen Button „Termin anfragen“ neben „Unsere Marken entdecken“ würde ich entfernen. +Der feststehende Button „Termin anfragen“ rechts unten soll dagegen bestehen bleiben. +Damit gibt es im eigentlichen Hero einen klaren Hauptbutton: +„Unsere Marken entdecken“ + +6. Persönliches Foto +Ein Foto von mir würde ich gerne dezent und hochwertig auf der Seite integrieren. +Nicht im Hero und auch nicht zu dominant, sondern an einer passenden Stelle weiter unten – zum Beispiel in Verbindung mit dem persönlichen B2in-/Marcel-Scheibe-Bereich. + +7. Text Projektgeschäft +Die bisherige Formulierung mit „deutscher Vertragssicherheit“ würde ich gerne ersetzen durch: +„Vollständige Einrichtung für Objekte, Büros und Projektentwicklungen – koordiniert aus einer Hand, von der Küche bis zur letzten Blume. Mit einem zentralen deutschen Vertragspartner und einem eingespielten Herstellernetzwerk.“ + +8. Farbwelt und Stil +Die bisherige Farbwelt würde ich nicht weiterverfolgen. Die neue Richtung gefällt mir deutlich besser, ich würde sie allerdings noch etwas heller, klarer und hochwertiger gestalten. +Das beigefügte Bild zeigt die Richtung aus meiner Sicht schon sehr gut. +Besonders wichtig wären mir dabei: +ein heller, leicht kühler Grundton +kein reines bzw. steriles Weiß +eher ein sehr helles, modernes Greige / Off-White +ein deutlich präsenteres und klareres Tannengrün +Gold nur als feiner Akzent +Gerade die Kombination aus Tannengrün und einer sehr dünnen Goldlinie gefällt mir gut. +Im beigefügten Beispiel sieht man das unter anderem: +an der feinen goldenen Umrandung des Hero-Bereichs +in Verbindung mit den tannengrünen Flächen +am Button „Unsere Marken entdecken“, der ebenfalls eine feine Goldkante bzw. einen Goldakzent erhält +bei kleinen Linien und Details +Genau so würde ich Gold einsetzen: nicht flächig und nicht dekorativ-verspielt, sondern sehr reduziert als hochwertiges Detail. +Die Kombination aus hellem Untergrund + kräftigem Tannengrün + sehr feinem Gold trifft für mich die gewünschte Richtung inzwischen ziemlich gut. + +9. B2in-Logo an die neue Farbwelt anpassen +Wenn wir die Farbwelt entsprechend weiterentwickeln, sollte sich das aus meiner Sicht konsequenterweise auch im B2in-Logo widerspiegeln. +Der Bogen über dem B2in-Schriftzug ist aktuell eher in einem Ocker-/Senfton gehalten. Diesen würde ich gerne auf den neuen Goldton umstellen, den wir auch für die feinen Linien und Akzente auf der Website verwenden. +Damit würde sich die Farbsprache durchgängig wiederfinden: +Tannengrün + Gold + heller, neutraler Grundton. +Ich würde dich daher bitten, die vorhandenen Logo-Varianten entsprechend anzupassen, sodass der bisherige Ockerton konsequent durch den neuen Goldton ersetzt wird und Website und Logo anschließend exakt dieselbe Farbwelt verwenden. +Wichtig wäre mir auch hier, dass das Gold edel und zurückhaltend bleibt – also kein gelblicher oder zu glänzender Goldton, sondern eher ein moderner, gedeckter Premium-Goldton wie in der beigefügten Visualisierung. \ No newline at end of file diff --git a/dev/2026-08-28/feedback-17-09-2026.md b/dev/2026-08-28/feedback-17-09-2026.md new file mode 100644 index 00000000..d6521381 --- /dev/null +++ b/dev/2026-08-28/feedback-17-09-2026.md @@ -0,0 +1,83 @@ +#1 + +Die Richtung passt deutlich besser: locker, verständlich und ohne typischen Werbeprospekt-Ton. + +Besonders gut finde ich den Einstieg „Für den Anfang reicht uns ein Bild und ein grobes Maß völlig aus.“ Der nimmt sofort eine Hürde. Auch „Sie müssen also nicht erst alles millimetergenau ausmessen“ spricht genau die Frage an, die ein Kunde wahrscheinlich im Kopf hat. + +Nur zwei Stellen würde ich noch ändern: „valides Angebot“ klingt im ansonsten lockeren Text etwas technisch. Ich würde „ein wirklich brauchbares Angebot“ oder „ein konkretes Angebot“ schreiben. Und statt „zu Ihnen nach Hause“ lieber „bei Ihnen vor Ort“, weil ihr ja nicht ausschließlich Privatwohnungen plant. + +Dann wäre meine Fassung: + +Für den Anfang reicht uns ein Bild und ein grobes Maß völlig aus. + +Sie müssen also nicht erst alles millimetergenau ausmessen. Ein paar Fotos von der Raumsituation und die ungefähren Maße reichen, damit wir schon eine gute Planung machen und Ihnen ein konkretes Angebot erstellen können. + +Danach gehen wir gemeinsam ins Detail: Aufteilung, Ausstattung, Materialien, Farben und natürlich der Preis. + +Wenn alles grundsätzlich passt, kommen wir zum professionellen Aufmaß bei Ihnen vor Ort. Danach machen wir die Feinplanung fertig und geben den Schrank zur Bestellung frei. + +So läuft’s: + +Foto + grobe Maße → Beratung → Planung & Angebot → Aufmaß vor Ort → Feinplanung → Bestellung + +Das wäre für mich ziemlich genau die richtige Mischung aus persönlich, unkompliziert und trotzdem hochwertig. + + + +#2 Febrü + +Ja. Ich würde wirklich nur die vereinbarten Stellen ändern und den Rest der Seite lassen. Die aktuelle Seite hat diese Passagen an den entsprechenden Stellen. + +Bei uns gibt es Kunden – keine Schubladen + +Ob Privatkunde oder Unternehmen: Für uns gibt es zunächst einmal Kunden mit unterschiedlichen Räumen, Anforderungen und Stückzahlen. + +Natürlich beeinflusst die Menge den Preis. Fünfzig Arbeitsplätze werden anders kalkuliert als ein einzelner Schreibtisch fürs Homeoffice. Der Anspruch an Produkt, Beratung und Service bleibt trotzdem derselbe. + +Febrü bleibt Febrü. B2in bleibt B2in. Und jeder Kunde erhält eine Lösung, die zu seinem tatsächlichen Bedarf passt. + +Ob im Kleinen oder im Großen – die Detailtreue entscheidet. + +Aus Herford. Für moderne Arbeitswelten. + +Febrü entwickelt und produziert hochwertige Büromöbel direkt im ostwestfälischen Herford – nur wenige Kilometer von Bielefeld entfernt. Eine sehr hohe Fertigungstiefe ermöglicht kurze Wege, verlässliche Qualität und hohe Flexibilität bei Materialien, Farben und individuellen Anforderungen. + +Das ist auch sachlich sauber: Febrü selbst spricht aktuell von einer hohen Fertigungstiefe und nennt auf der Unternehmensseite weiterhin 95 %. Mit „sehr hohe Fertigungstiefe“ seid ihr also auf der sicheren Seite, ohne euch an eine konkrete Zahl zu binden. + +Wertschätzung ist keine Frage der Stückzahl + +Gerade in Zeiten des Fachkräftemangels können Unternehmen es sich nicht leisten, Arbeitsbedingungen als Nebensache zu behandeln. Wer Top-Leistung erwartet, muss die passenden Voraussetzungen schaffen. Ein Obstkorb und kostenloses Wasser sind freundlich – ersetzen aber keinen guten Arbeitsplatz. + +Besonders deutlich wird das bei Menschen, die Beruf und Familie miteinander organisieren. Teilzeit bedeutet nicht halbe Leistung. Oft wird in einem kürzeren Zeitfenster hoch konzentriert gearbeitet, während gleichzeitig Schule, Termine, Betreuung und der ganz normale Familienalltag organisiert werden müssen. + +Gerade hier darf der Arbeitsplatz kein Provisorium aus Küchentisch, Beistelltisch oder Schlafzimmerecke sein. Er muss sofort funktionieren, Bewegung ermöglichen, technisch durchdacht sein und sich trotzdem vernünftig in das Zuhause einfügen. Für den Menschen, der ihn täglich nutzt, ist ein einzelner Arbeitsplatz keine kleine Lösung. Er ist seine vollständige Arbeitswelt. + +Unverändert lassen + +„Nicht drei Marken. Ein durchgängiger Raum.“ würde ich komplett so stehen lassen. Das Zusammenspiel von Febrü, Rotpunkt, CABINET und B2in ist dort sehr gut erklärt. + +„Das Wir und das Ich“ ebenfalls unverändert lassen. Gerade der Einstieg „Ja, ja – das könnte man unter dem üblichen Verkaufs-Blabla abheften“ gibt der Seite Persönlichkeit und passt zum restlichen Ton. + +Beim doppelten Satz „Ob im Kleinen oder im Großen – die Detailtreue entscheidet.“ würde ich die erste Version oben stehen lassen und die zweite Version nach „Erleben statt nur aus dem Katalog auswählen“ löschen. Aktuell steht er tatsächlich zweimal auf der Seite. + +Den mitlaufenden CTA würde ich ebenfalls nicht verändern. + + +#3 Rotpunk + +#a text erstezen "Mehr als Küchen" +Mehr als Küchen + +Die Möglichkeiten von Rotpunkt enden nicht bei der klassischen Küche. Das Möbel- und Planungssystem lässt sich auch für Hauswirtschaftsräume, Badezimmer, Sideboards, Wohnmöbel und weitere Bereiche rund um das Wohnen einsetzen. + +Materialien, Farben und Gestaltungselemente können dabei über mehrere Räume hinweg aufgegriffen werden. So entsteht ein stimmiges Gesamtbild, statt in jedem Raum wieder ganz von vorne anzufangen. + +Bei Bedarf denken wir den Innenraum deshalb auch über die Küche hinaus – von Möbeln und Beleuchtung bis zu Tapeten, Fußböden und, wenn es sein soll, der letzten Blume. + +#b Thema Handwerk +Das Thema Handwerk am Ende von Rotpunkt sollte so formuliert sein, dass es bei jeder Marke als letzte Ergänzung angezeigt wird + +#3 Cabinet +"Die Fragen die wir vorher stellen" +zweiter Absatz ersetzen: +Auch die Dinge, die man nicht jeden Tag braucht, gehören in die Planung: Wäschekörbe, Bügelbrett, Staubsauger, Karnevalskostüme oder besondere Sportsachen. Wenn wir vorher wissen, was untergebracht werden soll, können wir den Platz direkt sinnvoll dafür einplanen. \ No newline at end of file diff --git a/dev/2026-08-28/lektorat-rueckfragen-06-10-2026.md b/dev/2026-08-28/lektorat-rueckfragen-06-10-2026.md new file mode 100644 index 00000000..005fb757 --- /dev/null +++ b/dev/2026-08-28/lektorat-rueckfragen-06-10-2026.md @@ -0,0 +1,87 @@ +# Lektorat 06.10.2026 – offene Punkte zur Entscheidung + +> **Entschieden 06.10.:** interne Notizen /immobilien entfernt · „unsere Tischlerei“ → „die Tischlerei +> Otterpohl“ · Rechtstexte aktualisiert · Immobilien-Daten bleiben wie sie sind. +> E-Mail ist info@b2in.eu (Impressum angepasst); Hosting Hetzner Cloud, Domains und E-Mail bei +> united-domains – in der Datenschutzerklärung ergänzt (neuer Abschnitt 2). + +Eindeutige Fehler sind korrigiert (`ProofreadingCorrectionsSeeder`, Lang-Dateien, Marken-Seeder, +`immobilien-azizi.json`). Hier steht, was eine inhaltliche Entscheidung braucht. Geprüft wurde nur, was +tatsächlich angezeigt wird, auf Deutsch (die Seite hat keinen Sprachwechsel). + +## Dringend: interne Notizen öffentlich sichtbar (/immobilien) + +- Jede Projektseite zeigt eine Kachel **„Datenqualität“** mit „Direkt belegt“, **„Vor Livegang final prüfen“** + oder „Nur als Anfragewert nutzen“ (`ui.confidence_labels`). Vorschlag: Kachel entfernen. +- Weitere Arbeitsnotizen im Text: „SharePoint mit Completion Photos und Floor Plans“ (Projekt 13), + „Für B2in sollte hier besonders geprüft werden“ (20), Übergabe „Q4 2026, final prüfen“ / „je Quelle, final + prüfen“ (17, 24), Status „Bestand / Details prüfen“, „Commercial / Projektübersicht“, „Als eigener + Standortfilter für JVC relevant“ (18). + +## Alte Netzwerk-/Partner-Ausrichtung + +- **Über uns, Abschluss** („Wachsen Sie mit uns … ob als Immobilienentwickler, Einrichtungsexperte, + Hersteller oder Makler“, Button „Werden Sie B2in-Partner“): neu texten oder Block entfernen? +- **FAQ**: „Wie kann ich Partner bei B2in Interior werden?“ und „Wie werde ich Partner im regionalen + Netzwerk?“ – doppelt und alte Ausrichtung. Die FAQ zeigt zwei Listen (Fragen oben, Rubriken darunter), + die sich auch bei Projektausstattung/Termintreue überschneiden. +- FAQ-Antwort Projektgeschäft: „eskalieren … sofort auf Managementebene … absolute Vertragssicherheit“. +- Startseite, Karte Zuhause: „unser Fachhandels-Netzwerk“. +- Magazin-Beitragsseite, Abschluss: „… und das B2in-Ökosystem“. +- „Partner-Login“ im Menü, Kontakt-Betreff „Zusammenarbeit im Netzwerk“, „Mehr als Marken: unser Netzwerk“ + (/marken) – bewusst so? +- Immobilien-Welt, Über B2in: Geschichte („Netzwerk … Sichtbarkeit für den Fachhandel“), Karte „Connecting + Design and Property“ (englisch). +- Magazin 11 (Supply-Chain-Management) und 12 (Local for Local, Marktplatz) stehen in der Interior-Welt. + Gibt es diese Leistungen noch? + +## Otterpohl / Tischlerei + +- Auf der Startseite heißt es „unsere Tischlerei“ (Herkunft), auf den Markenseiten „Zusammenarbeit mit + Otterpohl“. Eigene Tischlerei oder Partner? +- Handwerk-Abschluss auf jeder Markenseite nennt nur „CABINET, Rotpunkt und Febrü“. +- Herkunft: „Aus der Region gefertigt“ neben „Gefertigt in Köln“ (CABINET). +- Montage-Abschnitt: „Flexibler Renovierungsschutz“ beschreibt die Einlagerung; „lagern Möbel zwischen“ + steht im nächsten Punkt noch einmal. +- „Aber dennoch easy to get“ – „aber“ und „dennoch“ doppelt (Slogan, ggf. gewollt). + +## Markentexte (vom Kunden freigegeben – nur Hinweise) + +- CABINET: Prozesszeile „Foto + grobe Maße → Beratung → Planung & Angebot“ widerspricht dem Text (erst + Planung/Angebot, dann Beratung). „beraten und geplant im CABINET Store“. „Beides ist richtig“ nach drei + Varianten. Store vs. Showroom Bielefeld. +- Rotpunkt: Teaser und Zusammenfassung beginnen wortgleich; Greenline-Absatz wiederholt sich. +- Febrü: Doppelungen (Kunden/Anforderungen, Fertigungstiefe 3×), „Unsere Startseite führt …“ auf einer + Markenseite, „Mitarbeitende“ vs. „Mitarbeiter“. +- Mehrere Absätze stehen bei CABINET und Rotpunkt wortgleich (Wiedererkennung gewollt?). + +## Rechtstexte (bitte juristisch prüfen lassen) + +- Impressum: „§ 5 TMG“, „§§ 7–10 TMG“ → seit 14.05.2024 DDG; „§ 55 Abs. 2 RStV“ → § 18 Abs. 2 MStV; + „Amtsg.“ ausschreiben; Überschrift „EU-Streitschlichtung“ (OS-Plattform seit 20.07.2025 abgeschaltet). +- Datenschutz/Cookies: „TTDSG“ → TDDDG; „IP-Anonymisierung“ gibt es in GA4 nicht mehr; Beispiele nennen + Immobilien-Investment/Supply-Chain, nicht die Interior-Leistungen; Hoster, Log-Speicherdauer prüfen. +- Nutzungsbedingungen: Markenbeschreibung „Connecting Design and Property“, Lissabon-Projekte, + „Partner-Portal“, „(WICHTIG!)“ in einer Überschrift; Stand 13.03.2026. + +## Immobilien (/immobilien) – Daten + +- Preise in drei Schreibweisen („From AED 1.83M“, „ab AED 1,83M“, „ab 1.125.000 AED“), englisches „From“ + an ca. 54 Stellen. Vorschlag: einheitlich „ab 1,83 Mio. AED“. +- „Ein-Zimmer-/Zwei-Zimmer-Apartments“ für 1-/2-Bedroom (17 Stellen) – in Deutschland ist 1 Bedroom eine + 2-Zimmer-Wohnung. +- Englische Fragmente: Units, Villas, Buildings, Homes, Parking, New Release, Lagoon-style Pool, Floor Plans; + Einheiten-Felder in Versalien („STUDIO, 1, 2 BEDROOMS“); vier Projekttitel in Versalien. +- Widersprüche: Neila und Amber beide „jüngste Adresse“; Sikander „zugänglichste“ obwohl andere günstiger; + Einheitentypen bei 45, 46, 54; Straße bei 47; „Bestand“ bei Off-Plan-Projekten (45, 53, 36); JVC „Metro- + Anbindung“; JAFZA-Größe; Übergabetermine in der Vergangenheit (9, 14); gleiche Zahlen bei Plaza/Star und + Shaista/Farishta (Copy-and-paste?). +- Magazin 9: feste Zusagen zu Rendite/Wertsteigerung vs. Nutzungsbedingungen („keine Gewähr“). + +## Kleinigkeiten + +- Kontakt: Vorwahl 05221 (Herford) bei Standort Bielefeld (0521)? +- Sponsoring: Vereinsname „TC Bad Waldliesborn-Horn“ prüfen. +- FAQ-Antwort „über das Formular auf dieser Seite“ – die FAQ-Seite hat kein Formular. +- Über uns, Zeitleiste: Titel „Die Erweiterung“ (Globus) passt nicht mehr zum Inhalt (Fokussierung). +- Showroom (Einzahl, Bielefeld) vs. „Showrooms“ an anderen Stellen. diff --git a/dev/2026-08-28/logos/B2In-Logo-negativ-2025-09-22_RGB.svg b/dev/2026-08-28/logos/B2In-Logo-negativ-2025-09-22_RGB.svg new file mode 100644 index 00000000..0f6335a4 --- /dev/null +++ b/dev/2026-08-28/logos/B2In-Logo-negativ-2025-09-22_RGB.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + diff --git a/dev/2026-08-28/logos/B2In-Logo-positiv-2025-09-22_RGB.svg b/dev/2026-08-28/logos/B2In-Logo-positiv-2025-09-22_RGB.svg new file mode 100644 index 00000000..6e1e1565 --- /dev/null +++ b/dev/2026-08-28/logos/B2In-Logo-positiv-2025-09-22_RGB.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + diff --git a/dev/2026-08-28/logos/B2In_Interior-Logo-negativ-2026-09-07_RGB.svg b/dev/2026-08-28/logos/B2In_Interior-Logo-negativ-2026-09-07_RGB.svg new file mode 100644 index 00000000..d7bcd586 --- /dev/null +++ b/dev/2026-08-28/logos/B2In_Interior-Logo-negativ-2026-09-07_RGB.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/2026-08-28/logos/B2In_Interior-Logo-positiv-2026-09-07_RGB.svg b/dev/2026-08-28/logos/B2In_Interior-Logo-positiv-2026-09-07_RGB.svg new file mode 100644 index 00000000..dbead3fa --- /dev/null +++ b/dev/2026-08-28/logos/B2In_Interior-Logo-positiv-2026-09-07_RGB.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/2026-08-28/markenlogos/cabinet_logo_2026.svg b/dev/2026-08-28/markenlogos/cabinet_logo_2026.svg new file mode 100644 index 00000000..7957e0b8 --- /dev/null +++ b/dev/2026-08-28/markenlogos/cabinet_logo_2026.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + diff --git a/dev/2026-08-28/markenlogos/februe_Logo_2022.png b/dev/2026-08-28/markenlogos/februe_Logo_2022.png new file mode 100644 index 00000000..5dfc33d3 Binary files /dev/null and b/dev/2026-08-28/markenlogos/februe_Logo_2022.png differ diff --git a/dev/2026-08-28/markenlogos/otterpohl.jpg b/dev/2026-08-28/markenlogos/otterpohl.jpg new file mode 100644 index 00000000..31bb7d18 Binary files /dev/null and b/dev/2026-08-28/markenlogos/otterpohl.jpg differ diff --git a/dev/2026-08-28/markenlogos/rotpunkt_logo_2020.svg b/dev/2026-08-28/markenlogos/rotpunkt_logo_2020.svg new file mode 100644 index 00000000..bb84b63f --- /dev/null +++ b/dev/2026-08-28/markenlogos/rotpunkt_logo_2020.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/2026-08-28/otterpohl_Webseitentext_FINAL.md b/dev/2026-08-28/otterpohl_Webseitentext_FINAL.md new file mode 100644 index 00000000..1fcc83be --- /dev/null +++ b/dev/2026-08-28/otterpohl_Webseitentext_FINAL.md @@ -0,0 +1,131 @@ +Otterpohl – nicht „easy to click & buy“, aber trotzdem easy to get +Vieles kann man heute online finden, konfigurieren und direkt bestellen. Und das ist auch gut so. +Aber manchmal möchte man etwas Besonderes. Eine eigene Idee. Ein Möbel, das genau so aussehen soll, wie man es im Kopf hat. Ein ungewöhnliches Detail. Eine besondere Kombination aus Materialien. Oder einfach etwas, das man so auf keiner Webseite und auch nicht im Handel findet. +Und manchmal beginnt es nur mit einem Foto und dem Satz: +„So ungefähr – aber eben für mich.“ +Das ist vielleicht nicht „easy to click & buy“. +Aber es darf trotzdem easy to get sein. +Denn genau dafür sind wir da: Sie bringen die Idee mit – und wir kümmern uns gemeinsam mit Otterpohl um Planung, handwerkliche Umsetzung und Montage. +Mit unseren Möbelpartnern können wir bereits sehr individuell planen. Mit Otterpohl kommen zusätzlich Tischlerhandwerk, individuelle Fertigung, besondere Oberflächen und Innenausbau dazu. +Und genau diese Kombination erweitert unsere Möglichkeiten noch einmal erheblich. +Ziemlich nah an der eierlegenden Wollmilchsau +Der Begriff ist vielleicht nicht besonders elegant. +Aber ganz falsch ist er nicht. +Individuelle Möbel und Sonderanfertigungen. Lackierungen nach Wunsch. Echtholzfurniere. Verkleidungen. Ergänzungen. Anpassungen. Innenausbau. Trockenbauwände. Individuelle Lösungen direkt vor Ort. +Und ganz wichtig: +inklusive Montage. +Damit endet die Arbeit eben nicht am Möbel. +Wenn für eine gute Lösung noch eine Trockenbauwand entstehen muss, Technik verschwinden soll, eine Verkleidung gebraucht wird oder verschiedene Elemente sauber miteinander verbunden werden müssen, kann auch das Teil des Projekts sein. +Für uns ist genau das der große Vorteil: +Planung, Tischlerhandwerk, Innenausbau und Montage greifen ineinander. +Nicht erst das Möbel planen, danach einen Trockenbauer suchen, anschließend jemanden für die Anpassung und am Ende noch ein Montageteam koordinieren. +Sondern möglichst alles aus einer Hand – und am Ende auch optisch aus einem Guss. +Seit 2014 an unserer Seite +Otterpohl ist für uns kein Partner, den wir irgendwann für diese Webseite entdeckt haben. +Wir arbeiten bereits seit 2014 bei der Montage zusammen. +Und das ist für uns wesentlich mehr als eine kleine Fußnote. +Denn ein hochwertiges Möbel ist am Ende nur so gut wie seine Montage. +Saubere Fugen. Präzise Anschlüsse. Passleisten, die tatsächlich zur Wand passen. Fronten, die vernünftig eingestellt sind. Und Menschen vor Ort, die eine Situation nicht nur montieren, sondern auch handwerklich verstehen. +Gerade wenn Möbelbau, Tischlerarbeiten, Trockenbau und Innenausbau zusammenkommen, ist diese Erfahrung besonders wertvoll. +Nach so vielen Jahren weiß man ziemlich genau, mit wem man arbeitet. +Und bei einem Partner, den wir zu unseren Kunden schicken, finden wir das durchaus wichtig. +Farbe darf auch genau die Farbe sein +Bei manchen Projekten reichen drei ähnliche Farbtöne eben nicht. +Vielleicht soll ein Möbel exakt zu einer vorhandenen Wandfarbe passen. Zu einem anderen Möbel. Zu einem bestimmten Material. Oder Sie haben einfach diesen einen Farbton im Kopf und möchten genau den. +Dann ist „fast passend“ manchmal eben nicht passend genug. +Mit individuellen Lackierungen entstehen Möglichkeiten, die weit über eine normale Farbpalette hinausgehen. +Und genauso ist es bei den Materialien. +Manchmal ist eine hochwertige Dekoroberfläche genau richtig. +Manchmal soll es Lack sein. +Und manchmal möchte man eben echtes Holz – mit echter Maserung, echter Struktur und einem Echtholzfurnier, bei dem kein Möbelstück exakt aussieht wie das andere. +Das ist dann eben der echte Charakter eines Möbels. Nicht perfekt gleich – sondern genau deshalb besonders. +Manchmal gibt es die Idee schon – nur das Möbel noch nicht +Vielleicht haben Sie eine ziemlich genaue Vorstellung. +Vielleicht nur ein Foto, eine Skizze oder eine Idee, die Sie irgendwo gesehen haben. +Das reicht völlig. +Dann überlegen wir gemeinsam: Wie könnte man das umsetzen? Welche Proportionen passen? Welche Materialien? Lack oder Furnier? Welche Funktion soll das Möbel übernehmen? Und wie fügt sich alles in den Raum und in das ein, was bereits vorhanden ist? +Nicht jede gute Idee beginnt schließlich mit einer Artikelnummer. +Manchmal beginnt sie einfach im Kopf. +Aus der Idee wird eine Planung. +Aus der Planung ein Möbel. +Und irgendwann steht es tatsächlich da. +Nicht unbedingt easy to click & buy – aber am Ende trotzdem ziemlich easy to get. +Individuelle Planung kann viele Formen haben +Wir arbeiten bewusst mit unterschiedlichen Herstellern und Partnern. +CABINET, Rotpunkt und Febrü bieten bereits enorme Möglichkeiten, Möbel individuell zu planen. Maße, Farben, Materialien, Ausstattung und Funktionen können auf den Raum und auf die Menschen abgestimmt werden, die ihn später nutzen. +Mit Otterpohl erweitern wir diese Möglichkeiten um die handwerkliche Fertigung. +Ein Möbel nach eigenem Entwurf. Eine besondere Konstruktion. Eine individuelle Verkleidung. Eine Bank. Ein Tisch. Ein Wandpaneel. Eine spezielle Lackierung. Ein Echtholzfurnier. Oder einfach dieses eine Detail, das sich handwerklich besser lösen lässt. +Tischlerhandwerk ist damit für uns keine Alternative zu unserer Planung. +Es ist eine zusätzliche Möglichkeit innerhalb unserer Planung. +Nicht alles muss individuell gebaut werden +Auch das gehört für uns zu einer vernünftigen Beratung. +Nur weil ein Tischler etwas bauen kann, muss man nicht automatisch jedes Möbel individuell fertigen lassen. +Wenn ein hochwertiges Möbelsystem eine Aufgabe perfekt löst, nutzen wir dieses System. +Wenn eine individuelle Ergänzung sinnvoll ist, wird genau diese Ergänzung gebaut. +Und wenn die beste Lösung tatsächlich eine komplett freie Anfertigung ist, geht eben auch das. +Wir glauben nicht besonders an entweder oder. +Wir glauben eher daran, für jede Aufgabe die sinnvollste Lösung zu finden. +Ein Raum hört nicht am Möbel auf +Ein Interior-Projekt hält sich erstaunlich selten sauber an einzelne Gewerke. +Da steht vielleicht irgendwann das perfekte Möbel – aber daneben fehlt noch eine Wand. Eine Nische soll entstehen. Technik muss verschwinden. Eine Verkleidung wird gebraucht. Ein Übergang soll so aussehen, als wäre er von Anfang an genau so geplant gewesen. +Dann hilft es wenig, wenn jeder nur bis zur Grenze seines eigenen Gewerks schaut. +Wir möchten lieber, dass am Ende alles zusammenpasst. +Möbel, Wand, Verkleidung, Oberfläche und Montage sollen nicht wie fünf einzelne Entscheidungen aussehen, sondern wie eine einzige Planung. +Oder einfacher: +Alles aus einem Guss. +Der letzte Zentimeter kann ziemlich wichtig sein +Tischlerhandwerk zeigt seine Stärke übrigens nicht nur bei spektakulären Einzelstücken. +Manchmal geht es um Dinge, die auf einer Visualisierung kaum auffallen. +Eine Wand läuft etwas weg. Ein Boden ist nicht vollkommen eben. Ein vorhandenes Bauteil muss integriert werden. Ein Übergang braucht eine saubere Lösung. +Auf dem Bildschirm sieht so etwas meistens ziemlich einfach aus. +In einem echten Raum manchmal weniger. +Genau dort entscheidet sich häufig, ob etwas am Ende nur irgendwie passt – oder ob es wirklich so aussieht, als wäre es schon immer genau so gedacht gewesen. +Unser Anspruch ist deshalb ziemlich einfach: +Man soll am Ende nicht sehen, wo es kompliziert war. +Gute Planung endet nicht am Bildschirm +Wir planen, visualisieren, bemustern und verändern. +Aber irgendwann muss jede Idee den Bildschirm verlassen. +Dann gibt es echte Wände, echte Böden, echtes Material und meistens mindestens eine Kleinigkeit, die auf keiner Zeichnung so richtig auffallen wollte. +Deshalb gehören für uns Planung und Handwerk zusammen. +Denn am Ende interessiert niemanden, welche technische Herausforderung wir irgendwo lösen mussten. +Es soll funktionieren. +Es soll gut aussehen. +Und es soll möglichst so wirken, als wäre es genau so immer gedacht gewesen. +Handwerk darf trotzdem modern sein +Beim Wort Tischlerei denken manche immer noch an dunkles Holz, schwere Möbel und eine Hobelbank. +Kann alles schön sein. +Ist aber nur ein kleiner Ausschnitt dessen, was heute möglich ist. +Modernes Tischlerhandwerk kann genauso geradlinig, reduziert und architektonisch sein. +Lackierte Oberflächen. Echtholzfurniere. Moderne Plattenwerkstoffe. Kombinationen verschiedener Materialien. Filigrane Konstruktionen oder ganz bewusst massive Elemente. +Am Ende entscheidet nicht die Vorstellung davon, wie ein „Tischlermöbel“ auszusehen hat. +Sondern die Idee dahinter. +Und genau das finden wir spannend. +Eine kleine Idee bleibt trotzdem eine gute Idee +Es muss übrigens nicht immer gleich der komplette Innenausbau sein. +Vielleicht fehlt nur ein Tisch. +Ein Regal. +Eine Bank. +Eine besondere Ablage. +Oder dieses eine Möbel, das man weder online noch im Handel so findet, wie man es eigentlich gerne hätte. +Dann sprechen wir darüber. +Nicht jede gute Idee muss automatisch ein großes Projekt werden. +Manchmal ist ein einziges besonderes Möbel genau das, was einem Raum noch gefehlt hat. +Aus Rheda-Wiedenbrück. Und ziemlich nah dran. +Otterpohl kommt aus Rheda-Wiedenbrück. +Das ist für uns nicht nur geografisch angenehm. +Gerade bei individuellen Projekten sind kurze Wege und direkte Kommunikation ziemlich wertvoll. +Man kennt sich. Man spricht miteinander. Man kann Situationen gemeinsam beurteilen und Lösungen entwickeln. +Und wenn etwas vor Ort anders aussieht als auf dem Papier, braucht es nicht erst fünf E-Mails und drei Weiterleitungen. +Dann braucht es jemanden, der sich die Sache anschaut und sagt: +„Okay. Kriegen wir hin.“ +Nach mehr als zehn Jahren gemeinsamer Projekte wissen wir ziemlich gut, was damit gemeint ist. +Planung trifft Handwerk +Am Ende geht es uns nicht darum, möglichst viele Marken und Partner auf unserer Webseite unterzubringen. +Es geht darum, möglichst viele gute Möglichkeiten zu haben. +Mit unseren Möbelpartnern können wir sehr individuell planen. +Mit Otterpohl kommen Tischlerhandwerk, freie Fertigung, individuelle Lackierungen, Echtholzfurniere, Innenausbau, Trockenbau und die handwerkliche Umsetzung inklusive Montage dazu. +Alles aus einer Hand. Und am Ende möglichst alles aus einem Guss. +Manchmal gibt es die passende Lösung schon. +Manchmal muss man sie planen. +Und manchmal muss man sie eben bauen. +Nicht immer easy to click & buy. Aber trotzdem easy to get. \ No newline at end of file diff --git a/dev/2026-08-28/otterpohl_Webseitentext_FINAL_v2.md b/dev/2026-08-28/otterpohl_Webseitentext_FINAL_v2.md new file mode 100644 index 00000000..d12d359a --- /dev/null +++ b/dev/2026-08-28/otterpohl_Webseitentext_FINAL_v2.md @@ -0,0 +1,41 @@ +Ziemlich nah an der eierlegenden Wollmilchsau +Der Begriff ist vielleicht nicht besonders elegant. Aber ganz falsch ist er nicht. +Individuelle Möbel. Türen. Treppen. Küchen. Wandverkleidungen. Objektbau. Sonderanfertigungen. Lackierungen und Echtholzfurniere. Bis hin zum kompletten Innenausbau. +Mit Otterpohl Möbelservice haben wir einen Partner an unserer Seite, bei dem die Möglichkeiten nicht am einzelnen Möbelstück aufhören. +Denn manchmal braucht ein Raum mehr als einen Schrank oder ein Sideboard. Vielleicht soll eine Treppe Teil des Gestaltungskonzepts werden. Eine Wand erhält eine individuelle Holzverkleidung. Eine Tür soll sich selbstverständlich in den Raum einfügen. Oder Möbel, Materialien und bauliche Elemente müssen so zusammenspielen, dass am Ende alles wie aus einem Guss wirkt. +Genau dort beginnt der individuelle Innenausbau. +Vom einzelnen Möbel bis zum ganzen Raum +Wir arbeiten mit Herstellern, die schon sehr viele individuelle Möglichkeiten bieten. CABINET, Rotpunkt und Febrü geben uns dafür eine starke Basis. +Aber es gibt Projekte, bei denen die Lösung darüber hinausgeht. +Mit Otterpohl Möbelservice können wir deshalb nicht nur individuelle Möbel und Sonderanfertigungen realisieren, sondern auch Türen, Treppen, Küchen, Wand- und Deckenverkleidungen sowie komplette Innenausbauten und Lösungen für den Objektbereich einbeziehen. +So können wir Räume ganzheitlicher denken – und Details nicht isoliert betrachten. +Planung trifft Handwerk +Manchmal entsteht die beste Lösung aus einem Möbelprogramm. Manchmal braucht es eine individuelle Ergänzung. Und manchmal muss etwas komplett neu gedacht und gebaut werden. +Genau diese Kombination macht für uns den Unterschied. +Wir planen den Raum und verbinden bei Bedarf unterschiedliche Hersteller, Materialien und handwerkliche Lösungen miteinander. Otterpohl Möbelservice ergänzt diese Planung um die Möglichkeiten einer klassischen Tischlerei und eines erfahrenen Innenausbauers. +Das Ergebnis kann ein einzelnes Möbel sein. +Oder ein kompletter Raum. +Leistungen und Möglichkeiten +Individuelle Möbel & Sonderanfertigungen +Möbel nach Maß, besondere Konstruktionen und individuelle Lösungen – nach Planung, Idee, Skizze oder konkreter Anforderung. +Innenausbau +Von einzelnen Ausbauarbeiten bis zum ganzheitlichen Raumkonzept – inklusive individueller Verkleidungen und maßgefertigter Einbauten. +Türen & Treppen +Individuelle Türen, Treppen und konstruktive Lösungen, die sich in Architektur und Einrichtung einfügen. +Küchen +Individuelle Küchenlösungen und handwerkliche Ergänzungen auch dort, wo klassische Küchenprogramme an ihre Grenzen kommen. +Wandverkleidungen & besondere Details +Holzverkleidungen, Lamellen, Paneele und individuelle Gestaltungselemente, die Architektur und Einrichtung miteinander verbinden. +Objektbau +Individuelle Lösungen für Büros, Verkaufsräume und gewerblich genutzte Flächen – vom Einzelmöbel bis zum kompletten Ausbau. +Lack & Echtholzfurnier +Individuelle Lackierungen und Furniere für Lösungen, bei denen Farbe, Material und Oberfläche exakt aufeinander abgestimmt werden sollen. +Montage +Die Umsetzung endet nicht bei der Fertigung. Entscheidend ist, dass Möbel, Ausbau und Raum am Ende auch vor Ort sauber zusammenkommen. +Das Ganze statt nur das Einzelne +Genau deshalb passt Otterpohl Möbelservice zu unserem Ansatz. +Wir möchten Räume nicht in einzelne Gewerke zerlegen. Wir möchten Lösungen schaffen, bei denen Möbel, Materialien, Architektur und handwerkliche Details zusammenpassen. +Mal braucht es dafür einen Hersteller. +Mal einen Tischler. +Und manchmal beides. +Nicht easy click & buy. Aber dennoch easy to get. \ No newline at end of file diff --git a/dev/2026-08-28/preview-deployment.md b/dev/2026-08-28/preview-deployment.md new file mode 100644 index 00000000..9e655c70 --- /dev/null +++ b/dev/2026-08-28/preview-deployment.md @@ -0,0 +1,343 @@ +# Vorschau-Instanz auf dem Live-Server einrichten + +**Ziel:** `https://preview.b2in.eu` zeigt den neuen Stand zur Abstimmung. **Die Live-Seite bleibt +unangetastet** – es wird keine einzige Datei im Live-Verzeichnis überschrieben und keine Zeile in +der Live-Datenbank geändert. + +**Prinzip:** zweites, eigenständiges Verzeichnis · eigene `.env` · eigene Datenbank. + +``` +/var/www/b2in/ ← Live, bleibt wie es ist +/var/www/b2in-preview/ ← Kopie davon, darauf das Update +``` + +> Pfade unten sind Beispiele. Ersetze `/var/www/b2in` durch das echte Live-Verzeichnis und +> `b2in_live` / `b2in_preview` durch die echten Datenbanknamen. + +--- + +## 0. Warum nicht einfach die Live-Dateien tauschen + +Zwei Gründe, die diesen Aufwand rechtfertigen: + +1. **Der Relaunch-Seeder überschreibt CMS-Sektionen.** `InteriorRelaunchCmsSeeder` schreibt 23 + Sektionen mit den neuen Texten. Auf der Live-Datenbank ausgeführt wäre der alte Stand weg. +2. **Migrationen sind nicht umkehrbar.** `cms_brands` und die beiden Spalten `summary` / + `highlights` kommen neu dazu. + +Mit einer eigenen Datenbank kann beim Testen nichts passieren, was die Live-Seite betrifft. + +--- + +## 1. Voraussetzungen + +- [ ] DNS-Eintrag `preview.b2in.eu` → dieselbe Server-IP wie `b2in.eu` +- [ ] SSL-Zertifikat für die Subdomain (Let's Encrypt genügt) +- [ ] vhost mit `DocumentRoot /var/www/b2in-preview/public` +- [ ] Zweite MySQL-Datenbank plus Benutzer +- [ ] Genug Plattenplatz für eine Kopie des Live-Verzeichnisses (vor allem `storage/`) + +--- + +## 2. Sicherung ziehen + +Auch wenn wir live nichts anfassen – der Dump ist zugleich die Grundlage für die Vorschau-DB. + +```bash +cd /var/www/b2in +mysqldump -u USER -p b2in_live > ~/b2in_live_$(date +%F_%H%M).sql +ls -lh ~/b2in_live_*.sql # Größe prüfen, darf nicht 0 sein +``` + +--- + +## 3. Vorschau-Verzeichnis anlegen + +Kopie des Live-Standes, **inklusive `vendor/`**. Das erspart ein `composer install` auf dem +Server – für `livewire/flux-pro` bräuchte es sonst die Zugangsdaten aus `auth.json`. + +```bash +cp -a /var/www/b2in /var/www/b2in-preview +cd /var/www/b2in-preview + +# Laufzeit-Reste der Kopie entfernen +rm -rf bootstrap/cache/*.php +rm -f public/storage # Symlink wird in Schritt 7 neu gesetzt +``` + +**Zu `storage/app/public` (Medienbibliothek, Display-Videos):** Durch `cp -a` liegt eine echte +Kopie in der Vorschau – sauber getrennt, kostet aber den Speicherplatz. Wenn das zu groß ist: + +```bash +rm -rf storage/app/public +ln -s /var/www/b2in/storage/app/public storage/app/public +``` + +⚠️ Mit dem Symlink landen **Uploads aus der Vorschau in den Live-Dateien**. Zum Anschauen in +Ordnung, zum Testen von Uploads nicht. Im Zweifel kopieren. + +--- + +## 4. `.env` der Vorschau anpassen + +Der wichtigste Schritt. Der `ThemeServiceProvider` sucht den aufgerufenen Host in +`config/domains.php` und setzt `URL::forceRootUrl()` samt Asset-Origin auf die dort hinterlegte +URL. Fehlt `DOMAIN_B2IN_URL`, greift der Vorgabewert **`https://b2in.test`** – eine Domain, die es +im Internet nicht gibt. Dann laden Bilder, Favicon und `livewire.min.js` nicht mehr. + +```bash +cd /var/www/b2in-preview +nano .env +``` + +Diese Werte ändern: + +```dotenv +APP_ENV=preview +APP_DEBUG=false +APP_URL=https://preview.b2in.eu +APP_DOMAIN_NAME=preview.b2in.eu + +# Vorschau-Domain, damit Routing, Links und Assets stimmen +DOMAIN_B2IN=preview.b2in.eu +DOMAIN_B2IN_URL=https://preview.b2in.eu + +# Assets ebenfalls auf die Vorschau-Domain, sonst laedt der Browser sie von woanders +ASSET_URL=https://preview.b2in.eu + +# Eigene Datenbank +DB_DATABASE=b2in_preview +DB_USERNAME=… +DB_PASSWORD=… + +# Eigener Cache-/Session-Namensraum, damit sich Live und Vorschau nicht ins Gehege kommen +CACHE_PREFIX=b2in_preview +SESSION_COOKIE=b2in_preview_session + +# Keine Mails aus der Vorschau verschicken +MAIL_MAILER=log +``` + +`APP_ENV=preview` sorgt automatisch für `noindex, nofollow` in jeder Seite +(`config/app.php` → `app.indexable`). Wer ganz sichergehen will, setzt zusätzlich +`SITE_INDEXABLE=false`. + +**Nicht ändern:** `APP_KEY` – sonst sind verschlüsselte Werte in der kopierten Datenbank +nicht mehr lesbar. + +--- + +## 5. Datenbank der Vorschau befüllen + +```bash +mysql -u USER -p -e "CREATE DATABASE b2in_preview CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" +mysql -u USER -p b2in_preview < ~/b2in_live_JJJJ-MM-TT_HHMM.sql +``` + +Gegenprobe, dass die Vorschau wirklich auf ihrer eigenen DB steht: + +```bash +cd /var/www/b2in-preview +php artisan tinker --execute="echo config('database.connections.mysql.database');" +# muss b2in_preview ausgeben – wenn hier b2in_live steht: STOPP +``` + +--- + +## 6. Update einspielen + +Das Archiv `dev/2026-08-28/deploy/b2in-interior-update.tar.gz` enthält genau die geänderten und +neuen Dateien plus die gebauten Assets (`public/build/b2in`, `public/build/portal`). **Node wird +auf dem Server nicht gebraucht.** Die enthaltene Dateiliste steht in `deploy/dateiliste.txt`. + +```bash +# Archiv hochladen, dann: +cd /var/www/b2in-preview +tar xzf ~/b2in-interior-update.tar.gz +``` + +Das Archiv enthält bewusst **keine** `.env`, kein `vendor/` und nichts aus `storage/`. + +--- + +## 7. Artisan-Schritte + +```bash +cd /var/www/b2in-preview + +php artisan config:clear +php artisan storage:link + +php artisan migrate --force # legt cms_brands an, ergänzt summary/highlights + +# Kernmarken anlegen – überschreibt nichts, was schon gepflegt ist +php artisan db:seed --class=CmsBrandSeeder --force + +# Die neuen Texte ins CMS: genau die 23 umgetexteten Sektionen +php artisan db:seed --class=InteriorRelaunchCmsSeeder --force + +# Magazin: die zwei neuen Beiträge plus Reihenfolge +php artisan db:seed --class=CmsArticleSeeder --force + +# Markenseiten CABINET, Rotpunkt und Febrü – nur Textfelder, Bilder und Galerie bleiben +php artisan db:seed --class=BrandPageTextSeeder --force + +# Entfernt den Vermerk „BEISPIEL – “ aus vorhandenen Bildunterschriften (Nachtrag 5). +# Nur nötig, wenn die Demogalerien schon eingespielt sind. Mehrfach ausführbar. +php artisan db:seed --class=BrandGalleryCaptionNormalizerSeeder --force + +# Markenlogos nachtragen. Setzt `logo` nur, wenn das Feld leer ist. +php artisan db:seed --class=BrandLogoSeeder --force + +# Display-Branding auf das Interior-Logo +php artisan db:seed --class=DisplayInteriorBrandingSeeder --force + +# Medien-URLs host-unabhängig (sonst zeigen vier Playlists auf b2in.test) +php artisan db:seed --class=DisplayMediaUrlNormalizerSeeder --force + +php artisan config:cache +php artisan route:cache +php artisan view:clear +``` + +> **Assets:** Das Archiv bringt `public/build/b2in` fertig mit. Wird auf dem Server selbst +> gebaut, gilt: `npm run build:web` baut **nur** die vier Frontend-Themes, nicht das Portal. +> Ohne `npm run build:portal` liefert das Admin-Portal danach 500. + +**Optional, nur für die Abstimmung:** Beispielbilder in die Markengalerien, damit Galerie, +Referenzen-Seite und Lightbox nicht leer sind. + +> ⚠️ Es sind Stockmotive und KI-Renderings, kein einziges echtes Projekt. Der frühere Vermerk +> „BEISPIEL" in der Bildunterschrift ist auf Kundenwunsch entfallen – die Bilder der Rubrik +> „Realisiertes Projekt" geben sich damit als echte Referenzen aus. Für die Abstimmung in +> Ordnung, **vor dem Livegang zwingend ersetzen**. + +```bash +php artisan db:seed --class=DemoBrandGallerySeeder --force +``` + +Wieder entfernen: + +```bash +php artisan tinker --execute="App\Models\CmsBrand::query()->update(['gallery' => null]);" +``` + +--- + +## 8. Vorschau abschirmen + +**Suchmaschinen** – `noindex` kommt schon aus `APP_ENV=preview`, die `robots.txt` gehört +zusätzlich umgestellt: + +```bash +printf 'User-agent: *\nDisallow: /\n' > /var/www/b2in-preview/public/robots.txt +``` + +**Passwortschutz** (empfohlen, damit die Vorschau nicht zufällig gefunden wird): + +```bash +htpasswd -c /etc/apache2/.htpasswd-preview vorschau +``` + +Apache: + +```apache + + AuthType Basic + AuthName "B2in Vorschau" + AuthUserFile /etc/apache2/.htpasswd-preview + Require valid-user + +``` + +Nginx: + +```nginx +auth_basic "B2in Vorschau"; +auth_basic_user_file /etc/nginx/.htpasswd-preview; +``` + +--- + +## 9. Prüfen + +| Seite | Erwartung | +|---|---| +| `/` | Hero → Marken-Teaser → Vision → Sponsoring → Showroom-Display → Immobilien → CTA | +| `/marken` | Grauer Seitenkopf mit Bild, drei gerahmte Markenblöcke | +| `/marken/cabinet` | Detailseite, Galerie mit den zwei Rubriken (falls Demo-Seeder lief) | +| `/marken/rotpunkt` | Neun Abschnitte, vier davon mit aufklappbarer Vertiefung; Button unten rechts heißt „Persönliche Küchenberatung vereinbaren" | +| `/marken/februe` | Elf Abschnitte, Zitat von Marcel; Button heißt „Persönliche Arbeitsplatzberatung vereinbaren" | +| `/referenzen` | Realisierte Projekte, darunter das Showroom-Display im Hochformat | +| `/magazin` | Die zwei Interior-Beiträge stehen oben | +| `/faq` | Rubriken „Für Ihr Zuhause" und „Für Projekte und Objekte" | +| `/about` | Werte: Beratung statt Verkauf, Maßarbeit, … | +| `/contact` | Betreffliste beginnt mit Beratungstermin | +| `/immobilien` | unverändert | + +Und diese vier Punkte: + +- [ ] Terminanfrage-Widget unten rechts öffnet sich, Absenden zeigt die Bestätigung +- [ ] Alle Links bleiben auf `preview.b2in.eu` – **springt einer auf `b2in.eu`, stimmt Schritt 4 nicht** +- [ ] Seitenquelltext enthält `` +- [ ] Die Live-Seite `https://b2in.eu` sieht unverändert aus + +--- + +## 10. Aufräumen + +Vorschau wieder abbauen: + +```bash +rm -rf /var/www/b2in-preview +mysql -u USER -p -e "DROP DATABASE b2in_preview;" +# vhost und DNS-Eintrag entfernen +``` + +Beim späteren echten Livegang gilt **Abschnitt 8 des Entwicklungsplans**, nicht dieses Dokument. +Vorher offen: Rechtstexte, OG-Bild, Seeder-Passwort rotieren. + +--- + +## Wenn etwas nicht stimmt + +| Symptom | Ursache | +|---|---| +| **„Kein Server mit dem angegebenen Hostnamen gefunden" für Bilder, Favicon, `livewire.min.js`** | `DOMAIN_B2IN_URL` fehlt oder ist falsch geschrieben → Vorgabewert `https://b2in.test`. Siehe Diagnose unten. | +| Links springen auf `b2in.eu` | `DOMAIN_B2IN` / `DOMAIN_B2IN_URL` in Schritt 4 nicht gesetzt, oder `config:cache` fehlt | +| Seite ohne Styles | `public/build/b2in` fehlt – Archiv nicht vollständig entpackt | +| „Vite manifest not found" | dasselbe, oder `build/portal` fehlt für das Admin-Panel | +| Bilder fehlen | `php artisan storage:link` vergessen, oder `storage/app/public` nicht mitkopiert | +| Display-Kachel bleibt leer | Kein aktives Display mit veröffentlichter Playlist – dann wird die Sektion bewusst gar nicht angezeigt | +| Änderungen wirken nicht | `php artisan config:clear && php artisan config:cache` | + +### Diagnose: Assets zeigen auf den falschen Host + +```bash +cd /var/www/b2in-preview + +# 1. Was steht in der .env? +grep -E '^(APP_ENV|APP_URL|APP_DOMAIN_NAME|ASSET_URL|DOMAIN_B2IN|DOMAIN_B2IN_URL)=' .env + +# 2. Was macht die Anwendung daraus? (zeigt den zwischengespeicherten Stand) +php artisan tinker --execute="echo config('domains.domains.b2in.domain_name').' -> '.config('domains.domains.b2in.url').PHP_EOL;" + +# 3. Liegt ein alter Config-Cache herum? +ls -l bootstrap/cache/config.php 2>/dev/null +``` + +Steht in Zeile 2 etwas mit `.test`, fehlen die beiden `DOMAIN_B2IN*`-Zeilen. Beheben: + +```bash +cd /var/www/b2in-preview +php artisan config:clear # zuerst den Cache weg, sonst wirkt die .env nicht +nano .env # DOMAIN_B2IN, DOMAIN_B2IN_URL, ASSET_URL, APP_URL setzen +php artisan config:cache +php artisan view:clear +``` + +**Sicherheitsnetz seit dieser Runde:** Findet der `ThemeServiceProvider` den aufgerufenen Host +nicht in der Konfiguration, verwendet er außerhalb von `APP_ENV=production` den tatsächlich +aufgerufenen Origin – die Vorschau verlinkt sich dann auf sich selbst statt auf eine fremde +Domain. In `production` bleibt es bei der konfigurierten URL, damit ein gefälschter Host-Header +keine Links auf fremde Domains erzeugen kann. Die `.env` sollte trotzdem stimmen. diff --git a/dev/2026-08-28/sponsoren-logos/Arminia_Club_1905.png b/dev/2026-08-28/sponsoren-logos/Arminia_Club_1905.png new file mode 100644 index 00000000..5af48d6d Binary files /dev/null and b/dev/2026-08-28/sponsoren-logos/Arminia_Club_1905.png differ diff --git a/dev/2026-08-28/sponsoren-logos/TCBWH_Logo.jpg b/dev/2026-08-28/sponsoren-logos/TCBWH_Logo.jpg new file mode 100644 index 00000000..5516b8e2 Binary files /dev/null and b/dev/2026-08-28/sponsoren-logos/TCBWH_Logo.jpg differ diff --git a/dev/2026-08-28/sponsoren-logos/TCBadSalzuflen.png b/dev/2026-08-28/sponsoren-logos/TCBadSalzuflen.png new file mode 100644 index 00000000..60aff556 Binary files /dev/null and b/dev/2026-08-28/sponsoren-logos/TCBadSalzuflen.png differ diff --git a/dev/2026-08-28/sponsoren-logos/TCH.jpg b/dev/2026-08-28/sponsoren-logos/TCH.jpg new file mode 100644 index 00000000..935d1568 Binary files /dev/null and b/dev/2026-08-28/sponsoren-logos/TCH.jpg differ diff --git a/dev/2026-08-28/sponsoren-logos/TCH.png b/dev/2026-08-28/sponsoren-logos/TCH.png new file mode 100644 index 00000000..8cc1a9d0 Binary files /dev/null and b/dev/2026-08-28/sponsoren-logos/TCH.png differ diff --git a/dev/2026-08-28/sponsoren-logos/TCH_Logo.jpg b/dev/2026-08-28/sponsoren-logos/TCH_Logo.jpg new file mode 100644 index 00000000..2e8d4d6d Binary files /dev/null and b/dev/2026-08-28/sponsoren-logos/TCH_Logo.jpg differ diff --git a/dev/2026-08-28/sponsoren-logos/TCH_Logo.png b/dev/2026-08-28/sponsoren-logos/TCH_Logo.png new file mode 100644 index 00000000..2deb9b11 Binary files /dev/null and b/dev/2026-08-28/sponsoren-logos/TCH_Logo.png differ diff --git a/dev/2026-08-28/sponsoren-logos/TCH_Logo_Year.jpg b/dev/2026-08-28/sponsoren-logos/TCH_Logo_Year.jpg new file mode 100644 index 00000000..363238fc Binary files /dev/null and b/dev/2026-08-28/sponsoren-logos/TCH_Logo_Year.jpg differ diff --git a/dev/2026-08-28/umsetzung-03-09-2026.md b/dev/2026-08-28/umsetzung-03-09-2026.md new file mode 100644 index 00000000..1c8838ab --- /dev/null +++ b/dev/2026-08-28/umsetzung-03-09-2026.md @@ -0,0 +1,16 @@ +Folgende Inhalte müssen noch umgesetzt werden: + + + +# 1. Bei den Marken soll die Detailseite umfangreicher werden. Hier gibt es bereits zwei Texte, die final abgestimmt sind. +Neue Rotpunkt-Texte einpflegen +dev/2026-08-28/Rotpunkt_Webseitentext_FINAL.md + +Neue Febrü-Texte einpflegen +dev/2026-08-28/Februe_Webseitentext_FINAL.md +CABINETT +Im gleichen Aufbau, wie die zwei Markenseiten für CABINETT bauen und mit eigenen Texten bestücken, erstelle die Texte entsprechend den anderen Vorlagen ab, passend zu CABINETT + +# 2. „BEISPIEL"-Kennzeichnung bei Visualisierungen entfernen +# 3. Hinweis zu Visualisierungen eleganter formulieren +# 4. Abschluss-CTA hochwertiger durch neue Texte bereits erledigt („Ihre Küche. Persönlich geplant."), aber auch optisch verbessern \ No newline at end of file diff --git a/dev/2026-08-28/umsetzung-inhalte.md b/dev/2026-08-28/umsetzung-inhalte.md new file mode 100644 index 00000000..47523d7d --- /dev/null +++ b/dev/2026-08-28/umsetzung-inhalte.md @@ -0,0 +1,338 @@ +# B2in Interior – Umsetzungsdokument Inhalte + +**Arbeitsdokument für die Umsetzung.** Für jede Sektion: aktueller Stand → neuer Inhalt. +Schreibweisen verbindlich: **Interior** (nicht Interieur), **Febrü**, **Rotpunkt Küchen**, **CABINET** (Versalien). + +Platzhalter sind mit `[PH]` markiert – dort fehlt Zulieferung von Marcel. + +--- + +## 0. Globale Änderungen + +### Meta / SEO + +| | Alt | Neu | +|---|---|---| +| **Title** | B2IN - Connecting Design and Property | B2in Interior – Premium-Einrichtung & Maßanfertigung \| CABINET, Rotpunkt, Febrü | +| **Description** | B2in verbindet exklusive Immobilien in Dubai mit europäischem Einrichtungsdesign. Ihr Partner für Investment & Interior. | B2in Interior verbindet starke Einrichtungsmarken mit persönlicher Beratung – von der Maßanfertigung bis zur vollständigen Ausstattung für Zuhause und Projekte. | +| **OG-Title** | wie Title | wie neuer Title | +| **OG-Description** | wie Description | wie neue Description | +| **OG-Image** | b2in-og-default.jpg (Investment-Optik) | `[PH]` Interior-Motiv – vorerst bestehendes Hero-Bild verwenden | + +### Logo + +- Wortmarke **B2in** bleibt, Zusatz **Interior** in leichterer Schriftstärke darunter oder rechts daneben. +- Betrifft: `b2in-logo-positive.svg` (Header) und `b2in-logo-negative.svg` (Footer). +- `[PH]` Falls Marcel keine Datei liefert: Zusatz typografisch mit vorhandener Schrift ergänzen, sauber ausgerichtet. + +### Navigation + +| Alt | Neu | +|---|---| +| Home · Immobilien · Netzwerk · Magazin · FAQ · Über B2in | Home · **Marken** · **Referenzen** · Magazin · Immobilien · Über B2in | + +- **Marken** = neue Kernmarken-Seite (Anker auf Startseite oder eigene Seite) +- **Referenzen** = die selbst pflegbare Rubrik (Web-Display) +- **Netzwerk** entfällt aus der Hauptnavigation (Inhalt geht in Marken/Über B2in auf), Seite bleibt erreichbar +- **FAQ** in den Footer verschieben oder unter „Über B2in" einhängen +- **Immobilien** rutscht nach hinten, bleibt aber in der Navigation + +--- + +## 1. Ankündigungsleiste + +**Alt:** +> NEW LAUNCH Azizi Creek Views 4 – Exklusives Off-Market-Projekt in Dubai ab 1.125.000 AED (ca. 283.000 EUR / 306.000 USD) → Exposé ansehen + +**Neu (Startbelegung):** +> **NEU** Rotpunkt Küchen jetzt bei B2in Interior – jetzt Beratungstermin sichern → Termin anfragen + +**Alternative, falls Rotpunkt-Studio noch nicht startklar:** +> **NEU** CABINET Einbauschränke nach Maß – Showroom Bielefeld → Termin anfragen + +*Hinweis: Leiste bleibt technisch wie sie ist, nur Inhalt und Ziel-Link ändern sich. Dubai-Launches können dort später wieder erscheinen, aber nicht als Dauerzustand.* + +--- + +## 2. Hero + +**Alt:** +> # B2in – Wo exklusive Immobilien-Investments auf smartes Interior treffen. +> Ihr Partner für renditestarke internationale Immobilien und globales Supply-Chain-Management im Interior-Bereich. +> [Zu den Immobilien-Projekten] [Unser Netzwerk] +> Internationale Immobilien · Exklusive Einrichtung · Persönliche Beratung + +**Neu:** + +> # B2in Interior – Premium-Einrichtung von starken Marken. Für Ihr Zuhause. Für Ihr Projekt. +> +> Von der einzelnen Maßanfertigung bis zur vollständigen Ausstattung – mit CABINET, Rotpunkt Küchen, Febrü und einem Netzwerk regionaler Fachexperten. + +**Buttons:** +- Primär (dunkel): **Unsere Marken entdecken** → `#marken` +- Sekundär (hell): **Termin anfragen** → öffnet Anfrage-Widget + +**Checkmarks:** +- Premium-Marken +- Maßgefertigte Lösungen +- Persönliche Beratung + +**Hero-Bild:** `[PH]` Interior-Motiv (Einbaumöbel oder Küche, warmes Licht). Bis zur Zulieferung bestehendes Bild belassen. + +**Bild-Badge (unten rechts über dem Bild):** + +| Alt | Neu | +|---|---| +| B2in / Connecting Design and Property | B2in Interior / Einrichtung, die bleibt. | + +--- + +## 3. Marcel-Badge (kleiner Einschub unter dem Hero) + +**Alt:** +> B2in by Marcel Scheibe – Ihr persönlicher Partner für internationale Immobilien und exklusive Einrichtungskonzepte. +> Marcel Scheibe · Gründer & CEO, B2in + +**Neu:** +> B2in by Marcel Scheibe – Ihr persönlicher Partner für hochwertige Einrichtung und starke Marken. +> Marcel Scheibe · Gründer & CEO, B2in + +--- + +## 4. Weiche Privat / Geschäft + +**Ersetzt vollständig die Sektion „Zwei Welten. Ein Netzwerk."** + +**Alt:** +> ## Zwei Welten. Ein Netzwerk. +> Wir verbinden den Immobilienkauf mit der perfekten Einrichtung. **Immobilien-Investoren** profitieren von unserem exklusiven Möbel-Netzwerk – **Projektentwickler** von unserer deutschen Vertragssicherheit im Supply-Chain-Management. + +**Neu:** + +> ## Für Ihr Zuhause. Für Ihr Projekt. +> +> Ob einzelnes Möbelstück oder komplette Ausstattung – wir begleiten Sie mit denselben Marken, demselben Anspruch und einem persönlichen Ansprechpartner. + +**Karte 1** + +> ### Einrichtung für Ihr Zuhause +> +> Einzelne Möbelstücke, maßgefertigte Einbaulösungen oder die komplette Einrichtung: Unsere Kernmarken und unser Fachhandels-Netzwerk begleiten Sie von der ersten Idee bis zur Montage. Besuchen Sie unsere Showrooms oder vereinbaren Sie eine persönliche Beratung. +> +> **Button:** Beratung anfragen + +**Karte 2** + +> ### Ausstattung für Ihr Projekt +> +> Vollständige Einrichtung für Objekte, Büros und Projektentwicklungen – koordiniert aus einer Hand, von der Küche bis zur letzten Blume. Mit deutscher Vertragssicherheit und einem eingespielten Herstellernetzwerk. +> +> **Button:** Projekt besprechen + +*Bild „Das B2in-Ökosystem" aus der alten Sektion entfällt hier – kann bei „Über B2in" weiterverwendet werden.* + +--- + +## 5. Kernmarken (neues CMS-Modul) — `#marken` + +> ## Unsere Kernmarken +> +> Wir arbeiten nicht mit beliebigen Katalogen, sondern mit ausgewählten Herstellern, hinter denen wir stehen – jede Marke ein Spezialist auf ihrem Gebiet. + +### Kachel 1 – CABINET + +> ### CABINET +> **Einbauschränke nach Maß.** +> +> Maßgefertigte Schranklösungen, geplant bis auf den Millimeter – gefertigt für Räume, in denen Standard nicht genügt. Erleben Sie die Möglichkeiten in unserem Showroom in Bielefeld. +> +> *Mehr zu CABINET →* + +### Kachel 2 – Rotpunkt Küchen + +> ### Rotpunkt Küchen +> **Küchen, die Haltung zeigen.** +> +> Premium-Küchen aus deutscher Fertigung – individuell geplant, nachhaltig gedacht und gebaut für den Mittelpunkt Ihres Zuhauses. Beratung und Planung in unserem Küchenstudio. +> +> *Mehr zu Rotpunkt →* + +### Kachel 3 – Febrü + +> ### Febrü +> **Arbeiten, wo man gerne ist.** +> +> Möbel für konzentriertes Arbeiten – vom durchdachten Home-Office bis zur kompletten Büroeinrichtung. Ergonomie und Design für Zuhause und fürs Unternehmen. +> +> *Mehr zu Febrü →* + +### Detailseiten (Vorlage-Struktur je Marke) + +Jede Marke bekommt eine Detailseite mit: +1. Header (Logo + Claim + Stimmungsbild) +2. Einleitungstext (3–5 Sätze) +3. Leistungen / Besonderheiten (3–4 Punkte) +4. Bildergalerie +5. CTA-Block: „Termin anfragen" + „Per WhatsApp schreiben" + +`[PH]` Logos und Basis-Infos zu Rotpunkt und Febrü fehlen – Detailseiten vorerst mit obigen Kacheltexten plus Platzhalter-Galerie anlegen, damit die Struktur steht. + +--- + +## 6. Über Marcel / Vertrauen + +**Alt:** +> ## Gebaut auf Expertise und Vertrauen +> **B2in (Bridges2international)** verbindet zwei Welten: internationale Immobilien und exklusive Einrichtungskonzepte. Als Ihr persönlicher Partner navigiere ich Sie durch beide Bereiche – mit Expertise, Netzwerk und dem Anspruch, dass jede Entscheidung auf Vertrauen basiert. +> Ob ein **Investment in Dubai**, eine Villa in Lissabon oder die **maßgeschneiderte Einrichtung** Ihres neuen Zuhauses durch lokale Fachexperten – bei B2in laufen alle Fäden zusammen. +> **Regional verwurzelt, international vernetzt** – das ist B2in. + +**Neu:** + +> ## Gebaut auf Expertise und Vertrauen +> +> **B2in** stand ursprünglich für *Bridges to International*. Heute steht es ebenso für *Bridges to Interior*: hochwertige Einrichtung mit persönlicher Handschrift. Als Ihr Ansprechpartner verbinde ich ausgewählte Hersteller, regionale Fachexperten und ein verlässliches Netzwerk – damit aus Räumen Orte werden, die bleiben. +> +> Ob **maßgefertigter Einbauschrank**, neue **Küche** oder die **vollständige Ausstattung** eines Objekts: Bei B2in laufen alle Fäden zusammen. Und wer über die Einrichtung hinausdenkt, findet bei uns auch den Zugang zu internationalen Immobilien. +> +> **Regional verwurzelt, international vernetzt** – das ist B2in. + +*Hier ist die Markenstory verankert, die Marcel selbst vorgeschlagen hat. Immobilien bewusst als vorletzter Satz.* + +--- + +## 7. Engagement / Sponsoring + +**Neue Sektion, direkt nach „Über Marcel" – schlanke Logo-Leiste.** + +> ## Regional verbunden +> +> Wir unterstützen Vereine und Organisationen aus der Region – weil Verwurzelung mehr ist als eine Adresse. + +**Logos:** 3 gelieferte Sponsoring-Logos in einer ruhigen, gleich großen Reihe (Graustufen oder gedeckt, damit sie den Markenauftritt nicht überstrahlen). + +`[PH]` Weitere Logos ergänzen, sobald geliefert. + +--- + +## 8. Aktuelles / Referenzen (Web-Display) + +**Ersetzt die Sektion „Ein Ökosystem, drei Säulen" komplett.** + +**Alt (entfällt):** +> ## Ein Ökosystem, drei Säulen +> Immobilien & Investments / Local-for-Local Marktplatz / Supply-Chain-Management + +*Begründung: Zwei von drei Säulen sind interne Konzeptsprache, die Besucher nicht verstehen, und die dahinterliegenden Systeme sind pausiert.* + +**Neu – Startseiten-Teaser:** + +> ## Aktuelles aus unseren Showrooms +> +> Projekte, Neuheiten und Einblicke – laufend aktualisiert. +> +> **Button:** Alle Referenzen ansehen → + +**Neue Unterseite `/referenzen`:** + +> # Referenzen +> +> Realisierte Projekte aus unseren Showrooms und von unseren Kunden. Jedes Projekt maßgefertigt, jedes anders. + +Inhalte kommen aus dem Web-Display im Display-CMS (Bild, Text, optional YouTube-Video), von Marcel selbst pflegbar. + +`[PH]` Startbelegung mit CABINET-Projekten durch Marcel. Bis dahin 2–3 Platzhalter-Einträge anlegen, damit der Bereich nicht leer wirkt. + +**Wichtig:** Unter „Referenzen" ausschließlich realisierte Projekte. Visualisierungen und Entwürfe gehören in die Kernmarken-Detailseiten, nicht hierher. + +--- + +## 9. Immobilien-Teaser + +**Neu, klein und dezent, kurz vor dem Abschluss-CTA:** + +> ## Außerdem: Internationale Immobilien +> +> Neben der Einrichtung begleiten wir ausgewählte internationale Immobilienprojekte – persönlich kuratiert und mit klarem Blick auf Substanz. +> +> **Link (dezent):** Zu den Immobilien → + +*Keine Preise, keine Renditeversprechen, kein Dubai im Teasertext. Wer gezielt sucht, findet den Weg.* + +--- + +## 10. Abschluss-CTA + +**Alt:** +> ## Ihr nächster Schritt +> Ob Immobilien-Investment, Supply-Chain-Partnerschaft oder Einrichtungs-Netzwerk – sprechen Sie direkt mit uns. +> [Kontakt aufnehmen] + +**Neu:** + +> ## Ihr nächster Schritt +> +> Ob einzelnes Möbelstück, komplette Einrichtung oder Projektausstattung – sprechen Sie mit uns. Persönlich, unkompliziert, verbindlich. +> +> **Button 1:** Termin anfragen (öffnet Widget) +> **Button 2:** Per WhatsApp schreiben (`wa.me`-Link) + +--- + +## 11. Footer + +| | Alt | Neu | +|---|---|---| +| **Claim unter Logo** | Connecting Design and Property | Premium-Einrichtung. Persönlich gemacht. | +| **Zeile darunter** | Marcel Scheibe – Gründer & CEO | bleibt | + +*Falls Marcel „Bridges to Interior" als Claim bevorzugt, wird stattdessen das eingesetzt.* + +--- + +## 12. Terminanfrage-Widget + +Schwebendes Element unten rechts, auf allen Seiten. + +**Öffnet mit:** +> **Termin anfragen** +> Kurz Ihre Daten, wir melden uns persönlich zurück. + +**Felder:** +- Name *(Pflicht)* +- E-Mail *(Pflicht)* +- Telefon *(optional)* +- Anliegen / Marke *(Auswahl: CABINET · Rotpunkt Küchen · Febrü · Projektausstattung · Sonstiges)* +- Wunschtermin *(optional)* +- Nachricht *(optional)* + +**Button:** Anfrage senden +**Bestätigung:** Danke für Ihre Anfrage – wir melden uns zeitnah bei Ihnen. + +**Zweiter Button daneben:** WhatsApp → öffnet Chat direkt. + +--- + +## Arbeitsreihenfolge (Vorschlag) + +1. **Globales zuerst:** Logo-Zusatz, Meta/SEO, Navigation, Footer-Claim +2. **Startseite von oben nach unten:** Ankündigungsleiste → Hero → Weiche → Kernmarken → Über Marcel → Sponsoring → Aktuelles → Immobilien-Teaser → Abschluss +3. **Kernmarken-Modul im CMS** anlegen und mit den drei Marken befüllen +4. **Referenzen-Rubrik** (Web-Display) anlegen, 2–3 Platzhalter einstellen +5. **Terminanfrage-Widget + WhatsApp-Button** +6. **Durchgang auf Alt-Begriffe:** „Supply-Chain", „Local-for-Local", „Ökosystem", „Investment" auf Unterseiten prüfen und bereinigen (auch /netzwerk, /about, /faq) + +--- + +## Offene Zulieferungen von Marcel + +| Was | Status | +|---|---| +| Sponsoring-Logos | ✅ 3 Stück erhalten | +| Logo mit Zusatz „Interior" | ❌ offen – ggf. selbst ergänzen | +| Rotpunkt: Logo + Basis-Infos | ❌ offen – Platzhalter | +| Febrü: Logo + Basis-Infos | ❌ offen – Platzhalter | +| Hero-Bildmotiv (Interior) | ❌ offen – Bestandsbild belassen | +| Bilder Kernmarken-Kacheln | ❌ offen – Platzhalter | +| CABINET-Referenzprojekte | ❌ offen – Platzhalter-Einträge | +| WhatsApp-Nummer für Button | ❌ klären: Mobil +49 151 51002992? | \ No newline at end of file diff --git a/dev/2026-08-28/umsetzungen-14-09-2026.md b/dev/2026-08-28/umsetzungen-14-09-2026.md new file mode 100644 index 00000000..0908977c --- /dev/null +++ b/dev/2026-08-28/umsetzungen-14-09-2026.md @@ -0,0 +1,186 @@ +# B2in Interior – Arbeitsplan + +**Freigegebener Umfang, Stand September 2026** + +--- + +## Freigabestatus im Überblick + +| Phase | Status | Aufwand | +|---|---|---:| +| **1 – Website: Layout, Marken, Herkunft** | ✅ freigegeben | 39–65 h | +| **3 – QR-Empfehlungssystem** | ✅ freigegeben | 25–39 h | + +--- + +# Phase 1 – Website + +## 1.1 Farbwelt und Logo + +| Aufgabe | +| Interior-Farbwelt im Themensystem umstellen: +Tanne `#202c2b` Hauptton dunkel, Wortmarke, +Creme `#f7f4ef` Hintergrund, +Sand `#d9cbbf` Flächen, Footer, +Ocker `#d39e46` Akzent, Logo-Bogen +Clay `#a38f82` Sekundär, Produkte +Anthrazit `#2d2926` Text +| Immobilien-Welt als eigene Farbwelt abgrenzen (bestehendes Blau) | +| Logo-Varianten mit farbigem Bogen je Welt, positiv und negativ - normal Immobilien und Interior mit Zusatz +hier liegen die Logos dev/2026-08-28/logos +| Welten-Wechsler in Topleiste und Footer, Immobilien und Interior | + Bei der Umsetzung auf die neue Farbwelt bitte auch diese Shop Screenshots einmal begutachten. In diese Richtung soll es gehen optisch _b2in_interior_shop/screenshots/web + +## 1.2 Tischlerei als vierte Marke + +| Aufgabe | +| Markenseite anlegen, CMS-Eintrag, Einbindung in `/marken` und Navigation | +Als Inhalt erst mal Platzhalter. + +**Inhaltliche Ausrichtung:** Aufbau, Sonderlösungen, Veredelung, Maßarbeit. Ergänzt CABINET und Rotpunkt, steht nicht daneben. + +**Offen:** Name der Marke, Logo, Basis-Infos, Bildmaterial. Zur Namensfrage: Tritt sie unter eigenem Namen auf oder als B2in-Leistung? Der Name des Partnerbetriebs gehört auf die Detailseite, nicht in die Marke. + +## 1.3 Herkunfts-Sektion + +| Aufgabe | +| Eigener Bereich „Aus der Region gefertigt" mit den vier Standorten, visuell aufbereitet | + +**Die Standorte:** Rotpunkt in Bünde, Febrü in Herford, Tischlerei in Rheda-Wiedenbrück, CABINET in Köln. Vier deutsche Manufakturen, drei davon in Ostwestfalen. + +**Zu klären:** Ist CABINET Hersteller oder Vertrieb? Die Formulierung muss sauber trennen zwischen gefertigt und vertrieben. + +## 1.4 Markenseiten und Texte + +| Aufgabe | +| Aufklappbare Detailbereiche auf den Markenseiten | +| Kontextbezogene Beschriftung des Terminanfrage-Widgets je Marke | + +**Texte:** Die finalen Fassungen für Rotpunkt und Febrü Sind bereits eingearbeitet. + +## 1.5 Abschluss + +| Aufgabe | Std. | +|---|---:| +| Tests, Prüfung bestehender Bereiche, Produktivsetzung | + +**Summe Phase 1: 39–65 h** · rund 3.510 – 5.850 € netto + +--- + +# Phase 3 – QR-Empfehlungssystem + +## Wie es funktioniert Linus + +1. Partner im System anlegen (Makler, Architekt, Handwerker, Praxis) +2. System erzeugt eindeutigen Code und QR als Bilddatei +3. Marcel druckt den Aufkleber selbst und bringt ihn auf dem Flyer an +4. Interessent scannt, landet auf der Website, Zugriff wird erfasst +5. Startet er eine Anfrage, ist sie dem Partner zugeordnet +6. Übersicht im Admin: Partner, Scans, Anfragen + +## Die Bausteine + +| Aufgabe | Std. | +|---|---:| +| Datenmodell: Partner, Code, Zuordnung, Status | 3–5 | +| Partnerverwaltung im Admin, Code erzeugen, QR als Bilddatei herunterladen | 7–10 | +| Weiterleitung und Erfassung des Scans | 5–8 | +| Zuordnung der Anfrage zum Partner, angebunden an die bestehende Anfragestrecke | 4–6 | +| Einfache Übersicht im Admin: Partner, Scans, Anfragen | 3–5 | +| Tests | 3–5 | + +**Summe Phase 3: 25–39 h** · rund 2.250 – 3.510 € netto + +## Nicht enthalten + +Provisionsabrechnung und Auszahlung, Partner-Login (Phase 4), Aufkleber-Vorlagen als fertiges PDF, ausgebaute Auswertung mit Diagrammen oder Filtern. + +## Technische Vorgaben für den Flyer + +| | | +|---|---| +| **Aufkleber** | 60 × 80 mm hochkant. QR bei 30 × 30 mm, darunter Partnername, darunter Platz für eine Zeile | +| **Freie Fläche auf dem Flyer** | 70 × 90 mm | +| **Untergrund** | hell, einfarbig, kein Bild, kein Verlauf | +| **Abstand** | mindestens 10 mm zu Rand und Falz | +| **Platzierung** | Rückseite, in der Nähe der Kontaktangaben | + +Die Zielgruppen-Ansprache steckt im Aufkleber, nicht im Flyer. Damit bleibt der Flyer eine Druckfassung. + +--- + +# Phase 2 – Flyer: was enthalten ist + +**2 Stunden.** Eine strukturierte schriftliche Rückmeldung auf einen fertigen Entwurf: Aufbau, Reihenfolge der Inhalte, Wirkung, Markenkonformität, Textschärfe. Einmal, als zusammenhängende Liste. + +**Nicht enthalten:** mehrfache Durchgänge über Zwischenstände, Layoutkorrekturen, Bildauswahl, Umschreiben von Texten, Druckdatenaufbereitung. + +--- + +# Reihenfolge der Umsetzung + +| Schritt | Was | Warum zuerst | +|---|---|---| +| **1** | Farbwelt und Logo | Fundament – alles Weitere baut darauf auf | +| **2** | Welten-Wechsler | gehört technisch zur Farbwelt-Umstellung | +| **3** | Tischlerei-Markenseite | braucht die fertige Farbwelt | +| **4** | Herkunfts-Sektion | braucht die Tischlerei als vierten Standort | +| **5** | Akkordeon und Widget-Beschriftung | Feinschliff auf den fertigen Seiten | +| **6** | Tests und Livegang Phase 1 | | +| **7** | Phase 3 komplett | erst sinnvoll, wenn die Website steht | + +Phase 3 erst nach dem Livegang von Phase 1: Ein QR-Code, der auf eine halbfertige Seite führt, verbrennt den ersten Eindruck beim Partner. + +--- + +# Was ich von Marcel brauche + +## Blockierend für Phase 1 + +| Was | Für | +|---|---| +| Freigabe Farbwerte (Ocker, Tanne) | 1.1 – Start | +| Name der Tischlerei-Marke | 1.2 | +| Logo und Basis-Infos Tischlerei | 1.2 | +| Bildmaterial Tischlerei | 1.2 | +| Klärung: CABINET Hersteller oder Vertrieb | 1.3 | + +## Nicht blockierend, aber offen + +| Was | Anmerkung | +|---|---| +| Logos Rotpunkt und Febrü | für die Markenseiten | +| Bildmaterial Hero und Kernmarken | Platzhalter möglich | +| Neuer Footer-Claim | „Connecting design and property" ist der alte Immobilien-Claim | +| Showroom-Adressen je Markenseite | nennen beide Seiten den richtigen Standort? | +| Höhe der Partnervergütung | vor der Partner-Ansprache, nicht vor dem Bau | + +--- + +# Empfehlungen fürs Protokoll + +**Erste zehn Partner:** Makler, Architekten, Handwerker. Praxen danach. Keine Wertung, sondern Priorisierung auf den Kanal mit der höheren Wirkung. + +**Keine Provisionen an Arztpraxen** im ersten Schritt. Flyer dort über die persönliche Verbindung auslegen, mit eigenem QR-Code. Nach drei Monaten zeigen die Zahlen, ob der Kanal trägt. + +**QR-Feld neutral halten.** Sachliche Zeile wie „Beratungstermin vereinbaren". Keine emotionalen Appelle. + +--- + +# Zurückgestellt + +| Thema | Status | +|---|---| +| Partnerportal | 2027, wenn genug Partner aktiv sind | +| Kundenmappe | Konzept wird überarbeitet | +| Shop (Katalog und Verkauf) | Kalkulation liegt vor: 149–235 h | +| Immobilien-CMS | Kostenplan liegt vor, nicht freigegeben | +| Dubai-Map | setzt Immobilien-CMS voraus | +| Marktplätze | spätere Shop-Stufe | +| Bestandskunden-Anschreiben | Idee vorhanden, noch nicht angeboten | +| Markenrichtlinie Fahrzeug und Print | eigene Design-Aufgabe | + +--- + +*Aufwandsschätzung auf Basis des aktuellen Stands, kein Festpreis. Abrechnung nach tatsächlichen, dokumentierten Stunden. Zusätzliche Anforderungen werden vorab abgestimmt und erst nach Freigabe umgesetzt.* \ No newline at end of file diff --git a/dev/2026-08-28/umsetzungliste.md b/dev/2026-08-28/umsetzungliste.md new file mode 100644 index 00000000..2da42e13 --- /dev/null +++ b/dev/2026-08-28/umsetzungliste.md @@ -0,0 +1,120 @@ +# B2in Interior – Umsetzungsliste + +**Freigegebener Rahmen: ca. 37–39 Std.** (30 Basis + 3 Display-Spiegelung + 4–6 Rubrik-Seite) +Schreibweisen: **Interior**, **Febrü**, **Rotpunkt Küchen**, **CABINET** + +Legende: ✅ freigegeben · 🟡 mitnehmen, wenn ohne Mehraufwand machbar · ⏸ später, separat zu beziffern + +--- + +## 1. Website-Umstrukturierung & Umtextung ✅ *(ca. 18 Std.)* + +- Meta-Title und Description auf Interior-Ausrichtung umstellen +- OG-Title / OG-Description anpassen +- Navigation umbauen: „Marken" und „Referenzen" rein, „Immobilien" nach hinten, „Netzwerk" raus aus der Hauptnavi (Seite bleibt erreichbar), FAQ in den Footer +- Ankündigungsleiste neu belegen (Interior-Thema statt Dubai-Launch) +- Hero: neue Headline, Subline, Buttons, Checkmarks, Bild-Badge +- Marcel-Badge unter dem Hero umtexten +- Sektion „Zwei Welten. Ein Netzwerk." ersetzen durch **Weiche Privat / Geschäft** (zwei Karten) +- Sektion „Über Marcel / Vertrauen" umtexten – inkl. Markenstory *Bridges to International / Bridges to Interior* +- Sektion „Ein Ökosystem, drei Säulen" entfernen (Fläche übernimmt Aktuelles/Referenzen) +- Immobilien-Teaser neu anlegen: klein, dezent, kurz vor dem Abschluss +- Abschluss-CTA umtexten, zwei Kontakt-Buttons +- Footer-Claim ersetzen („Connecting Design and Property" → neuer Claim) +- Durchgang auf Alt-Begriffe: „Supply-Chain", „Local-for-Local", „Ökosystem", „Investment" – auch auf /netzwerk, /about, /faq + +*🟡 Logo-Zusatz „Interior": Wenn Marcel keine Datei liefert, typografisch mit vorhandener Schrift ergänzen – kleiner Aufwand, versuche ich mitzunehmen.* + +--- + +## 2. Kernmarken-Modul im CMS ✅ *(ca. 8 Std.)* + +- CMS-Struktur anlegen (adaptiert vom Magazin-Muster: Übersicht + Detailseite) +- Von Marcel selbst erweiterbar, weitere Marken ohne Codeänderung ergänzbar +- Kachel-Übersicht auf der Startseite (`#marken`) +- Drei Marken anlegen: CABINET, Rotpunkt Küchen, Febrü +- Detailseiten-Vorlage: Header, Einleitung, Leistungen, Galerie, CTA-Block + +*Platzhalter, solange Logos und Infos zu Rotpunkt und Febrü fehlen.* + +--- + +## 3. Terminanfrage-Widget ✅ *(ca. 4 Std.)* + +- Schwebendes Element unten rechts, auf allen Seiten +- Felder: Name, E-Mail, Telefon (optional), Anliegen/Marke (Auswahl), Wunschtermin (optional), Nachricht +- Versand per Mail an Marcel, Bestätigungstext für den Absender +- **WhatsApp-Button** daneben: Klick-to-Chat, öffnet direkt den Chat (Handy: App, Desktop: WhatsApp Web) +- *Kein Buchungskalender – bewusst schlank* + +*Offen: WhatsApp-Nummer bestätigen lassen.* + +--- + +## 4. Display-Spiegelung auf der Website ✅ *(ca. 3 Std.)* + +- Bestehende Display-Inhalte (9:16) werden auf der Website ausgespielt +- Nutzt die vorhandene Display-/Player-API als Datenquelle +- Keine doppelte Pflege: Marcel pflegt weiterhin nur im Display-CMS + +*⏸ 16:9-Modul wurde zurückgestellt.* + +--- + +## 5. Rubrik-Seite „Referenzen" (Web-Display) ✅ *(ca. 4–6 Std.)* + +- Zweites, separates Display im Display-CMS anlegen +- Eigene Unterseite `/referenzen`, die diese Inhalte ausspielt +- Von Marcel selbst pflegbar: Bilder, Texte, YouTube-Verlinkungen +- Teaser-Sektion auf der Startseite mit Verlinkung +- Aufnahme in die Navigation +- 2–3 Platzhalter-Einträge, damit der Bereich nicht leer wirkt + +*Inhaltliche Regel: Unter „Referenzen" nur realisierte Projekte. Visualisierungen und Entwürfe gehören in die Kernmarken-Detailseiten.* + +--- + +## 6. Engagement / Sponsoring 🟡 *(Versuch ohne Mehraufwand)* + +- Schlanke Sektion „Regional verbunden" nach der Marcel-Sektion +- Drei gelieferte Logos in ruhiger Reihe, gedeckt oder Graustufen +- Ein Satz Einleitungstext + +*Wird mitgenommen, solange es bei Logo-Leiste plus Satz bleibt. Eigene Unterseite oder Text je Verein wäre ein Zusatz.* + +--- + +## Später separat zu beziffern ⏸ + +| Thema | Warum nicht jetzt | +|---|---| +| **Referenzbereich voll ausgebaut** | Eigene Projektseiten, Kategorien, Galerien – eigenes Modul. Die schlanke Rubrik (Punkt 5) reicht für den Start. | +| **16:9-Display-Modul** | Von Marcel selbst zurückgestellt. Braucht zusätzlich querformat-taugliches Bildmaterial. | +| **Immobilien-CMS** | Immobilien bleiben statisch, rücken nur in der Gewichtung nach hinten. Separater Kostenplan liegt vor. | +| **Dubai-Map** | Interaktive Karte – eigenes Paket, setzt das Immobilien-CMS voraus. | +| **Markenrichtlinie Fahrzeug / Print** | Kombinationsregeln B2in + Kernmarken für Fahrzeugbeschriftung, Visitenkarten, Social Media. Eigene Design-Aufgabe, sinnvoll nach dem Website-Livegang. | +| **Weitere frei anlegbare Rubriken** | Jede zusätzliche Rubrik ist ein eigener kleiner Baustein. | +| **Eigene Videolösung / Player** | Nicht nötig – Videos laufen über YouTube-Einbindung. | + +--- + +## Spielregeln + +- **Eine Korrekturschleife je Bereich** ist enthalten (Abstände, Positionen, Farben, Gewichtungen) +- Weitere Runden oder neue Anforderungen: vorher kurz melden, Mehraufwand nennen, erst nach Freigabe umsetzen +- **Deadline Ende August** – abhängig von rechtzeitigen Zulieferungen + +--- + +## Offene Zulieferungen + +| Was | Status | +|---|---| +| Sponsoring-Logos | ✅ 3 Stück erhalten | +| Logo mit Zusatz „Interior" | offen – ggf. selbst ergänzen | +| Rotpunkt: Logo + Basis-Infos | offen – Platzhalter | +| Febrü: Logo + Basis-Infos | offen – Platzhalter | +| Hero-Bildmotiv (Interior) | offen – Bestandsbild belassen | +| Bilder Kernmarken-Kacheln | offen – Platzhalter | +| CABINET-Referenzprojekte | offen – Platzhalter-Einträge | +| WhatsApp-Nummer | offen – bestätigen lassen | \ No newline at end of file diff --git a/dev/2026-08-28/unterseite_marke.md b/dev/2026-08-28/unterseite_marke.md new file mode 100644 index 00000000..4af5275b --- /dev/null +++ b/dev/2026-08-28/unterseite_marke.md @@ -0,0 +1,130 @@ +# B2in Interior – Unterseite `/marken` + +Vollständige Texte zur Umsetzung. Schreibweisen: **Interior**, **Febrü**, **Rotpunkt Küchen**, **CABINET**. +Platzhalter: `[PH]` + +--- + +## Meta / SEO + +| Feld | Inhalt | +|---|---| +| **Title** | Unsere Marken – CABINET, Rotpunkt Küchen & Febrü \| B2in Interior | +| **Description** | Ausgewählte Hersteller statt beliebiger Kataloge: maßgefertigte Einbauschränke, Premium-Küchen und Möbel fürs Arbeiten – mit persönlicher Beratung in der Region. | +| **URL** | `/marken` | +| **Breadcrumb** | Home → Marken | + +--- + +## 1. Seitenkopf + +> # Unsere Marken +> +> Wir arbeiten nicht mit beliebigen Katalogen, sondern mit ausgewählten Herstellern, hinter denen wir stehen. Jede Marke ist Spezialist auf ihrem Gebiet – und jede bringt mit, was gute Einrichtung ausmacht: Qualität, die man sieht, und Beratung, die zuhört. + +**Bild:** `[PH]` Ruhiges Interior-Motiv oder Showroom-Aufnahme. Alternativ ohne Headerbild, dafür großzügiger Weißraum. + +--- + +## 2. Kernmarken + +*Reihenfolge wie auf der Startseite. Pro Marke: Logo, Bild, Claim, Beschreibung, Merkmale, Link zur Detailseite.* + +### CABINET + +> ### CABINET +> **Einbauschränke nach Maß.** +> +> Wo Standardmaße an ihre Grenzen kommen, fängt CABINET an. Schranklösungen, die exakt in Ihren Raum geplant werden – von der Dachschräge über die Nische bis zur raumhohen Front. Gefertigt in der Qualität, die man erst beim zweiten Hinschauen ganz erfasst. +> +> Erleben Sie die Möglichkeiten in unserem Showroom in Bielefeld. +> +> - Millimetergenaue Planung +> - Individuelle Fronten und Innenausstattung +> - Persönliche Beratung vor Ort +> +> **Mehr zu CABINET →** + +### Rotpunkt Küchen + +> ### Rotpunkt Küchen +> **Küchen, die Haltung zeigen.** +> +> Premium-Küchen aus deutscher Fertigung – individuell geplant und gebaut für den Raum, in dem am meisten passiert. Rotpunkt steht für durchdachte Funktion, langlebige Materialien und einen Anspruch an Nachhaltigkeit, der über das Marketing hinausgeht. +> +> Beratung und Planung in unserem Küchenstudio. +> +> - Fertigung in Deutschland +> - Individuelle Planung nach Ihrem Grundriss +> - Nachhaltige Materialien +> +> **Mehr zu Rotpunkt →** + +### Febrü + +> ### Febrü +> **Arbeiten, wo man gerne ist.** +> +> Ob Home-Office oder ganze Büroetage: Febrü macht Möbel für konzentriertes Arbeiten. Höhenverstellbare Tische, durchdachte Stauraumlösungen und Sitzmöbel, die auch nach acht Stunden noch überzeugen – mit einem Design, das ins Zuhause genauso passt wie ins Unternehmen. +> +> - Ergonomie, die man merkt +> - Vom einzelnen Arbeitsplatz bis zur Bürofläche +> - Für Zuhause und fürs Unternehmen +> +> **Mehr zu Febrü →** + +`[PH]` Logos und Bildmaterial zu Rotpunkt und Febrü fehlen – Platzhalter setzen. + +--- + +## 3. Partnernetzwerk + +*Nimmt den Netzwerk-Gedanken der alten Seite auf, in kundenverständlicher Sprache.* + +> ## Mehr als Marken: unser Netzwerk +> +> Gute Einrichtung endet nicht beim Möbelstück. Deshalb arbeiten wir mit Fachbetrieben und Handwerkern aus der Region zusammen – von der Aufmaß-Erstellung über die Montage bis zu angrenzenden Gewerken. +> +> Für Sie bedeutet das: ein Ansprechpartner, der die Fäden zusammenhält, statt vieler Einzelgespräche. Und Partner, die wir kennen und für deren Arbeit wir geradestehen. + +**Optionale drei Punkte darunter:** + +> **Aufmaß & Planung** +> Wir kommen zu Ihnen, nehmen Maß und planen mit Ihnen gemeinsam. +> +> **Montage durch Fachbetriebe** +> Handwerker aus der Region, die wir persönlich kennen. +> +> **Ein Ansprechpartner** +> Von der ersten Idee bis zur Übergabe koordiniert aus einer Hand. + +--- + +## 4. Marken werden ergänzt + +*Kurzer Block, der die Erweiterbarkeit signalisiert. Optional – nur einbauen, wenn die Seite sonst zu kurz wirkt.* + +> ## Unsere Markenwelt wächst +> +> Wir erweitern unser Portfolio laufend um Hersteller, die zu unserem Anspruch passen. Sie vermissen eine bestimmte Marke oder haben einen konkreten Wunsch? Sprechen Sie uns an – oft finden wir über unser Netzwerk genau das Richtige. + +--- + +## 5. Abschluss-CTA + +> ## Lernen Sie unsere Marken kennen +> +> Am besten dort, wo Sie sie anfassen können: in unseren Showrooms. Vereinbaren Sie einen unverbindlichen Beratungstermin – wir nehmen uns Zeit. +> +> **Button 1:** Termin anfragen +> **Button 2:** Per WhatsApp schreiben + +--- + +## 6. Umsetzungshinweise + +- **Startseiten-Sektion bleibt** als Teaser mit verkürzten Texten. Kacheln verlinken direkt auf die jeweilige Detailseite, darunter ein Button **„Alle Marken ansehen"** → `/marken`. +- **Navigation:** „Marken" verlinkt auf `/marken`, nicht mehr per Anker auf die Startseite. +- **Detailseiten** hängen unter `/marken/cabinet`, `/marken/rotpunkt`, `/marken/februe` – dadurch saubere Hierarchie und funktionierender Rückweg. +- **Alte `/netzwerk`-Seite:** Inhalt geht in Abschnitt 3 auf. Seite entfernen und per 301 auf `/marken` weiterleiten, damit bestehende Links und Rankings nicht ins Leere laufen. +- **Reihenfolge der Marken** über das CMS steuerbar halten, damit Marcel sie später selbst ändern kann. \ No newline at end of file diff --git a/dev/betrieb/README.md b/dev/betrieb/README.md new file mode 100644 index 00000000..7910eb72 --- /dev/null +++ b/dev/betrieb/README.md @@ -0,0 +1,235 @@ +# Betrieb B2in: Git-Deploy, Livegang, Monitoring + +**Stand:** 08.10.2026. Grundlage ist der Baukasten unter `dev/git-deploy-monitoring/`. Dort steht, +warum etwas so gebaut ist. Hier steht, wie es für B2in läuft. + +| Was | Wo | +|---|---| +| Deploy-Skript | `dev/betrieb/deploy.sh`, liefert nur Git-Tags `vX.Y.Z` aus | +| Vorschau auffrischen | `dev/betrieb/vorschau-auffrischen.sh` kopiert Live-DB und Live-Medien in die Vorschau | +| Inhaltsschritte Relaunch | `InteriorReleaseSeeder`, alle 29 Seeder in einem Lauf, idempotent | +| Remote `origin` | lokal `ssh://git@forge.adametz.media:222/kadmin/b2in.git`, auf dem Server `forge-b2in:kadmin/b2in.git` (Host-Alias, Abschnitt 2): Deploy-Quelle für Vorschau und Live | +| Remote `NAS` | `ssh://git@git.adametz.media:222/gitmedia/b2in.git`: lokale Sicherung, wird nie deployt | +| Fehlerprotokoll | GlitchTip `https://errors.adametz.media`, Organisation `adametz-media`, Projekte `server-b2in` (ID 8) und `browser-b2in` (ID 7) | +| Push-Alarme | ntfy `https://push.adametz.media`, Topic `b2in-ops` | +| Externer Monitor | Uptime Kuma auf `/health` (mit Token) und `/up` je Domain | + +--- + +## 1. Release lokal (jedes Mal) + +```bash +git status # nichts offen +php artisan test --compact +npm ci && npm run build:web && npm run build:portal # public/build ist versioniert, der Server hat kein Node +git add public/build && git diff --cached --quiet public/build || git commit -m "build: Assets für vX.Y.Z" + +git tag -a vX.Y.Z -m "vX.Y.Z – + +Deploy: , , + bash dev/betrieb/deploy.sh vX.Y.Z [--migrations] [--seed=…]" +git push origin --follow-tags +git push NAS --follow-tags # Sicherung +``` + +Versionen folgen SemVer: Ein Feature-Release erhöht die mittlere Stelle, ein Hotfix die letzte. +Der Interior-Relaunch ist `v2.0.0`. + +--- + +## 2. Einmalig auf dem Server + +Als App-Benutzer, gilt für Vorschau und Live (gleicher Server): + +1. **Deploy-Key**, nur Leserecht am Repository auf forge.adametz.media. Auf dem Server liegen mehrere + Deploy-Keys für denselben Forgejo (B2in, Breco), deshalb gibt es je Projekt einen Host-Alias. + Die Repository-Adresse heißt dann **`forge-b2in:kadmin/b2in.git`**, nicht `ssh://git@forge.adametz.media:222/…`; + mit der vollen Adresse greift kein Alias, und ssh bietet keinen Schlüssel an („Permission denied (publickey)“). + ```bash + ssh-keygen -t ed25519 -f ~/.ssh/deploy_b2in -N "" -C "b2in-server" + cat ~/.ssh/deploy_b2in.pub # in Forgejo: kadmin/b2in ▸ Einstellungen ▸ Deploy-Schlüssel, ohne Schreibrecht + ``` + `~/.ssh/config`: + ``` + Host forge-b2in + HostName forge.adametz.media + Port 222 + User git + IdentityFile ~/.ssh/deploy_b2in + IdentitiesOnly yes + HostKeyAlias forge.adametz.media + ``` + Test: `git ls-remote forge-b2in:kadmin/b2in.git` zeigt die Tags. +2. **Flux Pro für Composer:** `deploy.sh` führt `composer install` aus. Dafür braucht der Server die + Flux-Zugangsdaten, also `auth.json` im App-Verzeichnis (ignoriert, bleibt liegen) oder + `composer config --global http-basic.composer.fluxui.dev `. +3. **PHP-FPM-Reload ohne Passwort testen:** `echo "" | sudo -S service php8.4-fpm reload; echo $?`. + Ergibt das Exit 0, lädt das Skript FPM selbst neu. Fragt sudo nach einem Passwort, beim Deploy + `DEPLOY_FPM_RELOAD=` setzen; dann wartet das Skript, bis FPM im Panel neu geladen ist. Heißt + der Dienst anders: `DEPLOY_PHP_FPM_SERVICE=…`. **Immer Reload, nie Restart.** +4. **Cron für den Scheduler:** `* * * * * cd && php artisan schedule:run >> /dev/null 2>&1`. + Er trägt den Herzschlag für `/health` und `cabinet:reset-overrides`. Eine Queue braucht B2in + nicht; der Worker-Test im Skript ist aus. +5. **Server-Panel:** „Quick Deploy“ und Push-Webhooks bleiben aus. Ein Push ist noch kein Release. + +### `.env`-Werte je Umgebung + +| Schlüssel | Live | Vorschau | +|---|---|---| +| `SENTRY_LARAVEL_DSN`, `SENTRY_BROWSER_DSN` | wie lokal (Projekte server-b2in / browser-b2in), **erst nach der Datenschutzerklärung (Abschnitt 6)** | gleich, optional | +| `SENTRY_ENVIRONMENT` | `production` | `preview` | +| `MONITORING_NTFY_URL`, `_TOPIC`, `_TOKEN` | wie lokal | leer (keine Push-Alarme aus der Vorschau) | +| `MONITORING_ALERT_EMAIL` | Ops-Postfach | leer | +| `MONITORING_HEALTH_TOKEN` | **eigener Wert** (`openssl rand -hex 24`), nicht der lokale | eigener Wert oder leer | +| `MAIL_MAILER` | wie bisher | `log` (die Vorschau hat Live-Daten) | + +`APP_VERSION` bleibt leer. Die Version kommt aus der Datei `RELEASE`, die das Skript schreibt. + +--- + +## 3. Livegang Interior-Relaunch (v2.0.0) + +**Grundidee:** Auf Live hat der Kunde Displays, Playlists und die Mediathek gepflegt, an der Website +im CMS aber nichts geändert. Deshalb kopieren wir **nicht** die Vorschau-Datenbank nach Live und +übertragen Display-Daten einzeln. Stattdessen bleibt die Live-Datenbank die Grundlage, und +`InteriorReleaseSeeder` bringt deren Website-Inhalte auf den neuen Stand. Displays, +Display-Mediathek, CMS-Mediathek, Benutzer und hochgeladene Dateien bleiben unberührt. Angepasst +werden nur: + +- das Display-Branding, und zwar nur bei Modulen, die noch kein Interior-Logo tragen +- absolute Medien-URLs, die auf `b2in.test` oder `b2in.eu` zeigen; sie werden host-unabhängig + +Damit der Kunde genau dieses Ergebnis vorher sieht, läuft derselbe Ablauf zuerst auf der Vorschau +mit einer frischen Kopie der Live-Daten (Generalprobe). + +### 3.1 Generalprobe auf der Vorschau + +```bash +# Skripte aus dem Tag holen (Vorschau und Live sind noch keine Git-Checkouts) +git clone -q --depth 1 --branch v2.0.0 forge-b2in:kadmin/b2in.git /tmp/b2in-v2.0.0 + +# 1. Live-Daten und Live-Medien in die Vorschau (Live wird nur gelesen; legt ~/b2in-live-.sql.gz an) +bash /tmp/b2in-v2.0.0/dev/betrieb/vorschau-auffrischen.sh + +# 2. Vorschau einmalig auf Git umstellen und v2.0.0 ausliefern, mit allen Inhaltsschritten +cd +bash /tmp/b2in-v2.0.0/dev/betrieb/deploy.sh v2.0.0 --initial --migrations --seed=InteriorReleaseSeeder +``` + +`--initial` sichert vorher den Code nach `~/-vor-git-.tgz`. Dann zeigt es die +Dateien, die es nur auf dem Server gibt (Reste aus SFTP- und Archiv-Updates). Erst nach einem +`ja` verschiebt es sie nach `~/-vor-git-/`. Danach ist `git status` leer. + +Vorschau prüfen: die Liste unter 8.3 im Entwicklungsplan, dazu im Portal der Vorschau die +**Displays und Playlists mit Live vergleichen**. Dort müssen dieselben Module, Bilder und Videos +erscheinen. Neue Generalprobe, etwa nach einem Hotfix-Tag oder weil auf Live weiter gepflegt +wurde: + +```bash +cd && bash dev/betrieb/deploy.sh v2.0.1 --migrations # nur bei neuem Tag +bash dev/betrieb/vorschau-auffrischen.sh --seed=InteriorReleaseSeeder +``` + +### 3.2 Livegang nach der Freigabe + +1. Wartungsfenster mit Marcel abstimmen. Die Displays holen ihre Konfiguration zyklisch, laufen + also weiter, ein Wechsel im Laden ist aber sichtbar. +2. **DB-Backup von Live:** + `mysqldump --single-transaction --no-tablespaces -u … -p b2in_live | gzip > ~/b2in-live-vor-v2.sql.gz` +3. Live-`.env` ergänzen (Tabelle oben). `SENTRY_*` erst nach Abschnitt 6. +4. Gleicher Befehl wie auf der Vorschau, nur im Live-Verzeichnis: + ```bash + cd + bash /tmp/b2in-v2.0.0/dev/betrieb/deploy.sh v2.0.0 --initial --migrations --seed=InteriorReleaseSeeder + rm -rf /tmp/b2in-v2.0.0 + ``` +5. Prüfen: `php artisan about --only=b2in` zeigt `v2.0.0`. `/health` mit Token liefert + `"status":"ok"` (der Herzschlag braucht nach dem Deploy bis zu einer Minute). Danach die + Liste 8.3 im Entwicklungsplan, die vier Displays sichten, `storage/logs` und GlitchTip auf neue + Fehler prüfen. + +**Rückweg** (nur Live, falls etwas grundlegend nicht passt): Seite in den Wartungsmodus nehmen, +`.git` entfernen, die Code-Sicherung `~/-vor-git-.tgz` zurückspielen, das DB-Backup +aus Schritt 2 einspielen und FPM neu laden. Die geparkten Nur-Server-Dateien aus +`~/-vor-git-/` liegen ebenfalls noch vor. + +--- + +## 4. Folge-Deploys (ab v2.0.0) + +```bash +cd +bash dev/betrieb/deploy.sh vX.Y.Z # ohne Migrationen +bash dev/betrieb/deploy.sh vX.Y.Z --migrations # mit Migrationen, vorher DB-Backup +bash dev/betrieb/deploy.sh vX.Y.Z --seed= # Inhaltsschritt laut Release-Notiz +bash dev/betrieb/deploy.sh # Rollback +``` + +Das Skript bricht ab, **bevor** es etwas ändert, wenn: + +- im Verzeichnis jemand von Hand etwas geändert hat +- der Tag fehlt +- ein Build-Manifest fehlt +- neue Migrationen ohne `--migrations` kommen + +Auf dem Server wird nichts von Hand geändert, auch Hotfixes laufen über Commit, Tag und Deploy. +Exit-Codes: `0` fertig · `1` abgebrochen · `2` falscher Aufruf. + +--- + +## 5. Monitoring + +Eingebaut nach `dev/git-deploy-monitoring/` (02 und 03), Tests unter `tests/Feature/Monitoring/`. + +| Ausfall | Wer meldet | Kanal | +|---|---|---| +| Exception (Request, Command, Livewire) | Sentry-SDK | GlitchTip `server-b2in` | +| JavaScript-Fehler (Website und Portal) | `resources/js/error-reporting.js` | GlitchTip `browser-b2in` (Tag `area`: `web`/`portal`) | +| Toter interner Link, 419, 403/429 für Angemeldete | `ReportErrorSignals` | GlitchTip (Warnung) | +| Geplanter Task fehlgeschlagen | `onFailure` in `routes/console.php` | Log `monitoring`, Mail, ntfy | +| Cron steht, DB/Cache weg, Platte voll | `/health` | Uptime Kuma, dann ntfy und Mail | +| Server, FPM, Nginx oder SSL weg | `/up` nicht erreichbar | Uptime Kuma | + +**Uptime Kuma** (status.adametz.media): + +| Monitor | Ziel | Intervall | +|---|---|---| +| B2in /health | `https://b2in.eu/health`, Header `{"Authorization": "Bearer "}`, Status 200–299 | 60 s, 2 Wiederholungen | +| B2in /up | `https://b2in.eu/up` und `https://portal.b2in.eu/up` | 5 min | +| Zertifikate | Ablaufwarnung 14 Tage vorher | – | + +`/health` antwortet auf jeder Domain, ist von der Basic Auth ausgenommen und liefert ohne oder +mit falschem Token 404. + +**Abnahme auf Live:** + +- `php artisan tinker --execute 'App\Support\OperationalAlert::send("Test B2in");'`: Push und Mail kommen an +- `php artisan tinker --execute 'report(new RuntimeException("Test B2in"));'`: erscheint in `server-b2in`, Umgebung `production`, Release `v2.0.0` +- Browser-Konsole auf b2in.eu: `setTimeout(() => { throw new Error('Test test@example.com') })` erscheint in `browser-b2in`, die E-Mail als `[email]` +- Uptime Kuma: Ein Test-Monitor mit falschem Token löst einen Alarm aus, danach löschen + +**GlitchTip auswerten** (lokal, Lese-Token `GLITCHTIP_API_TOKEN` in der `.env`): Die Befehle stehen +in `dev/git-deploy-monitoring/02-fehlerprotokoll-glitchtip.md`, Abschnitt 7, mit +`B=https://errors.adametz.media/api/0`, `ORG=adametz-media`, Projekt `8` (Server) bzw. `7` (Browser). + +Lokal sind die DSNs gesetzt (`SENTRY_ENVIRONMENT=local`). Fehler beim Entwickeln landen also in +GlitchTip, aber getrennt nach Umgebung. Die Testsuite meldet nie etwas; `phpunit.xml` leert DSNs +und ntfy. + +--- + +## 6. Datenschutzerklärung (vor dem Einschalten der DSNs auf Live) + +Die Fehlerprotokollierung muss in die Datenschutzerklärung, bevor auf Live `SENTRY_*` gesetzt wird. +Hier ein Textvorschlag, den Marcel bzw. die Rechtsberatung freigeben muss: + +> **Fehlerprotokollierung.** Tritt beim Aufruf unserer Website ein technischer Fehler auf, +> speichern wir dazu die aufgerufene Adresse (ohne Formularinhalte und ohne Zugangs-Token), Browser +> und Betriebssystem, die Fehlermeldung und, bei angemeldeten Nutzern, deren interne Nutzer-ID. +> IP-Adressen und Cookies werden nicht übermittelt. Die Daten verarbeiten wir auf einem eigenen +> Server in Deutschland, um Fehler zu erkennen und zu beheben. Rechtsgrundlage ist unser +> berechtigtes Interesse am sicheren und fehlerfreien Betrieb (Art. 6 Abs. 1 lit. f DSGVO). Die +> Einträge werden nach 90 Tagen gelöscht. + +Vor der Freigabe prüfen: Serverstandort und Aufbewahrungsfrist (`GLITCHTIP_RETENTION_DAYS`). +Eingetragen wird der Text in `resources/lang/de/b2in_legal.php` und im CMS unter „Rechtliches“. diff --git a/dev/betrieb/deploy.sh b/dev/betrieb/deploy.sh new file mode 100755 index 00000000..0f6ab8ee --- /dev/null +++ b/dev/betrieb/deploy.sh @@ -0,0 +1,294 @@ +#!/usr/bin/env bash +# +# Deploy eines Git-Tags auf Vorschau oder Live (B2in). Grundlage: Baukasten +# dev/git-deploy-monitoring, Ablauf für B2in: dev/betrieb/README.md. +# +# Aufruf im App-Verzeichnis auf dem Server: +# +# bash dev/betrieb/deploy.sh v2.0.0 # ohne neue Migrationen +# bash dev/betrieb/deploy.sh v2.0.0 --migrations # mit Migrationen, DB-Backup vorher! +# bash dev/betrieb/deploy.sh v2.0.0 --migrations --seed=InteriorReleaseSeeder +# +# Optionen: +# --migrations Neue Migrationen ausführen. Ohne diese Option bricht das +# Skript ab, sobald der Tag neue Migrationen mitbringt. +# --clear-schedule php artisan schedule:clear-cache (alte withoutOverlapping-Sperren). +# --seed= Seeder im Wartungsmodus ausführen (nach den Migrationen, +# vor den Caches) – für Inhaltsschritte, die die Release-Notiz nennt. +# --initial Einmalig: ein Verzeichnis ohne Git (bisher SFTP/Archiv) an Ort und +# Stelle zum Checkout des Tags machen. Sichert vorher den Code nach +# ~/-vor-git-.tgz, zeigt Dateien, die es nur auf dem +# Server gibt, und verschiebt sie nach Rückfrage nach ~/-vor-git-/. +# Verlangt --migrations (vorher DB-Backup). +# +# Umgebung (optional): +# DEPLOY_FPM_RELOAD Befehl zum Neuladen von PHP-FPM (Standard siehe unten). +# Leer setzen, wenn FPM von Hand im Server-Panel neu geladen +# wird — dann wartet das Skript auf Enter. Nie „Restart“: +# der entfernt kurz den Socket, Nginx liefert 502. +# DEPLOY_PHP_FPM_SERVICE systemd-Name des FPM-Dienstes (Standard php8.4-fpm). +# DEPLOY_REPOSITORY Repository für --initial (Standard: Host-Alias forge-b2in aus ~/.ssh/config). +# +# Exit-Codes: 0 fertig, 1 abgebrochen (siehe Ausgabe), 2 falscher Aufruf, +# 3 live, aber kein Queue-Worker hat den Test-Job abgeholt. +# +# Rollback: dasselbe Skript mit dem vorherigen Tag. Nach --initial: Sicherung +# zurückspielen (Pfad steht in der Ausgabe) und DB-Backup einspielen. + +set -euo pipefail + +# ---- Projekt-Einstellungen -------------------------------------------------- +DEPLOY_SCRIPT="dev/betrieb/deploy.sh" # Pfad dieses Skripts im Repository +PHP_FPM_SERVICE="${DEPLOY_PHP_FPM_SERVICE:-php8.4-fpm}" # systemd-Name des FPM-Dienstes +ABOUT_SECTION="b2in" # AboutCommand::add('B2in', …) im AppServiceProvider +QUEUE_PROBE=0 # B2in stellt keine Jobs in die Queue (Mails gehen sofort raus) +REPOSITORY="${DEPLOY_REPOSITORY:-forge-b2in:kadmin/b2in.git}" +# ----------------------------------------------------------------------------- + +# Git ersetzt diese Datei beim Checkout. Bash liest Skripte stückweise, deshalb +# läuft der Deploy aus einer Kopie. +if [[ -z "${DEPLOY_COPY:-}" ]]; then + copy="$(mktemp)" + cp "$0" "$copy" + DEPLOY_COPY="$copy" exec bash "$copy" "$@" +fi +trap 'rm -f "$DEPLOY_COPY"' EXIT + +tag="${1:-}" +shift || true +run_migrations=0 +clear_schedule=0 +initial=0 +seeders=() + +for option in "$@"; do + case "$option" in + --migrations) run_migrations=1 ;; + --clear-schedule) clear_schedule=1 ;; + --initial) initial=1 ;; + --seed=*) + seeder="${option#--seed=}" + if [[ ! "$seeder" =~ ^[A-Za-z][A-Za-z0-9]*$ ]]; then + echo "Ungültiger Seeder: $seeder" >&2; exit 2 + fi + seeders+=("$seeder") ;; + *) echo "Unbekannte Option: $option" >&2; exit 2 ;; + esac +done + +if [[ ! "$tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Aufruf: bash $DEPLOY_SCRIPT vX.Y.Z [--migrations] [--seed=] [--clear-schedule] [--initial]" >&2 + exit 2 +fi + +if [[ ! -f artisan ]]; then + echo "Im App-Verzeichnis aufrufen (artisan fehlt hier)." >&2 + exit 2 +fi + +step() { printf '\n==> %s\n' "$*"; } + +if [[ "$initial" -eq 1 ]]; then + if [[ -d .git ]]; then + echo "--initial nur für ein Verzeichnis ohne Git – hier gibt es .git schon." >&2 + exit 2 + fi + if [[ "$run_migrations" -ne 1 ]]; then + echo "--initial verlangt --migrations (vorher DB-Backup ziehen)." >&2 + exit 2 + fi + + stamp="$(date +%Y-%m-%d-%H%M)" + site="$(basename "$PWD")" + backup="$HOME/$site-vor-git-$stamp.tgz" + parked="$HOME/$site-vor-git-$stamp" + + step "Sicherung des Codes nach $backup (ohne storage/, node_modules/)" + # Exit 1 = „Datei hat sich beim Lesen geändert“ (Logs o. Ä.) – die Sicherung ist trotzdem brauchbar. + tar czf "$backup" --exclude=./storage --exclude=./node_modules --exclude=./public/storage . || [[ $? -eq 1 ]] + ls -lh "$backup" + + step "Git einrichten, Tag $tag holen" + git init -q + git remote add origin "$REPOSITORY" + if ! git fetch --quiet --tags origin || ! git rev-parse --quiet --verify "refs/tags/$tag^{commit}" > /dev/null; then + rm -rf .git + echo "Tag $tag nicht abrufbar (Deploy-Key? Tag gepusht?). .git wieder entfernt, nichts verändert." >&2 + exit 1 + fi + git update-ref --no-deref HEAD "$(git rev-parse "$tag^{commit}")" + git read-tree HEAD + # Ignorier-Regeln des Tags gelten schon jetzt (die .gitignore im Verzeichnis ist noch die alte). + git show "$tag:.gitignore" > .git/info/exclude + + changed="$(git status --porcelain --untracked-files=no | wc -l | tr -d ' ')" + server_only="$(git -c core.quotePath=false ls-files --others --exclude-standard)" + echo "$changed Dateien weichen vom Tag ab oder fehlen – der Checkout ersetzt sie." + if [[ -n "$server_only" ]]; then + echo + echo "Diese $(echo "$server_only" | wc -l | tr -d ' ') Dateien gibt es nur auf dem Server (nicht im Tag, nicht ignoriert):" + echo "$server_only" | sed 's/^/ /' | head -200 + echo + echo "Sie werden nach $parked/ verschoben (Pfade bleiben erhalten). Wird eine davon gebraucht," + echo "jetzt abbrechen und sie ins Repository oder in die .gitignore aufnehmen (neuer Tag)." + fi + read -r -p "Weiter mit dem Deploy von $tag? [ja/nein] " answer + if [[ "$answer" != "ja" ]]; then + rm -rf .git + echo "Abgebrochen. .git wieder entfernt, nichts verändert (Sicherung bleibt liegen)." >&2 + exit 1 + fi + + previous="vor-git (Sicherung: $backup)" + new_migrations="(Umstellung: alle offenen Migrationen)" +else + if [[ ! -d .git ]]; then + echo "Hier gibt es kein .git – für die einmalige Umstellung --initial verwenden." >&2 + exit 2 + fi + + step "Arbeitsverzeichnis prüfen" + drift="$(git status --porcelain)" + if [[ -n "$drift" ]]; then + echo "Das Arbeitsverzeichnis weicht vom ausgecheckten Stand ab:" >&2 + echo "$drift" >&2 + echo "Erst klären (git diff), dann deployen. Nichts wurde verändert." >&2 + exit 1 + fi + + step "Tags von origin holen" + git fetch --quiet --tags origin + + if ! git rev-parse --quiet --verify "refs/tags/$tag^{commit}" > /dev/null; then + echo "Tag $tag gibt es auf origin nicht." >&2 + exit 1 + fi + + previous="$(cat RELEASE 2>/dev/null || git describe --tags --always)" + + if [[ "$(git rev-parse HEAD)" == "$(git rev-parse "$tag^{commit}")" ]]; then + echo "$tag ist bereits ausgecheckt. Nichts zu tun." + exit 0 + fi +fi + +echo "Bisher: $previous → Ziel: $tag" + +for build in b2in b2a stileigentum style2own portal; do + if ! git cat-file -e "$tag:public/build/$build/manifest.json" 2> /dev/null; then + echo "public/build/$build/manifest.json fehlt im Tag $tag – Assets lokal bauen und committen. Nichts wurde verändert." >&2 + exit 1 + fi +done + +if [[ "$initial" -ne 1 ]]; then + new_migrations="$(git diff --name-only --diff-filter=A HEAD "$tag" -- database/migrations)" +fi +if [[ -n "$new_migrations" ]]; then + echo "Neue Migrationen:" + echo "$new_migrations" | sed 's/^/ /' + if [[ "$run_migrations" -ne 1 ]]; then + echo "Abbruch: DB-Backup ziehen und mit --migrations erneut aufrufen. Nichts wurde verändert." >&2 + exit 1 + fi +fi + +if [[ "$initial" -eq 1 ]]; then + trap 'echo; echo "!! Umstellung abgebrochen. Die Seite bleibt im Wartungsmodus." >&2; echo "!! Rückweg: Verzeichnis aus $backup wiederherstellen (vorher .git entfernen), DB-Backup einspielen." >&2; rm -f "$DEPLOY_COPY"' ERR +else + trap 'echo; echo "!! Deploy abgebrochen. Die Seite bleibt im Wartungsmodus." >&2; echo "!! Rollback: bash $DEPLOY_SCRIPT $previous" >&2; rm -f "$DEPLOY_COPY"' ERR +fi + +step "Wartungsmodus" +php artisan down --retry=60 + +step "Checkout $tag" +if [[ "$initial" -eq 1 ]]; then + if [[ -n "$server_only" ]]; then + while IFS= read -r file; do + mkdir -p "$parked/$(dirname "$file")" + mv "$file" "$parked/$file" + done <<< "$server_only" + echo "Nur-Server-Dateien verschoben nach $parked/" + fi + git checkout --quiet --force --detach "$tag" + : > .git/info/exclude +else + git checkout --quiet --detach "$tag" +fi +echo "$tag" > RELEASE + +step "Composer" +composer install --no-dev --optimize-autoloader --no-interaction + +if [[ -n "$new_migrations" ]]; then + step "Migrationen" + php artisan migrate --force +fi + +for seeder in "${seeders[@]}"; do + step "Seeder $seeder" + php artisan db:seed --class="$seeder" --force +done + +step "Öffentliche Assets" +if [[ ! -e public/storage ]]; then + php artisan storage:link +fi +if [[ -d public/vendor/livewire ]]; then + php artisan vendor:publish --tag=livewire:assets --force +fi +# Statisch ausgelieferte Flux-Skripte passend zur installierten Flux-Version +if [[ -d public/flux ]]; then + php artisan flux:publish-assets --force +fi + +step "Caches" +php artisan config:cache +php artisan route:cache +php artisan view:clear +php artisan view:cache +php artisan event:cache + +if [[ "$clear_schedule" -eq 1 ]]; then + php artisan schedule:clear-cache +fi + +step "Worker und PHP-FPM" +php artisan queue:restart +default_fpm_reload="echo '' | sudo -S service $PHP_FPM_SERVICE reload" +fpm_reload="${DEPLOY_FPM_RELOAD-$default_fpm_reload}" +if [[ -n "$fpm_reload" ]]; then + bash -c "$fpm_reload" +else + echo "PHP-FPM jetzt im Server-Panel neu laden (Reload, nicht Restart), danach Enter." + read -r +fi + +step "Wartungsmodus aus" +php artisan up + +step "Version" +if [[ -n "$ABOUT_SECTION" ]]; then + php artisan about --only="$ABOUT_SECTION" +else + cat RELEASE +fi + +trap - ERR + +# Läuft ein Worker? `queue:restart` oben beendet ihn; neu starten muss ihn +# Supervisor. Läuft Supervisor nicht, steht die Queue still, ohne dass es +# jemand merkt. +if [[ "$QUEUE_PROBE" -eq 1 ]]; then + step "Queue-Worker" + if ! php artisan monitoring:queue-probe --wait=60; then + echo + echo "!! Deploy $tag ist live, aber KEIN Queue-Worker läuft." >&2 + echo "!! Jetzt Supervisor und den Worker im Server-Panel prüfen — sonst bleiben Jobs und Mails liegen." >&2 + exit 3 + fi +fi + +echo +echo "Deploy $tag fertig (vorher $previous). Weiter mit den Prüfungen aus der Deploy-Anleitung." diff --git a/dev/betrieb/vorschau-auffrischen.sh b/dev/betrieb/vorschau-auffrischen.sh new file mode 100755 index 00000000..fe148ace --- /dev/null +++ b/dev/betrieb/vorschau-auffrischen.sh @@ -0,0 +1,175 @@ +#!/usr/bin/env bash +# +# Vorschau mit den aktuellen Live-Daten auffrischen (B2in). Ablauf: dev/betrieb/README.md. +# +# Kopiert die komplette Live-Datenbank und die hochgeladenen Medien (storage/app/public: +# Display-Mediathek, CMS-Mediathek, Videos, QR-Codes) in die Vorschau. Danach steht auf der +# Vorschau genau das, was der Kunde auf Live gepflegt hat – Displays, Playlists, Mediathek –, +# und der Release-Seeder kann darauf zur Probe laufen. +# +# Live wird nur gelesen (mysqldump --single-transaction, rsync als Quelle). Die Vorschau- +# Datenbank wird vollständig ersetzt. +# +# Aufruf (auf dem Server, als App-Benutzer): +# +# bash dev/betrieb/vorschau-auffrischen.sh [--seed=] +# +# --seed= nach dem Import (und den Migrationen) diesen Seeder auf der Vorschau ausführen, +# z. B. --seed=InteriorReleaseSeeder für eine erneute Generalprobe. +# +# Die Live-Sicherung bleibt als ~/b2in-live-.sql.gz liegen. + +set -euo pipefail + +live="${1:-}" +preview="${2:-}" +shift 2 || true +seeders=() + +for option in "$@"; do + case "$option" in + --seed=*) + seeder="${option#--seed=}" + if [[ ! "$seeder" =~ ^[A-Za-z][A-Za-z0-9]*$ ]]; then + echo "Ungültiger Seeder: $seeder" >&2; exit 2 + fi + seeders+=("$seeder") ;; + *) echo "Unbekannte Option: $option" >&2; exit 2 ;; + esac +done + +if [[ -z "$live" || -z "$preview" || ! -f "$live/artisan" || ! -f "$preview/artisan" ]]; then + echo "Aufruf: bash $0 [--seed=]" >&2 + exit 2 +fi + +live="$(cd "$live" && pwd)" +preview="$(cd "$preview" && pwd)" + +if [[ "$live" == "$preview" ]]; then + echo "Live- und Vorschau-Verzeichnis sind dasselbe." >&2 + exit 2 +fi + +step() { printf '\n==> %s\n' "$*"; } + +# Wert aus einer .env lesen (ohne Anführungszeichen, ohne Kommentar am Zeilenende bei unquotierten Werten) +env_value() { + local file="$1" key="$2" line value + line="$(grep -E "^${key}=" "$file" | tail -n 1 || true)" + value="${line#*=}" + if [[ "$value" =~ ^\"(.*)\"$ || "$value" =~ ^\'(.*)\'$ ]]; then + value="${BASH_REMATCH[1]}" + else + value="${value%% #*}" + fi + printf '%s' "$value" +} + +# MySQL-Zugangsdaten als Datei (chmod 600), damit das Passwort nicht in der Prozessliste steht +credentials() { + local env="$1/.env" file + file="$(mktemp)" + chmod 600 "$file" + { + echo "[client]" + echo "host=$(env_value "$env" DB_HOST)" + echo "port=$(env_value "$env" DB_PORT)" + echo "user=$(env_value "$env" DB_USERNAME)" + echo "password=\"$(env_value "$env" DB_PASSWORD)\"" + } > "$file" + printf '%s' "$file" +} + +live_db="$(env_value "$live/.env" DB_DATABASE)" +preview_db="$(env_value "$preview/.env" DB_DATABASE)" +live_host="$(env_value "$live/.env" DB_HOST)" +preview_host="$(env_value "$preview/.env" DB_HOST)" + +if [[ -z "$live_db" || -z "$preview_db" ]]; then + echo "DB_DATABASE fehlt in einer der beiden .env-Dateien." >&2 + exit 1 +fi + +if [[ "$live_db" == "$preview_db" && "$live_host" == "$preview_host" ]]; then + echo "STOPP: Vorschau und Live zeigen auf dieselbe Datenbank ($live_db). Nichts wurde verändert." >&2 + exit 1 +fi + +if [[ "$(env_value "$preview/.env" APP_ENV)" == "production" ]]; then + echo "STOPP: Die Vorschau läuft mit APP_ENV=production – ist das wirklich die Vorschau? Nichts wurde verändert." >&2 + exit 1 +fi + +mailer="$(env_value "$preview/.env" MAIL_MAILER)" +if [[ "$mailer" != "log" && "$mailer" != "array" ]]; then + echo "Hinweis: MAIL_MAILER der Vorschau ist „$mailer“. Mit den Live-Daten könnte die Vorschau echte Mails verschicken." + echo "Empfohlen: MAIL_MAILER=log in $preview/.env." +fi + +echo "Live: $live (Datenbank $live_db)" +echo "Vorschau: $preview (Datenbank $preview_db – wird vollständig ersetzt)" +echo "Medien: $live/storage/app/public/ → $preview/storage/app/public/ (Vorschau-eigene Dateien werden entfernt)" +read -r -p "Weiter? [ja/nein] " answer +if [[ "$answer" != "ja" ]]; then + echo "Abgebrochen, nichts verändert." + exit 1 +fi + +live_credentials="$(credentials "$live")" +preview_credentials="$(credentials "$preview")" +trap 'rm -f "$live_credentials" "$preview_credentials"' EXIT + +dump="$HOME/b2in-live-$(date +%Y-%m-%d-%H%M).sql.gz" + +step "Live-Datenbank sichern nach $dump" +mysqldump --defaults-extra-file="$live_credentials" --single-transaction --quick --no-tablespaces \ + --routines --triggers --default-character-set=utf8mb4 "$live_db" | gzip > "$dump" +ls -lh "$dump" + +step "Vorschau in den Wartungsmodus" +(cd "$preview" && php artisan down --retry=60) + +trap 'echo; echo "!! Abgebrochen. Die Vorschau bleibt im Wartungsmodus; Live ist unverändert." >&2; rm -f "$live_credentials" "$preview_credentials"' ERR + +step "Vorschau-Datenbank leeren und Live-Stand einspielen" +(cd "$preview" && php artisan db:wipe --force) +gunzip -c "$dump" | mysql --defaults-extra-file="$preview_credentials" --default-character-set=utf8mb4 "$preview_db" + +# Sitzungen und Cache von Live gehören nicht in die Vorschau +for table in sessions cache cache_locks jobs; do + if mysql --defaults-extra-file="$preview_credentials" -N -e "SHOW TABLES LIKE '$table'" "$preview_db" | grep -q .; then + mysql --defaults-extra-file="$preview_credentials" -e "TRUNCATE TABLE \`$table\`" "$preview_db" + fi +done + +step "Medien übernehmen" +mkdir -p "$preview/storage/app/public" +if [[ "$(realpath "$live/storage/app/public")" == "$(realpath "$preview/storage/app/public")" ]]; then + # Vorschau verlinkt auf die Live-Medien (preview-deployment.md, Schritt 3) – nichts zu kopieren + echo "Die Vorschau nutzt die Live-Medien per Link – übersprungen." +else + rsync -a --delete "$live/storage/app/public/" "$preview/storage/app/public/" + du -sh "$preview/storage/app/public" +fi + +step "Migrationen und Seeder" +cd "$preview" +php artisan migrate --force +for seeder in "${seeders[@]}"; do + php artisan db:seed --class="$seeder" --force +done + +step "Caches" +[[ -e public/storage ]] || php artisan storage:link +php artisan optimize:clear +php artisan config:cache +php artisan route:cache +php artisan view:cache + +step "Vorschau wieder online" +php artisan up + +trap - ERR +echo +echo "Vorschau aufgefrischt: Daten und Medien von Live, Stand $(date '+%d.%m.%Y %H:%M')." diff --git a/dev/git-deploy-monitoring/01-git-deploy.md b/dev/git-deploy-monitoring/01-git-deploy.md new file mode 100644 index 00000000..19680606 --- /dev/null +++ b/dev/git-deploy-monitoring/01-git-deploy.md @@ -0,0 +1,261 @@ +# 01 — Git-Deploy per Tag + +Ausgeliefert wird ein **Git-Tag**, nie ein Branch-Stand. Das Live-Verzeichnis ist +ein Git-Checkout dieses Tags. Ein Skript (`vorlagen/deploy.sh`) führt den Deploy +von Hand per SSH aus und bricht ab, **bevor** es etwas verändert, wenn etwas nicht +stimmt. + +Erprobt mit: Ploi-verwaltetem Ubuntu-Server, PHP-FPM 8.4, Nginx, Supervisor, +MySQL, Forgejo als Git-Server. Läuft genauso mit Forge, plain VPS, GitHub/GitLab. + +--- + +## Grundsätze + +- **Nur Tags** (`vX.Y.Z`, SemVer): Feature-Release erhöht die mittlere Stelle, + Hotfix die letzte. Die Tag-Nachricht ist die Release-Notiz (Inhalt, Migrationen, + neue `.env`-Werte, genauer Deploy-Befehl). +- **Deploy nur von Hand** per SSH. Push-Webhooks und „Quick Deploy“ im + Server-Panel bleiben aus — ein Push ist noch kein Release. +- **Assets lokal bauen und committen** (`public/build` versioniert). Auf dem + Server gibt es kein Node. Vite benennt Dateien nach Inhalt — ohne + Frontend-Änderung kein Diff. +- **Auf dem Server wird nichts von Hand geändert.** Das Skript bricht ab, sobald + der Checkout vom Tag abweicht. Auch Hotfixes laufen über Commit → Tag → Deploy. +- **Kein `git clean` auf Live.** `.env`, `storage/`, `vendor/`, `RELEASE`, + `public/storage` sind ignoriert und bleiben unberührt. +- **Deploy im selben Verzeichnis** mit `php artisan down` (Sekunden), keine + Release-Verzeichnisse — `storage/app` bleibt an seinem Ort. +- **Migrationen sind additiv.** Der alte Code muss mit dem neuen Schema laufen; + dann ist der Rollback einfach der vorherige Tag. Kein `migrate:rollback` auf Live. + +--- + +## Voraussetzungen im Repository + +`.gitignore` muss enthalten bzw. darf **nicht** enthalten: + +```gitignore +/RELEASE # schreibt deploy.sh beim Deploy +/.env +/vendor +/node_modules +/public/hot +/public/storage +/storage/*.key +# NICHT ignorieren: /public/build (wird versioniert) +``` + +Prüfen, ob ein Muster versehentlich echte Dateien trifft (macOS-Muster wie +`Icon` treffen bei `core.ignorecase=true` auch `…/icon/`): + +```bash +git ls-files --others --ignored --exclude-standard | grep -v -E '^(vendor|node_modules|storage)/' | head -50 +``` + +Version in der App: `vorlagen/laravel/app/Support/Monitoring/Release.php` plus + +```php +// config/app.php +'version' => App\Support\Monitoring\Release::current(env('APP_VERSION')), +``` + +`deploy.sh` nach `dev/betrieb/deploy.sh` (oder anders, dann `DEPLOY_SCRIPT` +im Skript anpassen) und die Einstellungen oben setzen: + +```bash +DEPLOY_SCRIPT="dev/betrieb/deploy.sh" # Pfad im Repository +PHP_FPM_SERVICE="php8.4-fpm" # systemd-Name +ABOUT_SECTION="" # Abschnitt aus AboutCommand::add, leer = RELEASE ausgeben +QUEUE_PROBE=1 # 0, wenn das Projekt keine Queue hat +``` + +`QUEUE_PROBE=1` setzt `monitoring:queue-probe` voraus (03). + +--- + +## A — Einmalig: Server-Zugang zum Git-Server + +Auf dem Server als App-Benutzer (bei Ploi `ploi`): + +1. `git --version` +2. Deploy-Key erzeugen und im Git-Server **nur lesend** am Repository eintragen: + + ```bash + ssh-keygen -t ed25519 -f ~/.ssh/deploy_b2inapp -N "" -C "b2inapp-live" + cat ~/.ssh/deploy_b2inapp.pub + ``` + +3. `~/.ssh/config`: + + ``` + Host forge.adametz.media + Port 222 + User git + IdentityFile ~/.ssh/deploy_b2inapp + IdentitiesOnly yes + ``` + +4. Host-Key aufnehmen, Fingerprint mit dem im Git-Server angezeigten vergleichen: + + ```bash + ssh-keyscan -p 222 forge.adametz.media >> ~/.ssh/known_hosts + ssh-keygen -lf <(ssh-keyscan -p 222 forge.adametz.media 2>/dev/null) + ``` + +5. Test: `git ls-remote ssh://git@forge.adametz.media :222/kadmin/b2in.git` zeigt die Tags. +6. **FPM-Reload ohne Passwort testen** (Ploi erlaubt das dem Benutzer `ploi`): + + ```bash + ps -o pid,lstart,args -C php-fpm8.4 | head -3 + echo "" | sudo -S service php8.4-fpm reload; echo "Exit: $?" + sleep 2; ps -o pid,lstart,args -C php-fpm8.4 | head -3 + ``` + + Exit 0, `master process` mit gleicher PID, `pool www` neu → das Skript lädt + FPM selbst. Fragt `sudo` nach einem Passwort: beim Deploy + `DEPLOY_FPM_RELOAD=` setzen, das Skript wartet dann auf Enter, bis FPM im + Panel neu geladen ist. **Immer Reload, nie Restart** — Restart entfernt kurz + den Socket, Nginx liefert 502. +7. **Supervisor und Worker prüfen:** `systemctl is-enabled supervisor` → `enabled`; + im Panel ein Worker mit `php artisan queue:work --queue= --tries=3 --max-time=3600`. + +## B — Einmalig: Live-Verzeichnis zum Checkout machen + +### B1 — Neues Projekt + +```bash +cd ~ && git clone ssh://git@git.example.com:222/team/meineapp.git meineapp.de +cd meineapp.de && git checkout --detach v1.0.0 +cp /pfad/zur/.env .env && composer install --no-dev --optimize-autoloader +echo v1.0.0 > RELEASE && php artisan migrate --force && php artisan config:cache +``` + +### B2 — Bestehendes Verzeichnis (bisher SFTP o. Ä.) an Ort und Stelle umwandeln + +Erst ein Tag `vA` erstellen, der **genau** dem Live-Stand entspricht. + +```bash +cd ~ && tar czf backup-vor-git.tgz --exclude=./storage --exclude=./node_modules -C ~/meineapp.de . +cd ~/meineapp.de +git init -q +git remote add origin ssh://git@git.example.com:222/team/meineapp.git +git fetch --tags origin +git update-ref --no-deref HEAD "$(git rev-parse 'vA^{commit}')" +git read-tree HEAD # Index = Tag, Dateien bleiben unangetastet +git status --porcelain # Abweichungen sichten +``` + +| Zeile | Bedeutung | Vorgehen | +|---|---|---| +| ` M datei` | Live weicht vom Tag ab | `git diff -- datei`. Fehlt die Änderung im Repository: erst lokal nachziehen, neuer Tag. Sonst Altstand, wird überschrieben | +| ` D datei` | fehlt auf Live | meist Entwicklerdatei; der Checkout legt sie an | +| `?? datei` | nur auf Live | **nicht löschen** — nach `~/vor-git/` verschieben oder in `.gitignore` aufnehmen (neuer Tag) | + +Bekannte Funde: fehlende `.gitignore` auf Live (dann erscheinen `.env`, +`vendor/` als `??` — verschwinden nach dem Checkout), per SFTP gelöschte +Altdateien, Pfade mit Umlauten (Git setzt sie in Anführungszeichen — beim +Filtern mit `grep` beachten). + +Wenn nichts Unerklärtes übrig ist: + +```bash +git checkout -q -f --detach vA +git status --porcelain # muss leer sein +``` + +Beim ersten Deploy existiert `deploy.sh` evtl. noch nicht im Live-Stand: + +```bash +git show vB:dev/betrieb/deploy.sh > /tmp/deploy.sh && bash /tmp/deploy.sh vB +``` + +--- + +## C — Release lokal (jedes Mal) + +```bash +# 1. sauber und grün +git status # nichts offen +php artisan test --compact --parallel && vendor/bin/phpstan analyse + +# 2. Assets bauen und committen +npm ci && npm run build +git add public/build +git diff --cached --quiet public/build || git commit -m "build: Assets für vX.Y.Z" + +# 3. Tag mit Release-Notiz, pushen (Tags mitnehmen!) +git tag -a vX.Y.Z -m "vX.Y.Z — + +Deploy: , + bash dev/betrieb/deploy.sh vX.Y.Z [--migrations]" +git push origin main --follow-tags +``` + +## D — Deploy (jedes Mal, auf dem Server) + +1. Bringt der Tag Migrationen mit: **DB-Backup**. +2. Neue `.env`-Werte laut Release-Notiz vorher eintragen. +3. Deploy: + + ```bash + cd ~/meineapp.de + bash dev/betrieb/deploy.sh vX.Y.Z # ohne Migrationen + bash dev/betrieb/deploy.sh vX.Y.Z --migrations # mit Migrationen + ``` + +Ablauf im Skript: + +| Schritt | Bei Fehler | +|---|---| +| Arbeitsverzeichnis sauber? | Abbruch, nichts verändert | +| `git fetch --tags`, Tag vorhanden? | Abbruch, nichts verändert | +| Neue Migrationen? Ohne `--migrations` | Abbruch, nichts verändert | +| `down` → Checkout → `RELEASE` → `composer install` → `migrate` → Livewire-Assets → Caches → `queue:restart` → FPM-Reload → `up` | Seite bleibt im Wartungsmodus, Skript nennt den Rollback-Befehl | +| Version ausgeben | — | +| `monitoring:queue-probe --wait=60` | **Exit 3**: live, aber kein Worker — Supervisor/Worker prüfen | + +Optionen: `--clear-schedule` (setzt `withoutOverlapping`-Sperren zurück, nur +wenn sich Sperrdauern geändert haben). Lange Migrationen: +`DB_LOCK_WAIT_TIMEOUT=300 bash dev/betrieb/deploy.sh vX.Y.Z --migrations`. + +Exit-Codes: `0` fertig · `1` abgebrochen · `2` falscher Aufruf · `3` kein Worker. + +Hinweis: Das Skript läuft aus einer Kopie des **vorher** ausgecheckten Stands +(Bash liest Skripte stückweise, Git ersetzt die Datei beim Checkout). Neue +Schritte im Skript greifen also erst beim übernächsten Deploy — beim +einführenden Deploy von Hand nachholen. + +4. Prüfen: `/health` mit Token zeigt `"version":"vX.Y.Z"`, Uptime Kuma grün, + GlitchTip ohne neue Einträge, Logs ohne neue Fehler. + +## E — Rollback + +```bash +bash dev/betrieb/deploy.sh +``` + +Baut `vendor/` und Caches für den alten Tag neu auf. Nur bei Datenproblemen +das DB-Backup einspielen. + +--- + +## Fallstricke + +- **FPM-Restart statt Reload** → 502 für Sekunden (Nginx: `connect() to unix:…fpm.sock failed`). + Einzelne `recv() failed (104: Connection reset by peer)` genau zum Deploy-Zeitpunkt + sind normal (laufende Anfragen beim Reload). Abhilfe wäre + `process_control_timeout = 10s` im Abschnitt `[global]` von + `/etc/php/8.4/fpm/php-fpm.conf` (root) — **nie in die Pool-Datei** (`www.conf`), + dort ist der Schlüssel unbekannt und FPM startet nicht mehr. +- **Supervisor gestoppt** → `queue:restart` beendet den Worker, niemand startet + ihn neu. Deshalb die Worker-Prüfung am Ende. Notlösung ohne sudo: + `nohup php artisan queue:work --tries=3 --max-time=3600 >> storage/logs/worker-manual.log 2>&1 &` +- **Nie `queue:retry all`** nach Ausfällen: alte Jobs tragen den Stand ihrer + Klasse von damals und scheitern oder verschicken veraltete Mails. Erst + `queue:failed` ansehen, gezielt `queue:retry `. +- **Push ohne Tags** → `deploy.sh` findet den Tag nicht. Immer `--follow-tags`. +- **`RELEASE` nicht von Hand neu erzeugen** auf einem anderen Stand als dem Tag + (ergibt `vX.Y.Z-3-gabc-dirty`). Das Skript schreibt sie. +- **Server-Panel-Logs**: Ploi führt für Sites kein Nginx-Zugriffsprotokoll; + das Fehlerlog `/var/log/nginx/-error.log` ist für `ploi` lesbar. diff --git a/dev/git-deploy-monitoring/02-fehlerprotokoll-glitchtip.md b/dev/git-deploy-monitoring/02-fehlerprotokoll-glitchtip.md new file mode 100644 index 00000000..770b3db8 --- /dev/null +++ b/dev/git-deploy-monitoring/02-fehlerprotokoll-glitchtip.md @@ -0,0 +1,256 @@ +# 02 — Fehlerprotokoll mit GlitchTip + +GlitchTip ist ein selbst gehostetes, Sentry-kompatibles Fehlerprotokoll. Die App +spricht es über die **offiziellen Sentry-SDKs** an (`sentry/sentry-laravel`, +`@sentry/browser`); ohne DSN sind beide ein No-op. Gleiche Fehler werden zu +einem Eintrag gruppiert (Häufigkeit, betroffene URLs, Release), gemeldet wird +nur ein neuer Fehlertyp. + +--- + +## 1. GlitchTip-Server (einmalig, für alle Projekte) + +Vorlage: `vorlagen/server/glitchtip-compose.yml` (GlitchTip 6, Postgres 18, +Valkey; gegen die offizielle `compose.sample.yml` abgleichen). + +1. `SECRET_KEY` (`openssl rand -hex 32`), `GLITCHTIP_DOMAIN`, `EMAIL_URL`, + `DEFAULT_FROM_EMAIL` setzen. Aufbewahrung: `GLITCHTIP_RETENTION_DAYS` + (Standard 90 — ältere Versionen hießen `GLITCHTIP_MAX_EVENT_LIFE_DAYS`). +2. `docker compose -f glitchtip-compose.yml up -d`, Reverse Proxy mit TLS + (`vorlagen/server/Caddyfile`). +3. Erstes Konto anlegen, danach `ENABLE_USER_REGISTRATION: "False"`, neu starten. +4. Organisation anlegen (Slug merken, z. B. `meine-org`). + +## 2. Je Projekt: zwei GlitchTip-Projekte + +| Projekt | Plattform | `.env` | +|---|---|---| +| `-server` | PHP / Laravel | `SENTRY_LARAVEL_DSN` | +| `-browser` | JavaScript | `SENTRY_BROWSER_DSN` | + +Getrennt, weil Browserfehler (Erweiterungen, alte Browser) eine andere +Qualität haben als Serverfehler. Je Projekt eine **Alert-Regel**: Mail bei +neuem Fehlertyp, wenn möglich nur für Umgebung `production`. + +Umgebungen: `SENTRY_ENVIRONMENT=production` auf Live, `local` lokal. Lokal die +DSN nur zum Testen setzen. + +--- + +## 3. Laravel-Anbindung (Server) + +```bash +composer require sentry/sentry-laravel +``` + +Dateien aus `vorlagen/laravel/` kopieren: + +| Datei | Zweck | +|---|---| +| `config/sentry.php` | gehärtete Konfiguration (ersetzt die veröffentlichte) | +| `app/Support/Monitoring/ErrorReportScrubber.php` | `before_send`: nur User-ID, Tokens/Signaturen aus URL/Query/Referer, E-Mails aus Meldungen | +| `app/Support/Monitoring/Release.php` | Version aus `APP_VERSION` oder Datei `RELEASE` | +| `app/Support/Monitoring/ErrorSignal.php` | Warnung ohne Exception, gedrosselt (5 je 10 min und Ort) | +| `app/Http/Middleware/ReportErrorSignals.php` | 404 mit eigenem Referrer, 403/429 für Angemeldete, 419 | + +`bootstrap/app.php`: + +```php +use App\Http\Middleware\ReportErrorSignals; +use Sentry\Laravel\Integration; +use Symfony\Component\Console\Exception\CommandNotFoundException; + + ->withMiddleware(function (Middleware $middleware): void { + // Fehler ohne Exception (toter interner Link, 403/429 für Angemeldete, 419) — + // global, weil 404 vor dem Routing entsteht + $middleware->append(ReportErrorSignals::class); + }) + ->withExceptions(function (Exceptions $exceptions): void { + // Gemeldete Exceptions an GlitchTip (ohne DSN ein No-op); + // Laravels dontReport (404, Validierung, Auth) gilt weiter + Integration::handles($exceptions); + + // Vertippte artisan-Befehle sind kein Anwendungsfehler + $exceptions->dontReport(CommandNotFoundException::class); + }) +``` + +`config/app.php`: + +```php +'version' => App\Support\Monitoring\Release::current(env('APP_VERSION')), +``` + +`config/sentry.php` liest `release` aus derselben Quelle. + +### Was die gehärtete `config/sentry.php` anders macht + +| Option | Wert | Warum | +|---|---|---| +| `send_default_pii` | `false` (fest) | keine IP, keine Cookies, keine Header mit Personenbezug | +| `max_request_body_size` | `never` | Formular- und JSON-Inhalte verlassen den Server nie | +| `before_send` | `ErrorReportScrubber::beforeSend` | User-ID statt Person, Tokens raus, E-Mails → `[email]` | +| `breadcrumbs.logs`, `breadcrumbs.cache` | `false` | Lognachrichten tragen oft E-Mail-Adressen | +| `enable_metrics` | `false` | versteht GlitchTip nicht | +| `ignore_transactions` | `/up`, `/health` | Monitor-Aufrufe sind kein Signal | + +**Je Projekt anpassen:** `ErrorReportScrubber::AllowedQueryParameters` — welche +Query-Parameter unverändert mitgehen dürfen (`utm_*` immer). Dieselbe Liste +steht in `error-reporting.js`. + +--- + +## 4. Browserfehler + +```bash +npm install @sentry/browser +``` + +| Datei | Zweck | +|---|---| +| `resources/js/error-reporting.js` | hört auf `error` und `unhandledrejection`; lädt das SDK erst beim ersten Fehler (1,5 kB statt 32 kB auf fehlerfreien Seiten); filtert URLs und E-Mails | +| `resources/js/error-reporting-sdk.js` | Re-Export der benötigten SDK-Funktionen (Tree-Shaking) | +| `resources/views/components/monitoring/browser-errors.blade.php` | `` mit DSN, Release, User-ID, Bereich — nur mit `SENTRY_BROWSER_DSN` | + +Vite-Eingang ergänzen (`vite.config.js`, `input`): + +```js +input: ['resources/css/app.css', 'resources/js/app.js', 'resources/js/error-reporting.js'], +``` + +Im `` jedes Layouts (Build-Ordner und Bereich anpassen): + +```blade + +``` + +`area` erscheint in GlitchTip als Tag (z. B. `web`, `portal`, `auth`). + +`config/monitoring.php` aus der Vorlage liefert `monitoring.browser.dsn`. + +--- + +## 5. Tests — nie an das echte GlitchTip melden + +`phpunit.xml`: + +```xml + + + + +``` + +Tests aus der Vorlage: `tests/Feature/Monitoring/ErrorReportingTest.php` +(Datenschutzfilter, Wächtertest „the test suite never reports to the real +glitchtip“), `ErrorSignalsTest.php`, `BrowserErrorReportingTest.php`, +`tests/Unit/Monitoring/ReleaseTest.php`. Ereignisse fängt +`tests/Support/FakeGlitchTip.php` ab (`FakeGlitchTip::install()`). + +Die Tests setzen `RefreshDatabase` voraus (in `tests/Pest.php` aktivieren) und +eine `User`-Factory. + +--- + +## 6. Regeln für den Code + +- **Keine variablen Zahlen in Fehlermeldungen**, wenn sie gruppiert werden + sollen — GlitchTip gruppiert nach Text. Variable Werte in den Kontext oder + einen Fingerprint setzen (Muster: `ErrorSignal`). +- **Vorübergehende Fremdfehler nicht einzeln melden** (Timeouts, 5xx, 429 von + externen APIs): einmal wiederholen, dann `Log::warning`; Alarm erst, wenn ein + Lauf abbricht oder die Mehrheit scheitert. Muster: + + ```php + try { + $response = Http::timeout(20) + ->retry(2, 3000, fn (Throwable $e) => $e instanceof ConnectionException + || ($e instanceof RequestException && ($e->response->serverError() || $e->response->status() === 429)), + throw: false) + ->post($url, $payload); + } catch (ConnectionException $e) { + throw new ServiceTemporarilyUnavailable('… nicht erreichbar', previous: $e); // eigene Klasse + } + // Aufrufer: catch (ServiceTemporarilyUnavailable) → Log::warning, sonst report() + ``` + +- **Keine Personenbezüge** in Meldungen bauen; der Filter ist das Netz, nicht der Plan. + +--- + +## 7. Auswertung per API (für Entwickler und KI-Chats) + +Lese-Token in GlitchTip (Profil ▸ Auth Tokens): Scopes `project:read`, +`event:read` — **kein** Schreibrecht. Lokal als `GLITCHTIP_API_TOKEN` in die +`.env`, nie ausgeben, nie committen. Ohne `org:read` liefert die +Organisationsliste 403; Projekte und Issues funktionieren. + +```bash +T=$(grep -E "^GLITCHTIP_API_TOKEN=" .env | cut -d= -f2- | tr -d "'\"") +B=https://errors.example.com/api/0 +ORG=meine-org + +# Projekte (IDs) +curl -s -H "Authorization: Bearer $T" "$B/projects/" | python3 -c " +import json,sys; [print(p['id'], p['slug']) for p in json.load(sys.stdin)]" + +# Offene Einträge eines Projekts, nur Live +curl -s -H "Authorization: Bearer $T" \ + "$B/organizations/$ORG/issues/?project=1&query=is:unresolved&environment=production&limit=100" \ +| python3 -c " +import json,sys +for i in json.load(sys.stdin): + print(i['id'], i['count'], i['firstSeen'][:16], i['lastSeen'][:16], '|', (i['title'] or '')[:100])" + +# Letztes Ereignis: Umgebung, Release, URL, Stacktrace +curl -s -H "Authorization: Bearer $T" "$B/issues//events/latest/" | python3 -c " +import json,sys +e=json.load(sys.stdin); t={x['key']:x['value'] for x in e.get('tags',[])} +print('env:',t.get('environment'),'| release:',t.get('release'),'| area:',t.get('area')) +for en in e.get('entries',[]): + if en['type']=='exception': + for v in en['data'].get('values',[]): + print('EXC',v.get('type'),':',(v.get('value') or '')[:300]) + for f in ((v.get('stacktrace') or {}).get('frames') or [])[-8:]: + print(' ',f.get('filename'),f.get('function'),f.get('lineNo')) + if en['type']=='request': print('REQ',en['data'].get('url')) + if en['type']=='breadcrumbs': + for b in en['data'].get('values',[])[-6:]: print('BC',b.get('category'),(b.get('message') or '')[:120])" +``` + +### Ablauf „schau in GlitchTip“ + +1. Offene Einträge beider Projekte abrufen, zuerst `environment=production`. +2. Einordnen: + + | Klasse | Erkennen | Vorgehen | + |---|---|---| + | Test-/Entwicklungsrauschen | Umgebung `local`, Texte aus Tests | nichts am Code; auflösen | + | Bedienfehler am Server | z. B. `CommandNotFoundException` | `dontReport` | + | Externer Dienst vorübergehend | Timeouts/5xx fremder APIs | Muster aus Abschnitt 6 | + | Echter Bug | Stacktrace in `app/`, `resources/`, Browserfehler mit eigener URL | roter Test → Fix → Deploy | + | Unklar | z. B. `Error: [object Object]` | Erfassung verbessern, nächstes Auftreten abwarten | + +3. Bei Browserfehlern zeigen die Frames oft nur `livewire.min.js` — der Hinweis + steckt im Funktionsnamen (`[Alpine] __('…')` = Alpine-Ausdruck) → in + `resources/views` danach suchen. Kann ein Muster wiederkommen: Wächtertest + über alle Dateien. +4. Fix ausliefern (Hotfix-Tag), danach in GlitchTip auflösen (von Hand — + Token ist nur lesend). Kommt der Fehler mit neuem Release wieder, öffnet + GlitchTip den Eintrag neu. +5. **Breadcrumbs lesen**: Sie zeigen die SQL-Abfragen vor dem Fehler — oft + erkennt man daran Job, Modell und Datensatz (z. B. `failed_jobs`-Insert → + Fehler in einem Queue-Job; `payload.createdAt` verrät alte Jobs). + +Im Projekt eine Kurzfassung mit den echten Werten (Instanz, Org-Slug, +Projekt-IDs) unter `dev/glitch-tip/README.md` ablegen und in `CLAUDE.md` +verweisen — dann finden KI-Chats sie automatisch. + +--- + +## 8. Datenschutz (vor dem Einschalten) + +- Datenschutzerklärung: Fehlerprotokollierung (Dienst selbst gehostet, + Kategorien: User-ID, URL, Browser, Fehlermeldung; Frist = Aufbewahrung in + GlitchTip, z. B. 90 Tage; Rechtsgrundlage berechtigtes Interesse am sicheren Betrieb). +- Kein Auftragsverarbeiter, wenn GlitchTip auf eigenem Server läuft (Hoster ggf. AVV). diff --git a/dev/git-deploy-monitoring/03-betriebsueberwachung.md b/dev/git-deploy-monitoring/03-betriebsueberwachung.md new file mode 100644 index 00000000..d1cfc19e --- /dev/null +++ b/dev/git-deploy-monitoring/03-betriebsueberwachung.md @@ -0,0 +1,222 @@ +# 03 — Betriebsüberwachung: /health, Herzschlag, Worker, Alarme, Uptime Kuma + +GlitchTip (02) sieht nur Fehler, die PHP noch melden kann. Dieser Teil deckt den +Rest ab: Scheduler steht, Worker steht, Platte voll, Server weg — und meldet es +aufs Handy. + +--- + +## 1. Bausteine in der App + +Dateien aus `vorlagen/laravel/` kopieren: + +| Datei | Zweck | +|---|---| +| `config/monitoring.php` | Alarme (Mail, ntfy), Browser-DSN, Health-Token, Schwellen | +| `app/Support/OperationalAlert.php` | Alarm: immer `Log::critical` (Kanal `monitoring`), dazu Text-Mail und ntfy — unabhängig voneinander, Best-Effort | +| `app/Services/Monitoring/HealthProbe.php` | Prüfungen DB, Cache, Queue-Rückstau, Scheduler-Herzschlag, Plattenplatz | +| `app/Http/Controllers/HealthController.php` | `GET /health` mit Token → JSON, 200 oder 503 | +| `app/Console/Commands/MonitoringHeartbeat.php` | `monitoring:heartbeat`, minütlich vom Scheduler | +| `app/Console/Commands/MonitoringQueueProbe.php` + `app/Jobs/Monitoring/QueueProbe.php` | `monitoring:queue-probe`: Test-Job, wartet bis zum Abholen (Ende von `deploy.sh`) | +| `tests/Feature/Monitoring/HealthEndpointTest.php`, `QueueProbeTest.php` | Tests | + +Log-Kanal `monitoring` in `config/logging.php` ergänzen (eigene Datei, rotierend): + +```php +'monitoring' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/monitoring.log'), + 'level' => 'debug', + 'days' => 14, +], +``` + +### Verdrahtung + +`bootstrap/app.php` — Route außerhalb der `web`-Gruppe (keine Session, kein CSRF): + +```php +use App\Http\Controllers\HealthController; +use Illuminate\Support\Facades\Route; + + ->withRouting( + web: __DIR__.'/../routes/web.php', + commands: __DIR__.'/../routes/console.php', + health: '/up', + then: function (): void { + // Tiefer Health-Check für den externen Monitor + Route::get('/health', HealthController::class) + ->middleware('throttle:30,1') + ->name('health.deep'); + }, + ) +``` + +Hat das Projekt Basic Auth (Staging) oder eine Host-Whitelist (`trustHosts`): +`/health` von Basic Auth ausnehmen (der Monitor schickt seinen eigenen +`Authorization`-Header) und IP/`localhost` als Host zulassen. + +`routes/console.php`: + +```php +use App\Console\Commands\MonitoringHeartbeat; +use App\Support\OperationalAlert; +use Illuminate\Console\Scheduling\Event; +use Illuminate\Support\Facades\Schedule; + +// Betriebs-Alert, wenn ein geplanter Task fehlschlägt — an JEDEN Task hängen +$alertOnFailure = fn (string $task) => function (Event $event) use ($task): void { + OperationalAlert::send("Geplanter Task fehlgeschlagen: {$task}", ['exit_code' => $event->exitCode]); +}; + +// Herzschlag: fällt der Scheduler aus (Cron weg, Server hängt), greift kein +// onFailure mehr — dann meldet /health den fehlenden Herzschlag +Schedule::command(MonitoringHeartbeat::class) + ->everyMinute() + ->withoutOverlapping(2) + ->onFailure($alertOnFailure('monitoring:heartbeat')); + +// Fehlgeschlagene Jobs nach 30 Tagen entfernen +Schedule::command('queue:prune-failed', ['--hours=720']) + ->dailyAt('03:55') + ->withoutOverlapping(30) + ->onFailure($alertOnFailure('queue:prune-failed')); +``` + +Bei allen eigenen Tasks: `withoutOverlapping()` mit **kurzer** Sperrdauer +(Standard wäre 24 h — ein abgestürzter Lauf blockiert sonst einen Tag) und +`->onFailure($alertOnFailure(''))`. + +`app/Providers/AppServiceProvider.php` → `boot()`: + +```php +use App\Support\OperationalAlert; +use Illuminate\Foundation\Console\AboutCommand; +use Illuminate\Queue\Events\JobFailed; +use Illuminate\Support\Facades\Queue; + + // Betriebs-Alert bei endgültig fehlgeschlagenem Queue-Job + Queue::failing(function (JobFailed $event): void { + OperationalAlert::send("Queue-Job fehlgeschlagen: {$event->job->resolveName()}", [ + 'connection' => $event->connectionName, + 'queue' => $event->job->getQueue(), + 'exception' => $event->exception->getMessage(), + ]); + }); + + // Ausgelieferte Version in `php artisan about` (Abschnitt-Name = ABOUT_SECTION in deploy.sh) + AboutCommand::add('App', fn (): array => ['Version' => config('app.version') ?? '—']); +``` + +### Die Prüfungen von `/health` + +| Prüfung | `critical` (→ 503) | `warn` (200) | +|---|---|---| +| `database` | `select 1` scheitert | — | +| `cache` | Schreiben/Lesen scheitert | — | +| `queue` | ältester wartender Job ≥ `MONITORING_QUEUE_BACKLOG_SECONDS` (300) — nur Treiber `database` | — | +| `scheduler` | kein Herzschlag oder ≥ 10 min alt | ≥ 3 min alt | +| `disk` | freier Platz < `MONITORING_DISK_MIN_FREE_PERCENT` (10 %) | < 20 % | + +Ohne konfiguriertes `MONITORING_HEALTH_TOKEN` gibt es den Endpunkt nicht (404), +falsches Token → 404. Token im Header `Authorization: Bearer …` oder `?token=`. +Antwort enthält `version`. + +Der Herzschlag liegt in `storage/framework/scheduler-heartbeat` (übersteht +`cache:clear`, keine Migration). **Mehrere App-Server:** stattdessen eine +DB-Zeile, sonst prüft jeder Server nur seine eigene Datei. + +Andere Queue-Treiber (Redis, SQS): `queue`-Prüfung meldet „nicht prüfbar“; +dann eine eigene Prüfung ergänzen (z. B. `Queue::size()` plus Alter des +ältesten Jobs) oder Horizon-Status abfragen. + +--- + +## 2. ntfy — Push aufs Handy + +Server einmalig: `vorlagen/server/ntfy-compose.yml` + `ntfy-server.yml` +(`auth-default-access: deny-all` — ohne Anmeldung kein Lesen, kein Schreiben). + +Je Projekt: + +```bash +ntfy user add meineapp-alerts # Passwort wird nicht gebraucht +ntfy access meineapp-alerts meineapp-ops write-only # darf nur schreiben +ntfy access meineapp-ops read-only # entfällt bei Admin-Rolle +ntfy token add meineapp-alerts # → tk_… in MONITORING_NTFY_TOKEN +``` + +Test: `curl -H "Authorization: Bearer tk_…" -d "Test" https://push.example.com/meineapp-ops`. +Handy: ntfy-App, Server hinzufügen (mit eigenem Benutzer), Topic abonnieren. + +Warum eigener Benutzer mit Token: gerät der Token in falsche Hände, kann damit +niemand mitlesen; `ntfy token remove` sperrt ihn ohne Passwortwechsel. + +`OperationalAlert` sendet JSON an die Basis-URL (`topic`, `title`, `message`, +`priority`, `tags`) — UTF-8-sicher, anders als Header-basierte Aufrufe. + +--- + +## 3. Uptime Kuma — externer Monitor + +Auf einem **anderen** Server als die App (`vorlagen/server/uptime-kuma-compose.yml`). +Admin-Konto anlegen, 2FA aktivieren. + +| Monitor | Typ / Ziel | Intervall | Wiederholungen | +|---|---|---|---| +| ` /health` | HTTP(s), `https://meineapp.de/health`, Header `{"Authorization": "Bearer "}`, Status `200-299` | 60 s | 2 | +| ` /up` je Domain | HTTP(s), `https:///up` | 5 min | 1 | +| Zertifikate | Settings ▸ Certificate Expiry Notification | 14 Tage vorher | — | + +Benachrichtigung: ntfy (Server, Topic, Priorität 4, Access Token) und SMTP-Mail. + +Ein stehender Worker fällt so nach etwa 5 + 2 Minuten auf (Queue-Schwelle plus +Wiederholungen) — ein zusätzlicher Alarm aus dem Scheduler ist dann überflüssig. + +**Test:** zweiter Monitor mit falschem Token → 404 → Alarm muss auf Handy und +per Mail ankommen; danach löschen. + +**Zweite Ebene (empfohlen):** kostenloser externer Dienst (z. B. UptimeRobot) +auf `https://meineapp.de/up` mit Mail — meldet auch, wenn der Monitoring-Server +selbst ausfällt. + +--- + +## 4. Worker-Prüfung im Deploy + +`deploy.sh` ruft am Ende `php artisan monitoring:queue-probe --wait=60` auf: +Test-Job auf die Standard-Queue, Abholung wird über den Cache quittiert. Kein +Worker → Exit 3 mit Hinweis. Von Hand jederzeit: + +```bash +php artisan monitoring:queue-probe +ps -eo pid,lstart,args | grep "queue:work" | grep -v grep +``` + +Voraussetzung: Der Worker bedient die Standard-Queue, und App und Worker teilen +denselben Cache-Store (nicht `array`). + +--- + +## 5. Erweiterungen (Muster aus Pressekonto, nicht in den Vorlagen) + +- **Admin-Systemstatus-Seite**: Kacheln aus `HealthProbe::checks()` plus + projektspezifische Prüfungen (fehlende Permissions, `APP_DEBUG` an, + ausstehende Datenmigrationen, letzte fehlgeschlagene Jobs). +- **Fehlgeschlagene Logins**: falsches Passwort / Konto ohne Passwort / + Sperre in einen Aktivitäts-Verlauf, mit Einstieg (`livewire`/`fortify`) und + gekürztem HMAC der IP statt Klartext. Unbekannte Adressen **nur zählen** + (Tag × Einstieg × IP-Hash), sonst verdecken Credential-Stuffing-Wellen + (bei Pressekonto 250/Tag aus 50 Quellen) die relevanten Einträge. +- **Webanalyse**: Umami selbst gehostet, cookielos; Query-Parameter mit + `data-before-send` filtern (signierte Links!), im Admin und bei + Impersonation nicht tracken. +- **Nginx-Fehlerlog** gelegentlich zusammenfassen: + + ```bash + sed -E 's/^[0-9\/]+ [0-9:]+ //; s/[0-9]+#[0-9]+: \*[0-9]+ //; s/client: [0-9a-f.:]+/client: X/; s/, (server|request|upstream|host|referrer): .*//' \ + /var/log/nginx/-error.log | cut -c1-180 | sort | uniq -c | sort -rn | head -25 + ``` + + `access forbidden by rule` = Scanner suchen `/.env` (gut so); + `recv() failed (104…)` nur zu Deploy-Zeiten = Reload, unkritisch. diff --git a/dev/git-deploy-monitoring/04-checkliste-neues-projekt.md b/dev/git-deploy-monitoring/04-checkliste-neues-projekt.md new file mode 100644 index 00000000..ebf2ff90 --- /dev/null +++ b/dev/git-deploy-monitoring/04-checkliste-neues-projekt.md @@ -0,0 +1,62 @@ +# 04 — Checkliste: Übernahme in ein neues Projekt + +Platzhalter: `meineapp` (Projektname), `meineapp.de` (Live-Domain), +`errors.example.com` / `push.example.com` / `status.example.com` (Monitoring-Server), +`git.example.com` (Git-Server). Details in 01–03. + +## 0. Monitoring-Server (nur beim ersten Projekt) + +- [ ] GlitchTip: `vorlagen/server/glitchtip-compose.yml`, `SECRET_KEY`, Domain, SMTP, `GLITCHTIP_RETENTION_DAYS` +- [ ] Erstes Konto, danach `ENABLE_USER_REGISTRATION: "False"`; Organisation angelegt +- [ ] ntfy: `ntfy-compose.yml` + `ntfy-server.yml` (`deny-all`), eigener Admin-Benutzer, Handy-App verbunden +- [ ] Uptime Kuma: `uptime-kuma-compose.yml`, Admin mit 2FA, ntfy- und Mail-Benachrichtigung +- [ ] Reverse Proxy mit TLS für alle drei (`Caddyfile` oder vorhandener Proxy) +- [ ] Monitoring-Server ≠ App-Server + +## 1. Monitoring-Server: je Projekt + +- [ ] GlitchTip-Projekte `meineapp-server` (PHP/Laravel) und `meineapp-browser` (JavaScript), DSNs notiert +- [ ] Alert-Regel je Projekt: Mail bei neuem Fehlertyp (möglichst nur `production`) +- [ ] ntfy: Benutzer `meineapp-alerts`, `write-only` auf `meineapp-ops`, Token erzeugt; eigener Benutzer liest +- [ ] Lese-Token für die GlitchTip-API (`project:read`, `event:read`) für die lokale `.env` + +## 2. Laravel-Teil + +- [ ] `composer require sentry/sentry-laravel` · `npm install @sentry/browser` +- [ ] `vorlagen/laravel/` ins Projekt kopieren (Pfade 1:1) +- [ ] `ErrorReportScrubber::AllowedQueryParameters` und `ALLOWED_QUERY` in `error-reporting.js` angepasst +- [ ] `bootstrap/app.php`: `/health`-Route, `ReportErrorSignals`, `Integration::handles`, `dontReport(CommandNotFoundException)` (02 §3, 03 §1) +- [ ] `config/app.php`: `'version' => Release::current(env('APP_VERSION'))` +- [ ] `config/logging.php`: Kanal `monitoring` +- [ ] `routes/console.php`: `$alertOnFailure`, Herzschlag, `queue:prune-failed`; alle eigenen Tasks mit `withoutOverlapping()` und `onFailure` +- [ ] `AppServiceProvider::boot()`: `Queue::failing` → `OperationalAlert`, `AboutCommand::add` +- [ ] Vite-Eingang `resources/js/error-reporting.js`; `` in jedem Layout-`` +- [ ] Basic Auth / `trustHosts`: `/health` ausgenommen bzw. erreichbar +- [ ] `phpunit.xml`: Sentry-DSNs leer (`force="true"`); `tests/Pest.php` mit `RefreshDatabase` +- [ ] `.env.example` um `vorlagen/env-beispiel.env` ergänzt +- [ ] Tests grün: `php artisan test --compact tests/Feature/Monitoring tests/Unit/Monitoring` (30 Tests) +- [ ] Datenschutzerklärung: Fehlerprotokollierung (Kategorien, Frist, Rechtsgrundlage) + +## 3. Git-Deploy + +- [ ] `.gitignore`: `/RELEASE` ignoriert, `/public/build` **nicht** ignoriert; ignorierte Dateien gesichtet (01, Voraussetzungen) +- [ ] `vorlagen/deploy.sh` → `dev/betrieb/deploy.sh`, Einstellungen oben gesetzt (`DEPLOY_SCRIPT`, `PHP_FPM_SERVICE`, `ABOUT_SECTION`, `QUEUE_PROBE`) +- [ ] Assets gebaut und committet, Tag `vX.Y.Z` mit Release-Notiz, `git push --follow-tags` +- [ ] Server: Deploy-Key (nur lesen), `~/.ssh/config`, Host-Key-Fingerprint geprüft, `git ls-remote` zeigt Tags +- [ ] Server: FPM-**Reload** ohne Passwort getestet (sonst `DEPLOY_FPM_RELOAD=`) +- [ ] Server: `systemctl is-enabled supervisor` → `enabled`; Worker im Panel mit richtigen Queues +- [ ] Server-Panel: „Quick Deploy“/Push-Webhook aus +- [ ] Live-Verzeichnis: neu geklont (B1) oder umgewandelt (B2, Abweichungen gesichtet, `git status` leer) +- [ ] Live-`.env`: DSNs, `SENTRY_ENVIRONMENT=production`, ntfy-Werte, **eigenes** `MONITORING_HEALTH_TOKEN`, `MONITORING_ALERT_EMAIL` +- [ ] Erster Deploy: `bash dev/betrieb/deploy.sh vX.Y.Z [--migrations]` → endet mit „Queue-Worker läuft“ + +## 4. Abnahme + +- [ ] `php artisan about` zeigt die Version +- [ ] `curl -s -H "Authorization: Bearer " https://meineapp.de/health` → `"status":"ok"`, richtige `version` +- [ ] `php artisan tinker --execute 'report(new RuntimeException("Test"));'` → erscheint in GlitchTip (`production`, Release = Tag) +- [ ] Browser-Konsole: `setTimeout(() => { throw new Error('Test test@example.com') })` → GlitchTip Browser, E-Mail als `[email]` +- [ ] `php artisan tinker --execute 'App\Support\OperationalAlert::send("Test");'` → Push und Mail +- [ ] Uptime Kuma: `/health` (mit Header) und `/up` je Domain grün; Test-Monitor mit falschem Token löst Alarm aus +- [ ] Zweite Ebene (externer Dienst auf `/up`) eingerichtet +- [ ] Im Projekt: Kurz-Doku mit echten Werten (`dev/glitch-tip/README.md`), Verweis in `CLAUDE.md` diff --git a/dev/git-deploy-monitoring/README.md b/dev/git-deploy-monitoring/README.md new file mode 100644 index 00000000..8b270dc9 --- /dev/null +++ b/dev/git-deploy-monitoring/README.md @@ -0,0 +1,121 @@ +# Git-Deploy und Betriebsüberwachung — Baukasten für Laravel-Projekte + +**Stand:** 07.10.2026 · **Herkunft:** Pressekonto, live seit v1.1.3 (Git-Deploy) bzw. v1.1.0 (Monitoring) +**Für:** Entwickler und KI-Chats, die dieses Setup in ein anderes Laravel-Projekt übernehmen. + +Dieser Ordner beschreibt ein erprobtes Betriebs-Setup aus zwei Teilen und liefert +die Dateien dafür mit: + +1. **Git-Deploy per Tag** — ausgeliefert wird nur ein Git-Tag, von Hand per SSH, + mit einem Skript, das abbricht, bevor es etwas kaputt macht. +2. **Betriebsüberwachung** — Fehler, Ausfälle und stehende Hintergrundprozesse + fallen auf, bevor Kunden sie melden: GlitchTip (Fehlerprotokoll), `/health` + (tiefer Health-Check), Uptime Kuma (externer Monitor), ntfy (Push aufs Handy). + +Die Laravel-Vorlagen sind in einem frischen Laravel 12 (12.69, PHP 8.4, Pest 3) +eingebaut und getestet (30 Tests grün); `deploy.sh` ist gegen ein simuliertes +Repository durchgespielt (Deploy, Abbruch bei Migrationen, Drift, Rollback, +fehlender Worker). + +--- + +## Inhalt + +| Datei | Wofür | +|---|---| +| [`01-git-deploy.md`](01-git-deploy.md) | Prinzip, einmalige Einrichtung, Release, Deploy, Rollback, Fallstricke | +| [`02-fehlerprotokoll-glitchtip.md`](02-fehlerprotokoll-glitchtip.md) | GlitchTip aufsetzen, Laravel anbinden (Server + Browser), Datenschutz, Auswertung per API | +| [`03-betriebsueberwachung.md`](03-betriebsueberwachung.md) | `/health`, Scheduler-Herzschlag, Worker-Prüfung, Alarme (Mail + ntfy), Uptime Kuma | +| [`04-checkliste-neues-projekt.md`](04-checkliste-neues-projekt.md) | Abhakliste für die Übernahme in ein neues Projekt | +| `vorlagen/deploy.sh` | Deploy-Skript (Einstellungen oben im Skript) | +| `vorlagen/env-beispiel.env` | alle `.env`-Werte mit Kommentar | +| `vorlagen/laravel/…` | PHP/JS/Blade-Dateien und Tests, Pfade wie im Projekt — 1:1 kopierbar | +| `vorlagen/server/…` | Docker-Compose für GlitchTip, ntfy, Uptime Kuma; ntfy-Konfiguration; Caddyfile | + +--- + +## Architektur + +``` + ┌────────────────────────── Monitoring-Server ──────────────────────────┐ + │ GlitchTip (errors.…) ntfy (push.…) Uptime Kuma (status.…) │ + └─────▲──────────────────────▲──────────────────────┬────────────────────┘ + Fehler (Sentry-SDK) │ Betriebs-Alerts │ prüft jede │ Minute + │ (JSON-POST) │ /health, /up │ + ┌─────────────────────┴──────────────────────┴──────────────────────▼────────────────────┐ + │ App-Server: Laravel │ + │ • Exceptions + Fehlersignale → GlitchTip • Scheduler schreibt Herzschlag/Minute │ + │ • fehlgeschlagene Jobs/Tasks → Mail + ntfy • /health: DB, Cache, Queue, Scheduler, │ + │ • deploy.sh: Tag auschecken, Worker prüfen Platte → 200 / 503 │ + └─────────────────────▲───────────────────────────────────────────────────────────────────┘ + │ git fetch --tags (Deploy-Key, nur lesen) + ┌────────┴────────┐ + │ Git-Server │ ← lokal: Commit, Assets bauen, Tag, push + │ (Forgejo o. Ä.) │ + └─────────────────┘ +``` + +**Wichtig:** Uptime Kuma läuft auf einem anderen Server als die App — sonst fällt +der Monitor mit dem überwachten System aus. ntfy liegt auf demselben Server wie +Uptime Kuma; fällt dieser aus, kommt kein Push. Dafür gibt es eine zweite Ebene +(kostenloser externer Dienst, nur Mail), siehe 03. + +### Wer meldet was? + +| Ausfall | Wer merkt es | Kanal | +|---|---|---| +| Exception im Code (Request, Job, Command) | Sentry-SDK | GlitchTip → Mail bei neuem Fehlertyp | +| JavaScript-Fehler im Browser | `error-reporting.js` | GlitchTip (Projekt Browser) | +| Toter interner Link, 403/429 für Angemeldete, 419 | `ReportErrorSignals` | GlitchTip (Warnung) | +| Job endgültig fehlgeschlagen | `Queue::failing` | Mail + ntfy | +| Geplanter Task fehlgeschlagen | `onFailure` | Mail + ntfy | +| Worker steht | `/health` (Queue-Rückstau) | Uptime Kuma → ntfy/Mail | +| Scheduler/Cron steht | `/health` (Herzschlag) | Uptime Kuma | +| Platte fast voll, DB/Cache weg | `/health` | Uptime Kuma | +| Server/PHP-FPM/Nginx/SSL weg | `/up`, `/health` nicht erreichbar | Uptime Kuma (+ zweite Ebene) | +| Worker kommt nach dem Deploy nicht zurück | `deploy.sh` (Test-Job) | Exit 3 im Terminal | + +--- + +## Reihenfolge für ein neues Projekt + +1. **Monitoring-Server** einmalig aufsetzen (GlitchTip, ntfy, Uptime Kuma) — wird + von allen Projekten geteilt. Je Projekt nur neue GlitchTip-Projekte, ein + ntfy-Topic und Monitore. +2. **Laravel-Teil** einbauen (02, 03), Tests grün, ausliefern. +3. **Git-Deploy** einrichten (01) — für ein bestehendes Live-Verzeichnis mit der + Umwandlung an Ort und Stelle. +4. **Uptime Kuma** auf `/health` richten, Alarm testen. + +Die Abhakliste dazu: [`04-checkliste-neues-projekt.md`](04-checkliste-neues-projekt.md). + +--- + +## Bewusst nicht im Baukasten + +- **Zero-Downtime mit Release-Verzeichnissen** (Envoyer/Deployer-Stil): Wer + große Dateien unter `storage/app` hält, deployt besser im selben Verzeichnis + mit `artisan down` (wenige Sekunden). +- **Admin-Systemstatus-Seite**: projektspezifisch. `HealthProbe::scheduler()` + und `disk()` lassen sich dort mitbenutzen. +- **Webanalyse (Umami)** und **Auswertung fehlgeschlagener Logins**: in + Pressekonto vorhanden, aber eng mit dem Projekt verwoben. Muster in 03, + Abschnitt „Erweiterungen“. + +--- + +## Erfahrungen aus dem Betrieb (warum es so gebaut ist) + +| Erfahrung | Folge im Baukasten | +|---|---| +| Die Testsuite meldete absichtlich provozierte Fehler („Queue weg“) an das echte GlitchTip | DSNs in `phpunit.xml` leer, Wächtertest | +| GlitchTip gruppiert nach Text — `…after 20002 ms` und `…20001 ms` wurden getrennte Einträge | keine variablen Zahlen in Meldungen; Fingerprint bei Signalen | +| Ein Google-Aussetzer erzeugte 28 Fehlermeldungen in einer Nacht | vorübergehende Fremdfehler: Retry, `Log::warning`, Alarm erst bei Abbruch | +| Nach `queue:restart` kam der Worker nicht zurück — Supervisor lief nicht. Eine Stunde blieben Jobs liegen | Worker-Prüfung am Ende von `deploy.sh`, `/health` prüft den Rückstau | +| FPM per „Restart“ statt „Reload“ → Socket kurz weg → 502 | `deploy.sh` macht `reload`; Restart nie | +| Version auf Live zeigte `v1.1.0-3-g…-dirty` | `deploy.sh` schreibt `RELEASE` = Tag selbst | +| macOS-Muster `Icon` in `.gitignore` traf bei `core.ignorecase` auch `resources/views/flux/icon/` | bei der Umstellung `git status` auf Live genau sichten (01, Fallstricke) | +| Per SFTP gelöschte Dateien lagen noch auf Live | Umwandlung zeigt Abweichungen, bevor ausgecheckt wird | +| `deploy.sh` wird beim Checkout ersetzt, während Bash es liest | Skript läuft aus einer Kopie | +| Alte fehlgeschlagene Jobs scheiterten nach `queue:retry all` an geänderten Klassen | nie pauschal `retry all`; `queue:prune-failed` nach 30 Tagen | +| `:placeholder="__('…')"` an `` → Alpine-Fehler im Browser, nur durch GlitchTip gefunden | Browserfehler erfassen; Muster mit Wächtertest abfangen | diff --git a/dev/git-deploy-monitoring/vorlagen/deploy.sh b/dev/git-deploy-monitoring/vorlagen/deploy.sh new file mode 100755 index 00000000..eb7950ee --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/deploy.sh @@ -0,0 +1,176 @@ +#!/usr/bin/env bash +# +# Deploy eines Git-Tags auf Live — Vorlage aus dev/git-deploy-monitoring +# (Anleitung: 01-git-deploy.md). Im Projekt z. B. als dev/betrieb/deploy.sh +# ablegen; Pfad und Einstellungen im Block „Projekt-Einstellungen“ anpassen. +# +# Aufruf im App-Verzeichnis auf dem Server: +# +# cd ~/meine-app.de +# bash dev/betrieb/deploy.sh v1.2.0 # ohne neue Migrationen +# bash dev/betrieb/deploy.sh v1.2.0 --migrations # mit Migrationen, DB-Backup vorher! +# +# Optionen: +# --migrations Neue Migrationen ausführen. Ohne diese Option bricht das +# Skript ab, sobald der Tag neue Migrationen mitbringt. +# --clear-schedule php artisan schedule:clear-cache (alte withoutOverlapping-Sperren). +# +# Umgebung (optional): +# DEPLOY_FPM_RELOAD Befehl zum Neuladen von PHP-FPM (Standard siehe unten). +# Leer setzen, wenn FPM von Hand im Server-Panel neu geladen +# wird — dann wartet das Skript auf Enter. Nie „Restart“: +# der entfernt kurz den Socket, Nginx liefert 502. +# +# Exit-Codes: 0 fertig, 1 abgebrochen (siehe Ausgabe), 2 falscher Aufruf, +# 3 live, aber kein Queue-Worker hat den Test-Job abgeholt. +# +# Rollback: dasselbe Skript mit dem vorherigen Tag. + +set -euo pipefail + +# ---- Projekt-Einstellungen -------------------------------------------------- +DEPLOY_SCRIPT="dev/betrieb/deploy.sh" # Pfad dieses Skripts im Repository +PHP_FPM_SERVICE="php8.4-fpm" # systemd-Name des FPM-Dienstes +ABOUT_SECTION="" # z. B. "meineapp" (AboutCommand::add), leer = RELEASE ausgeben +QUEUE_PROBE=1 # 1 = monitoring:queue-probe am Ende, 0 = Projekt ohne Queue +# ----------------------------------------------------------------------------- + +# Git ersetzt diese Datei beim Checkout. Bash liest Skripte stückweise, deshalb +# läuft der Deploy aus einer Kopie. +if [[ -z "${DEPLOY_COPY:-}" ]]; then + copy="$(mktemp)" + cp "$0" "$copy" + DEPLOY_COPY="$copy" exec bash "$copy" "$@" +fi +trap 'rm -f "$DEPLOY_COPY"' EXIT + +tag="${1:-}" +shift || true +run_migrations=0 +clear_schedule=0 + +for option in "$@"; do + case "$option" in + --migrations) run_migrations=1 ;; + --clear-schedule) clear_schedule=1 ;; + *) echo "Unbekannte Option: $option" >&2; exit 2 ;; + esac +done + +if [[ ! "$tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Aufruf: bash $DEPLOY_SCRIPT vX.Y.Z [--migrations] [--clear-schedule]" >&2 + exit 2 +fi + +if [[ ! -f artisan || ! -d .git ]]; then + echo "Im App-Verzeichnis aufrufen (artisan und .git fehlen hier)." >&2 + exit 2 +fi + +step() { printf '\n==> %s\n' "$*"; } + +step "Arbeitsverzeichnis prüfen" +drift="$(git status --porcelain)" +if [[ -n "$drift" ]]; then + echo "Das Arbeitsverzeichnis weicht vom ausgecheckten Stand ab:" >&2 + echo "$drift" >&2 + echo "Erst klären (git diff), dann deployen. Nichts wurde verändert." >&2 + exit 1 +fi + +step "Tags von origin holen" +git fetch --quiet --tags origin + +if ! git rev-parse --quiet --verify "refs/tags/$tag^{commit}" > /dev/null; then + echo "Tag $tag gibt es auf origin nicht." >&2 + exit 1 +fi + +previous="$(cat RELEASE 2>/dev/null || git describe --tags --always)" +echo "Live: $previous → Ziel: $tag" + +if [[ "$(git rev-parse HEAD)" == "$(git rev-parse "$tag^{commit}")" ]]; then + echo "$tag ist bereits ausgecheckt. Nichts zu tun." + exit 0 +fi + +new_migrations="$(git diff --name-only --diff-filter=A HEAD "$tag" -- database/migrations)" +if [[ -n "$new_migrations" ]]; then + echo "Neue Migrationen:" + echo "$new_migrations" | sed 's/^/ /' + if [[ "$run_migrations" -ne 1 ]]; then + echo "Abbruch: DB-Backup ziehen und mit --migrations erneut aufrufen. Nichts wurde verändert." >&2 + exit 1 + fi +fi + +trap 'echo; echo "!! Deploy abgebrochen. Die Seite bleibt im Wartungsmodus." >&2; echo "!! Rollback: bash $DEPLOY_SCRIPT $previous" >&2; rm -f "$DEPLOY_COPY"' ERR + +step "Wartungsmodus" +php artisan down --retry=60 + +step "Checkout $tag" +git checkout --quiet --detach "$tag" +echo "$tag" > RELEASE + +step "Composer" +composer install --no-dev --optimize-autoloader --no-interaction + +if [[ -n "$new_migrations" ]]; then + step "Migrationen" + php artisan migrate --force +fi + +if [[ -d public/vendor/livewire ]]; then + php artisan vendor:publish --tag=livewire:assets --force +fi + +step "Caches" +php artisan config:cache +php artisan route:cache +php artisan view:clear +php artisan view:cache +php artisan event:cache + +if [[ "$clear_schedule" -eq 1 ]]; then + php artisan schedule:clear-cache +fi + +step "Worker und PHP-FPM" +php artisan queue:restart +default_fpm_reload="echo '' | sudo -S service $PHP_FPM_SERVICE reload" +fpm_reload="${DEPLOY_FPM_RELOAD-$default_fpm_reload}" +if [[ -n "$fpm_reload" ]]; then + bash -c "$fpm_reload" +else + echo "PHP-FPM jetzt im Server-Panel neu laden (Reload, nicht Restart), danach Enter." + read -r +fi + +step "Wartungsmodus aus" +php artisan up + +step "Version" +if [[ -n "$ABOUT_SECTION" ]]; then + php artisan about --only="$ABOUT_SECTION" +else + cat RELEASE +fi + +trap - ERR + +# Läuft ein Worker? `queue:restart` oben beendet ihn; neu starten muss ihn +# Supervisor. Läuft Supervisor nicht, steht die Queue still, ohne dass es +# jemand merkt. +if [[ "$QUEUE_PROBE" -eq 1 ]]; then + step "Queue-Worker" + if ! php artisan monitoring:queue-probe --wait=60; then + echo + echo "!! Deploy $tag ist live, aber KEIN Queue-Worker läuft." >&2 + echo "!! Jetzt Supervisor und den Worker im Server-Panel prüfen — sonst bleiben Jobs und Mails liegen." >&2 + exit 3 + fi +fi + +echo +echo "Deploy $tag fertig (vorher $previous). Weiter mit den Prüfungen aus der Deploy-Anleitung." diff --git a/dev/git-deploy-monitoring/vorlagen/env-beispiel.env b/dev/git-deploy-monitoring/vorlagen/env-beispiel.env new file mode 100644 index 00000000..c40ccbad --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/env-beispiel.env @@ -0,0 +1,24 @@ +# --- Version (leer lassen: kommt aus der Datei RELEASE, die deploy.sh schreibt) +APP_VERSION= + +# --- GlitchTip (02-fehlerprotokoll-glitchtip.md) +SENTRY_LARAVEL_DSN= # Projekt „-server“ (PHP/Laravel) +SENTRY_BROWSER_DSN= # Projekt „-browser“ (JavaScript), öffentlich +SENTRY_ENVIRONMENT=production # lokal: local +SENTRY_RELEASE= # leer lassen + +# --- Betriebs-Alerts (03-betriebsueberwachung.md) +MONITORING_ALERTS_ENABLED=true +MONITORING_ALERT_EMAIL=ops@example.com +MONITORING_NTFY_URL=https://push.example.com +MONITORING_NTFY_TOPIC=meineapp-ops +MONITORING_NTFY_TOKEN= # tk_… des Benutzers meineapp-alerts (nur Schreibrecht) +MONITORING_NTFY_PRIORITY=4 + +# --- Tiefer Health-Check /health (Bearer-Token für Uptime Kuma) +MONITORING_HEALTH_TOKEN= # openssl rand -hex 24 — je Umgebung ein eigener Wert +MONITORING_QUEUE_BACKLOG_SECONDS=300 +MONITORING_DISK_MIN_FREE_PERCENT=10 + +# --- Nur lokal: Lesezugriff auf die GlitchTip-API für die Auswertung +GLITCHTIP_API_TOKEN= # Scopes project:read, event:read — nie committen diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/app/Console/Commands/MonitoringHeartbeat.php b/dev/git-deploy-monitoring/vorlagen/laravel/app/Console/Commands/MonitoringHeartbeat.php new file mode 100644 index 00000000..c75e5fd8 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/app/Console/Commands/MonitoringHeartbeat.php @@ -0,0 +1,25 @@ +recordHeartbeat(); + + return self::SUCCESS; + } +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/app/Console/Commands/MonitoringQueueProbe.php b/dev/git-deploy-monitoring/vorlagen/laravel/app/Console/Commands/MonitoringQueueProbe.php new file mode 100644 index 00000000..a1aa6d00 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/app/Console/Commands/MonitoringQueueProbe.php @@ -0,0 +1,50 @@ +option('wait')); + + QueueProbe::dispatch($token); + + for ($second = 0; $second <= $wait; $second++) { + if (Cache::has(QueueProbe::cacheKey($token))) { + Cache::forget(QueueProbe::cacheKey($token)); + $this->info(sprintf('Queue-Worker läuft (Test-Job nach %d s abgeholt).', $second)); + + return self::SUCCESS; + } + + if ($second < $wait) { + Sleep::for(1)->second(); + } + } + + $this->error(sprintf('Kein Queue-Worker hat den Test-Job innerhalb von %d s abgeholt.', $wait)); + $this->line('Worker prüfen: läuft Supervisor (bzw. der Worker im Server-Panel)? Notfalls: nohup php artisan queue:work --tries=3 --max-time=3600 &'); + + return self::FAILURE; + } +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/app/Http/Controllers/HealthController.php b/dev/git-deploy-monitoring/vorlagen/laravel/app/Http/Controllers/HealthController.php new file mode 100644 index 00000000..df4c89a3 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/app/Http/Controllers/HealthController.php @@ -0,0 +1,39 @@ +bearerToken() ?? $request->query('token', '')); + + abort_if($token === '' || ! hash_equals($token, $given), 404); + + $checks = $probe->checks(); + $status = HealthProbe::worstStatus($checks); + + return response()->json([ + 'status' => $status, + 'version' => config('app.version'), + 'checked_at' => now()->toIso8601String(), + 'checks' => collect($checks)->mapWithKeys(fn (array $check): array => [ + $check['key'] => ['status' => $check['status'], 'detail' => $check['detail']], + ]), + ], $status === HealthProbe::StatusCritical ? 503 : 200) + ->header('Cache-Control', 'no-store'); + } +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/app/Http/Middleware/ReportErrorSignals.php b/dev/git-deploy-monitoring/vorlagen/laravel/app/Http/Middleware/ReportErrorSignals.php new file mode 100644 index 00000000..c0c22d66 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/app/Http/Middleware/ReportErrorSignals.php @@ -0,0 +1,96 @@ +signalFor($request, $response->getStatusCode()); + + if ($signal !== null) { + $location = $this->locationOf($request); + $context = [ + 'status' => $response->getStatusCode(), + 'method' => $request->method(), + 'path' => '/'.ltrim($request->path(), '/'), + 'referer' => $this->refererPath($request), + 'livewire' => $request->hasHeader('X-Livewire'), + ]; + + defer(fn () => $this->errorSignal->report($signal, $location, $context)); + } + + return $response; + } + + private function signalFor(Request $request, int $status): ?string + { + return match (true) { + $status === 404 && $this->hasInternalReferer($request) => ErrorSignal::DeadInternalLink, + $status === 403 && $request->user() !== null => ErrorSignal::AccessDenied, + $status === 419 => ErrorSignal::PageExpired, + $status === 429 && $request->user() !== null => ErrorSignal::Throttled, + default => null, + }; + } + + /** + * Livewire-Requests laufen alle über denselben Update-Endpunkt — der Ort + * ist dort die Seite, auf der der Nutzer stand. + */ + private function locationOf(Request $request): string + { + if ($request->hasHeader('X-Livewire')) { + return 'livewire '.($this->refererPath($request) ?? '/'); + } + + $routeName = $request->route()?->getName(); + + return $routeName !== null + ? $routeName + : '/'.ltrim($request->path(), '/'); + } + + private function hasInternalReferer(Request $request): bool + { + $referer = $request->headers->get('referer'); + + return is_string($referer) && parse_url($referer, PHP_URL_HOST) === $request->getHost(); + } + + private function refererPath(Request $request): ?string + { + $referer = $request->headers->get('referer'); + + if (! is_string($referer) || $referer === '') { + return null; + } + + $path = parse_url($referer, PHP_URL_PATH); + + return is_string($path) ? ErrorReportScrubber::scrubPath($path) : null; + } +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/app/Jobs/Monitoring/QueueProbe.php b/dev/git-deploy-monitoring/vorlagen/laravel/app/Jobs/Monitoring/QueueProbe.php new file mode 100644 index 00000000..c267b252 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/app/Jobs/Monitoring/QueueProbe.php @@ -0,0 +1,31 @@ +token), now()->toIso8601String(), now()->addMinutes(10)); + } +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/app/Services/Monitoring/HealthProbe.php b/dev/git-deploy-monitoring/vorlagen/laravel/app/Services/Monitoring/HealthProbe.php new file mode 100644 index 00000000..d73723ed --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/app/Services/Monitoring/HealthProbe.php @@ -0,0 +1,198 @@ +toIso8601String(), LOCK_EX); + } + + public function lastHeartbeat(): ?Carbon + { + $value = @file_get_contents(self::heartbeatPath()); + + return is_string($value) && trim($value) !== '' ? Carbon::parse(trim($value)) : null; + } + + /** + * @return list + */ + public function checks(): array + { + return [ + $this->database(), + $this->cache(), + $this->queue(), + $this->scheduler(), + $this->disk(), + ]; + } + + /** + * @param list $checks + */ + public static function worstStatus(array $checks): string + { + $statuses = array_column($checks, 'status'); + + return match (true) { + in_array(self::StatusCritical, $statuses, true) => self::StatusCritical, + in_array(self::StatusWarn, $statuses, true) => self::StatusWarn, + default => self::StatusOk, + }; + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + public function scheduler(): array + { + $lastBeat = $this->lastHeartbeat(); + $warnMinutes = (int) config('monitoring.scheduler.heartbeat_warn_minutes'); + $criticalMinutes = (int) config('monitoring.scheduler.heartbeat_critical_minutes'); + $minutesAgo = $lastBeat !== null ? (int) $lastBeat->diffInMinutes(now(), absolute: true) : null; + + return $this->check( + 'scheduler', + 'Scheduler', + match (true) { + $minutesAgo === null, $minutesAgo >= $criticalMinutes => self::StatusCritical, + $minutesAgo >= $warnMinutes => self::StatusWarn, + default => self::StatusOk, + }, + $lastBeat === null + ? 'Noch kein Herzschlag — läuft `schedule:run` per Cron (bzw. `schedule:work`)?' + : 'Letzter Herzschlag '.$lastBeat->format('d.m.Y H:i:s').' (vor '.$minutesAgo.' Min.).', + ); + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + public function disk(): array + { + $path = storage_path(); + $free = @disk_free_space($path); + $total = @disk_total_space($path); + + if ($free === false || $total === false || $total <= 0) { + return $this->check('disk', 'Plattenplatz', self::StatusWarn, 'Plattenplatz nicht ermittelbar.'); + } + + $freePercent = round($free / $total * 100, 1); + $minPercent = (float) config('monitoring.health.disk_min_free_percent'); + + return $this->check( + 'disk', + 'Plattenplatz', + match (true) { + $freePercent < $minPercent => self::StatusCritical, + $freePercent < $minPercent * 2 => self::StatusWarn, + default => self::StatusOk, + }, + sprintf('%s %% frei (%s GB von %s GB).', $freePercent, round($free / 1024 ** 3, 1), round($total / 1024 ** 3, 1)), + ); + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + private function database(): array + { + try { + DB::select('select 1'); + + return $this->check('database', 'Datenbank', self::StatusOk, 'Verbindung steht.'); + } catch (Throwable $exception) { + return $this->check('database', 'Datenbank', self::StatusCritical, 'Keine Verbindung: '.Str::limit($exception->getMessage(), 120)); + } + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + private function cache(): array + { + try { + $value = Str::random(8); + Cache::put('monitoring:health-probe', $value, 60); + + return Cache::get('monitoring:health-probe') === $value + ? $this->check('cache', 'Cache', self::StatusOk, 'Schreiben und Lesen funktionieren.') + : $this->check('cache', 'Cache', self::StatusCritical, 'Geschriebener Wert kommt nicht zurück.'); + } catch (Throwable $exception) { + return $this->check('cache', 'Cache', self::StatusCritical, 'Nicht erreichbar: '.Str::limit($exception->getMessage(), 120)); + } + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + private function queue(): array + { + if (config('queue.default') !== 'database') { + return $this->check('queue', 'Queue', self::StatusOk, 'Treiber '.config('queue.default').' — Rückstau hier nicht prüfbar.'); + } + + try { + $now = now()->getTimestamp(); + $oldestAvailable = DB::table('jobs') + ->whereNull('reserved_at') + ->where('available_at', '<=', $now) + ->min('available_at'); + } catch (Throwable $exception) { + return $this->check('queue', 'Queue', self::StatusCritical, 'Jobs-Tabelle nicht lesbar: '.Str::limit($exception->getMessage(), 120)); + } + + $waitingSeconds = $oldestAvailable !== null ? max(0, $now - (int) $oldestAvailable) : 0; + $criticalSeconds = (int) config('monitoring.health.queue_backlog_critical_seconds'); + + return $this->check( + 'queue', + 'Queue', + $waitingSeconds >= $criticalSeconds ? self::StatusCritical : self::StatusOk, + $oldestAvailable === null + ? 'Kein wartender Job.' + : 'Ältester wartender Job seit '.$waitingSeconds.' s.'.($waitingSeconds >= $criticalSeconds ? ' Worker gestoppt?' : ''), + ); + } + + /** + * @return array{key: string, label: string, status: string, detail: string} + */ + private function check(string $key, string $label, string $status, string $detail): array + { + return ['key' => $key, 'label' => $label, 'status' => $status, 'detail' => $detail]; + } +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/Monitoring/ErrorReportScrubber.php b/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/Monitoring/ErrorReportScrubber.php new file mode 100644 index 00000000..76bdaf56 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/Monitoring/ErrorReportScrubber.php @@ -0,0 +1,159 @@ + + */ + public const AllowedQueryParameters = ['page', 'q', 'tab', 'sort']; + + private const EmailPattern = '/[A-Z0-9._%+\-]+@[A-Z0-9.\-]+\.[A-Z]{2,}/i'; + + /** Pfadsegmente, die wie ein Token aussehen (Magic Links, Reset-Links). */ + private const TokenSegmentPattern = '#(?<=/)[A-Za-z0-9_\-]{32,}(?=/|$)#'; + + public static function beforeSend(Event $event, ?EventHint $hint = null): ?Event + { + $userId = self::authenticatedUserId(); + + $event->setUser($userId !== null ? UserDataBag::createFromUserIdentifier($userId) : null); + $event->setRequest(self::scrubRequest($event->getRequest())); + + foreach ($event->getExceptions() as $exception) { + $exception->setValue(self::scrubText($exception->getValue())); + } + + if ($event->getMessage() !== null) { + $formatted = $event->getMessageFormatted(); + + $event->setMessage( + self::scrubText($event->getMessage()), + $event->getMessageParams(), + $formatted !== null ? self::scrubText($formatted) : null, + ); + } + + return $event; + } + + /** + * @param array $request + * @return array + */ + public static function scrubRequest(array $request): array + { + if (isset($request['url']) && is_string($request['url'])) { + $request['url'] = self::scrubUrl($request['url']); + } + + if (isset($request['query_string']) && is_string($request['query_string'])) { + $request['query_string'] = self::scrubQuery($request['query_string']); + } + + unset($request['data'], $request['cookies']); + + foreach ($request['headers'] ?? [] as $name => $values) { + if (strtolower((string) $name) === 'referer') { + $request['headers'][$name] = array_map( + static fn (mixed $value): string => self::scrubUrl((string) $value), + (array) $values, + ); + } + } + + return $request; + } + + public static function scrubUrl(string $url): string + { + $query = parse_url($url, PHP_URL_QUERY); + $withoutQuery = $query !== null && $query !== false ? Str::before($url, '?') : $url; + $scrubbedPath = self::scrubPath(self::scrubPathTokens($withoutQuery)); + + return $query !== null && $query !== false && $query !== '' + ? $scrubbedPath.'?'.self::scrubQuery($query) + : $scrubbedPath; + } + + public static function scrubQuery(string $query): string + { + parse_str($query, $parameters); + + $scrubbed = []; + foreach ($parameters as $name => $value) { + $isAllowed = in_array((string) $name, self::AllowedQueryParameters, true) + || str_starts_with((string) $name, 'utm_'); + + $scrubbed[$name] = $isAllowed && is_string($value) ? $value : self::Filtered; + } + + return http_build_query($scrubbed, '', '&', PHP_QUERY_RFC3986); + } + + public static function scrubPath(string $path): string + { + return self::scrubText((string) preg_replace(self::TokenSegmentPattern, self::Filtered, $path)); + } + + public static function scrubText(string $text): string + { + return (string) preg_replace(self::EmailPattern, '[email]', $text); + } + + /** + * Ersetzt Routenparameter, deren Name auf ein Geheimnis hindeutet + * (`token`, `hash`, `signature`), im Pfad der aktuellen Route. + */ + private static function scrubPathTokens(string $url): string + { + try { + $route = request()->route(); + } catch (Throwable) { + return $url; + } + + if ($route === null) { + return $url; + } + + foreach ($route->parameters() as $name => $value) { + if (is_string($value) && $value !== '' && Str::contains(strtolower((string) $name), ['token', 'hash', 'signature'])) { + $url = str_replace(rawurlencode($value), self::Filtered, str_replace($value, self::Filtered, $url)); + } + } + + return $url; + } + + private static function authenticatedUserId(): int|string|null + { + try { + return Auth::id(); + } catch (Throwable) { + return null; + } + } +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/Monitoring/ErrorSignal.php b/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/Monitoring/ErrorSignal.php new file mode 100644 index 00000000..db66cbc5 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/Monitoring/ErrorSignal.php @@ -0,0 +1,68 @@ + 'Toter interner Link', + self::AccessDenied => 'Zugriff verweigert (angemeldet)', + self::PageExpired => 'Seite abgelaufen (419)', + self::Throttled => 'Drosselung trifft angemeldeten Nutzer', + ]; + + private const MaxReportsPerWindow = 5; + + private const WindowSeconds = 600; + + /** + * @param array $context + */ + public function report(string $signal, string $location, array $context = []): bool + { + $location = Str::limit($location, 200, ''); + + $reported = RateLimiter::attempt( + 'error-signal:'.sha1($signal.'|'.$location), + self::MaxReportsPerWindow, + static fn (): bool => true, + self::WindowSeconds, + ); + + if ($reported === false) { + return false; + } + + withScope(function (Scope $scope) use ($signal, $location, $context): void { + $scope->setFingerprint(['error-signal', $signal, $location]); + $scope->setTag('signal', $signal); + $scope->setContext('signal', $context); + + captureMessage((self::Labels[$signal] ?? $signal).': '.$location, Severity::warning()); + }); + + return true; + } +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/Monitoring/Release.php b/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/Monitoring/Release.php new file mode 100644 index 00000000..48e6aeb0 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/Monitoring/Release.php @@ -0,0 +1,36 @@ + RELEASE`) — + * der Live-Server hat kein Git, solange per SFTP deployt wird. + * + * Versionen sind Git-Tags nach SemVer: Feature-Deploy erhöht die mittlere, + * Hotfix die letzte Stelle. Auf dem Tag ergibt das „v1.1.0“, mit späteren + * Commits „v1.1.0-2-gabc1234“, mit uncommitteten Änderungen „…-dirty“. + */ +class Release +{ + public static function current(?string $configured, ?string $basePath = null): ?string + { + $configured = trim((string) $configured); + + if ($configured !== '') { + return $configured; + } + + $file = rtrim($basePath ?? base_path(), '/').'/RELEASE'; + + if (! is_file($file)) { + return null; + } + + $release = trim((string) file_get_contents($file)); + + return preg_match('/^[A-Za-z0-9._\-]{1,64}$/', $release) === 1 ? $release : null; + } +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/OperationalAlert.php b/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/OperationalAlert.php new file mode 100644 index 00000000..7b3cc56f --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/app/Support/OperationalAlert.php @@ -0,0 +1,96 @@ + $context + */ + public static function send(string $summary, array $context = []): void + { + Log::channel('monitoring')->critical('[monitoring] '.$summary, $context); + + if (! config('monitoring.alerts.enabled')) { + return; + } + + self::mail($summary, $context); + self::push($summary, $context); + } + + /** + * @param array $context + */ + private static function mail(string $summary, array $context): void + { + $recipient = config('monitoring.alerts.mail_to'); + + if (empty($recipient)) { + return; + } + + try { + Mail::raw( + $summary."\n\n".json_encode($context, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), + fn ($message) => $message->to($recipient)->subject('['.config('app.name').'] Betriebs-Alert: '.Str::limit($summary, 80)), + ); + } catch (Throwable $e) { + Log::channel('monitoring')->error('[monitoring] Alert-Mail konnte nicht versendet werden.', [ + 'summary' => $summary, + 'error' => $e->getMessage(), + ]); + } + } + + /** + * JSON-Publish an die ntfy-Basis-URL (UTF-8-sicher, anders als Header). + * + * @param array $context + */ + private static function push(string $summary, array $context): void + { + $url = (string) config('monitoring.alerts.ntfy.url'); + $topic = (string) config('monitoring.alerts.ntfy.topic'); + + if ($url === '' || $topic === '') { + return; + } + + $details = collect($context) + ->map(fn (mixed $value, string $key): string => $key.': '.(is_scalar($value) || $value === null ? (string) $value : json_encode($value))) + ->implode("\n"); + + try { + Http::timeout(5) + ->connectTimeout(3) + ->when(filled(config('monitoring.alerts.ntfy.token')), fn ($request) => $request->withToken((string) config('monitoring.alerts.ntfy.token'))) + ->post(rtrim($url, '/'), [ + 'topic' => $topic, + 'title' => config('app.name').' ('.app()->environment().'): Betriebs-Alert', + 'message' => Str::limit(trim($summary."\n\n".$details), 3500), + 'priority' => (int) config('monitoring.alerts.ntfy.priority'), + 'tags' => ['rotating_light'], + ]) + ->throw(); + } catch (Throwable $e) { + Log::channel('monitoring')->error('[monitoring] ntfy-Push konnte nicht versendet werden.', [ + 'summary' => $summary, + 'error' => $e->getMessage(), + ]); + } + } +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/config/monitoring.php b/dev/git-deploy-monitoring/vorlagen/laravel/config/monitoring.php new file mode 100644 index 00000000..87a7f5e3 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/config/monitoring.php @@ -0,0 +1,73 @@ + [ + 'enabled' => (bool) env('MONITORING_ALERTS_ENABLED', true), + + // Ops-Postfach. Leer = keine Alert-Mail (Log und ntfy laufen trotzdem). + 'mail_to' => env('MONITORING_ALERT_EMAIL'), + + // Zweiter Alarmweg: Push über ntfy, JSON-POST + // an die Basis-URL. Ohne URL oder Topic aus. + 'ntfy' => [ + 'url' => env('MONITORING_NTFY_URL'), + 'topic' => env('MONITORING_NTFY_TOPIC'), + 'token' => env('MONITORING_NTFY_TOKEN'), + 'priority' => (int) env('MONITORING_NTFY_PRIORITY', 4), + ], + ], + + /* + |-------------------------------------------------------------------------- + | Browserfehler + |-------------------------------------------------------------------------- + | + | Eigenes GlitchTip-Projekt für JavaScript-Fehler. Die DSN ist öffentlich + | (steht im HTML), sie erlaubt nur das Einliefern von Ereignissen. Ohne + | DSN wird kein Skript eingebunden. + | + */ + + 'browser' => [ + 'dsn' => env('SENTRY_BROWSER_DSN'), + 'sample_rate' => (float) env('SENTRY_BROWSER_SAMPLE_RATE', 1.0), + ], + + /* + |-------------------------------------------------------------------------- + | Health-Endpunkt und Scheduler-Herzschlag + |-------------------------------------------------------------------------- + | + | `/health` antwortet nur mit gültigem Token (Bearer-Header oder + | `?token=`); ohne konfiguriertes Token gibt es den Endpunkt nicht (404). + | Der Scheduler schreibt jede Minute einen Herzschlag; bleibt er aus, ist + | der Cron-Eintrag weg oder der Server hängt. + | + */ + + 'health' => [ + 'token' => env('MONITORING_HEALTH_TOKEN'), + 'queue_backlog_critical_seconds' => (int) env('MONITORING_QUEUE_BACKLOG_SECONDS', 300), + 'disk_min_free_percent' => (float) env('MONITORING_DISK_MIN_FREE_PERCENT', 10), + ], + + 'scheduler' => [ + 'heartbeat_warn_minutes' => 3, + 'heartbeat_critical_minutes' => 10, + ], + +]; diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/config/sentry.php b/dev/git-deploy-monitoring/vorlagen/laravel/config/sentry.php new file mode 100644 index 00000000..a3a71cc8 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/config/sentry.php @@ -0,0 +1,180 @@ + env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')), + + // @see https://spotlightjs.com/ + // 'spotlight' => env('SENTRY_SPOTLIGHT', false), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#logger + // 'logger' => Sentry\Logger\DebugFileLogger::class, // By default this will log to `storage_path('logs/sentry.log')` + + // The release version of your application + // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) + // Gleiche Kennung wie config('app.version'): SENTRY_RELEASE bzw. + // APP_VERSION, sonst die beim Deploy geschriebene Datei RELEASE. + 'release' => Release::current(env('SENTRY_RELEASE', env('APP_VERSION'))), + + // When left empty or `null` the Laravel environment will be used (usually discovered from `APP_ENV` in your `.env`) + 'environment' => env('SENTRY_ENVIRONMENT'), + + // Override the organization ID used for trace continuation checks. + 'org_id' => env('SENTRY_ORG_ID') === null ? null : (int) env('SENTRY_ORG_ID'), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#sample_rate + 'sample_rate' => env('SENTRY_SAMPLE_RATE') === null ? 1.0 : (float) env('SENTRY_SAMPLE_RATE'), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#traces_sample_rate + 'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float) env('SENTRY_TRACES_SAMPLE_RATE'), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#profiles_sample_rate + 'profiles_sample_rate' => env('SENTRY_PROFILES_SAMPLE_RATE') === null ? null : (float) env('SENTRY_PROFILES_SAMPLE_RATE'), + + // Only continue incoming traces when the organization IDs are compatible with this SDK instance. + 'strict_trace_continuation' => env('SENTRY_STRICT_TRACE_CONTINUATION', false), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#enable_logs + 'enable_logs' => env('SENTRY_ENABLE_LOGS', false), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#enable_metrics + 'enable_metrics' => env('SENTRY_ENABLE_METRICS', false), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#log_flush_threshold + 'log_flush_threshold' => env('SENTRY_LOG_FLUSH_THRESHOLD') === null ? null : (int) env('SENTRY_LOG_FLUSH_THRESHOLD'), + + // The minimum log level that will be sent to Sentry as logs using the `sentry_logs` logging channel + 'logs_channel_level' => env('SENTRY_LOG_LEVEL', env('SENTRY_LOGS_LEVEL', env('LOG_LEVEL', 'debug'))), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#send_default_pii + 'send_default_pii' => false, + + // Formular- und JSON-Inhalte verlassen den Server nie. + 'max_request_body_size' => 'never', + + // User-ID statt Person, Tokens aus URL/Query/Referer, E-Mails aus Meldungen. + 'before_send' => [ErrorReportScrubber::class, 'beforeSend'], + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#ignore_exceptions + // 'ignore_exceptions' => [], + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#ignore_transactions + 'ignore_transactions' => [ + // Ignore Laravel's default health URL + '/up', + '/health', + ], + + // Breadcrumb specific configuration + 'breadcrumbs' => [ + // Capture Laravel logs as breadcrumbs + 'logs' => env('SENTRY_BREADCRUMBS_LOGS_ENABLED', false), + + // Capture Laravel cache events (hits, writes etc.) as breadcrumbs + 'cache' => env('SENTRY_BREADCRUMBS_CACHE_ENABLED', false), + + // Capture Livewire components like routes as breadcrumbs + 'livewire' => env('SENTRY_BREADCRUMBS_LIVEWIRE_ENABLED', true), + + // Capture SQL queries as breadcrumbs + 'sql_queries' => env('SENTRY_BREADCRUMBS_SQL_QUERIES_ENABLED', true), + + // Capture SQL query bindings (parameters) in SQL query breadcrumbs + 'sql_bindings' => env('SENTRY_BREADCRUMBS_SQL_BINDINGS_ENABLED', false), + + // Capture queue job information as breadcrumbs + 'queue_info' => env('SENTRY_BREADCRUMBS_QUEUE_INFO_ENABLED', true), + + // Capture command information as breadcrumbs + 'command_info' => env('SENTRY_BREADCRUMBS_COMMAND_JOBS_ENABLED', true), + + // Capture HTTP client request information as breadcrumbs + 'http_client_requests' => env('SENTRY_BREADCRUMBS_HTTP_CLIENT_REQUESTS_ENABLED', true), + + // Capture send notifications as breadcrumbs + 'notifications' => env('SENTRY_BREADCRUMBS_NOTIFICATIONS_ENABLED', true), + ], + + // Performance monitoring specific configuration + 'tracing' => [ + // Trace queue jobs as their own transactions (this enables tracing for queue jobs) + 'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', true), + + // Capture queue jobs as spans when executed on the sync driver + 'queue_jobs' => env('SENTRY_TRACE_QUEUE_JOBS_ENABLED', true), + + // Capture SQL queries as spans + 'sql_queries' => env('SENTRY_TRACE_SQL_QUERIES_ENABLED', true), + + // Capture SQL query bindings (parameters) in SQL query spans + 'sql_bindings' => env('SENTRY_TRACE_SQL_BINDINGS_ENABLED', false), + + // Capture where the SQL query originated from on the SQL query spans + 'sql_origin' => env('SENTRY_TRACE_SQL_ORIGIN_ENABLED', true), + + // Define a threshold in milliseconds for SQL queries to resolve their origin + 'sql_origin_threshold_ms' => env('SENTRY_TRACE_SQL_ORIGIN_THRESHOLD_MS', 100), + + // Capture views rendered as spans + 'views' => env('SENTRY_TRACE_VIEWS_ENABLED', true), + + // Capture Livewire components as spans + 'livewire' => env('SENTRY_TRACE_LIVEWIRE_ENABLED', true), + + // Capture HTTP client requests as spans + 'http_client_requests' => env('SENTRY_TRACE_HTTP_CLIENT_REQUESTS_ENABLED', true), + + // Capture Laravel cache events (hits, writes etc.) as spans + 'cache' => env('SENTRY_TRACE_CACHE_ENABLED', true), + + // Capture Redis operations as spans (this enables Redis events in Laravel) + 'redis_commands' => env('SENTRY_TRACE_REDIS_COMMANDS', false), + + // Capture where the Redis command originated from on the Redis command spans + 'redis_origin' => env('SENTRY_TRACE_REDIS_ORIGIN_ENABLED', true), + + // Capture send notifications as spans + 'notifications' => env('SENTRY_TRACE_NOTIFICATIONS_ENABLED', true), + + // Enable tracing for requests without a matching route (404's) + 'missing_routes' => env('SENTRY_TRACE_MISSING_ROUTES_ENABLED', false), + + // Configures if the performance trace should continue after the response has been sent to the user until the application terminates + // This is required to capture any spans that are created after the response has been sent like queue jobs dispatched using `dispatch(...)->afterResponse()` for example + 'continue_after_response' => env('SENTRY_TRACE_CONTINUE_AFTER_RESPONSE', true), + + // Capture AI agent interactions as spans (requires laravel/ai) + 'gen_ai' => env('SENTRY_TRACE_GEN_AI_ENABLED', true), + + // Capture AI invoke_agent spans + 'gen_ai_invoke_agent' => env('SENTRY_TRACE_GEN_AI_INVOKE_AGENT_ENABLED', true), + + // Capture AI chat spans + 'gen_ai_chat' => env('SENTRY_TRACE_GEN_AI_CHAT_ENABLED', true), + + // Capture AI execute_tool spans + 'gen_ai_execute_tool' => env('SENTRY_TRACE_GEN_AI_EXECUTE_TOOL_ENABLED', true), + + // Capture AI embeddings spans + 'gen_ai_embeddings' => env('SENTRY_TRACE_GEN_AI_EMBEDDINGS_ENABLED', true), + + // Enable the tracing integrations supplied by Sentry (recommended) + 'default_integrations' => env('SENTRY_TRACE_DEFAULT_INTEGRATIONS_ENABLED', true), + ], + +]; diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/resources/js/error-reporting-sdk.js b/dev/git-deploy-monitoring/vorlagen/laravel/resources/js/error-reporting-sdk.js new file mode 100644 index 00000000..402c8a1a --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/resources/js/error-reporting-sdk.js @@ -0,0 +1,5 @@ +/** + * Nur die benötigten SDK-Funktionen — der dynamische Import in + * error-reporting.js zieht so nicht das ganze Paket (Replay, Feedback …) nach. + */ +export { captureException, init, setTag, setUser } from '@sentry/browser'; diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/resources/js/error-reporting.js b/dev/git-deploy-monitoring/vorlagen/laravel/resources/js/error-reporting.js new file mode 100644 index 00000000..6b936664 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/resources/js/error-reporting.js @@ -0,0 +1,128 @@ +/** + * Browserfehler an GlitchTip. + * + * Fehlerfreie Seiten laden nur diese paar Zeilen: Das Sentry-SDK wird erst + * beim ersten Fehler nachgeladen (eigener Chunk) und meldet dann genau diesen + * Fehler. Konfiguration kommt aus , das die + * Blade-Komponente x-monitoring.browser-errors setzt. + * + * Fehlgeschlagene Livewire-Requests (5xx, 419) meldet bereits der Server. + */ +const config = (() => { + const meta = document.querySelector('meta[name="pk-error-reporting"]'); + + try { + return meta ? JSON.parse(meta.content) : null; + } catch { + return null; + } +})(); + +const ALLOWED_QUERY = ['page', 'q', 'tab', 'sort']; // wie ErrorReportScrubber::AllowedQueryParameters +const TOKEN_SEGMENT = /(?<=\/)[A-Za-z0-9_-]{32,}(?=\/|$)/g; +const EMAIL = /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi; + +/** Gleiche Regeln wie ErrorReportScrubber auf dem Server. */ +function scrubUrl(value) { + try { + const url = new URL(value, window.location.origin); + url.pathname = url.pathname.replace(TOKEN_SEGMENT, '[Filtered]'); + for (const key of [...url.searchParams.keys()]) { + if (!ALLOWED_QUERY.includes(key) && !key.startsWith('utm_')) { + url.searchParams.set(key, '[Filtered]'); + } + } + url.hash = ''; + + return url.toString().replace(EMAIL, '[email]'); + } catch { + return '[Filtered]'; + } +} + +let sdk = null; + +function loadSdk() { + sdk ??= import('./error-reporting-sdk.js').then((Sentry) => { + Sentry.init({ + dsn: config.dsn, + release: config.release || undefined, + environment: config.environment, + sampleRate: config.sampleRate ?? 1, + sendDefaultPii: false, + // Eigene Listener unten statt GlobalHandlers (sonst doppelt); + // keine Breadcrumbs (Klicktexte, URLs) und keine Sessions. + integrations: (defaults) => + defaults.filter( + (integration) => + !['GlobalHandlers', 'Breadcrumbs', 'BrowserSession', 'BrowserApiErrors'].includes(integration.name), + ), + ignoreErrors: ['ResizeObserver loop', 'Script error.', 'AbortError'], + denyUrls: [/^chrome-extension:\/\//, /^moz-extension:\/\//, /^safari-(web-)?extension:\/\//], + beforeSend(event) { + if (event.request?.url) { + event.request.url = scrubUrl(event.request.url); + } + if (event.request?.headers?.Referer) { + event.request.headers.Referer = scrubUrl(event.request.headers.Referer); + } + for (const exception of event.exception?.values ?? []) { + if (exception.value) { + exception.value = exception.value.replace(EMAIL, '[email]'); + } + } + + return event; + }, + }); + + if (config.userId) { + Sentry.setUser({ id: String(config.userId) }); + } + Sentry.setTag('area', config.area); + + return Sentry; + }); + + return sdk; +} + +/** + * Promise-Ablehnungen mit Objekt statt Error kamen als „Error: [object Object]“ + * an — Typ und Inhalt mitschicken, + * damit die Quelle erkennbar ist. + */ +function rejectionToError(reason) { + if (reason instanceof Error) { + return reason; + } + + const kind = reason?.constructor?.name ?? typeof reason; + let text; + try { + text = typeof reason === 'string' ? reason : JSON.stringify(reason); + } catch { + text = String(reason); + } + + return new Error(`Unbehandelte Ablehnung (${kind}): ${String(text ?? '').slice(0, 300)}`); +} + +function capture(error) { + loadSdk() + .then((Sentry) => Sentry.captureException(error)) + .catch(() => {}); +} + +if (config?.dsn) { + window.addEventListener('error', (event) => { + // Ressourcenfehler (Bild, Skript) haben kein `error` — nur echte Skriptfehler. + if (event.error) { + capture(event.error); + } + }); + + window.addEventListener('unhandledrejection', (event) => { + capture(rejectionToError(event.reason)); + }); +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/resources/views/components/monitoring/browser-errors.blade.php b/dev/git-deploy-monitoring/vorlagen/laravel/resources/views/components/monitoring/browser-errors.blade.php new file mode 100644 index 00000000..0b1b07b8 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/resources/views/components/monitoring/browser-errors.blade.php @@ -0,0 +1,14 @@ +@props(['build' => 'build', 'area' => 'web']) +{{-- Browserfehler an GlitchTip. Ohne SENTRY_BROWSER_DSN + wird nichts eingebunden; das SDK selbst lädt erst beim ersten Fehler. --}} +@if (filled(config('monitoring.browser.dsn'))) + + @vite(['resources/js/error-reporting.js'], $build) +@endif diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/BrowserErrorReportingTest.php b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/BrowserErrorReportingTest.php new file mode 100644 index 00000000..f8d10f93 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/BrowserErrorReportingTest.php @@ -0,0 +1,38 @@ +withoutVite(); +}); + +test('nothing is rendered without a browser dsn', function () { + config()->set('monitoring.browser.dsn', null); + + expect(Blade::render(''))->toBe(''); +}); + +test('the configuration carries dsn, release and the user id only', function () { + config()->set('monitoring.browser.dsn', 'https://public@glitchtip.test/2'); + config()->set('sentry.release', 'abc1234'); + $user = User::factory()->create(['email' => 'kunde@example.com']); + $this->actingAs($user); + + $html = Blade::render(''); + + preg_match('/toMatchArray([ + 'dsn' => 'https://public@glitchtip.test/2', + 'release' => 'abc1234', + 'userId' => $user->id, + 'area' => 'portal', + ]) + ->and($html)->not->toContain('kunde@example.com'); +}); diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/ErrorReportingTest.php b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/ErrorReportingTest.php new file mode 100644 index 00000000..ca527458 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/ErrorReportingTest.php @@ -0,0 +1,95 @@ +create(['email' => 'kunde@example.com']); + $this->actingAs($user); + + report(new RuntimeException('Import für kunde@example.com fehlgeschlagen')); + + expect($glitchTip->events)->toHaveCount(1); + + $event = $glitchTip->events[0]; + expect($event->getUser()?->getId())->toBe($user->id) + ->and($event->getUser()?->getEmail())->toBeNull() + ->and($event->getExceptions()[0]->getValue())->toBe('Import für [email] fehlgeschlagen'); +}); + +test('exceptions laravel does not report stay out of glitchtip', function () { + $glitchTip = FakeGlitchTip::install(); + + $this->get('/diese-seite-gibt-es-nicht')->assertNotFound(); + + expect($glitchTip->events)->toBe([]); +}); + +test('a mistyped artisan command is not reported', function () { + $glitchTip = FakeGlitchTip::install(); + + report(new CommandNotFoundException('Command "config:cachels" is not defined.')); + + expect($glitchTip->events)->toBe([]); +}); + +test('request data loses tokens, signatures and bodies', function () { + $scrubbed = ErrorReportScrubber::scrubRequest([ + 'url' => 'https://app.test/einladung/5?signature=abc123&expires=1700000000&page=2', + 'query_string' => 'signature=abc123&expires=1700000000&page=2&utm_source=nl', + 'data' => ['password' => 'geheim'], + 'cookies' => ['app_session' => 'x'], + 'headers' => ['referer' => ['https://app.test/reset-password/'.str_repeat('a', 64).'?email=kunde@example.com']], + ]); + + expect($scrubbed['url'])->toBe('https://app.test/einladung/5?signature=%5BFiltered%5D&expires=%5BFiltered%5D&page=2') + ->and($scrubbed['query_string'])->toBe('signature=%5BFiltered%5D&expires=%5BFiltered%5D&page=2&utm_source=nl') + ->and($scrubbed)->not->toHaveKeys(['data', 'cookies']) + ->and($scrubbed['headers']['referer'][0])->toBe('https://app.test/reset-password/[Filtered]?email=%5BFiltered%5D'); +}); + +test('route parameters named like secrets are removed from the url', function () { + Route::middleware('web')->get('/_test/magic/{token}', function () { + $event = Event::createEvent(); + $event->setRequest(['url' => request()->fullUrl()]); + + return ErrorReportScrubber::beforeSend($event)?->getRequest()['url']; + }); + + $this->get('/_test/magic/kurz123') + ->assertSuccessful() + ->assertSee('/_test/magic/[Filtered]', false) + ->assertDontSee('kurz123'); +}); + +test('messages and exception values lose e-mail addresses', function () { + $event = Event::createEvent(); + $event->setMessage('Bounce von info@firma.de', [], 'Bounce von info@firma.de'); + $event->setExceptions([new ExceptionDataBag(new RuntimeException('Duplicate entry \'a.b@c.org\''))]); + + $scrubbed = ErrorReportScrubber::beforeSend($event); + + expect($scrubbed?->getMessage())->toBe('Bounce von [email]') + ->and($scrubbed?->getMessageFormatted())->toBe('Bounce von [email]') + ->and($scrubbed?->getExceptions()[0]->getValue())->toBe('Duplicate entry \'[email]\'') + ->and($scrubbed?->getUser())->toBeNull(); +}); + +test('the test suite never reports to the real glitchtip', function () { + // Ohne diese Absicherung landeten absichtlich provozierte Fehler + // („Queue weg“, „Datenbank nicht erreichbar“) als Issues in GlitchTip. + expect(config('sentry.dsn'))->toBeEmpty() + ->and(config('monitoring.browser.dsn'))->toBeEmpty() + ->and(SentrySdk::getCurrentHub()->getClient()?->getOptions()->getDsn())->toBeNull(); +}); diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/ErrorSignalsTest.php b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/ErrorSignalsTest.php new file mode 100644 index 00000000..2b831591 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/ErrorSignalsTest.php @@ -0,0 +1,71 @@ +withoutDefer(); + $this->glitchTip = FakeGlitchTip::install(); + + Route::middleware('web')->get('/_test/forbidden', fn () => abort(403))->name('test.forbidden'); + Route::middleware('web')->get('/_test/expired', fn () => abort(419))->name('test.expired'); + Route::middleware('web')->get('/_test/throttled', fn () => abort(429))->name('test.throttled'); +}); + +test('a 404 reached from one of our own pages is reported as a dead internal link', function () { + $this->get('/gibt-es-nicht', ['referer' => url('/de/presse')])->assertNotFound(); + + expect($this->glitchTip->messages())->toBe(['Toter interner Link: /gibt-es-nicht']); + + $event = $this->glitchTip->events[0]; + expect($event->getTags())->toMatchArray(['signal' => ErrorSignal::DeadInternalLink]) + ->and($event->getFingerprint())->toBe(['error-signal', ErrorSignal::DeadInternalLink, '/gibt-es-nicht']) + ->and($event->getContexts()['signal']['referer'])->toBe('/de/presse'); +}); + +test('a 404 without referer or from another site is not reported', function () { + $this->get('/gibt-es-nicht')->assertNotFound(); + $this->get('/gibt-es-nicht', ['referer' => 'https://google.com/search'])->assertNotFound(); + + expect($this->glitchTip->events)->toBe([]); +}); + +test('403 and 429 are reported only for signed-in users', function () { + $this->get('/_test/forbidden')->assertForbidden(); + $this->get('/_test/throttled')->assertTooManyRequests(); + + expect($this->glitchTip->events)->toBe([]); + + $this->actingAs(User::factory()->create()); + $this->get('/_test/forbidden')->assertForbidden(); + $this->get('/_test/throttled')->assertTooManyRequests(); + + expect($this->glitchTip->messages())->toBe([ + 'Zugriff verweigert (angemeldet): test.forbidden', + 'Drosselung trifft angemeldeten Nutzer: test.throttled', + ]); +}); + +test('an expired page is always reported, for livewire with the page as location', function () { + $this->get('/_test/expired')->assertStatus(419); + $this->get('/_test/expired', ['X-Livewire' => '1', 'referer' => url('/me/pressemitteilungen/neu')])->assertStatus(419); + + expect($this->glitchTip->messages())->toBe([ + 'Seite abgelaufen (419): test.expired', + 'Seite abgelaufen (419): livewire /me/pressemitteilungen/neu', + ]); +}); + +test('each signal group is capped at five reports per window', function () { + foreach (range(1, 7) as $attempt) { + $this->get('/_test/expired'); + } + + expect($this->glitchTip->events)->toHaveCount(5); +}); diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/HealthEndpointTest.php b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/HealthEndpointTest.php new file mode 100644 index 00000000..0b2bea2d --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/HealthEndpointTest.php @@ -0,0 +1,91 @@ +set('monitoring.health.token', 'geheimes-monitor-token'); + config()->set('monitoring.health.disk_min_free_percent', 0); + config()->set('queue.default', 'database'); +}); + +afterEach(function () { + @unlink(HealthProbe::heartbeatPath()); +}); + +function healthHeaders(): array +{ + return ['Authorization' => 'Bearer geheimes-monitor-token']; +} + +test('the endpoint does not exist without a configured token or with a wrong one', function () { + app(HealthProbe::class)->recordHeartbeat(); + + $this->get('/health', healthHeaders())->assertOk(); + + $this->get('/health', ['Authorization' => 'Bearer falsch'])->assertNotFound(); + $this->get('/health')->assertNotFound(); + + config()->set('monitoring.health.token', null); + $this->get('/health', healthHeaders())->assertNotFound(); +}); + +test('a healthy system answers 200 with every check', function () { + config()->set('app.version', 'v1.1.0'); + $this->artisan('monitoring:heartbeat')->assertSuccessful(); + + $this->get('/health?token=geheimes-monitor-token') + ->assertOk() + ->assertHeader('Cache-Control', 'no-store, private') + ->assertJsonPath('status', 'ok') + ->assertJsonPath('version', 'v1.1.0') + ->assertJsonPath('checks.database.status', 'ok') + ->assertJsonPath('checks.cache.status', 'ok') + ->assertJsonPath('checks.queue.status', 'ok') + ->assertJsonPath('checks.scheduler.status', 'ok') + ->assertJsonStructure(['checks' => ['disk' => ['status', 'detail']]]); +}); + +test('a missing or stale heartbeat makes the endpoint fail', function () { + $this->get('/health', healthHeaders()) + ->assertStatus(503) + ->assertJsonPath('checks.scheduler.status', 'critical'); + + app(HealthProbe::class)->recordHeartbeat(); + + $this->travel(4)->minutes(); + $this->get('/health', healthHeaders())->assertOk()->assertJsonPath('checks.scheduler.status', 'warn'); + + $this->travel(7)->minutes(); + $this->get('/health', healthHeaders())->assertStatus(503)->assertJsonPath('checks.scheduler.status', 'critical'); +}); + +test('a queue backlog older than five minutes makes the endpoint fail', function () { + app(HealthProbe::class)->recordHeartbeat(); + + DB::table('jobs')->insert([ + 'queue' => 'default', + 'payload' => '{}', + 'attempts' => 0, + 'reserved_at' => null, + 'available_at' => now()->subMinutes(6)->getTimestamp(), + 'created_at' => now()->subMinutes(6)->getTimestamp(), + ]); + + $this->get('/health', healthHeaders()) + ->assertStatus(503) + ->assertJsonPath('checks.queue.status', 'critical'); +}); + +test('the endpoint skips the session and the web middleware group', function () { + app(HealthProbe::class)->recordHeartbeat(); + + $this->get('/health', healthHeaders()) + ->assertOk() + ->assertCookieMissing(config('session.cookie')); +}); diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/OperationalAlertTest.php b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/OperationalAlertTest.php new file mode 100644 index 00000000..9de5664a --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/OperationalAlertTest.php @@ -0,0 +1,82 @@ +set('monitoring.alerts.enabled', true); + config()->set('monitoring.alerts.mail_to', null); + config()->set('monitoring.alerts.ntfy', ['url' => null, 'topic' => null, 'token' => null, 'priority' => 4]); +}); + +test('an alert always logs critical to the monitoring channel', function () { + $monitoringLog = Mockery::spy(LoggerInterface::class); + Log::shouldReceive('channel')->with('monitoring')->andReturn($monitoringLog); + + OperationalAlert::send('Geplanter Task fehlgeschlagen: demo', ['exit_code' => 1]); + + $monitoringLog->shouldHaveReceived('critical')->once(); +}); + +test('an alert mails the configured recipient', function () { + config()->set('monitoring.alerts.mail_to', 'ops@example.com'); + Event::fake([MessageSent::class]); + + OperationalAlert::send('Etwas ist kaputt', ['exit_code' => 1]); + + Event::assertDispatched(MessageSent::class, function (MessageSent $event): bool { + $recipients = array_map(fn ($address): string => $address->getAddress(), $event->message->getTo()); + + return in_array('ops@example.com', $recipients, true) + && str_contains((string) $event->message->getSubject(), 'Etwas ist kaputt'); + }); +}); + +test('an alert is pushed to ntfy as json with token and priority', function () { + config()->set('monitoring.alerts.ntfy', ['url' => 'https://push.example.com/', 'topic' => 'app-ops', 'token' => 'tk_geheim', 'priority' => 4]); + Http::fake(['push.example.com*' => Http::response(['id' => 'x'])]); + + OperationalAlert::send('Queue-Job fehlgeschlagen: Demo', ['exit_code' => 1]); + + Http::assertSent(fn (Request $request): bool => $request->url() === 'https://push.example.com' + && $request->hasHeader('Authorization', 'Bearer tk_geheim') + && $request['topic'] === 'app-ops' + && $request['priority'] === 4 + && str_contains($request['message'], 'exit_code: 1')); +}); + +test('a failing push never bubbles up and nothing is sent when alerts are off', function () { + config()->set('monitoring.alerts.ntfy', ['url' => 'https://push.example.com', 'topic' => 'app-ops', 'token' => null, 'priority' => 4]); + Http::fake(['push.example.com*' => Http::response('down', 502)]); + + OperationalAlert::send('Etwas ist kaputt'); + Http::assertSentCount(1); + + config()->set('monitoring.alerts.enabled', false); + OperationalAlert::send('Etwas ist kaputt'); + Http::assertSentCount(1); +}); + +test('a failed queue job triggers an alert via the registered listener', function () { + config()->set('monitoring.alerts.ntfy', ['url' => 'https://push.example.com', 'topic' => 'app-ops', 'token' => null, 'priority' => 4]); + Http::fake(); + + $job = Mockery::mock(Job::class); + $job->shouldReceive('resolveName')->andReturn('App\\Jobs\\Demo'); + $job->shouldReceive('getQueue')->andReturn('default'); + + event(new JobFailed('database', $job, new RuntimeException('boom'))); + + Http::assertSent(fn (Request $request): bool => str_contains($request['message'], 'App\\Jobs\\Demo')); +}); diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/QueueProbeTest.php b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/QueueProbeTest.php new file mode 100644 index 00000000..69c04b25 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Feature/Monitoring/QueueProbeTest.php @@ -0,0 +1,39 @@ +artisan('monitoring:queue-probe', ['--wait' => 30]) + ->expectsOutputToContain('Queue-Worker läuft (Test-Job nach 0 s abgeholt).') + ->assertSuccessful(); + + Sleep::assertSleptTimes(0); +}); + +test('without a worker the probe fails after the waiting time with a hint', function () { + Sleep::fake(); + Queue::fake(); + + $this->artisan('monitoring:queue-probe', ['--wait' => 5]) + ->expectsOutputToContain('Kein Queue-Worker hat den Test-Job innerhalb von 5 s abgeholt.') + ->expectsOutputToContain('Worker prüfen') + ->assertFailed(); + + Queue::assertPushed(QueueProbe::class, fn (QueueProbe $job): bool => $job->queue === null); + Sleep::assertSleptTimes(5); +}); + +test('the probe job only acknowledges its own token', function () { + (new QueueProbe('abc'))->handle(); + + expect(cache()->has(QueueProbe::cacheKey('abc')))->toBeTrue() + ->and(cache()->has(QueueProbe::cacheKey('xyz')))->toBeFalse(); +}); diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/tests/Support/FakeGlitchTip.php b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Support/FakeGlitchTip.php new file mode 100644 index 00000000..f3c38b1a --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Support/FakeGlitchTip.php @@ -0,0 +1,63 @@ +events + */ +class FakeGlitchTip implements TransportInterface +{ + /** @var list */ + public array $events = []; + + public static function install(): self + { + $transport = new self; + + $client = ClientBuilder::create([ + 'dsn' => 'https://public@glitchtip.test/1', + 'default_integrations' => false, + 'send_default_pii' => config('sentry.send_default_pii'), + 'max_request_body_size' => config('sentry.max_request_body_size'), + 'before_send' => config('sentry.before_send'), + ])->setTransport($transport)->getClient(); + + SentrySdk::getCurrentHub()->bindClient($client); + + return $transport; + } + + public function send(Event $event): Result + { + $this->events[] = $event; + + return new Result(ResultStatus::success(), $event); + } + + public function close(?int $timeout = null): Result + { + return new Result(ResultStatus::success()); + } + + /** + * @return list + */ + public function messages(): array + { + return array_values(array_map( + static fn (Event $event): string => (string) ($event->getMessage() ?? $event->getExceptions()[0]?->getValue()), + $this->events, + )); + } +} diff --git a/dev/git-deploy-monitoring/vorlagen/laravel/tests/Unit/Monitoring/ReleaseTest.php b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Unit/Monitoring/ReleaseTest.php new file mode 100644 index 00000000..e0aff22b --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/laravel/tests/Unit/Monitoring/ReleaseTest.php @@ -0,0 +1,38 @@ +dir = sys_get_temp_dir().'/release-test-'.uniqid(); + mkdir($this->dir); +}); + +afterEach(function () { + @unlink($this->dir.'/RELEASE'); + @rmdir($this->dir); +}); + +test('the configured value wins over the release file', function () { + file_put_contents($this->dir.'/RELEASE', "abc1234\n"); + + expect(Release::current('v1.2.0', $this->dir))->toBe('v1.2.0'); +}); + +test('the release file is used when nothing is configured', function () { + file_put_contents($this->dir.'/RELEASE', "98c465b-dirty\n"); + + expect(Release::current(null, $this->dir))->toBe('98c465b-dirty') + ->and(Release::current(' ', $this->dir))->toBe('98c465b-dirty'); +}); + +test('without file or with garbage there is no release', function () { + expect(Release::current(null, $this->dir))->toBeNull(); + + file_put_contents($this->dir.'/RELEASE', ' # bei jedem Deploy'); + + expect(Release::current(null, $this->dir))->toBeNull(); +}); diff --git a/dev/git-deploy-monitoring/vorlagen/server/Caddyfile b/dev/git-deploy-monitoring/vorlagen/server/Caddyfile new file mode 100644 index 00000000..68b54215 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/server/Caddyfile @@ -0,0 +1,14 @@ +# Reverse Proxy mit automatischem TLS (Let's Encrypt) für den Monitoring-Server. +# Wer schon nginx/Traefik/Ploi nutzt, trägt dort dieselben drei Ziele ein. + +errors.example.com { + reverse_proxy 127.0.0.1:8000 +} + +push.example.com { + reverse_proxy 127.0.0.1:2586 +} + +status.example.com { + reverse_proxy 127.0.0.1:3001 +} diff --git a/dev/git-deploy-monitoring/vorlagen/server/glitchtip-compose.yml b/dev/git-deploy-monitoring/vorlagen/server/glitchtip-compose.yml new file mode 100644 index 00000000..3f5cc499 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/server/glitchtip-compose.yml @@ -0,0 +1,54 @@ +# GlitchTip — selbst gehostetes Fehlerprotokoll (Sentry-kompatibel). +# Grundlage: offizielle compose.sample.yml (GlitchTip 6, Stand 10/2026), +# https://glitchtip.com/documentation/install — vor dem Einsatz abgleichen. +# +# Start: docker compose -f glitchtip-compose.yml up -d +# Danach: https:// öffnen, Konto anlegen, dann +# ENABLE_USER_REGISTRATION auf "False" setzen und neu starten. + +x-environment: &default-environment + DATABASE_URL: postgres://postgres:postgres@postgres:5432/postgres + VALKEY_URL: redis://valkey:6379 + SECRET_KEY: change_me # openssl rand -hex 32 + GLITCHTIP_DOMAIN: https://errors.example.com # mit Schema + DEFAULT_FROM_EMAIL: errors@example.com + EMAIL_URL: smtp://user:password@smtp.example.com:587 # Alert-Mails + ENABLE_USER_REGISTRATION: "False" # nach dem ersten Konto aus + GLITCHTIP_RETENTION_DAYS: "90" # Aufbewahrung — in der Datenschutzerklärung nennen + ENABLE_ADMIN: "False" + ENABLE_OPENAPI: "False" + # Weniger RAM (256–512 MB): Valkey abschalten und Postgres als Queue nutzen + # VALKEY_URL: "" + # GLITCHTIP_ENABLE_LOGS: "False" + # GLITCHTIP_ENABLE_UPTIME: "False" # wir nutzen Uptime Kuma + +x-depends_on: &default-depends_on + - postgres + - valkey + +services: + postgres: + image: postgres:18 + environment: + POSTGRES_HOST_AUTH_METHOD: "trust" # nur im internen Docker-Netz erreichbar + restart: unless-stopped + volumes: + - pg-data:/var/lib/postgresql + valkey: + image: valkey/valkey:9 + restart: unless-stopped + web: + image: glitchtip/glitchtip:6 # neue Hauptversionen: https://glitchtip.com/blog/ + depends_on: *default-depends_on + ports: + - "127.0.0.1:8000:8000" # nur für den Reverse Proxy + environment: + <<: *default-environment + SERVER_ROLE: all_in_one + restart: unless-stopped + volumes: + - uploads:/code/uploads + +volumes: + pg-data: + uploads: diff --git a/dev/git-deploy-monitoring/vorlagen/server/ntfy-compose.yml b/dev/git-deploy-monitoring/vorlagen/server/ntfy-compose.yml new file mode 100644 index 00000000..964a59f1 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/server/ntfy-compose.yml @@ -0,0 +1,17 @@ +# ntfy — Push-Benachrichtigungen aufs Handy (Betriebs-Alerts, Uptime Kuma). +# Start: docker compose -f ntfy-compose.yml up -d +# Konfiguration: ./ntfy/server.yml (Vorlage ntfy-server.yml) + +services: + ntfy: + image: binwiederhier/ntfy + command: serve + restart: unless-stopped + environment: + TZ: Europe/Berlin + volumes: + - ./ntfy/server.yml:/etc/ntfy/server.yml:ro + - ./ntfy/cache:/var/cache/ntfy + - ./ntfy/lib:/var/lib/ntfy + ports: + - "127.0.0.1:2586:80" # nur für den Reverse Proxy diff --git a/dev/git-deploy-monitoring/vorlagen/server/ntfy-server.yml b/dev/git-deploy-monitoring/vorlagen/server/ntfy-server.yml new file mode 100644 index 00000000..6fcffda2 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/server/ntfy-server.yml @@ -0,0 +1,13 @@ +# ntfy-Serverkonfiguration (im Container: /etc/ntfy/server.yml) +base-url: "https://push.example.com" +behind-proxy: true +cache-file: "/var/cache/ntfy/cache.db" +auth-file: "/var/lib/ntfy/user.db" +# Ohne Anmeldung darf niemand lesen oder schreiben — der Topic-Name ist kein Geheimnis. +auth-default-access: "deny-all" + +# Benutzer und Rechte danach im Container anlegen: +# docker compose -f ntfy-compose.yml exec ntfy ntfy user add --role=admin ich +# docker compose -f ntfy-compose.yml exec ntfy ntfy user add meineapp-alerts +# docker compose -f ntfy-compose.yml exec ntfy ntfy access meineapp-alerts meineapp-ops write-only +# docker compose -f ntfy-compose.yml exec ntfy ntfy token add meineapp-alerts # → tk_… in die App-.env diff --git a/dev/git-deploy-monitoring/vorlagen/server/uptime-kuma-compose.yml b/dev/git-deploy-monitoring/vorlagen/server/uptime-kuma-compose.yml new file mode 100644 index 00000000..9445d592 --- /dev/null +++ b/dev/git-deploy-monitoring/vorlagen/server/uptime-kuma-compose.yml @@ -0,0 +1,12 @@ +# Uptime Kuma — externer Monitor (prüft /health und /up von außen). +# Auf einem ANDEREN Server als die überwachte App betreiben, sonst fällt er mit ihr aus. +# Start: docker compose -f uptime-kuma-compose.yml up -d + +services: + uptime-kuma: + image: louislam/uptime-kuma:2 # aktuelle Hauptversion prüfen + restart: unless-stopped + volumes: + - ./uptime-kuma:/app/data + ports: + - "127.0.0.1:3001:3001" # nur für den Reverse Proxy diff --git a/package-lock.json b/package-lock.json index fc04f619..9588e736 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "@fontsource/instrument-sans": "^5.0.0", "@fontsource/inter": "^5.0.0", "@fontsource/poppins": "^5.0.0", + "@sentry/browser": "^11.6.0", "@tailwindcss/vite": "^4.0.7", "alpinejs": "^3.14.9", "autoprefixer": "^10.4.20", @@ -723,6 +724,96 @@ "win32" ] }, + "node_modules/@sentry/browser": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-11.6.0.tgz", + "integrity": "sha512-zkqUIbRc9HCBMsoL67HOAr6PSfNzJSMw4JhytCHuDZ5O7KuOwwgBENGhVh3mr5lj2D47Bhv01MpwCJMP3yBnZQ==", + "license": "MIT", + "dependencies": { + "@sentry/browser-utils": "11.6.0", + "@sentry/conventions": "^0.26.0", + "@sentry/core": "11.6.0", + "@sentry/feedback": "11.6.0", + "@sentry/replay": "11.6.0", + "@sentry/replay-canvas": "11.6.0" + }, + "engines": { + "node": ">=20.19.0 <22.0.0 || >=22.12.0 <23.0.0 || >=23.2.0" + } + }, + "node_modules/@sentry/browser-utils": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/@sentry/browser-utils/-/browser-utils-11.6.0.tgz", + "integrity": "sha512-s4zuuE71NORfyNd6ciS27/o97qgfu70qDRdPCkLK8UOcs1REsaAQPgmvNBSADRYm4eeFwWejKBCQKjL5kOzLqw==", + "license": "MIT", + "dependencies": { + "@sentry/conventions": "^0.26.0", + "@sentry/core": "11.6.0", + "web-vitals": "^6.2.3" + }, + "engines": { + "node": ">=20.19.0 <22.0.0 || >=22.12.0 <23.0.0 || >=23.2.0" + } + }, + "node_modules/@sentry/conventions": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@sentry/conventions/-/conventions-0.26.0.tgz", + "integrity": "sha512-ttSRcoLf2kIENDIFzH12aJaVMdxnidMYLvVNwEX/JjXfXaQot8u5M47QmgAFOOhVJ4nQ2uU8wTCh+fwSPrrCfg==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@sentry/core": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-11.6.0.tgz", + "integrity": "sha512-PbITT1kfJYKJiS9fH4ZtOcwIONKyt+tUsTZSPtcAjPdkUDOzMKT61MkUa1Ze07VzNtLALT24ZdUOc6d9K4YoKA==", + "license": "MIT", + "dependencies": { + "@sentry/conventions": "^0.26.0" + }, + "engines": { + "node": ">=20.19.0 <22.0.0 || >=22.12.0 <23.0.0 || >=23.2.0" + } + }, + "node_modules/@sentry/feedback": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/@sentry/feedback/-/feedback-11.6.0.tgz", + "integrity": "sha512-V52/+SkMcPdlldExPC9TWS2sZ+CC+8BSzvVbRtkQxvy+jTOXFAJfInaVLPAAVt8W4WbPw9iAxVMzwHGaZ2muBw==", + "license": "MIT", + "dependencies": { + "@sentry/core": "11.6.0" + }, + "engines": { + "node": ">=20.19.0 <22.0.0 || >=22.12.0 <23.0.0 || >=23.2.0" + } + }, + "node_modules/@sentry/replay": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-11.6.0.tgz", + "integrity": "sha512-cJyPYnF6QJA8ADRfAW06YoU7EVIebtWezBOCU9Vag5+W1VLBkXEvH7C4LbeMUiDmrqw92sumq06NgqipIxA7BA==", + "license": "MIT", + "dependencies": { + "@sentry/browser-utils": "11.6.0", + "@sentry/core": "11.6.0" + }, + "engines": { + "node": ">=20.19.0 <22.0.0 || >=22.12.0 <23.0.0 || >=23.2.0" + } + }, + "node_modules/@sentry/replay-canvas": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/@sentry/replay-canvas/-/replay-canvas-11.6.0.tgz", + "integrity": "sha512-cRuiC8N9xXDoaKEDpMPRDtmGAr0G2YMx1m2JrnrmTnMt9z/VcIKNwaiURTTW8W8u96/RyRQfflMHYARX7FG8YQ==", + "license": "MIT", + "dependencies": { + "@sentry/core": "11.6.0", + "@sentry/replay": "11.6.0" + }, + "engines": { + "node": ">=20.19.0 <22.0.0 || >=22.12.0 <23.0.0 || >=23.2.0" + } + }, "node_modules/@tailwindcss/node": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.8.tgz", @@ -2295,6 +2386,12 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/web-vitals": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-6.2.3.tgz", + "integrity": "sha512-Dmy+vdO1UPMqXiAtZSNayhl4f794Bxfd94W4HIj2HlYtczEQfEOon969memlcpcHrTuOKLa5baFjX7WbgmOq+A==", + "license": "Apache-2.0" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index cf71b534..eee1713e 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,10 @@ "build:style2own": "THEME=style2own vite build --config vite.web.config.js" }, "dependencies": { + "@fontsource/instrument-sans": "^5.0.0", + "@fontsource/inter": "^5.0.0", + "@fontsource/poppins": "^5.0.0", + "@sentry/browser": "^11.6.0", "@tailwindcss/vite": "^4.0.7", "alpinejs": "^3.14.9", "autoprefixer": "^10.4.20", @@ -20,10 +24,7 @@ "concurrently": "^9.0.1", "laravel-vite-plugin": "^1.0", "tailwindcss": "^4.0.7", - "vite": "^6.0", - "@fontsource/instrument-sans": "^5.0.0", - "@fontsource/inter": "^5.0.0", - "@fontsource/poppins": "^5.0.0" + "vite": "^6.0" }, "optionalDependencies": { "@rollup/rollup-linux-x64-gnu": "4.9.5", diff --git a/packages/flux-cms/core/vendor/orchestra/testbench-core/laravel/storage/framework/sessions/.gitignore b/packages/flux-cms/core/vendor/orchestra/testbench-core/laravel/storage/framework/sessions/.gitignore deleted file mode 100644 index d6b7ef32..00000000 --- a/packages/flux-cms/core/vendor/orchestra/testbench-core/laravel/storage/framework/sessions/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/packages/flux-cms/core/vendor/spatie/laravel-translatable/.phpunit.cache/test-results b/packages/flux-cms/core/vendor/spatie/laravel-translatable/.phpunit.cache/test-results deleted file mode 100644 index 96aead22..00000000 --- a/packages/flux-cms/core/vendor/spatie/laravel-translatable/.phpunit.cache/test-results +++ /dev/null @@ -1 +0,0 @@ -{"version":"pest_3.7.4","defects":[],"times":{"P\\Tests\\EventTest::__pest_evaluable_it_will_fire_an_event_when_a_translation_has_been_set":0.013,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_package_fallback_locale_translation_when_getting_an_unknown_locale":0.008,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_default_fallback_locale_translation_when_getting_an_unknown_locale":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_provides_a_flog_to_not_return_fallback_locale_translation_when_getting_an_unknown_locale":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_fallback_locale_translation_when_getting_an_unknown_locale_and_fallback_is_true":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_execute_callback_fallback_when_getting_an_unknown_locale_and_fallback_callback_is_enabled":0.005,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_use_callback_fallback_return_value_as_translation":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_wont_use_callback_fallback_return_value_as_translation_if_it_is_not_a_string":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_wont_execute_callback_fallback_when_getting_an_existing_translation":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_wont_fail_if_callback_fallback_throw_exception":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_an_empty_string_when_getting_an_unknown_locale_and_fallback_is_not_set":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_an_empty_string_when_getting_an_unknown_locale_and_fallback_is_empty":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_save_a_translated_attribute":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_translated_values_when_creating_a_model":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_save_multiple_translations":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_the_value_of_the_current_locale_when_using_the_property":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_all_translations_in_one_go":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_specified_translations_in_one_go":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_all_translations_for_all_translatable_attributes_in_one_go":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_specified_translations_for_all_translatable_attributes_in_one_go":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_the_locales_which_have_a_translation":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_forget_a_translation":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_forget_all_translations_of_field":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_forget_all_translations_of_field_and_make_field_null":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_forget_a_field_with_mutator_translation":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_forget_all_translations":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_throw_an_exception_when_trying_to_translate_an_untranslatable_attribute":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_is_compatible_with_accessors_on_non_translatable_attributes":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_use_accessors_on_translated_attributes":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_be_converted_to_array_when_using_accessors_on_translated_attributes":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_use_mutators_on_translated_attributes":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_translations_for_default_language":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_multiple_translations_at_once":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_check_if_an_attribute_is_translatable":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_check_if_an_attribute_has_translation":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_correctly_set_a_field_when_a_mutator_is_defined":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_multiple_translations_when_a_mutator_is_defined":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_multiple_translations_on_field_when_a_mutator_is_defined":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_uses_the_attribute_to_mutate_the_translated_value":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_translate_a_field_based_on_the_translations_of_another_one":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_handle_null_value_from_database":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_get_all_translations":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_fallback_locale_translation_when_getting_an_empty_translation_from_the_locale":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_correct_translation_value_if_value_is_set_to_zero":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_not_return_fallback_value_if_value_is_set_to_zero":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_not_remove_zero_value_of_other_locale_in_database":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_be_translated_based_on_given_locale":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_and_fetch_attributes_based_on_set_locale":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_replace_translations":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_use_any_locale_if_given_locale_not_set":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_set_translation_when_fallback_any_set":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_fallback_translation_when_fallback_any_set":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_provides_a_flog_to_not_return_any_translation_when_getting_an_unknown_locale":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_default_fallback_locale_translation_when_getting_an_unknown_locale_with_fallback_any":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_will_return_all_locales_when_getting_all_translations":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_queries_the_database_whether_a_locale_exists":0.002,"P\\Tests\\TranslatableTest::__pest_evaluable_it_queries_the_database_for_multiple_locales":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_queries_the_database_whether_a_value_exists_in_a_locale":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_queries_the_database_whether_a_value_exists_in_a_multiple_locales":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_disable_attribute_locale_fallback_on_a_per_model_basis":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_fallback_locale_on_model":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_translations_macro_meets_expectations#(['english'], 'en', 'english')":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_translations_macro_meets_expectations#(['english', 'english'], ['en', 'nl'], 'english')":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_translations_macro_meets_expectations#(['english', 'dutch'], ['en', 'nl'], ['english', 'dutch'])":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_return_null_when_the_underlying_attribute_in_database_is_null":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_return_locales_with_empty_string_translations_when_allowEmptyStringForTranslation_is_true":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_not_return_locales_with_empty_string_translations_when_allowEmptyStringForTranslation_is_false":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_return_locales_with_null_translations_when_allowNullForTranslation_is_true":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_not_return_locales_with_null_translations_when_allowNullForTranslation_is_false":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_an_array_list_as_value_for_translation_using__setTranslation_":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_an_array_list_as_value_for_translation_using_default_local":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_treat_an_empty_array_as_value_for_clearing_translations":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_can_set_and_retrieve_translations_for_nested_fields":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_uses_mutators_for_setting_and_getting_translated_values_of_nested_fields":0.001,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_return_null_when_translation_is_null_and_allowNullForTranslation_is_true":0,"P\\Tests\\TranslatableTest::__pest_evaluable_it_should_return_empty_string_when_translation_is_null_and_allowNullForTranslation_is_false":0}} \ No newline at end of file diff --git a/phpunit.xml b/phpunit.xml index 4dbc029d..ac126565 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -33,5 +33,11 @@ + + + + + + diff --git a/public/_cabinet/_docs/b2in-displays.md b/public/_cabinet/_docs/b2in-displays.md index b818d869..8279c214 100644 --- a/public/_cabinet/_docs/b2in-displays.md +++ b/public/_cabinet/_docs/b2in-displays.md @@ -90,7 +90,7 @@ Jedes Playlist-Item hat folgende Eigenschaften: | `media_url` | URL (optional) | Alternative zu Upload: Externe Video-/Bild-URL. Wird bevorzugt wenn vorhanden. | | `headline` | Text | Max. 40 Zeichen. Wird im Textfeld angezeigt. | | `subline` | Text | Max. 80 Zeichen. Erklärender Text unter der Headline. | -| `duration_seconds` | Zahl | Anzeigedauer in Sekunden. Für Bilder: empfohlen 8–12 Sek. Für Videos: wird ignoriert, Dauer ergibt sich aus Videolänge. | +| `duration_seconds` | Zahl | Anzeigedauer in Sekunden, auch mit Nachkommastelle (z. B. `1.5`). Für Bilder: empfohlen 8–12 Sek. Für Videos: wird ignoriert, Dauer ergibt sich aus Videolänge. | | `sort_order` | Zahl | Reihenfolge in der Playlist. Niedrigste Zahl zuerst. | | `is_active` | Toggle | Aktiv/Inaktiv. Inaktive Items werden übersprungen. | diff --git a/public/_cabinet/assets/b2in-interior-logo-negative.svg b/public/_cabinet/assets/b2in-interior-logo-negative.svg new file mode 100644 index 00000000..838bf931 --- /dev/null +++ b/public/_cabinet/assets/b2in-interior-logo-negative.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/_cabinet/assets/b2in-interior-logo-positive.svg b/public/_cabinet/assets/b2in-interior-logo-positive.svg new file mode 100644 index 00000000..23719451 --- /dev/null +++ b/public/_cabinet/assets/b2in-interior-logo-positive.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/_cabinet/assets/b2in-logo-positive.svg b/public/_cabinet/assets/b2in-logo-positive.svg index 58aae48e..dabb1b97 100644 --- a/public/_cabinet/assets/b2in-logo-positive.svg +++ b/public/_cabinet/assets/b2in-logo-positive.svg @@ -1,21 +1,36 @@ - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + diff --git a/public/_cabinet/clicks.log b/public/_cabinet/clicks.log deleted file mode 100644 index 3197a910..00000000 --- a/public/_cabinet/clicks.log +++ /dev/null @@ -1,11 +0,0 @@ -2025-12-04 10:04:05 - Scanned: pinterest -2025-12-18 13:49:51 - Code: pbay2d - Headline: Beratung & Termin - URL: https://cabinet.b2in.eu/go.php?z=t -2025-12-18 13:50:12 - Code: ihvb0j - Headline: Beratung vor Ort - URL: https://cabinet.b2in.eu/go.php?z=t1 -2025-12-18 13:50:12 - Code: ihvb0j - Headline: Beratung vor Ort - URL: https://cabinet.b2in.eu/go.php?z=t1 -2025-12-18 13:50:12 - Code: ihvb0j - Headline: Beratung vor Ort - URL: https://cabinet.b2in.eu/go.php?z=t1 -2025-12-18 13:50:12 - Code: ihvb0j - Headline: Beratung vor Ort - URL: https://cabinet.b2in.eu/go.php?z=t1 -2025-12-18 13:50:12 - Code: ihvb0j - Headline: Beratung vor Ort - URL: https://cabinet.b2in.eu/go.php?z=t1 -2025-12-18 13:51:01 - Code: k7wrsh - Headline: Instagram - URL: https://cabinet.b2in.eu/go.php?z=i -2025-12-18 13:52:57 - Code: wao7uv - Headline: Beratung & Termin - URL: https://www.cabinet.de/bielefeld?utm_source=store_display&utm_medium=qr_code&utm_campaign=bielefeld_pos&utm_content=termin_buchung#c39393 -2025-12-18 13:53:33 - Code: wao7uv - Headline: Beratung & Termin - URL: https://www.cabinet.de/bielefeld?utm_source=store_display&utm_medium=qr_code&utm_campaign=bielefeld_pos&utm_content=termin_buchung#c39393 -2025-12-18 14:01:26 - Code: c59kjb - Headline: Beratung & Termin - URL: https://www.cabinet.de/bielefeld?utm_source=store_display&utm_medium=qr_code&utm_campaign=bielefeld_pos&utm_content=termin_buchung#c39393 diff --git a/public/_cabinet/display/index.html b/public/_cabinet/display/index.html index eee68e97..acc7d0d2 100644 --- a/public/_cabinet/display/index.html +++ b/public/_cabinet/display/index.html @@ -145,7 +145,7 @@ /* B2in Brand (positionable logo + claim) */ .b2in-brand { position: absolute; z-index: 12; display: flex; align-items: center; max-width: 60%; } - .b2in-brand-logo img { height: 3.5vh; display: block; filter: drop-shadow(0 1px 4px rgba(0,0,0,0.45)); } + .b2in-brand-logo img { height: 4.6vh; display: block; filter: drop-shadow(0 1px 4px rgba(0,0,0,0.45)); } .b2in-brand-claim { font-size: 1.3vh; font-weight: 300; letter-spacing: 0.15em; text-transform: uppercase; color: rgba(255,255,255,0.85); @@ -1337,7 +1337,7 @@ class B2inRenderer { layer.className = 'version-layer b2in-layer active' + (this.settings.show_footer === false ? ' no-footer' : ''); layer.setAttribute('data-theme', this.theme); - const headerLogoUrl = this.resolveUrl(this.settings.header_logo_url || '/_cabinet/assets/b2in-logo-positive.svg'); + const headerLogoUrl = this.resolveUrl(this.settings.header_logo_url || '/_cabinet/assets/b2in-interior-logo-negative.svg'); const headerClaim = this.settings.header_claim || 'Connecting Design & Property'; const footerUrl = this.settings.footer_url || 'B2in.eu'; const footerName = this.settings.footer_name || ''; diff --git a/public/_cabinet/logs/test_2026-01-19.log b/public/_cabinet/logs/test_2026-01-19.log deleted file mode 100644 index 61b3c0fd..00000000 --- a/public/_cabinet/logs/test_2026-01-19.log +++ /dev/null @@ -1 +0,0 @@ -[2026-01-19 08:45:35] [INFO] Logging-System wurde eingerichtet diff --git a/public/build/b2a/app-OG3MHWAj.js b/public/build/b2a/app-OG3MHWAj.js new file mode 100644 index 00000000..a71b089a --- /dev/null +++ b/public/build/b2a/app-OG3MHWAj.js @@ -0,0 +1 @@ +(function(){let o=null;document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r):r();function r(){s(),u(),c(),document.addEventListener("livewire:navigated",function(){s()}),document.addEventListener("livewire:load",function(){s()}),window.addEventListener("livewire:update",function(){setTimeout(()=>{s()},100)})}function s(){const n={threshold:.15,rootMargin:"0px 0px -80px 0px"};o||(o=new IntersectionObserver(e=>{e.forEach(t=>{t.isIntersecting&&(setTimeout(()=>{t.target.classList.add("is-visible")},50),o.unobserve(t.target))})},n)),document.querySelectorAll(".scroll-animate:not(.is-visible):not(.observed), .fade-in:not(.is-visible):not(.observed), .slide-up:not(.is-visible):not(.observed), .slide-right:not(.is-visible):not(.observed), .slide-left:not(.is-visible):not(.observed), .scale-in:not(.is-visible):not(.observed), .slide-down:not(.is-visible):not(.observed)").forEach(e=>{e.classList.add("observed"),o.observe(e)}),window.appointmentLinksInitialized||(document.addEventListener("click",function(e){const t=e.target.closest("a[data-open-appointment]");t&&(e.preventDefault(),window.dispatchEvent(new CustomEvent("open-appointment",{detail:{topic:t.dataset.appointmentTopic||null}})))}),window.appointmentLinksInitialized=!0),window.smoothScrollInitialized||(document.addEventListener("click",function(e){const t=e.target.closest('a[href^="#"]');if(t&&t.hash){const l=document.querySelector(t.hash);if(l){e.preventDefault();const f=l.getBoundingClientRect().top+window.pageYOffset-80;window.scrollTo({top:f,behavior:"smooth"})}}}),window.smoothScrollInitialized=!0)}function c(){const n=document.getElementById("main-header");if(!n)return;function i(){(window.pageYOffset||document.documentElement.scrollTop)>50?n.classList.add("scrolled"):n.classList.remove("scrolled")}let e=!1;window.addEventListener("scroll",function(){e||(window.requestAnimationFrame(function(){i(),e=!1}),e=!0)}),i()}function u(){const n=document.createElement("div");n.className="scroll-progress-bar",document.body.appendChild(n);function i(){const t=window.innerHeight,l=document.documentElement.scrollHeight,d=window.pageYOffset||document.documentElement.scrollTop,a=d/(l-t)*100;n.style.width=`${Math.min(a,100)}%`,d>100?n.classList.add("visible"):n.classList.remove("visible")}let e=!1;window.addEventListener("scroll",function(){e||(window.requestAnimationFrame(function(){i(),e=!1}),e=!0)}),i()}})(); diff --git a/public/build/b2a/error-reporting-BiGrjXpD.js b/public/build/b2a/error-reporting-BiGrjXpD.js new file mode 100644 index 00000000..0cd20769 --- /dev/null +++ b/public/build/b2a/error-reporting-BiGrjXpD.js @@ -0,0 +1 @@ +const y="modulepreload",A=function(e){return"https://b2in.test/build/"+e},h={},_=function(r,t,a){let u=Promise.resolve();if(t&&t.length>0){let o=function(s){return Promise.all(s.map(c=>Promise.resolve(c).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const n=document.querySelector("meta[property=csp-nonce]"),m=(n==null?void 0:n.nonce)||(n==null?void 0:n.getAttribute("nonce"));u=o(t.map(s=>{if(s=A(s),s in h)return;h[s]=!0;const c=s.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${f}`))return;const l=document.createElement("link");if(l.rel=c?"stylesheet":y,c||(l.as="script"),l.crossOrigin="",l.href=s,m&&l.setAttribute("nonce",m),document.head.appendChild(l),c)return new Promise((b,S)=>{l.addEventListener("load",b),l.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${s}`)))})}))}function d(o){const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=o,window.dispatchEvent(n),!n.defaultPrevented)throw o}return u.then(o=>{for(const n of o||[])n.status==="rejected"&&d(n.reason);return r().catch(d)})},i=(()=>{const e=document.querySelector('meta[name="pk-error-reporting"]');try{return e?JSON.parse(e.content):null}catch{return null}})(),v=["page","q","tab","sort"],P=new RegExp("(?<=\\/)[A-Za-z0-9_-]{32,}(?=\\/|$)","g"),w=/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi;function p(e){try{const r=new URL(e,window.location.origin);r.pathname=r.pathname.replace(P,"[Filtered]");for(const t of[...r.searchParams.keys()])!v.includes(t)&&!t.startsWith("utm_")&&r.searchParams.set(t,"[Filtered]");return r.hash="",r.toString().replace(w,"[email]")}catch{return"[Filtered]"}}let E=null;function R(){return E??(E=_(()=>import("./error-reporting-sdk-CLmutOST.js"),[]).then(e=>(e.init({dsn:i.dsn,release:i.release||void 0,environment:i.environment,sampleRate:i.sampleRate??1,sendDefaultPii:!1,integrations:r=>r.filter(t=>!["GlobalHandlers","Breadcrumbs","BrowserSession","BrowserApiErrors"].includes(t.name)),ignoreErrors:["ResizeObserver loop","Script error.","AbortError"],denyUrls:[/^chrome-extension:\/\//,/^moz-extension:\/\//,/^safari-(web-)?extension:\/\//],beforeSend(r){var t,a,u,d;(t=r.request)!=null&&t.url&&(r.request.url=p(r.request.url)),(u=(a=r.request)==null?void 0:a.headers)!=null&&u.Referer&&(r.request.headers.Referer=p(r.request.headers.Referer));for(const o of((d=r.exception)==null?void 0:d.values)??[])o.value&&(o.value=o.value.replace(w,"[email]"));return r}}),i.userId&&e.setUser({id:String(i.userId)}),e.setTag("area",i.area),e))),E}function k(e){var a;if(e instanceof Error)return e;const r=((a=e==null?void 0:e.constructor)==null?void 0:a.name)??typeof e;let t;try{t=typeof e=="string"?e:JSON.stringify(e)}catch{t=String(e)}return new Error(`Unbehandelte Ablehnung (${r}): ${String(t??"").slice(0,300)}`)}function g(e){R().then(r=>r.captureException(e)).catch(()=>{})}i!=null&&i.dsn&&(window.addEventListener("error",e=>{e.error&&g(e.error)}),window.addEventListener("unhandledrejection",e=>{g(k(e.reason))})); diff --git a/public/build/b2a/error-reporting-sdk-CLmutOST.js b/public/build/b2a/error-reporting-sdk-CLmutOST.js new file mode 100644 index 00000000..e5da0866 --- /dev/null +++ b/public/build/b2a/error-reporting-sdk-CLmutOST.js @@ -0,0 +1,15 @@ +const m=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,_=globalThis,W="11.6.0";function rt(){return gt(_),_}function gt(t){const e=t.__SENTRY__=t.__SENTRY__||{};return e.version=e.version||W,e[W]=e[W]||{}}function st(t,e,n=_){const r=n.__SENTRY__=n.__SENTRY__||{},s=r[W]=r[W]||{};return s[t]||(s[t]=e())}const Nn=["debug","info","warn","error","log","assert","trace"],Mr="Sentry Logger ",Ot={};function j(t){if(!("console"in _))return t();const e=_.console,n={},r=Object.keys(Ot);r.forEach(s=>{const o=Ot[s];n[s]=e[s],e[s]=o});try{return t()}finally{r.forEach(s=>{e[s]=n[s]})}}function $r(){me().enabled=!0}function Fr(){me().enabled=!1}function Cn(){return me().enabled}function jr(...t){he("log",...t)}function Br(...t){he("warn",...t)}function Ur(...t){he("error",...t)}function he(t,...e){m&&Cn()&&j(()=>{_.console[t](`${Mr}[${t}]:`,...e)})}function me(){return m?st("loggerSettings",()=>({enabled:!1})):{enabled:!1}}const h={enable:$r,disable:Fr,isEnabled:Cn,log:jr,warn:Br,error:Ur},An=50,q="?",Re=/\(error: (.*)\)/,Oe=/captureMessage|captureException/;function xn(...t){const e=t.sort((n,r)=>n[0]-r[0]).map(n=>n[1]);return(n,r=0,s=0)=>{const o=[],i=n.split(` +`);for(let a=r;a1024&&(c=c.slice(0,1024));const u=Re.test(c)?c.replace(Re,"$1"):c;if(!u.includes("Error: ")){for(const f of e){const l=f(u);if(l){o.push(l);break}}if(o.length>=An+s)break}}return Wr(o.slice(s))}}function Hr(t){return Array.isArray(t)?xn(...t):t}function Wr(t){if(!t.length)return[];const e=Array.from(t);return/sentryWrapped/.test(vt(e).function||"")&&e.pop(),e.reverse(),Oe.test(vt(e).function||"")&&(e.pop(),Oe.test(vt(e).function||"")&&e.pop()),e.slice(0,An).map(n=>({...n,filename:n.filename||vt(e).filename,function:n.function||q}))}function vt(t){return t[t.length-1]||{}}const jt="";function $(t){try{return!t||typeof t!="function"?jt:t.name||jt}catch{return jt}}function Ne(t){const e=t.exception;if(e){const n=[];try{return e.values.forEach(r=>{r.stacktrace.frames&&n.push(...r.stacktrace.frames)}),n}catch{return}}}const ft={},Ce={};function z(t,e){return ft[t]=ft[t]||[],ft[t].push(e),()=>{const n=ft[t];if(n){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}}}function Y(t,e){if(!Ce[t]){Ce[t]=!0;try{e()}catch(n){m&&h.error(`Error while instrumenting ${t}`,n)}}}function w(t,e){const n=t&&ft[t];if(n)for(const r of n)try{r(e)}catch(s){m&&h.error(`Error while triggering instrumentation handler. +Type: ${t} +Name: ${$(r)} +Error:`,s)}}let Bt=null;function qr(t){const e="error";z(e,t),Y(e,Gr)}function Gr(){Bt=_.onerror,_.onerror=function(t,e,n,r,s){return w("error",{column:r,error:s,line:n,msg:t,url:e}),Bt?Bt.apply(this,arguments):!1},_.onerror.__SENTRY_INSTRUMENTED__=!0}let Ut=null;function zr(t){const e="unhandledrejection";z(e,t),Y(e,Yr)}function Yr(){Ut=_.onunhandledrejection,_.onunhandledrejection=function(t){return w("unhandledrejection",t),Ut?Ut.apply(this,arguments):!0},_.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const Dn=Object.prototype.toString;function D(t){switch(Dn.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object WebAssembly.Exception]":return!0;default:return _e(t,Error)}}function ot(t,e){return Dn.call(t)===`[object ${e}]`}function Ln(t){return ot(t,"ErrorEvent")}function Ae(t){return ot(t,"DOMError")}function Kr(t){return ot(t,"DOMException")}function x(t){return ot(t,"String")}function ge(t){return typeof t=="object"&&t!==null&&"__sentry_template_string__"in t&&"__sentry_template_values__"in t}function it(t){return t===null||ge(t)||typeof t!="object"&&typeof t!="function"}function Nt(t){return ot(t,"Object")}function xt(t){return typeof t=="object"&&t!==null}function Dt(t){return typeof Event<"u"&&_e(t,Event)}function Vr(t){return ot(t,"RegExp")}function at(t){return!!(t!=null&&t.then&&typeof t.then=="function")}function _e(t,e){try{return t instanceof e}catch{return!1}}function Pn(t){return typeof Request<"u"&&_e(t,Request)}function T(t,e,n){if(!(e in t))return;const r=t[e];if(typeof r!="function")return;const s=n(r);typeof s=="function"&&Mn(s,r);try{t[e]=s}catch{m&&h.log(`Failed to replace method "${e}" in object`,t)}}function F(t,e,n){try{Object.defineProperty(t,e,{value:n,writable:!0,configurable:!0})}catch{m&&h.log(`Failed to add non-enumerable property "${String(e)}" to object`,t)}}function Mn(t,e){try{const n=e.prototype||{};t.prototype=e.prototype=n,F(t,"__sentry_original__",e)}catch{}}function ye(t){return t.__sentry_original__}function $n(t){if(D(t))return{message:t.message,name:t.name,stack:t.stack,...xe(t)};if(Dt(t)){const{type:e,target:n,currentTarget:r,detail:s}=t;return{type:e,target:n,currentTarget:r,...s?{detail:s}:{},...xe(t)}}return t}function xe(t){return xt(t)?Object.fromEntries(Object.entries(t)):{}}function Xr(t){const e=Object.keys($n(t));return e.sort(),e[0]?e.join(", "):"[object has no keys]"}let J;function pt(t){if(J!==void 0)return J?J(t):t();const e=Symbol.for("__SENTRY_SAFE_RANDOM_ID_WRAPPER__"),n=_;return e in n&&typeof n[e]=="function"?(J=n[e],J(t)):(J=null,t())}function Ee(){return pt(()=>Math.random())}function K(){return pt(()=>Date.now())}const Jr=Symbol.for("sentry.skipNormalization"),Qr=Symbol.for("sentry.overrideNormalizationDepth");function Zr(t){return!!t[Jr]}function ts(t){const e=t[Qr];return typeof e=="number"?e:void 0}let Kt;function es(t){Kt=t}function A(t,e=100,n=1/0){try{return Vt("",t,e,n)}catch(r){return{ERROR:`**non-serializable** (${r})`}}}function Fn(t,e=3,n=100*1024){const r=A(t,e);return ss(r)>n?Fn(t,e-1,n):r}function Vt(t,e,n=1/0,r=1/0,s=os()){const[o,i]=s;if(e==null||["boolean","string"].includes(typeof e)||typeof e=="number"&&Number.isFinite(e))return e;const a=jn(t,e);if(!a.startsWith("[object "))return a;if(Zr(e))return e;const c=ts(e),u=c!==void 0?c:n;if(u===0)return a.replace("object ","");if(o(e))return"[Circular ~]";const f=e;if(f&&typeof f.toJSON=="function")try{const p=f.toJSON();return Vt("",p,u-1,r,s)}catch{}const l=Array.isArray(e)?[]:{};let d=0;const g=$n(e);for(const p in g){if(!Object.prototype.hasOwnProperty.call(g,p))continue;if(d>=r){l[p]="[MaxProperties ~]";break}const I=g[p];l[p]=Vt(p,I,u-1,r,s),d++}return i(e),l}function jn(t,e){try{if(Kt){const r=Kt(e);if(r)return r}return typeof global<"u"&&e===global?"[Global]":typeof e=="number"&&!Number.isFinite(e)?`[${e}]`:typeof e=="function"?`[Function: ${$(e)}]`:typeof e=="symbol"?`[${String(e)}]`:typeof e=="bigint"?`[BigInt: ${String(e)}]`:`[object ${ns(e)}]`}catch(n){return`**non-serializable** (${n})`}}function ns(t){const e=Object.getPrototypeOf(t);return e!=null&&e.constructor?e.constructor.name:"null prototype"}function rs(t){return~-encodeURI(t).split(/%..|./).length}function ss(t){return rs(JSON.stringify(t))}function os(){const t=new WeakSet;function e(r){return t.has(r)?!0:(t.add(r),!1)}function n(r){t.delete(r)}return[e,n]}function Xt(t,e=0){return typeof t!="string"||e===0||t.length<=e?t:`${t.slice(0,e)}...`}function is(t,e){if(!Array.isArray(t))return"";const n=[];for(let r=0;rt.randomUUID()).replace(/-/g,"")}catch{}return Ht||(Ht="10000000100040008000"+1e11),Ht.replace(/[018]/g,e=>(e^(cs()&15)>>e/4).toString(16))}function Bn(t){var e,n;return(n=(e=t.exception)==null?void 0:e.values)==null?void 0:n[0]}function H(t){const{message:e,event_id:n}=t;if(e)return e;const r=Bn(t);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||n||"":n||""}function Jt(t,e,n){const r=t.exception=t.exception||{},s=r.values=r.values||[],o=s[0]=s[0]||{};o.value||(o.value=e||""),o.type||(o.type="Error")}function Z(t,e){const n=Bn(t);n&&Un(n,e)}function us(t,e){var s;const n=(s=t.exception)==null?void 0:s.values,r=(n==null?void 0:n.find(o=>{var i;return((i=o.mechanism)==null?void 0:i.exception_id)===0}))??(n==null?void 0:n[0]);r&&Un(r,e)}function Un(t,e){const n={type:"generic",handled:!0},r=t.mechanism;t.mechanism={...n,...r,...e},e&&"data"in e&&(t.mechanism.data={...r==null?void 0:r.data,...e.data})}function De(t){if(fs(t))return!0;try{F(t,"__sentry_captured__",!0)}catch{}return!1}function fs(t){try{return t.__sentry_captured__}catch{}}const Hn=1e3,ls=1e3,ds=100;function yt(){return K()/Hn}let Q=[];function ps(){const{performance:t}=_;if(!(t!=null&&t.now)||!t.timeOrigin)return t!=null&&t.now&&(Q=[{from:0,origin:K()-pt(()=>t.now())}]),yt;let e=t.timeOrigin;Q=[{from:0,origin:e}];let n=!0,r=0;return()=>pt(()=>{const s=t.now(),o=Date.now();return Math.abs(e+s-o)>ls&&(e=o-s,n?Q=[{from:0,origin:e}]:(Q.push({from:r,origin:e}),Q.length>ds&&Q.splice(1,1))),n=!1,r=s,(e+s)/Hn})}let Le;function R(){return(Le??(Le=ps()))()}function hs(t){const e=R(),n={sid:k(),init:!0,timestamp:e,started:e,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>gs(n)};return t&&tt(n,t),n}function tt(t,e={}){if(e.user&&(!t.ipAddress&&e.user.ip_address&&(t.ipAddress=e.user.ip_address),!t.did&&!e.did&&(t.did=e.user.id||e.user.email||e.user.username)),t.timestamp=e.timestamp||R(),e.abnormal_mechanism&&(t.abnormal_mechanism=e.abnormal_mechanism),e.ignoreDuration&&(t.ignoreDuration=e.ignoreDuration),e.sid&&(t.sid=e.sid.length===32?e.sid:k()),e.init!==void 0&&(t.init=e.init),!t.did&&e.did&&(t.did=`${e.did}`),typeof e.started=="number"&&(t.started=e.started),t.ignoreDuration)t.duration=void 0;else if(typeof e.duration=="number")t.duration=e.duration;else{const n=t.timestamp-t.started;t.duration=n>=0?n:0}e.release&&(t.release=e.release),e.environment&&(t.environment=e.environment),!t.ipAddress&&e.ipAddress&&(t.ipAddress=e.ipAddress),!t.userAgent&&e.userAgent&&(t.userAgent=e.userAgent),typeof e.errors=="number"&&(t.errors=e.errors),e.status&&(t.status=e.status)}function ms(t,e){let n={};t.status==="ok"&&(n={status:"exited"}),tt(t,n)}function gs(t){return{sid:`${t.sid}`,init:t.init,started:new Date(t.started*1e3).toISOString(),timestamp:new Date(t.timestamp*1e3).toISOString(),status:t.status,errors:t.errors,did:typeof t.did=="number"||typeof t.did=="string"?`${t.did}`:void 0,duration:t.duration,abnormal_mechanism:t.abnormal_mechanism,attrs:{release:t.release,environment:t.environment,ip_address:t.ipAddress,user_agent:t.userAgent}}}function Et(t,e,n=2){if(!e||typeof e!="object"||n<=0)return e;if(t&&Object.keys(e).length===0)return t;const r={...t};for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=Et(r[s],e[s],n-1));return r}function _s(){return k()}function Wn(){return k().substring(16)}const ys=100;class O{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._attributes={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},F(this,"refs",{}),this._propagationContext={traceId:_s(),sampleRand:Ee()}}clone(){const e=new O;return e._breadcrumbs=[...this._breadcrumbs],e._tags={...this._tags},e._attributes={...this._attributes},e._extra={...this._extra},e._contexts={...this._contexts},this._contexts.flags&&(e._contexts.flags={values:[...this._contexts.flags.values]}),e._user=this._user,e._level=this._level,e._session=this._session,e._transactionName=this._transactionName,e._fingerprint=this._fingerprint,e._eventProcessors=[...this._eventProcessors],e._attachments=[...this._attachments],e._sdkProcessingMetadata={...this._sdkProcessingMetadata},e._propagationContext={...this._propagationContext},e._client=this._client,e._lastEventId=this._lastEventId,e._conversationId=this._conversationId,e.refs={...this.refs},e}setClient(e){this._client=e}setLastEventId(e){this._lastEventId=e}getClient(){return this._client}lastEventId(){return this._lastEventId}addScopeListener(e){this._scopeListeners.push(e)}addEventProcessor(e){return this._eventProcessors.push(e),this}setUser(e){return this._user=e||{email:void 0,id:void 0,ip_address:void 0,username:void 0},this._session&&tt(this._session,{user:e}),this._notifyScopeListeners(),this}getUser(){return this._user}setConversationId(e){return this._conversationId=e||void 0,this._notifyScopeListeners(),this}setTags(e){return this._tags={...this._tags,...e},this._notifyScopeListeners(),this}setTag(e,n){return this.setTags({[e]:n})}setAttributes(e){return this._attributes={...this._attributes,...e},this._notifyScopeListeners(),this}setAttribute(e,n){return this.setAttributes({[e]:n})}removeAttribute(e){return e in this._attributes&&(delete this._attributes[e],this._notifyScopeListeners()),this}setExtras(e){return this._extra={...this._extra,...e},this._notifyScopeListeners(),this}setExtra(e,n){return this._extra={...this._extra,[e]:n},this._notifyScopeListeners(),this}setFingerprint(e){return this._fingerprint=e,this._notifyScopeListeners(),this}setLevel(e){return this._level=e,this._notifyScopeListeners(),this}setTransactionName(e){return this._transactionName=e,this._notifyScopeListeners(),this}setContext(e,n){return n===null?delete this._contexts[e]:this._contexts[e]=n,this._notifyScopeListeners(),this}setSession(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(e){if(!e)return this;const n=typeof e=="function"?e(this):e,r=n instanceof O?n.getScopeData():Nt(n)?e:void 0,{tags:s,attributes:o,extra:i,user:a,contexts:c,level:u,fingerprint:f=[],propagationContext:l,conversationId:d}=r||{};return this._tags={...this._tags,...s},this._attributes={...this._attributes,...o},this._extra={...this._extra,...i},this._contexts={...this._contexts,...c},a&&Object.keys(a).length&&(this._user=a),u&&(this._level=u),f.length&&(this._fingerprint=f),l&&(this._propagationContext=l),d&&(this._conversationId=d),this}addBreadcrumb(e,n){const r=typeof n=="number"?n:ys;if(r<=0)return this;const s={timestamp:yt(),...e,message:e.message?Xt(e.message,2048):e.message};return this._breadcrumbs.push(s),this._breadcrumbs.length>r&&(this._breadcrumbs=this._breadcrumbs.slice(-r)),this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(e){return this._attachments.push(e),this}clearAttachments(){return this._attachments=[],this}getScopeData(){return{breadcrumbs:this._breadcrumbs,attachments:this._attachments,contexts:this._contexts,tags:this._tags,attributes:this._attributes,extra:this._extra,user:this._user,level:this._level,fingerprint:this._fingerprint||[],eventProcessors:this._eventProcessors,propagationContext:this._propagationContext,sdkProcessingMetadata:this._sdkProcessingMetadata,transactionName:this._transactionName,conversationId:this._conversationId}}setSDKProcessingMetadata(e){return this._sdkProcessingMetadata=Et(this._sdkProcessingMetadata,e,2),this}setPropagationContext(e){return this._propagationContext=e,this}getPropagationContext(){return this._propagationContext}captureException(e,n){const r=(n==null?void 0:n.event_id)||k();if(!this._client)return m&&h.warn("No client configured on scope - will not capture exception!"),r;const s=new Error("Sentry syntheticException");return this._client.captureException(e,{originalException:e,syntheticException:s,...n,event_id:r},this),r}captureMessage(e,n,r){const s=(r==null?void 0:r.event_id)||k();if(!this._client)return m&&h.warn("No client configured on scope - will not capture message!"),s;const o=(r==null?void 0:r.syntheticException)??new Error(e);return this._client.captureMessage(e,n,{originalException:e,syntheticException:o,...r,event_id:s},this),s}captureEvent(e,n){const r=e.event_id||(n==null?void 0:n.event_id)||k();return this._client?(this._client.captureEvent(e,{...n,event_id:r},this),r):(m&&h.warn("No client configured on scope - will not capture event!"),r)}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(e=>{e(this)}),this._notifyingListeners=!1)}}function Es(){return st("defaultCurrentScope",()=>new O)}function Ss(){return st("defaultIsolationScope",()=>new O)}const Pe="__SENTRY_SUPPRESS_TRACING__",Me=t=>t instanceof Promise&&!t[qn],qn=Symbol("chained PromiseLike"),bs=(t,e,n)=>{const r=t.then(s=>(e(s),s),s=>{throw n(s),s});return Me(r)&&Me(t)?r:vs(t,r)},vs=(t,e)=>{if(!e)return t;let n=!1;for(const r in t){if(r in e)continue;n=!0;const s=t[r];typeof s=="function"?Object.defineProperty(e,r,{value:(...o)=>s.apply(t,o),enumerable:!0,configurable:!0,writable:!0}):e[r]=s}return n&&Object.assign(e,{[qn]:!0}),e};class Is{constructor(e,n){let r;e?r=e:r=new O;let s;n?s=n:s=new O,this._stack=[{scope:r}],this._isolationScope=s}withScope(e){const n=this._pushScope();let r;try{r=e(n)}catch(s){throw this._popScope(),s}return at(r)?bs(r,()=>this._popScope(),()=>this._popScope()):(this._popScope(),r)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStackTop(){return this._stack[this._stack.length-1]}_pushScope(){const e=this.getScope().clone();return this._stack.push({client:this.getClient(),scope:e}),e}_popScope(){return this._stack.length<=1?!1:!!this._stack.pop()}}function et(){const t=rt(),e=gt(t);return e.stack=e.stack||new Is(Es(),Ss())}function Gn(t){return et().withScope(t)}function Ts(t,e){const n=et();return n.withScope(()=>(n.getStackTop().scope=t,e(t)))}function $e(t){return et().withScope(()=>t(et().getIsolationScope()))}function ks(){return{suppressTracing:ws,withIsolationScope:$e,withScope:Gn,withSetScope:Ts,withSetIsolationScope:(t,e)=>$e(e),getCurrentScope:()=>et().getScope(),getIsolationScope:()=>et().getIsolationScope()}}function ws(t){return Gn(e=>{e.setSDKProcessingMetadata({[Pe]:!0});const n=t();return e.setSDKProcessingMetadata({[Pe]:void 0}),n})}function Lt(t){const e=gt(t);return e.acs?e.acs:ks()}function Rs(t){return typeof t=="object"&&t!=null&&!Array.isArray(t)&&Object.keys(t).includes("value")}function Os(t,e){const{value:n,unit:r}=Rs(t)?t:{value:t,unit:void 0},s=Ns(n),o=r&&typeof r=="string"?{unit:r}:{};if(s)return{...s,...o};if(!e||e==="skip-undefined"&&n===void 0)return;let i="";try{i=JSON.stringify(n)??""}catch{}return{value:i,type:"string",...o}}function Fe(t,e=!1){const n={};for(const[r,s]of Object.entries(t??{})){const o=Os(s,e);o&&(n[r]=o)}return n}function Ns(t){if(Array.isArray(t))return{value:t,type:"array"};const e=typeof t=="string"?"string":typeof t=="boolean"?"boolean":typeof t=="number"&&!Number.isNaN(t)?Number.isInteger(t)?"integer":"double":null;if(e)return{value:t,type:e}}function zn(){var t,e;return(e=(t=gt(rt())).externalPropagationContextProvider)==null?void 0:e.call(t)}function N(){const t=rt();return Lt(t).getCurrentScope()}function L(){const t=rt();return Lt(t).getIsolationScope()}function Cs(){return st("globalScope",()=>new O)}function As(...t){const e=rt(),n=Lt(e);if(t.length===2){const[r,s]=t;return r?n.withSetScope(r,s):n.withScope(s)}return n.withScope(t[0])}function S(){return N().getClient()}function Yn(t){const e=zn();if(e)return{trace_id:e.traceId,span_id:e.spanId};const n=t.getPropagationContext(),{traceId:r,parentSpanId:s,propagationSpanId:o}=n,i={trace_id:r,span_id:o||Wn()};return s&&(i.parent_span_id=s),i}const xs="gen_ai.conversation.id",Ds="http.request.header",Kn="sentry.exclusive_time",Ls="sentry.is_localhost",Vn="sentry.op",Ps="sentry.origin",Xn="sentry.profile_id",Ms="sentry.segment.name.source",$s="url.full",Fs="user_agent.original",js="sentry.sample_rate",Bs="sentry.previous_trace_sample_rate",Us=["ok","deadline_exceeded","unauthenticated","permission_denied","not_found","resource_exhausted","invalid_argument","unimplemented","unavailable","internal_error","unknown_error","cancelled","already_exists","failed_precondition","aborted","out_of_range","data_loss"],Hs=0,Ws=1;function qs(t){return t!=="ok"&&Us.includes(t)}function Jn(t){if(t){if(typeof t=="object"&&"deref"in t&&typeof t.deref=="function")try{return t.deref()}catch{return}return t}}const Gs="_sentryScope",zs="_sentryIsolationScope";function Qt(t){const e=t;return{scope:e[Gs],isolationScope:Jn(e[zs])}}const je="sentry-";function Ys(t){const e=Ks(t);if(!e)return;const n=Object.entries(e).reduce((r,[s,o])=>{if(s.startsWith(je)){const i=s.slice(je.length);r[i]=o}return r},{});if(Object.keys(n).length>0)return n}function Ks(t){if(!(!t||!x(t)&&!Array.isArray(t)))return Array.isArray(t)?t.reduce((e,n)=>{const r=Be(n);return Object.entries(r).forEach(([s,o])=>{e[s]=o}),e},{}):Be(t)}function Be(t){return t.split(",").map(e=>{const n=e.indexOf("=");if(n===-1)return[];const r=e.slice(0,n),s=e.slice(n+1);return[r,s].map(o=>{try{return decodeURIComponent(o.trim())}catch{return}})}).reduce((e,[n,r])=>(n&&r&&(e[n]=r),e),{})}const Vs=/^o(\d+)\./,Xs=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)((?:\[[:.%\w]+\]|[\w.-]+))(?::(\d+))?\/(.+)/;function Js(t){return t==="http"||t==="https"}function St(t,e=!1){const{host:n,path:r,pass:s,port:o,projectId:i,protocol:a,publicKey:c}=t;return`${a}://${c}${e&&s?`:${s}`:""}@${n}${o?`:${o}`:""}/${r&&`${r}/`}${i}`}function Qs(t){const e=Xs.exec(t);if(!e){j(()=>{console.error(`Invalid Sentry Dsn: ${t}`)});return}const[n,r,s="",o="",i="",a=""]=e.slice(1);let c="",u=a;const f=u.split("/");if(f.length>1&&(c=f.slice(0,-1).join("/"),u=f.pop()),u){const l=u.match(/^\d+/);l&&(u=l[0])}return Qn({host:o,pass:s,path:c,projectId:u,port:i,protocol:n,publicKey:r})}function Qn(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function Zs(t){if(!m)return!0;const{port:e,projectId:n,protocol:r}=t;return["protocol","publicKey","host","projectId"].find(i=>t[i]?!1:(h.error(`Invalid Sentry Dsn: ${i} missing`),!0))?!1:n.match(/^\d+$/)?Js(r)?e&&isNaN(parseInt(e,10))?(h.error(`Invalid Sentry Dsn: Invalid port ${e}`),!1):!0:(h.error(`Invalid Sentry Dsn: Invalid protocol ${r}`),!1):(h.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),!1)}function to(t){const e=t.match(Vs);return e==null?void 0:e[1]}function eo(t){const e=t.getOptions(),{host:n}=t.getDsn()||{};let r;return e.orgId?r=String(e.orgId):n&&(r=to(n)),r}function no(t){const e=typeof t=="string"?Qs(t):Qn(t);if(!(!e||!Zs(e)))return e}function ro(t){if(typeof t=="boolean")return Number(t);const e=typeof t=="string"?parseFloat(t):t;if(!(typeof e!="number"||isNaN(e)||e<0||e>1))return e}const so="span";function oo(t){return Jn(t.refs[so])}const Zn=1;function io(t){const{spanId:e,traceId:n,isRemote:r}=t.spanContext(),s=r?e:Pt(t).parent_span_id,o=Qt(t).scope,i=r?(o==null?void 0:o.getPropagationContext().propagationSpanId)||Wn():e;return{parent_span_id:s,span_id:i,trace_id:n}}function ao(t){if(t&&t.length>0)return t.map(({context:{spanId:e,traceId:n,traceFlags:r,...s},attributes:o})=>({span_id:e,trace_id:n,sampled:r===Zn,attributes:o,...s}))}function Ue(t){return typeof t=="number"?He(t):Array.isArray(t)?t[0]+t[1]/1e9:t instanceof Date?He(t.getTime()):R()}function He(t){return t>9999999999?t/1e3:t}function Pt(t){if(lo(t))return t.getStaticSpanJSON();const{spanId:e,traceId:n}=t.spanContext();if(fo(t)){const{attributes:r,startTime:s,name:o,endTime:i,status:a,links:c}=t;return{span_id:e,trace_id:n,data:r,description:o,parent_span_id:co(t),start_timestamp:Ue(s),timestamp:Ue(i)||void 0,status:ho(a),op:r[Vn],origin:r[Ps],links:ao(c)}}return{span_id:e,trace_id:n,start_timestamp:0,status:"ok",data:{}}}function co(t){var e;return"parentSpanId"in t?t.parentSpanId:"parentSpanContext"in t?(e=t.parentSpanContext)==null?void 0:e.spanId:void 0}function uo(t){var e;return{...t,end_timestamp:t.end_timestamp??t.start_timestamp,attributes:Fe(t.attributes),links:(e=t.links)==null?void 0:e.map(n=>({...n,attributes:Fe(n.attributes)}))}}function fo(t){const e=t;return!!e.attributes&&!!e.startTime&&!!e.name&&!!e.endTime&&!!e.status}function lo(t){return typeof t.getSpanJSON=="function"}function po(t){const{traceFlags:e}=t.spanContext();return e===Zn}function ho(t){return!t||t.code===Hs||t.code===Ws?"ok":t.message&&qs(t.message)?t.message:"internal_error"}const mo="_sentryRootSpan",tr=go;function go(t){return t[mo]||t}function _o(t){const e=rt(),n=Lt(e);return n.getActiveSpan?n.getActiveSpan(t):oo(t||N())}function We(t){var n;if(typeof __SENTRY_TRACING__=="boolean"&&!__SENTRY_TRACING__)return!1;const e=t||((n=S())==null?void 0:n.getOptions());return!!e&&(e.tracesSampleRate!=null||!!e.tracesSampler)}function qe(t){h.log(`Ignoring span ${t.op} - ${t.description} because it matches \`ignoreSpans\`.`)}function Ge(t,e){if(!(e!=null&&e.length))return!1;for(const n of e){if(So(n)){if(t.description&&dt(t.description,n))return m&&qe(t),!0;continue}const r=!!n.attributes&&Object.keys(n.attributes).length>0;if(!n.name&&!n.op&&!r)continue;const s=n.name?t.description&&dt(t.description,n.name):!0,o=n.op?t.op&&dt(t.op,n.op):!0,i=n.attributes?Object.entries(n.attributes).every(([a,c])=>{var u;return yo((u=t.attributes)==null?void 0:u[a],c)}):!0;if(s&&o&&i)return m&&qe(t),!0}return!1}function yo(t,e){return typeof t=="string"&&(typeof e=="string"||e instanceof RegExp)?dt(t,e):Array.isArray(t)&&Array.isArray(e)?t.length===e.length&&t.every((n,r)=>n===e[r]):t===e}function Eo(t,e){const n=e.parent_span_id,r=e.span_id;if(n)for(const s of t)s.parent_span_id===r&&(s.parent_span_id=n)}function So(t){return typeof t=="string"||t instanceof RegExp}const ze=[];function bo(t){const e={};return t.forEach(n=>{const{name:r}=n,s=e[r];s&&!s.isDefaultInstance&&n.isDefaultInstance||(e[r]=n)}),Object.values(e)}function vo(t){const e=t.defaultIntegrations||[],n=t.integrations;e.forEach(s=>{s.isDefaultInstance=!0});let r;if(Array.isArray(n))r=[...e,...n];else if(typeof n=="function"){const s=n(e);r=Array.isArray(s)?s:[s]}else r=e;return bo(r)}function Io(t,e){const n={};return e.forEach(r=>{r!=null&&r.beforeSetup&&r.beforeSetup(t)}),e.forEach(r=>{r&&er(t,r,n)}),n}function Ye(t,e){for(const n of e)n!=null&&n.afterAllSetup&&n.afterAllSetup(t)}function er(t,e,n){if(n[e.name]){m&&h.log(`Integration skipped because it was already installed: ${e.name}`);return}if(n[e.name]=e,!ze.includes(e.name)&&typeof e.setupOnce=="function"&&(e.setupOnce(),ze.push(e.name)),e.setup&&typeof e.setup=="function"&&e.setup(t),typeof e.preprocessEvent=="function"){const r=e.preprocessEvent.bind(e);t.on("preprocessEvent",(s,o)=>r(s,o,t))}if(typeof e.processEvent=="function"){const r=e.processEvent.bind(e),s=Object.assign((o,i)=>r(o,i,t),{id:e.name});t.addEventProcessor(s)}["processSpan","processSegmentSpan"].forEach(r=>{const s=e[r];typeof s=="function"&&t.on(r,o=>s.call(e,o,t))}),m&&h.log(`Integration installed: ${e.name}`)}const Se="production",To=Symbol.for("sentry.nonRecordingSpan");function ko(t){return!!t&&t[To]===!0}const wo="_frozenDsc";function nr(t,e){const n=e.getOptions(),{publicKey:r}=e.getDsn()||{},s={environment:n.environment||Se,release:n.release,public_key:r,trace_id:t,org_id:eo(e)};return e.emit("createDsc",s),s}function rr(t,e){if(zn())return;const n=e.getPropagationContext();return n.dsc||nr(n.traceId,t)}function Ro(t){var V;const e=S();if(!e)return{};const n=tr(t),r=Pt(n),s=r.data,o=n.spanContext().traceState,i=(o==null?void 0:o.get("sentry.sample_rate"))??s[js]??s[Bs];function a(b){return(typeof i=="number"||typeof i=="string")&&(b.sample_rate=`${i}`),b}const c=n[wo];if(c)return a(c);const u=ko(n),f=u&&n.dropReason==="ignored";if(u&&(!We(e.getOptions())||f)){const b=Qt(n).scope,B=b&&rr(e,b);if(B){const X={...B};return f&&(X.sampled="false"),a(X)}}const l=o==null?void 0:o.get("sentry.dsc"),d=l&&Ys(l);if(d)return a(d);const g=nr(t.spanContext().traceId,e),p=s[Ms],I=r.description;return p!=="url"&&I&&(g.transaction=I),We()&&(g.sampled=String(po(n)),g.sample_rand=(o==null?void 0:o.get("sentry.sample_rand"))??((V=Qt(n).scope)==null?void 0:V.getPropagationContext().sampleRand.toString())),a(g),e.emit("createDsc",g,n),g}function Oo(t,e){const{fingerprint:n,breadcrumbs:r,sdkProcessingMetadata:s}=e;No(t,e),Do(t,n),Co(t,r),Ao(t,s)}function Ke(t,e){const{extra:n,tags:r,attributes:s,user:o,contexts:i,level:a,sdkProcessingMetadata:c,breadcrumbs:u,fingerprint:f,eventProcessors:l,attachments:d,propagationContext:g,transactionName:p}=e;ut(t,"extra",n),ut(t,"tags",r),ut(t,"attributes",s),ut(t,"user",o),ut(t,"contexts",i),t.sdkProcessingMetadata=Et(t.sdkProcessingMetadata,c,2),a&&(t.level=a),p&&(t.transactionName=p),u.length&&(t.breadcrumbs=[...t.breadcrumbs,...u]),f.length&&(t.fingerprint=[...t.fingerprint,...f]),l.length&&(t.eventProcessors=[...t.eventProcessors,...l]),d.length&&(t.attachments=[...t.attachments,...d]),t.propagationContext={...t.propagationContext,...g}}function ut(t,e,n){t[e]=Et(t[e],n,1)}function sr(t,e){const n=Cs().getScopeData();return t&&Ke(n,t.getScopeData()),e&&Ke(n,e.getScopeData()),n}function No(t,e){const{extra:n,tags:r,user:s,contexts:o,level:i,transactionName:a}=e;Object.keys(n).length&&(t.extra={...n,...t.extra}),Object.keys(r).length&&(t.tags={...r,...t.tags}),Object.keys(s).length&&(t.user={...s,...t.user}),Object.keys(o).length&&(t.contexts={...o,...t.contexts}),i&&(t.level=i),a&&t.type!=="transaction"&&(t.transaction=a)}function Co(t,e){const n=[...t.breadcrumbs||[],...e];t.breadcrumbs=n.length?n:void 0}function Ao(t,e){t.sdkProcessingMetadata={...t.sdkProcessingMetadata,...e}}function xo(t,e){t.contexts={trace:io(e),...t.contexts},t.sdkProcessingMetadata={dynamicSamplingContext:Ro(e),...t.sdkProcessingMetadata};const n=tr(e),r=Pt(n).description;r&&!t.transaction&&t.type==="transaction"&&(t.transaction=r)}function Do(t,e){t.fingerprint=t.fingerprint?Array.isArray(t.fingerprint)?t.fingerprint:[t.fingerprint]:[],e&&(t.fingerprint=t.fingerprint.concat(e)),t.fingerprint.length||delete t.fingerprint}function ht(t,e,n){let r;try{r=e()}catch(s){return Ve(t,s,n)}return at(r)?r.then(void 0,s=>Ve(t,s,n)):r}function Ve(t,e,n){return m&&h.error(t,e),n(e)}function or(t){return!!t&&typeof t=="function"&&"_static"in t&&!!t._static}function Xe(t,e){return ht(m?"The `beforeSendSpan` callback threw an error, sending the span unmodified:":"",()=>e(t),()=>t)||t}function Lo(t){const e={trace_id:t.trace_id,span_id:t.span_id,parent_span_id:t.parent_span_id,name:t.description||"",start_timestamp:t.start_timestamp,end_timestamp:t.timestamp,status:!t.status||t.status==="ok"||t.status==="cancelled"?"ok":"error",is_segment:!1,attributes:{...t.data},links:t.links};return uo(e)}function ir(t,e){const n=t.attributes??(t.attributes={});Object.entries(e).forEach(([r,s])=>{s!=null&&!(r in n)&&(n[r]=s)})}function Po(t){return t.getOptions().traceLifecycle==="stream"}function ar(t){return typeof t=="object"&&typeof t.unref=="function"&&t.unref(),t}function ct(t,e=[]){return[t,e]}function Je(t,e){const[n,r]=t;return[n,[...r,e]]}function Zt(t,e){const n=t[1];for(const r of n){const s=r[0].type;if(e(r,s))return!0}return!1}function Mo(t,e){return Zt(t,(n,r)=>e.includes(r))}function te(t){const e=gt(_);return e.encodePolyfill?e.encodePolyfill(t):new TextEncoder().encode(t)}function $o(t){const[e,n]=t;let r=JSON.stringify(e);function s(o){typeof r=="string"?r=typeof o=="string"?r+o:[te(r),o]:r.push(typeof o=="string"?te(o):o)}for(const o of n){const[i,a]=o;if(s(` +${JSON.stringify(i)} +`),typeof a=="string"||a instanceof Uint8Array)s(a);else{let c;try{c=JSON.stringify(a)}catch{c=JSON.stringify(A(a))}s(c)}}return typeof r=="string"?r:Fo(r)}function Fo(t){const e=t.reduce((s,o)=>s+o.length,0),n=new Uint8Array(e);let r=0;for(const s of t)n.set(s,r),r+=s.length;return n}function jo(t){const e=typeof t.data=="string"?te(t.data):t.data;return[{type:"attachment",length:e.length,filename:t.filename,content_type:t.contentType,attachment_type:t.attachmentType},e]}const cr={sessions:"session",event:"error",client_report:"internal",user_report:"default",profile_chunk:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",raw_security:"security",log:"log_item",trace_metric:"metric"};function Bo(t){return t in cr}function Qe(t){return Bo(t)?cr[t]:t}function ur(t){if(!(t!=null&&t.sdk))return;const{name:e,version:n}=t.sdk;return{name:e,version:n}}function Uo(t,e,n,r){var o;const s=(o=t.sdkProcessingMetadata)==null?void 0:o.dynamicSamplingContext;return{event_id:t.event_id,sent_at:new Date(K()).toISOString(),...e&&{sdk:e},...!!n&&r&&{dsn:St(r)},...s&&{trace:s}}}function ee(t){return t==="replay_event"?"replay":t||"error"}function Ho(){return typeof __SENTRY_BROWSER_BUNDLE__<"u"&&!!__SENTRY_BROWSER_BUNDLE__}function Wo(){/*! __SENTRY_SDK_SOURCE__ */return"npm"}function qo(){return!Ho()&&Object.prototype.toString.call(typeof process<"u"?process:0)==="[object process]"}function Mt(){return typeof window<"u"&&(!qo()||Go())}function Go(){const t=_.process;return(t==null?void 0:t.type)==="renderer"}function zo(t,e){const n=e.getDataCollectionOptions().userInfo?"auto":"never";return[{type:"span",item_count:t.length,content_type:"application/vnd.sentry.items.span.v2+json"},{version:2,ingest_settings:Mt()?{infer_ip:n,infer_user_agent:n}:void 0,items:t}]}const Yo=new WeakMap;function Ko(t){return it(t)?void 0:t}function Vo(t,e,n){var a;const r=Ko(e.originalException),s=r&&Yo.get(r);if(!s)return;const o=(a=t.contexts)==null?void 0:a.trace;((o==null?void 0:o.trace_id)??(n&&Yn(n).trace_id))===s.trace_id&&(t.contexts={...t.contexts,trace:{...o,...s}})}function Xo(t,e){var r,s,o,i;if(!e)return t;const n=t.sdk||{};return t.sdk={...n,name:n.name||e.name,version:n.version||e.version,integrations:[...((r=t.sdk)==null?void 0:r.integrations)||[],...e.integrations||[]],packages:[...((s=t.sdk)==null?void 0:s.packages)||[],...e.packages||[]],settings:(o=t.sdk)!=null&&o.settings||e.settings?{...(i=t.sdk)==null?void 0:i.settings,...e.settings}:void 0},t}function Jo(t,e,n,r){const s=ur(n),o={sent_at:new Date(K()).toISOString(),...s&&{sdk:s},...!!r&&e&&{dsn:St(e)}},i="aggregates"in t?[{type:"sessions"},t]:[{type:"session"},t.toJSON()];return ct(o,[i])}function Qo(t,e,n,r){const s=ur(n),o=t.type&&t.type!=="replay_event"?t.type:"event";Xo(t,n==null?void 0:n.sdk);const i=Uo(t,s,r,e);return delete t.sdkProcessingMetadata,ct(i,[[{type:o},t]])}const Wt=0,Ze=1,tn=2;function bt(t){return new mt(e=>{e(t)})}function fr(t){return new mt((e,n)=>{n(t)})}class mt{constructor(e){this._state=Wt,this._handlers=[],this._runExecutor(e)}then(e,n){return new mt((r,s)=>{this._handlers.push([!1,o=>{if(!e)r(o);else try{r(e(o))}catch(i){s(i)}},o=>{if(!n)s(o);else try{r(n(o))}catch(i){s(i)}}]),this._executeHandlers()})}catch(e){return this.then(n=>n,e)}finally(e){return new mt((n,r)=>{let s,o;return this.then(i=>{o=!1,s=i,e&&e()},i=>{o=!0,s=i,e&&e()}).then(()=>{if(o){r(s);return}n(s)})})}_executeHandlers(){if(this._state===Wt)return;const e=this._handlers.slice();this._handlers=[],e.forEach(n=>{n[0]||(this._state===Ze&&n[1](this._value),this._state===tn&&n[2](this._value),n[0]=!0)})}_runExecutor(e){const n=(o,i)=>{if(this._state===Wt){if(at(i)){i.then(r,s);return}this._state=o,this._value=i,this._executeHandlers()}},r=o=>{n(Ze,o)},s=o=>{n(tn,o)};try{e(r,s)}catch(o){s(o)}}}function Zo(t,e,n,r=0,s){try{const o=ne(e,n,t,r,s);return at(o)?o:bt(o)}catch(o){return fr(o)}}function ne(t,e,n,r,s){const o=n[r];if(!t||!o)return t;const i=`Event processor "${o.id||"?"}"`;let a=!1;const c=ht(m?`${i} threw an error, dropping event:`:"",()=>o({...t},e),()=>(a=!0,null));return m&&c===null&&h.log(`${i} dropped event`),at(c)?c.then(u=>u?ne(u,e,n,r+1,s):(s==null||s(a?"callback_error":"event_processor"),null)):c?ne(c,e,n,r+1,s):(s==null||s(a?"callback_error":"event_processor"),null)}let C,en,nn,P;function ti(t){const e=_._sentryDebugIds,n=_._debugIds;if(!e&&!n)return{};const r=e?Object.keys(e):[],s=n?Object.keys(n):[];if(P&&r.length===en&&s.length===nn)return P;en=r.length,nn=s.length,P={},C||(C={});const o=(i,a)=>{for(const c of i){const u=a[c],f=C==null?void 0:C[c];if(f&&P&&u)P[f[0]]=u,C&&(C[c]=[f[0],u]);else if(u){const l=t(c);for(let d=l.length-1;d>=0;d--){const g=l[d],p=g==null?void 0:g.filename;if(p&&P&&C){P[p]=u,C[c]=[p,u];break}}}}};return e&&o(r,e),n&&o(s,n),P}function re(t){var e;return((e=t.data)==null?void 0:e.__sentry__)===!0}function lr(t){const e=[];t.message&&e.push(t.message);try{const n=t.exception.values[t.exception.values.length-1];n!=null&&n.value&&(e.push(n.value),n.type&&e.push(`${n.type}: ${n.value}`))}catch{}return e}function ei(t,e,n,r,s,o){const{normalizeDepth:i=3,normalizeMaxBreadth:a=1e3}=t,c={...e,event_id:e.event_id||n.event_id||k(),timestamp:e.timestamp||yt()},u=n.integrations||t.integrations.map(b=>b.name);ni(c,t),oi(c,u),s&&s.emit("applyFrameMetadata",e),e.type===void 0&&ri(c,t.stackParser);const f=ai(r,n.captureContext);n.mechanism&&us(c,n.mechanism);const l=s?s.getEventProcessors():[],d=sr(o,f),g=[...n.attachments||[],...d.attachments];g.length&&(n.attachments=g),Oo(c,d);const p=_o(f);p&&xo(c,p),Vo(c,n,f);const I=[...l,...d.eventProcessors];return(re(n)?bt(c):Zo(I,c,n,0,b=>{s&&(s.recordDroppedEvent(b,ee(e.type)),e.type==="transaction"&&s.recordDroppedEvent(b,"span",1+(e.spans||[]).length))})).then(b=>b?(si(b),typeof i=="number"&&i>0?ii(b,i,a):b):null)}function ni(t,e){var a,c;const{environment:n,release:r,dist:s,maxValueLength:o}=e;t.environment=t.environment||n||Se,!t.release&&r&&(t.release=r),!t.dist&&s&&(t.dist=s);const i=t.request;i!=null&&i.url&&o&&(i.url=Xt(i.url,o)),o&&((c=(a=t.exception)==null?void 0:a.values)==null||c.forEach(u=>{u.value&&(u.value=Xt(u.value,o))}))}function ri(t,e){var r,s;const n=ti(e);(s=(r=t.exception)==null?void 0:r.values)==null||s.forEach(o=>{var i,a;(a=(i=o.stacktrace)==null?void 0:i.frames)==null||a.forEach(c=>{c.filename&&(c.debug_id=n[c.filename])})})}function si(t){var r,s;const e={};if((s=(r=t.exception)==null?void 0:r.values)==null||s.forEach(o=>{var i,a;(a=(i=o.stacktrace)==null?void 0:i.frames)==null||a.forEach(c=>{c.debug_id&&(c.abs_path?e[c.abs_path]=c.debug_id:c.filename&&(e[c.filename]=c.debug_id),delete c.debug_id)})}),Object.keys(e).length===0)return;t.debug_meta=t.debug_meta||{},t.debug_meta.images=t.debug_meta.images||[];const n=t.debug_meta.images;Object.entries(e).forEach(([o,i])=>{n.push({type:"sourcemap",code_file:o,debug_id:i})})}function oi(t,e){e.length>0&&(t.sdk=t.sdk||{},t.sdk.integrations=[...t.sdk.integrations||[],...e])}function ii(t,e,n){var s,o;if(!t)return null;const r={...t,...t.breadcrumbs&&{breadcrumbs:t.breadcrumbs.map(i=>({...i,...i.data&&{data:A(i.data,e,n)}}))},...t.user&&{user:A(t.user,e,n)},...t.contexts&&{contexts:A(t.contexts,e,n)},...t.extra&&{extra:A(t.extra,e,n)}};return(s=t.contexts)!=null&&s.trace&&r.contexts&&(r.contexts.trace=t.contexts.trace,t.contexts.trace.data&&(r.contexts.trace.data=A(t.contexts.trace.data,e,n))),t.spans&&(r.spans=t.spans.map(i=>({...i,...i.data&&{data:A(i.data,e,n)}}))),(o=t.contexts)!=null&&o.flags&&r.contexts&&(r.contexts.flags=A(t.contexts.flags,3,n)),r}function ai(t,e){if(!e)return t;const n=t?t.clone():new O;return n.update(e),n}function ci(t){if(t)return ui(t)?{captureContext:t}:li(t)?{captureContext:t}:t}function ui(t){return t instanceof O||typeof t=="function"}const fi=["user","level","extra","contexts","tags","fingerprint","propagationContext"];function li(t){return Object.keys(t).some(e=>fi.includes(e))}function di(t,e){return N().captureException(t,ci(e))}function dr(t,e){return N().captureEvent(t,e)}function Du(t,e){L().setTag(t,e)}function Lu(t){L().setUser(t)}function rn(t){const e=L(),{user:n}=sr(e,N()),{userAgent:r}=_.navigator||{},s=hs({user:n,...r&&{userAgent:r},...t}),o=e.getSession();return(o==null?void 0:o.status)==="ok"&&tt(o,{status:"exited"}),pr(),e.setSession(s),s}function pr(){const t=L(),n=N().getSession()||t.getSession();n&&ms(n),hr(),t.setSession()}function hr(){const t=L(),e=S(),n=t.getSession();n&&e&&e.captureSession(n)}function qt(t=!1){if(t){pr();return}hr()}const pi="7";function hi(t){const e=t.protocol?`${t.protocol}:`:"",n=t.port?`:${t.port}`:"";return`${e}//${t.host}${n}${t.path?`/${t.path}`:""}/api/`}function mi(t){return`${hi(t)}${t.projectId}/envelope/`}function gi(t,e){const n={sentry_version:pi};return t.publicKey&&(n.sentry_key=t.publicKey),e&&(n.sentry_client=`${e.name}/${e.version}`),new URLSearchParams(n).toString()}function _i(t,e,n){return e||`${mi(t)}?${gi(t,n)}`}function yi(t,e){const n=e?"auto":"never";return[{type:"log",item_count:t.length,content_type:"application/vnd.sentry.items.log+json"},{version:2,...Mt()&&{ingest_settings:{infer_ip:n,infer_user_agent:n}},items:t}]}function Ei(t,e,n,r,s){const o={};return e!=null&&e.sdk&&(o.sdk={name:e.sdk.name,version:e.sdk.version}),n&&r&&(o.dsn=St(r)),ct(o,[yi(t,s)])}function Si(t,e){const n=e??bi(t)??[];if(n.length===0)return;const r=t.getOptions(),s=Ei(n,r._metadata,r.tunnel,t.getDsn(),t.getDataCollectionOptions().userInfo);mr().set(t,[]),t.emit("flushLogs"),t.sendEnvelope(s)}function bi(t){return mr().get(t)}function mr(){return st("clientToLogBufferMap",()=>new WeakMap)}function vi(t,e){const n=e?"auto":"never";return[{type:"trace_metric",item_count:t.length,content_type:"application/vnd.sentry.items.trace-metric+json"},{version:2,...Mt()&&{ingest_settings:{infer_ip:n,infer_user_agent:n}},items:t}]}function Ii(t,e,n,r,s){const o={};return e!=null&&e.sdk&&(o.sdk={name:e.sdk.name,version:e.sdk.version}),n&&r&&(o.dsn=St(r)),ct(o,[vi(t,s)])}function Ti(t,e){const n=e??ki(t)??[];if(n.length===0)return;const r=t.getOptions(),s=Ii(n,r._metadata,r.tunnel,t.getDsn(),t.getDataCollectionOptions().userInfo);gr().set(t,[]),t.emit("flushMetrics"),t.sendEnvelope(s)}function ki(t){return gr().get(t)}function gr(){return st("clientToMetricBufferMap",()=>new WeakMap)}function wi(t,e){var s,o,i;if(t.type!=="transaction"||!((s=t.spans)!=null&&s.length)||!((o=t.sdkProcessingMetadata)!=null&&o.hasGenAiSpans)||Po(e))return;const n=[],r=[];for(const a of t.spans)(i=a.op)!=null&&i.startsWith("gen_ai.")?n.push(Lo(a)):r.push(a);if(n.length!==0)return t.spans=r,zo(n,e)}const be=Symbol.for("SentryBufferFullError");function ve(t=100){const e=new Set;function n(){return e.sizer(a),()=>r(a)),a}function o(i){if(!e.size)return bt(!0);const a=Promise.allSettled(Array.from(e)).then(()=>!0);if(!i)return a;const c=[a,new Promise(u=>ar(setTimeout(()=>u(!1),i)))];return Promise.race(c)}return{get $(){return Array.from(e)},add:s,drain:o}}const Ri=60*1e3;function Oi(t,e=K()){const n=parseInt(`${t}`,10);if(!isNaN(n))return n*1e3;const r=Date.parse(`${t}`);return isNaN(r)?Ri:r-e}function Ni(t,e){return t[e]||t.all||0}function Ci(t,e,n=K()){return Ni(t,e)>n}function Ai(t,{statusCode:e,headers:n},r=K()){const s={...t},o=n==null?void 0:n["x-sentry-rate-limits"],i=n==null?void 0:n["retry-after"];if(o)for(const a of o.trim().split(",")){const[c,u,,,f]=a.split(":",5),l=parseInt(c,10),d=(isNaN(l)?60:l)*1e3;if(!u)s.all=r+d;else for(const g of u.split(";"))g==="metric_bucket"?(!f||f.split(";").includes("custom"))&&(s[g]=r+d):s[g]=r+d}else i?s.all=r+Oi(i,r):e===429&&(s.all=r+60*1e3);return s}const _r=64;function xi(t,e,n=ve(t.bufferSize||_r)){let r={};const s=i=>n.drain(i);function o(i){const a=[];if(Zt(i,(l,d)=>{const g=Qe(d);Ci(r,g)?t.recordDroppedEvent("ratelimit_backoff",g):a.push(l)}),a.length===0)return Promise.resolve({});const c=ct(i[0],a),u=l=>{if(Mo(c,["client_report"])){m&&h.warn(`Dropping client report. Will not send outcomes (reason: ${l}).`);return}Zt(c,(d,g)=>{t.recordDroppedEvent(l,Qe(g))})},f=()=>e({body:$o(c)}).then(l=>l.statusCode===413?(m&&h.error("Sentry responded with status code 413. Envelope was discarded due to exceeding size limits."),u("send_error"),l):(m&&l.statusCode!==void 0&&(l.statusCode<200||l.statusCode>=300)&&h.warn(`Sentry responded with status code ${l.statusCode} to sent event.`),r=Ai(r,l),l),l=>{throw u("network_error"),m&&h.error("Encountered error running transport request:",l),l});return n.add(f).then(l=>l,l=>{if(l===be)return m&&h.error("Skipped sending event because buffer is full."),u("queue_overflow"),Promise.resolve({});throw l})}return{send:o,flush:s}}function Di(t,e,n){const r=[{type:"client_report"},{timestamp:yt(),discarded_events:t}];return ct(e?{dsn:e}:{},[r])}function Li(t){var c;const{trace_id:e,parent_span_id:n,span_id:r,status:s,origin:o,data:i,op:a}=((c=t.contexts)==null?void 0:c.trace)??{};return{data:i??{},description:t.transaction,op:a,parent_span_id:n,span_id:r??"",start_timestamp:t.start_timestamp??0,status:s??"ok",timestamp:t.timestamp,trace_id:e??"",origin:o,profile_id:i==null?void 0:i[Xn],exclusive_time:i==null?void 0:i[Kn],measurements:t.measurements,is_segment:!0}}function Pi(t){return{type:"transaction",timestamp:t.timestamp,start_timestamp:t.start_timestamp,transaction:t.description,contexts:{trace:{trace_id:t.trace_id,span_id:t.span_id,parent_span_id:t.parent_span_id,op:t.op,status:t.status,origin:t.origin,data:{...t.data,...t.profile_id&&{[Xn]:t.profile_id},...t.exclusive_time&&{[Kn]:t.exclusive_time}}}},measurements:t.measurements}}function Mi(t){var e;t.traceLifecycle!=="stream"||!(t.beforeSendTransaction||(e=t.ignoreTransactions)!=null&&e.length)||j(()=>{console.warn("[Sentry] `beforeSendTransaction` and `ignoreTransactions` are ignored with `traceLifecycle: 'stream'` (enabled by default). Use `beforeSendSpan` and `ignoreSpans` instead, or set `traceLifecycle: 'static'`.")})}const v={userInfo:!0,cookies:!0,httpHeaders:{request:!0,response:!0},httpBodies:["incomingRequest","outgoingRequest","incomingResponse","outgoingResponse"],urlQueryParams:!0,graphQL:{document:!0,variables:!0},genAI:{inputs:!0,outputs:!0},databaseQueryData:!0,queues:!0,stackFrameVariables:!0,frameContextLines:5};function $i(t){return typeof t=="boolean"||"allow"in t||"deny"in t}function Fi(t){return t===void 0?{...v.httpHeaders}:$i(t)?{request:t,response:t}:{request:t.request??v.httpHeaders.request,response:t.response??v.httpHeaders.response}}function ji(t){var n,r,s,o;const e=t.dataCollection??{};return{userInfo:e.userInfo??v.userInfo,cookies:e.cookies??v.cookies,httpHeaders:Fi(e.httpHeaders),httpBodies:e.httpBodies??v.httpBodies,urlQueryParams:e.urlQueryParams??v.urlQueryParams,graphQL:{document:((n=e.graphQL)==null?void 0:n.document)??v.graphQL.document,variables:((r=e.graphQL)==null?void 0:r.variables)??v.graphQL.variables},genAI:{inputs:((s=e.genAI)==null?void 0:s.inputs)??v.genAI.inputs,outputs:((o=e.genAI)==null?void 0:o.outputs)??v.genAI.outputs},databaseQueryData:e.databaseQueryData??v.databaseQueryData,queues:e.queues??v.queues,stackFrameVariables:e.stackFrameVariables??v.stackFrameVariables,frameContextLines:e.frameContextLines??v.frameContextLines}}const sn="Not capturing exception because it's already been captured.",on="Discarded session because of missing or non-string release",yr=Symbol.for("SentryInternalError"),Er=Symbol.for("SentryDoNotSendEventError"),Bi=5e3,Sr=Symbol.for("SentryClosedClient");function Ui(t){return Sr in t}function kt(t){return{message:t,[yr]:!0}}function Gt(t){return{message:t,[Er]:!0}}function an(t){return xt(t)&&yr in t}function cn(t){return xt(t)&&Er in t}function un(t,e,n,r,s){let o=0,i,a=!1;t.on(n,()=>{o=0,clearTimeout(i),a=!1}),t.on(e,c=>{if(o+=r(c),o>=8e5)s(t);else if(!a){const u=t.getOptions()._flushInterval??Bi;u>0&&(a=!0,i=ar(setTimeout(()=>{s(t)},u)))}}),t.on("flush",()=>{s(t)})}class Hi{constructor(e){var s;this._options={attachStacktrace:!0,...e,traceLifecycle:e.traceLifecycle==="static"?"static":"stream"},this._integrations={},this._numProcessing=0,this._outcomes={},this._hooks={},this._eventProcessors=[],this._promiseBuffer=ve(((s=e.transportOptions)==null?void 0:s.bufferSize)??_r),this._dataCollection=ji(e),this._unhandledSessionStatus="crashed",e.dsn?this._dsn=no(e.dsn):m&&h.warn("No DSN provided, client will not send events.");const{beforeSendSpan:n,traceLifecycle:r}=this._options;if(m&&n&&or(n)!==(r==="static")&&j(()=>{console.warn(`Ignoring \`beforeSendSpan\`: ${r==="static"?"wrap it with":"remove"} \`Sentry.withStaticSpan\` to use it with \`traceLifecycle: "${r}"\`.`)}),this._dsn){const o=_i(this._dsn,e.tunnel,e._metadata?e._metadata.sdk:void 0);this._transport=e.transport({tunnel:this._options.tunnel,recordDroppedEvent:this.recordDroppedEvent.bind(this),...e.transportOptions,url:o})}un(this,"afterCaptureLog","flushLogs",zi,Si),un(this,"afterCaptureMetric","flushMetrics",Gi,Ti)}captureException(e,n,r){const s=k();if(De(e))return m&&h.log(sn),s;const o={event_id:s,...n};return this._process(()=>this.eventFromException(e,o).then(i=>this._captureEvent(i,o,r)).then(i=>i),"error"),o.event_id}captureMessage(e,n,r,s){const o={event_id:k(),...r},i=ge(e)?e:String(e),a=it(e),c=a?this.eventFromMessage(i,n,o):this.eventFromException(e,o);return this._process(()=>c.then(u=>this._captureEvent(u,o,s)),a?"unknown":"error"),o.event_id}captureEvent(e,n,r){const s=k();if(n!=null&&n.originalException&&De(n.originalException))return m&&h.log(sn),s;const o={event_id:s,...n},i=e.sdkProcessingMetadata||{},a=i.capturedSpanScope,c=i.capturedSpanIsolationScope,u=ee(e.type);return this._process(()=>this._captureEvent(e,o,a||r,c),u),o.event_id}captureSession(e){this.sendSession(e),tt(e,{init:!1})}getDsn(){return this._dsn}getOptions(){return this._options}getDataCollectionOptions(){return this._dataCollection}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}async flush(e){const n=this._transport;if(this.emit("flush"),!n)return!0;const r=await this._isClientDoneProcessing(e),s=await n.flush(e);return r&&s}async close(e){Object.defineProperty(this,Sr,{value:!0});const n=await this.flush(e);return this.getOptions().enabled=!1,this.emit("close"),n}getEventProcessors(){return this._eventProcessors}addEventProcessor(e){this._eventProcessors.push(e)}init(){(this._isEnabled()||this._options.integrations.some(({name:e})=>e.startsWith("Spotlight")))&&(this._setupIntegrations(),Mi(this._options))}getIntegrationByName(e){return this._integrations[e]}getIntegrationNames(){return Object.keys(this._integrations)}addIntegration(e){const n=this._integrations[e.name];!n&&e.beforeSetup&&e.beforeSetup(this),er(this,e,this._integrations),n||Ye(this,[e])}sendEvent(e,n={}){this.emit("beforeSendEvent",e,n);const r=wi(e,this);let s=Qo(e,this._dsn,this._options._metadata,this._options.tunnel);if(!re(n))for(const o of n.attachments||[])s=Je(s,jo(o));r&&(s=Je(s,r)),this.sendEnvelope(s).then(o=>this.emit("afterSendEvent",e,o))}sendSession(e){const{release:n,environment:r=Se}=this._options;if("aggregates"in e){const o=e.attrs||{};if(!o.release&&!n){m&&h.warn(on);return}o.release=o.release||n,o.environment=o.environment||r,e.attrs=o}else{if(!e.release&&!n){m&&h.warn(on);return}e.release=e.release||n,e.environment=e.environment||r}this.emit("beforeSendSession",e);const s=Jo(e,this._dsn,this._options._metadata,this._options.tunnel);this.sendEnvelope(s)}recordDroppedEvent(e,n,r=1){if(this._options.sendClientReports){const s=`${e}:${n}`;m&&h.log(`Recording outcome: "${s}"${r>1?` (${r} times)`:""}`),this._outcomes[s]=(this._outcomes[s]||0)+r}}on(e,n){const r=this._hooks[e]=this._hooks[e]||new Set,s=(...o)=>n(...o);return r.add(s),()=>{r.delete(s)}}emit(e,...n){const r=this._hooks[e];r&&r.forEach(s=>s(...n))}async sendEnvelope(e){if(this.emit("beforeEnvelope",e),this._isEnabled()&&this._transport)try{const n=await this._transport.send(e);return this.emit("afterEnvelope",e),n}catch(n){return m&&h.error("Error while sending envelope:",n),{}}return m&&h.error("Transport disabled"),{}}registerCleanup(e){}dispose(){}_setupIntegrations(){const{integrations:e}=this._options;this._integrations=Io(this,e),Ye(this,e)}_updateSessionFromEvent(e,n){var c,u;let r=n.level==="fatal",s=!1;const o=(c=n.exception)==null?void 0:c.values;if(o){s=!0,r=!1;for(const f of o)if(((u=f.mechanism)==null?void 0:u.handled)===!1){r=!0;break}}const i=e.status==="ok";(i&&e.errors===0||i&&r)&&(tt(e,{...r&&{status:this._unhandledSessionStatus},errors:e.errors||Number(s||r)}),this.captureSession(e))}async _isClientDoneProcessing(e){let n=0;for(;!e||nsetTimeout(r,1)),!this._numProcessing)return!0;n++}return!1}_isEnabled(){return this.getOptions().enabled!==!1&&this._transport!==void 0}_prepareEvent(e,n,r,s){const o=this.getOptions(),i=this.getIntegrationNames();return!n.integrations&&i.length&&(n.integrations=i),this.emit("preprocessEvent",e,n),e.type||s.setLastEventId(e.event_id||n.event_id),ei(o,e,n,r,this,s).then(a=>{var u;if(a===null)return a;this.emit("postprocessEvent",a,n),a.contexts={trace:{...(u=a.contexts)==null?void 0:u.trace,...Yn(r)},...a.contexts};const c=rr(this,r);return a.sdkProcessingMetadata={dynamicSamplingContext:c,...a.sdkProcessingMetadata},a})}_captureEvent(e,n={},r=N(),s=L()){return m&&se(e)&&h.log(`Captured error event \`${lr(e)[0]||""}\``),this._processEvent(e,n,r,s).then(o=>o.event_id,o=>{m&&(cn(o)?h.log(o.message):an(o)?h.warn(o.message):h.warn(o))})}_processEvent(e,n,r,s){const o=this.getOptions(),{sampleRate:i}=o,a=br(e),c=se(e),f=`before send for type \`${e.type||"error"}\``;let l="before_send";const d=typeof i>"u"?void 0:ro(i),g=ee(e.type);return this._prepareEvent(e,n,r,s).then(p=>{if(p===null)throw Gt("An event processor returned `null`, will not send event.");if(re(n))return p;const I=qi(this,o,p,n,()=>{l="callback_error"});return Wi(I,f)}).then(p=>{var b;if(p===null){if(this.recordDroppedEvent(l,g),a){const X=e.spans||[];this.recordDroppedEvent(l,"span",1+X.length)}throw Gt(`${f} ${l==="callback_error"?"threw an error":"returned `null`"}, will not send event.`)}const I=r.getSession()||s.getSession();if(c&&I&&this._updateSessionFromEvent(I,p),c&&typeof d=="number"&&Ee()>d)throw this.recordDroppedEvent("sample_rate","error"),Gt(`Discarding event because it's not included in the random sample (sampling rate = ${i})`);if(a){const B=((b=p.sdkProcessingMetadata)==null?void 0:b.spanCountBeforeProcessing)||0,X=p.spans?p.spans.length:0,we=B-X;we>0&&this.recordDroppedEvent("before_send","span",we)}const V=p.transaction_info;if(a&&V&&p.transaction!==e.transaction){const B="custom";p.transaction_info={...V,source:B}}return this.sendEvent(p,n),p}).then(null,p=>{throw cn(p)||an(p)?p:(this.captureException(p,{mechanism:{handled:!1,type:"internal"},data:{__sentry__:!0},originalException:p}),kt(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. +Reason: ${p}`))})}_process(e,n){this._numProcessing++,this._promiseBuffer.add(e).then(r=>(this._numProcessing--,r),r=>(this._numProcessing--,r===be&&this.recordDroppedEvent("queue_overflow",n),r))}_clearOutcomes(){const e=this._outcomes;return this._outcomes={},Object.entries(e).map(([n,r])=>{const[s,o]=n.split(":");return{reason:s,category:o,quantity:r}})}_flushOutcomes(){m&&h.log("Flushing outcomes...");const e=this._clearOutcomes();if(e.length===0){m&&h.log("No outcomes to send");return}if(!this._dsn){m&&h.log("No dsn provided, will not send outcomes");return}m&&h.log("Sending outcomes:",e);const n=Di(e,this._options.tunnel&&St(this._dsn));this.sendEnvelope(n)}}function Wi(t,e){const n=`${e} must return \`null\` or a valid event.`;if(at(t))return t.then(r=>{if(!Nt(r)&&r!==null)throw kt(n);return r},r=>{throw kt(`${e} rejected with ${r}`)});if(!Nt(t)&&t!==null)throw kt(n);return t}function qi(t,e,n,r,s){const{beforeSend:o,ignoreSpans:i,beforeSendTransaction:a}=e,c=or(e.beforeSendSpan)&&e.beforeSendSpan;let u=n;if(se(u)&&o){const f=u;return ht(m?"The `beforeSend` callback threw an error, dropping the event:":"",()=>o(f,r),()=>(s(),null))}if(br(u)){if(c||i){const f=Li(u);if(i!=null&&i.length&&Ge({description:f.description,op:f.op,attributes:f.data},i))return null;if(c){const l=Xe(f,c);u=Et(n,Pi(l))}if(u.spans){const l=[],d=u.spans;for(const p of d){if(i!=null&&i.length&&Ge({description:p.description,op:p.op,attributes:p.data},i)){Eo(d,p);continue}c?l.push(Xe(p,c)):l.push(p)}const g=u.spans.length-l.length;g&&t.recordDroppedEvent("before_send","span",g),u.spans=l}}if(a){if(u.spans){const f=u.spans.length;u.sdkProcessingMetadata={...n.sdkProcessingMetadata,spanCountBeforeProcessing:f}}return ht(m?"The `beforeSendTransaction` callback threw an error, dropping the event:":"",()=>a(u,r),()=>(s(),null))}}return u}function se(t){return t.type===void 0}function br(t){return t.type==="transaction"}function Gi(t){let e=0;return t.name&&(e+=t.name.length*2),e+=8,e+vr(t.attributes)}function zi(t){let e=0;return t.message&&(e+=t.message.length*2),e+vr(t.attributes)}function vr(t){if(!t)return 0;let e=0;return Object.values(t).forEach(n=>{Array.isArray(n)?e+=n.length*fn(n[0]):it(n)?e+=fn(n):e+=100}),e}function fn(t){return typeof t=="string"?t.length*2:typeof t=="number"?8:typeof t=="boolean"?4:0}function Yi(t,e){e.debug===!0&&(m?h.enable():j(()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),Vi(),N().update(e.initialScope);const r=new t(e);return Xi(r),r.init(),r}function Ki(){const t=S();return t&&!Ui(t)?t:void 0}function Vi(){Ki()&&j(()=>{console.warn("[Sentry] `Sentry.init()` was called more than once. The new client replaces the active client, but the active client is not closed, so state from both can mix. Call `Sentry.init()` only once, or call `await Sentry.close()` before you call it again.")})}function Xi(t){N().setClient(t)}const Ir="[Filtered]",Ji=["auth","token","secret","session","password","passwd","pwd","key","jwt","bearer","sso","saml","csrf","xsrf","credentials","sid","identity","set-cookie","cookie"];function Qi(t,e){return e.some(n=>t.includes(n))}function Tr(t,e,n){if(e===!1)return!0;const r=t.toLowerCase();if(Qi(r,Ji))return!0;if(e===!0)return!1;const i=("deny"in e?e.deny:e.allow).some(a=>r.includes(a.toLowerCase()));return"deny"in e?i:!i}function ln(t,e,n){if(e===!1)return{};const r={};for(const s of Object.keys(t))r[s]=Tr(s,e)?Ir:t[s];return r}function Zi(t,e){if(!(!t||e===!1))return t.split("&").map(n=>{const r=n.indexOf("="),s=r===-1?n:n.slice(0,r),o=new URLSearchParams(`${s}=`).keys().next().value;return o!==void 0&&Tr(o,e)?`${s}=${Ir}`:n}).join("&")}function ta(t,e){const n=t.indexOf("#"),r=n===-1?t.length:n,s=t.indexOf("?");if(s===-1||s>r)return t;const o=t.slice(0,s),i=t.slice(s+1,r),a=t.slice(r),c=Zi(i,e);return c?`${o}?${c}${a}`:`${o}${a}`}function ea(t){var e;return((e=t??S())==null?void 0:e.getDataCollectionOptions().urlQueryParams)??!0}function na(t,e){return t===void 0?void 0:ta(t,ea(e))}function zt(t){if(!t)return{};const e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};const n=e[6]||"",r=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],search:n,hash:r,relative:e[5]+n+r}}function ra(t,e=!0){if(t.startsWith("data:")){const n=t.match(/^data:([^;,]+)/),r=n?n[1]:"text/plain",s=t.includes(";base64,"),o=t.indexOf(",");let i="";if(e&&o!==-1){const a=t.slice(o+1);i=a.length>10?`${a.slice(0,10)}... [truncated]`:a}return`data:${r}${s?",base64":""}${i?`,${i}`:""}`}return t}function sa(t){var e;"aggregates"in t?((e=t.attrs)==null?void 0:e.ip_address)===void 0&&(t.attrs={...t.attrs,ip_address:"{{auto}}"}):t.ipAddress===void 0&&(t.ipAddress="{{auto}}")}function oa(t,e,n=[e],r="npm"){const s=(t._metadata=t._metadata||{}).sdk=t._metadata.sdk||{};s.name||(s.name=`sentry.javascript.${e}`,s.packages=n.map(o=>({name:`${r}:@sentry/${o}`,version:W})),s.version=W)}const ia=100;function G(t,e){const n=S(),r=L();if(!n)return;const{beforeBreadcrumb:s=null,maxBreadcrumbs:o=ia}=n.getOptions();if(o<=0)return;const a={timestamp:yt(),...t},c=s?ht(m?"The `beforeBreadcrumb` callback threw an error, dropping the breadcrumb:":"",()=>j(()=>s(a,e)),()=>null):a;c!==null&&(n.emit&&n.emit("beforeAddBreadcrumb",c,e),r.addBreadcrumb(c,o))}const aa="FunctionToString",dn=new WeakMap,ca=()=>({name:aa,setupOnce(){const t=Function.prototype.toString;try{Function.prototype.toString=function(...e){const n=ye(this);let r;try{dn.has(S())&&n!==void 0&&(r=n)}catch{}return t.apply(r??this,e)}}catch{}},setup(t){dn.set(t,!0)}}),ua=ca,fa=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/,/^ResizeObserver loop completed with undelivered notifications.$/,/^Cannot redefine property: googletag$/,/^Can't find variable: gmo$/,/^undefined is not an object \(evaluating 'a\.[A-Z]'\)$/,/can't redefine non-configurable property "solana"/,/vv\(\)\.getRestrictions is not a function/,/Can't find variable: _AutofillCallbackHandler/,/Object Not Found Matching Id:\d+, MethodName:simulateEvent/,/Java exception was raised during method invocation$/,/Java object is gone$/],la="EventFilters",da=(t={})=>{let e;return{name:la,setup(n){const r=n.getOptions();e=pn(t,r)},processEvent(n,r,s){if(!e){const o=s.getOptions();e=pn(t,o)}return pa(n,e)?null:n}}};function pn(t={},e={}){return{allowUrls:[...t.allowUrls||[],...e.allowUrls||[]],denyUrls:[...t.denyUrls||[],...e.denyUrls||[]],ignoreErrors:[...t.ignoreErrors||[],...e.ignoreErrors||[],...t.disableErrorDefaults?[]:fa],ignoreTransactions:[...t.ignoreTransactions||[],...e.ignoreTransactions||[]]}}function pa(t,e){if(t.type){if(t.type==="transaction"&&ma(t,e.ignoreTransactions))return m&&h.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. +Event: ${H(t)}`),!0}else{if(ha(t,e.ignoreErrors))return m&&h.warn(`Event dropped due to being matched by \`ignoreErrors\` option. +Event: ${H(t)}`),!0;if(Ea(t))return m&&h.warn(`Event dropped due to not having an error message, error type or stacktrace. +Event: ${H(t)}`),!0;if(ga(t,e.denyUrls))return m&&h.warn(`Event dropped due to being matched by \`denyUrls\` option. +Event: ${H(t)}. +Url: ${Ct(t)}`),!0;if(!_a(t,e.allowUrls))return m&&h.warn(`Event dropped due to not being matched by \`allowUrls\` option. +Event: ${H(t)}. +Url: ${Ct(t)}`),!0}return!1}function ha(t,e){return e!=null&&e.length?lr(t).some(n=>_t(n,e)):!1}function ma(t,e){if(!(e!=null&&e.length))return!1;const n=t.transaction;return n?_t(n,e):!1}function ga(t,e){if(!(e!=null&&e.length))return!1;const n=Ct(t);return n?_t(n,e):!1}function _a(t,e){if(!(e!=null&&e.length))return!0;const n=Ct(t);return n?_t(n,e):!0}function ya(t=[]){for(let e=t.length-1;e>=0;e--){const n=t[e];if(n&&n.filename!==""&&n.filename!=="[native code]")return n.filename||null}return null}function Ct(t){var e,n;try{const r=[...((e=t.exception)==null?void 0:e.values)??[]].reverse().find(o=>{var i,a,c;return((i=o.mechanism)==null?void 0:i.parent_id)===void 0&&((c=(a=o.stacktrace)==null?void 0:a.frames)==null?void 0:c.length)}),s=(n=r==null?void 0:r.stacktrace)==null?void 0:n.frames;return s?ya(s):null}catch{return m&&h.error(`Cannot extract url for event ${H(t)}`),null}}function Ea(t){var e,n;return(n=(e=t.exception)==null?void 0:e.values)!=null&&n.length?!t.message&&!t.exception.values.some(r=>r.stacktrace||r.type&&r.type!=="Error"||r.value):!1}function Sa(t,e,n,r,s,o){var a;if(!((a=s.exception)!=null&&a.values)||!o||!D(o.originalException))return;const i=s.exception.values.length>0?s.exception.values[s.exception.values.length-1]:void 0;i&&(s.exception.values=oe(t,e,r,o.originalException,n,s.exception.values,i,0))}function oe(t,e,n,r,s,o,i,a){if(o.length>=n+1)return o;let c=[...o];if(D(r[s])){hn(i,a,r);const u=t(e,r[s]),f=c.length;mn(u,s,f,a),c=oe(t,e,n,r[s],s,[u,...c],u,f)}return kr(r)&&r.errors.forEach((u,f)=>{if(D(u)){hn(i,a,r);const l=t(e,u),d=c.length;mn(l,`errors[${f}]`,d,a),c=oe(t,e,n,u,s,[l,...c],l,d)}}),c}function kr(t){return Array.isArray(t.errors)}function hn(t,e,n){t.mechanism={handled:!0,type:"auto.core.linked_errors",...kr(n)&&{is_exception_group:!0},...t.mechanism,exception_id:e}}function mn(t,e,n,r){t.mechanism={handled:!0,...t.mechanism,type:"chained",source:e,exception_id:n,parent_id:r}}function ba(t){return D(t)&&"__sentry_fetch_url_host__"in t&&typeof t.__sentry_fetch_url_host__=="string"}function gn(t){return ba(t)?`${t.message} (${t.__sentry_fetch_url_host__})`:t.message}const At=new Set([]);function va(t){const e="console",n=z(e,t);return Y(e,Ta),n}function Ia(t){for(const e of t)At.add(e);return()=>{for(const e of t)At.delete(e)}}const _n=new Set;function Ta(){"console"in _&&Nn.forEach(function(t){_n.has(t)||!(t in _.console)||(_n.add(t),T(_.console,t,function(e){return Ot[t]=e,function(...n){const r=n[0],s=Ot[t],o=At.size&&typeof r=="string"&&_t(r,At);o||w("console",{args:n,level:t}),(!o||m&&h.isEnabled())&&(s==null||s.apply(_.console,n))}}))})}function ka(t){return t==="warn"?"warning":["fatal","error","warning","log","info","debug"].includes(t)?t:"log"}const wa="Dedupe",Ra=()=>{let t;return{name:wa,processEvent(e){if(e.type)return e;try{if(Na(e,t))return m&&h.warn("Event dropped due to being a duplicate of previously captured event."),null}catch{}return t=e}}},Oa=Ra;function Na(t,e){return e?!!(Ca(t,e)||Aa(t,e)):!1}function Ca(t,e){const n=t.message,r=e.message;return!(!n&&!r||n&&!r||!n&&r||n!==r||!Rr(t,e)||!wr(t,e))}function Aa(t,e){const n=yn(e),r=yn(t);return!(!n||!r||n.type!==r.type||n.value!==r.value||!Rr(t,e)||!wr(t,e))}function wr(t,e){const n=Ne(t),r=Ne(e);if(!n||!r)return!n&&!r;if(r.length!==n.length)return!1;for(let s=0;s{const e=new Set(t.levels||Nn);return{name:xa,setup(n){const r=va(({args:s,level:o})=>{S()!==n||!e.has(o)||La(o,s)});if(n.registerCleanup(r),t.filter){const s=Ia(t.filter);n.registerCleanup(s)}}}};function La(t,e){const n={category:"console",data:{arguments:e,logger:"console"},level:ka(t),message:En(e)};if(t==="assert")if(e[0]===!1){const r=e.slice(1);n.message=r.length>0?`Assertion failed: ${En(r)}`:"Assertion failed",n.data.arguments=r}else return;G(n,{input:e,level:t})}function En(t){return"util"in _&&typeof _.util.format=="function"?_.util.format(...t):is(t," ")}const Pa="ConversationId",Ma=()=>({name:Pa,setup(t){t.on("spanStart",e=>{const n=N().getScopeData(),r=L().getScopeData(),s=n.conversationId||r.conversationId;if(s){const{op:o,data:i,description:a}=Pt(e);if(!(o!=null&&o.startsWith("gen_ai."))&&!i["ai.operationId"]&&!(a!=null&&a.startsWith("ai.")))return;e.setAttribute(xs,s)}})}}),$a=Ma,ie=_;function Fa(){if(!("fetch"in ie))return!1;try{return new Headers,new Request("data:,"),new Response,!0}catch{return!1}}function ae(t){return t&&/^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}function ja(){var n;if(typeof EdgeRuntime=="string")return!0;if(!Fa())return!1;if(ae(ie.fetch))return!0;let t=!1;const e=ie.document;if(e&&typeof e.createElement=="function")try{const r=e.createElement("iframe");r.hidden=!0,e.head.appendChild(r),(n=r.contentWindow)!=null&&n.fetch&&(t=ae(r.contentWindow.fetch)),e.head.removeChild(r)}catch(r){m&&h.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",r)}return t}function Ba(t){const e="fetch",n=z(e,t);return Y(e,()=>Ua()),n}function Ua(t){Mt()&&!ja()||T(_,"fetch",function(e){return new Proxy(e,{apply(n,r,s){const o=new Error,{method:i,url:a}=Ha(s),c={args:s,fetchData:{method:i,url:a},startTimestamp:R()*1e3,virtualError:o,headers:Wa(s)};return w("fetch",{...c}),Reflect.apply(n,_,s).then(async u=>(w("fetch",{...c,endTimestamp:R()*1e3,response:u}),u),u=>{w("fetch",{...c,endTimestamp:R()*1e3,error:u}),D(u)&&u.stack===void 0&&(u.stack=o.stack,F(u,"framesToPop",1));const f=S(),l=(f==null?void 0:f.getOptions().enhanceFetchErrorMessages)??"always";if(l!==!1&&D(u)&&u.name==="TypeError"&&(u.message==="Failed to fetch"||u.message==="Load failed"||u.message==="NetworkError when attempting to fetch resource."))try{const p=new URL(c.fetchData.url).host;l==="always"?u.message=`${u.message} (${p})`:F(u,"__sentry_fetch_url_host__",p)}catch{}throw u})}})})}function wt(t,e){return xt(t)&&!!t[e]}function Sn(t){return typeof t=="string"?t:t?wt(t,"url")?t.url:t.toString?t.toString():"":""}function Ha(t){if(t.length===0)return{method:"GET",url:""};if(t.length===2){const[n,r]=t;return{url:Sn(n),method:wt(r,"method")?String(r.method).toUpperCase():Pn(n)&&wt(n,"method")?String(n.method).toUpperCase():"GET"}}const e=t[0];return{url:Sn(e),method:wt(e,"method")?String(e.method).toUpperCase():"GET"}}function Wa(t){const[e,n]=t;try{if(typeof n=="object"&&n!==null&&"headers"in n&&n.headers)return new Headers(n.headers);if(Pn(e))return new Headers(e.headers)}catch{}}function Or(t){if(t!==void 0)return t>=400&&t<500?"warning":t>=500?"error":void 0}const ce=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,E=_,qa=80,U={};try{typeof Node<"u"&&(U.parentNode=Object.getOwnPropertyDescriptor(Node.prototype,"parentNode").get),typeof Element<"u"&&(U.tagName=Object.getOwnPropertyDescriptor(Element.prototype,"tagName").get,U.id=Object.getOwnPropertyDescriptor(Element.prototype,"id").get,U.className=Object.getOwnPropertyDescriptor(Element.prototype,"className").get,U.getAttribute=Element.prototype.getAttribute),typeof HTMLElement<"u"&&(U.dataset=Object.getOwnPropertyDescriptor(HTMLElement.prototype,"dataset").get)}catch{}function M(t,e,n){const r=U[e];if(r)try{return r.call(t,n)}catch{}const s=t[e];return typeof s=="function"?s.call(t,n):s}function Nr(t,e={}){if(!t)return"";try{let n=t;const r=5,s=[];let o=0,i=0;const a=" > ",c=a.length;let u;const f=Array.isArray(e)?e:e.keyAttrs,l=!Array.isArray(e)&&e.maxStringLength||qa;for(;n&&o++1&&i+s.length*c+u.length>=l));)s.push(u),i+=u.length,n=M(n,"parentNode");return s.reverse().join(a)}catch{return""}}function Ga(t,e){const n=[],r=M(t,"tagName");if(!r)return"";if(typeof HTMLElement<"u"&&t instanceof HTMLElement){const o=M(t,"dataset");if(o){if(o.sentryComponent)return o.sentryComponent;if(o.sentryElement)return o.sentryElement}}n.push(r.toLowerCase());const s=e!=null&&e.length?e.filter(o=>M(t,"getAttribute",o)).map(o=>[o,M(t,"getAttribute",o)]):null;if(s!=null&&s.length)s.forEach(o=>{n.push(`[${o[0]}="${o[1]}"]`)});else{const o=M(t,"id");o&&n.push(`#${o}`);const i=M(t,"className");if(i&&x(i)){const a=i.split(/\s+/);for(const c of a)n.push(`.${c}`)}}for(const o of["aria-label","type","name","title","alt"]){const i=M(t,"getAttribute",o);i&&n.push(`[${o}="${i}"]`)}return n.join("")}function za(t,e,n){E.document&&E.addEventListener(t,e,n)}function Ya(t,e,n){E.document&&E.removeEventListener(t,e,n)}const Ka=t=>{var n;const e=E.requestIdleCallback||E.setTimeout;if(((n=E.document)==null?void 0:n.visibilityState)==="hidden")t();else{let r=!1;const s=()=>{r||(t(),r=!0)};za("visibilitychange",s,{once:!0,capture:!0}),e(()=>{s(),Ya("visibilitychange",s,{capture:!0})})}};function Va(t,e=5){if(!_.HTMLElement)return null;let n=t;for(let r=0;r{var o,i;const s=(o=E[n])==null?void 0:o.prototype;(i=s==null?void 0:s.hasOwnProperty)!=null&&i.call(s,"addEventListener")&&(T(s,"addEventListener",function(a){return function(c,u,f){if((c==="click"||c=="keypress")&&u)try{const l=this.__sentry_instrumentation_handlers__=this.__sentry_instrumentation_handlers__||{},d=l[c]=l[c]||{captureListeners:new WeakSet,bubbleListeners:new WeakSet,listenerCount:0},g=vn(f);if(!d.handler){const I=In(t);d.handler=I,d.capture=g,a.call(this,c,I,d.capture)}const p=d[g?"captureListeners":"bubbleListeners"];p.has(u)||(typeof f=="object"&&(f!=null&&f.once||f!=null&&f.signal)?d.sticky=!0:(p.add(u),d.listenerCount++))}catch{}return a.call(this,c,u,f)}}),T(s,"removeEventListener",function(a){return function(c,u,f){if((c==="click"||c=="keypress")&&u)try{const l=this.__sentry_instrumentation_handlers__||{},d=l[c];d!=null&&d[vn(f)?"captureListeners":"bubbleListeners"].delete(u)&&(!--d.listenerCount&&!d.sticky&&(a.call(this,c,d.handler,d.capture),d.handler=void 0,delete l[c]),Object.keys(l).length===0&&delete this.__sentry_instrumentation_handlers__)}catch{}return a.call(this,c,u,f)}}))})}function ec(t){if(t.type!==ue)return!1;try{if(!t.target||t.target._sentryId!==fe)return!1}catch{}return!0}function nc(t,e){return t!=="keypress"?!1:e!=null&&e.tagName?!(e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.isContentEditable):!0}function In(t,e=!1){return n=>{if(!n||n._sentryCaptured)return;const r=rc(n);if(nc(n.type,r))return;F(n,"_sentryCaptured",!0),r&&!r._sentryId&&F(r,"_sentryId",k());const s=n.type==="keypress"?"input":n.type;ec(n)||(t({event:n,name:s,global:e}),ue=n.type,fe=r?r._sentryId:void 0),clearTimeout(bn),bn=E.setTimeout(()=>{fe=void 0,ue=void 0},Qa)}}function rc(t){try{return t.target}catch{return null}}let It;function sc(){return"history"in E&&!!E.history}function Ar(t){const e="history";z(e,t),Y(e,oc)}function oc(){if(E.addEventListener("popstate",()=>{const e=E.location.href,n=It;if(It=e,n===e)return;w("history",{from:n,to:e})}),!sc())return;function t(e){return function(...n){const r=n.length>2?n[2]:void 0;if(r){const s=It,o=ic(String(r));if(It=o,s===o)return e.apply(this,n);w("history",{from:s,to:o})}return e.apply(this,n)}}T(E.history,"pushState",t),T(E.history,"replaceState",t)}function ic(t){try{return new URL(t,E.location.origin).toString()}catch{return t}}const Rt={};function ac(t){const e=Rt[t];if(e)return e;let n=E[t];if(ae(n))return Rt[t]=n.bind(E);const r=E.document;if(r&&typeof r.createElement=="function")try{const s=r.createElement("iframe");s.hidden=!0,r.head.appendChild(s);const o=s.contentWindow;o!=null&&o[t]&&(n=o[t]),r.head.removeChild(s)}catch(s){ce&&h.warn(`Could not create sandbox iframe for ${t} check, bailing to window.${t}: `,s)}return n&&(Rt[t]=n.bind(E))}function cc(t){Rt[t]=void 0}const lt="__sentry_xhr_v3__";function uc(t){const e="xhr";z(e,t),Y(e,fc)}function fc(){if(!E.XMLHttpRequest)return;const t=XMLHttpRequest.prototype;t.open=new Proxy(t.open,{apply(e,n,r){let s=new Error;const o=R()*1e3,i=x(r[0])?r[0].toUpperCase():void 0,a=lc(r[1]);if(!i||!a)return e.apply(n,r);n[lt]={method:i,url:a,request_headers:{}},i==="POST"&&a.match(/sentry_key/)&&(n.__sentry_own_request__=!0);const c=()=>{const u=n[lt];if(u&&n.readyState===4){try{u.status_code=n.status}catch{}const f={endTimestamp:R()*1e3,startTimestamp:o,xhr:n,virtualError:s};w("xhr",f),s=void 0,n.removeEventListener("readystatechange",c)}};return"onreadystatechange"in n&&typeof n.onreadystatechange=="function"?n.onreadystatechange=new Proxy(n.onreadystatechange,{apply(u,f,l){return c(),u.apply(f,l)}}):n.addEventListener("readystatechange",c),n.setRequestHeader=new Proxy(n.setRequestHeader,{apply(u,f,l){const[d,g]=l,p=f[lt];return p&&x(d)&&x(g)&&(p.request_headers[d.toLowerCase()]=g),u.apply(f,l)}}),e.apply(n,r)}}),t.send=new Proxy(t.send,{apply(e,n,r){const s=n[lt];if(!s)return e.apply(n,r);r[0]!==void 0&&(s.body=r[0]);const o={startTimestamp:R()*1e3,xhr:n};return w("xhr",o),e.apply(n,r)}})}function lc(t){if(x(t))return t;try{return t.toString()}catch{}}function dc(t){if(typeof Element>"u")return!1;try{return t instanceof Element}catch{return!1}}const y=_;let le=0;const Tn=[];function xr(t){if(le>0)return!0;const e=t?Tn.findIndex(n=>pc(n,t)):-1;return e===-1?!1:(Tn.splice(e,1),!0)}function pc(t,e){return t.msg===e.msg&&t.url===e.url&&t.line===e.line&&t.column===e.column}function hc(){le++,setTimeout(()=>{le--})}function nt(t,e={}){function n(s){return typeof s=="function"}if(!n(t))return t;try{if(Object.prototype.hasOwnProperty.call(t,"__sentry_wrapped__")){const o=t.__sentry_wrapped__;return typeof o=="function"?o:t}if(ye(t))return t}catch{return t}const r=function(...s){_._sentryWrappedDepth=(_._sentryWrappedDepth||0)+1;try{const o=s.map(i=>nt(i,e));return t.apply(this,o)}catch(o){throw hc(),As(i=>{i.addEventProcessor(a=>(e.mechanism&&(Jt(a,void 0),Z(a,e.mechanism)),a.extra={...a.extra,arguments:s},a)),di(o)}),o}finally{_._sentryWrappedDepth=(_._sentryWrappedDepth||0)-1}};try{for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&(r[s]=t[s])}catch{}Mn(r,t),F(t,"__sentry_wrapped__",r);try{Object.getOwnPropertyDescriptor(r,"name").configurable&&Object.defineProperty(r,"name",{get(){return t.name}})}catch{}return r}function kn(){const t=Ie(),{referrer:e}=y.document||{},{userAgent:n}=y.navigator||{},r={...e&&{Referer:e},...n&&{"User-Agent":n}};return{url:t,headers:r}}function Te(t,e){const n=$t(t,e),r={type:Ec(e),value:Sc(e)};return n.length&&(r.stacktrace={frames:n}),r.type===void 0&&r.value===""&&(r.value="Unrecoverable error caught"),r}function mc(t,e,n,r){const s=S(),o=s==null?void 0:s.getOptions().normalizeDepth,i=kc(e),a={__serialized__:Fn(e,o)};if(i)return{exception:{values:[Te(t,i)]},extra:a};const u={exception:{values:[{type:Dt(e)?e.constructor.name:r?"UnhandledRejection":"Error",value:Ic(e,{isUnhandledRejection:r})}]},extra:a};if(n){const f=$t(t,n);f.length&&(u.exception.values[0].stacktrace={frames:f})}return u}function Yt(t,e){return{exception:{values:[Te(t,e)]}}}function $t(t,e){const n=e.stacktrace||e.stack||"",r=_c(e),s=yc(e);try{return t(n,r,s)}catch{}return[]}const gc=/Minified React error #\d+;/i;function _c(t){return t&&gc.test(t.message)?1:0}function yc(t){return typeof t.framesToPop=="number"?t.framesToPop:0}function Dr(t){return typeof WebAssembly<"u"&&typeof WebAssembly.Exception<"u"?t instanceof WebAssembly.Exception:!1}function Ec(t){const e=t==null?void 0:t.name;return!e&&Dr(t)?t.message&&Array.isArray(t.message)&&t.message.length==2?t.message[0]:"WebAssembly.Exception":e}function Sc(t){const e=t==null?void 0:t.message;return Dr(t)?Array.isArray(t.message)&&t.message.length==2?t.message[1]:"wasm exception":e?e.error&&typeof e.error.message=="string"?gn(e.error):gn(t):"No error message"}function bc(t,e,n,r){const s=(n==null?void 0:n.syntheticException)||void 0,o=ke(t,e,s,r);return Z(o),o.level="error",n!=null&&n.event_id&&(o.event_id=n.event_id),bt(o)}function vc(t,e,n="info",r,s){const o=(r==null?void 0:r.syntheticException)||void 0,i=de(t,e,o,s);return i.level=n,r!=null&&r.event_id&&(i.event_id=r.event_id),bt(i)}function ke(t,e,n,r,s){var a,c;let o;if(Ln(e)&&e.error)return Yt(t,e.error);if(Ae(e)||Kr(e)){const u=e;if("stack"in e){o=Yt(t,e);const f=(c=(a=o.exception)==null?void 0:a.values)==null?void 0:c[0];if(r&&n&&f&&!f.stacktrace){const l=$t(t,n);l.length&&(f.stacktrace={frames:l},Z(o,{synthetic:!0}))}}else{const f=u.name||(Ae(u)?"DOMError":"DOMException"),l=u.message?`${f}: ${u.message}`:f;o=de(t,l,n,r),Jt(o,l)}return o}if(D(e))return Yt(t,e);if(Nt(e)||Dt(e))return o=mc(t,e,n,s),Z(o,{synthetic:!0}),o;const i=String(e);return o=de(t,i,n,r),Jt(o,i),Z(o,{synthetic:!0}),o}function de(t,e,n,r){const s={};if(r&&n){const o=$t(t,n);o.length&&(s.exception={values:[{value:e,stacktrace:{frames:o}}]}),Z(s,{synthetic:!0})}if(ge(e)){const{__sentry_template_string__:o,__sentry_template_values__:i}=e;return s.logentry={message:o,params:i},s}return s.message=e,s}function Ic(t,{isUnhandledRejection:e}){const n=Xr(t),r=e?"promise rejection":"exception";return Ln(t)?`Event \`ErrorEvent\` captured as ${r} with message \`${t.message}\``:Dt(t)?`Event \`${Tc(t)}\` (type=${t.type}) captured as ${r}`:`Object captured as ${r} with keys: ${n}`}function Tc(t){try{const e=Object.getPrototypeOf(t);return e?e.constructor.name:void 0}catch{}}function kc(t){return Object.values(t).find(D)}class wc extends Hi{constructor(e){var c;const n=Rc(e),r=y.SENTRY_SDK_SOURCE||Wo();oa(n,"browser",["browser"],r),super(n),n.routeProvider&&Xa(n.routeProvider,this),this._unhandledSessionStatus="unhandled";const{userInfo:s}=this.getDataCollectionOptions();(c=n._metadata)!=null&&c.sdk&&(n._metadata.sdk.settings={infer_ip:s?"auto":"never",...n._metadata.sdk.settings});const{sendClientReports:o}=this._options,i=()=>{R()},a=[[y.document,"visibilitychange",()=>{i(),y.document.visibilityState==="hidden"&&(o&&this._flushOutcomes(),queueMicrotask(()=>{this.flush()}))}],[y.document,"freeze",i],[y.document,"resume",i],[y,"pagehide",i],[y,"pageshow",i]];a.forEach(([u,f,l])=>{var d;return(d=u==null?void 0:u.addEventListener)==null?void 0:d.call(u,f,l)}),this.on("close",()=>a.forEach(([u,f,l])=>{var d;return(d=u==null?void 0:u.removeEventListener)==null?void 0:d.call(u,f,l)})),s&&this.on("beforeSendSession",sa)}eventFromException(e,n){return bc(this._options.stackParser,e,n,this._options.attachStacktrace)}eventFromMessage(e,n="info",r){return vc(this._options.stackParser,e,n,r,this._options.attachStacktrace)}_prepareEvent(e,n,r,s){return e.platform=e.platform||"javascript",super._prepareEvent(e,n,r,s)}}function Rc(t){var e;return{release:typeof __SENTRY_RELEASE__=="string"?__SENTRY_RELEASE__:(e=y.SENTRY_RELEASE)==null?void 0:e.id,sendClientReports:!0,parentSpanIsAlwaysRootSpan:!0,...t}}const Oc=40;function Nc(t,e=ac("fetch")){let n=0,r=0;async function s(o){const i=o.body.length;n+=i,r++;const a={body:o.body,method:"POST",referrerPolicy:"strict-origin",headers:t.headers,keepalive:n<=6e4&&r<15,...t.fetchOptions};try{const c=await e(t.url,a);return{statusCode:c.status,headers:{"x-sentry-rate-limits":c.headers.get("X-Sentry-Rate-Limits"),"retry-after":c.headers.get("Retry-After")}}}catch(c){throw cc("fetch"),c}finally{n-=i,r--}}return xi(t,s,ve(t.bufferSize||Oc))}const Ft=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,Cc=30,Ac=50;function pe(t,e,n,r){const s={filename:t,function:e===""?q:e,in_app:!0};return n!==void 0&&(s.lineno=n),r!==void 0&&(s.colno=r),s}const xc=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Dc=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Lc=/\((\S*)(?::(\d+))(?::(\d+))\)/,Pc=/at (.+?) ?\(data:(.+?),/,Mc=t=>{var s;const e=t.match(Pc);if(e)return{filename:``,function:e[1]};const n=xc.exec(t);if(n){const[,o,i,a]=n;return pe(o,q,+i,+a)}const r=Dc.exec(t);if(r){if(((s=r[2])==null?void 0:s.indexOf("eval"))===0){const c=Lc.exec(r[2]);c&&(r[2]=c[1],r[3]=c[2],r[4]=c[3])}const[i,a]=Lr(r[1]||q,r[2]);return pe(a,i,r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},$c=[Cc,Mc],Fc=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,jc=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Bc=t=>{const e=Fc.exec(t);if(e){if(e[3]&&e[3].indexOf(" > eval")>-1){const o=jc.exec(e[3]);o&&(e[1]=e[1]||"eval",e[3]=o[1],e[4]=o[2],e[5]="")}let r=e[3],s=e[1]||q;return[s,r]=Lr(s,r),pe(r,s,e[4]?+e[4]:void 0,e[5]?+e[5]:void 0)}},Uc=[Ac,Bc],Hc=[$c,Uc],Wc=xn(...Hc),Lr=(t,e)=>{const n=t.indexOf("safari-extension")!==-1,r=t.indexOf("safari-web-extension")!==-1;return n||r?[t.indexOf("@")!==-1?t.split("@")[0]:q,n?`safari-extension:${e}`:`safari-web-extension:${e}`]:[t,e]},Tt=1024,qc="Breadcrumbs",Gc=(t={})=>{const e={dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...t};return{name:qc,setup(n){e.dom&&Za(Kc(n,e.dom)),e.xhr&&uc(Vc(n)),e.fetch&&Ba(Xc(n)),e.history&&Ar(Jc(n)),e.sentry&&n.on("beforeSendEvent",Yc(n))}}},zc=Gc;function Yc(t){return function(n){S()===t&&G({category:`sentry.${n.type==="transaction"?"transaction":"event"}`,event_id:n.event_id,level:n.level,message:H(n)},{event:n})}}function Kc(t,e){return function(r){if(S()!==t)return;let s,o,i=typeof e=="object"?e.serializeAttribute:void 0,a=typeof e=="object"&&typeof e.maxStringLength=="number"?e.maxStringLength:void 0;a&&a>Tt&&(Ft&&h.warn(`\`dom.maxStringLength\` cannot exceed ${Tt}, but a value of ${a} was configured. Sentry will use ${Tt} instead.`),a=Tt),typeof i=="string"&&(i=[i]);try{const u=r.event,f=Qc(u)?u.target:u;s=Nr(f,{keyAttrs:i,maxStringLength:a}),o=Va(f)}catch{s=""}if(s.length===0)return;const c={category:`ui.${r.name}`,message:s};o&&(c.data={"ui.component_name":o}),G(c,{event:r.event,name:r.name,global:r.global})}}function Vc(t){return function(n){if(S()!==t)return;const{startTimestamp:r,endTimestamp:s}=n,o=n.xhr[lt];if(!r||!s||!o)return;const{method:i,url:a,status_code:c,body:u}=o,f={method:i,url:a,status_code:c},l={xhr:n.xhr,input:u,startTimestamp:r,endTimestamp:s},d={category:"xhr",data:f,type:"http",level:Or(c)};t.emit("beforeOutgoingRequestBreadcrumb",d,l),G(d,l)}}function Xc(t){return function(n){if(S()!==t)return;const{startTimestamp:r,endTimestamp:s}=n;if(s&&!(n.fetchData.url.match(/sentry_key/)&&n.fetchData.method==="POST"))if(n.error){const o={data:n.error,input:n.args,startTimestamp:r,endTimestamp:s},i={category:"fetch",data:n.fetchData,level:"error",type:"http"};t.emit("beforeOutgoingRequestBreadcrumb",i,o),G(i,o)}else{const o=n.response,i={...n.fetchData,status_code:o==null?void 0:o.status},a={input:n.args,response:o,startTimestamp:r,endTimestamp:s},c={category:"fetch",data:i,type:"http",level:Or(i.status_code)};t.emit("beforeOutgoingRequestBreadcrumb",c,a),G(c,a)}}}function Jc(t){return function(n){if(S()!==t)return;let r=n.from,s=n.to;const o=zt(y.location.href);let i=r?zt(r):void 0;const a=zt(s);i!=null&&i.path||(i=o),o.protocol===a.protocol&&o.host===a.host&&(s=a.relative),o.protocol===i.protocol&&o.host===i.host&&(r=i.relative),G({category:"navigation",data:{from:r,to:s}})}}function Qc(t){return!!t&&!!t.target}const Zc="EventTarget,Window,Node,ApplicationCache,AudioTrackList,BroadcastChannel,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(","),tu="BrowserApiErrors",eu=(t={})=>{const e={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,unregisterOriginalCallbacks:!1,...t};return{name:tu,setupOnce(){e.setTimeout&&T(y,"setTimeout",wn),e.setInterval&&T(y,"setInterval",wn),e.requestAnimationFrame&&T(y,"requestAnimationFrame",ru),e.XMLHttpRequest&&"XMLHttpRequest"in y&&T(XMLHttpRequest.prototype,"send",su);const n=e.eventTarget;n&&(Array.isArray(n)?n:Zc).forEach(s=>ou(s,e))}}},nu=eu;function wn(t){return function(...e){const n=e[0];return e[0]=nt(n,{mechanism:{handled:!1,type:`auto.browser.browserapierrors.${$(t)}`}}),t.apply(this,e)}}function ru(t){return function(e){return t.apply(this,[nt(e,{mechanism:{data:{handler:$(t)},handled:!1,type:"auto.browser.browserapierrors.requestAnimationFrame"}})])}}function su(t){return function(...e){const n=this;return["onload","onerror","onprogress","onreadystatechange"].forEach(s=>{s in n&&typeof n[s]=="function"&&T(n,s,function(o){const i={mechanism:{data:{handler:$(o)},handled:!1,type:`auto.browser.browserapierrors.xhr.${s}`}},a=ye(o);return a&&(i.mechanism.data.handler=$(a)),nt(o,i)})}),t.apply(this,e)}}function ou(t,e){var s,o;const r=(s=y[t])==null?void 0:s.prototype;(o=r==null?void 0:r.hasOwnProperty)!=null&&o.call(r,"addEventListener")&&(T(r,"addEventListener",function(i){return function(a,c,u){try{iu(c)&&(c.handleEvent=nt(c.handleEvent,{mechanism:{data:{handler:$(c),target:t},handled:!1,type:"auto.browser.browserapierrors.handleEvent"}}))}catch{}return e.unregisterOriginalCallbacks&&au(this,a,c),i.apply(this,[a,nt(c,{mechanism:{data:{handler:$(c),target:t},handled:!1,type:"auto.browser.browserapierrors.addEventListener"}}),u])}}),T(r,"removeEventListener",function(i){return function(a,c,u){try{if(Object.prototype.hasOwnProperty.call(c,"__sentry_wrapped__")){const f=c.__sentry_wrapped__;f&&i.call(this,a,f,u)}}catch{}return i.call(this,a,c,u)}}))}function iu(t){return typeof t.handleEvent=="function"}function au(t,e,n){t&&typeof t=="object"&&"removeEventListener"in t&&typeof t.removeEventListener=="function"&&t.removeEventListener(e,n)}const cu=(t={})=>{const e=t.lifecycle??"page";return{name:"BrowserSession",setupOnce(){if(typeof y.document>"u"){Ft&&h.warn("Using the `browserSessionIntegration` in non-browser environments is not supported.");return}rn({ignoreDuration:!0});let n=!1;Ka(()=>{n||(qt(),n=!0)});const r=L();let s=r.getUser();r.addScopeListener(o=>{const i=o.getUser();((s==null?void 0:s.id)!==(i==null?void 0:i.id)||(s==null?void 0:s.ip_address)!==(i==null?void 0:i.ip_address))&&(s=i,n&&qt())}),e==="route"&&Ar(({from:o,to:i})=>{o!==i&&(rn({ignoreDuration:!0}),qt(),n=!0)})}}},uu="CultureContext",fu=()=>({name:uu,preprocessEvent(t){var n;const e=Rn();e&&(t.contexts={...t.contexts,culture:{...e,...(n=t.contexts)==null?void 0:n.culture}})},processSegmentSpan(t){const e=Rn();e&&ir(t,{"culture.locale":e.locale,"culture.timezone":e.timezone,"culture.calendar":e.calendar})}}),lu=fu;function Rn(){try{const t=y.Intl;if(!t)return;const e=t.DateTimeFormat().resolvedOptions();return{locale:e.locale,timezone:e.timeZone,calendar:e.calendar}}catch{return}}const du="GlobalHandlers",pu=(t={})=>{const e={onerror:!0,onunhandledrejection:!0,...t};return{name:du,setupOnce(){Error.stackTraceLimit=50},setup(n){e.onerror&&(mu(n),On("onerror")),e.onunhandledrejection&&(gu(n),On("onunhandledrejection"))}}},hu=pu;function mu(t){qr(e=>{const{stackParser:n,attachStacktrace:r}=Pr();if(S()!==t||xr(e))return;const{msg:s,url:o,line:i,column:a,error:c}=e,u=Eu(ke(n,c||s,void 0,r,!1),o,i,a);u.level="error",dr(u,{originalException:c,mechanism:{handled:!1,type:"auto.browser.global_handlers.onerror"}})})}function gu(t){zr(e=>{const{stackParser:n,attachStacktrace:r}=Pr();if(S()!==t||xr())return;const s=_u(e),o=it(s)?yu(s):ke(n,s,void 0,r,!0);o.level="error",dr(o,{originalException:s,mechanism:{handled:!1,type:"auto.browser.global_handlers.onunhandledrejection"}})})}function _u(t){if(it(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch{}return t}function yu(t){return{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(t)}`}]}}}function Eu(t,e,n,r){const s=t.exception=t.exception||{},o=s.values=s.values||[],i=o[0]=o[0]||{},a=i.stacktrace=i.stacktrace||{},c=a.frames=a.frames||[];return c.length===0&&c.push({colno:r,lineno:n,filename:Su(e)??Ie(),function:q,in_app:!0}),t}function On(t){Ft&&h.log(`Global Handler attached: ${t}`)}function Pr(){const t=S();return(t==null?void 0:t.getOptions())||{stackParser:()=>[],attachStacktrace:!1}}function Su(t){if(!(!x(t)||t.length===0))return t.startsWith("data:")?`<${ra(t,!1)}>`:t}const bu=()=>({name:"HttpContext",preprocessEvent(t,e,n){var c;if(!y.navigator&&!y.location&&!y.document)return;const{url:r,headers:s}=kn(),o=n.getDataCollectionOptions().httpHeaders.request,i=Object.entries(((c=t.request)==null?void 0:c.headers)??{}).filter(([u])=>!(u in s)),a={...ln(s,o),...Object.fromEntries(i)};t.request={url:r,...t.request,...Object.keys(a).length>0?{headers:a}:{headers:void 0}}},processSpan(t,e){var a;if(!y.navigator&&!y.location&&!y.document)return;const n=kn(),r=ln(n.headers,e.getDataCollectionOptions().httpHeaders.request),s=r.Referer,{hostname:o,protocol:i}=y.location||{};ir(t,{[Fs]:r["User-Agent"],[Ls]:i==="file:"||o==="localhost"||o==="127.0.0.1"||o==="[::1]"||!!(o!=null&&o.endsWith(".localhost")),...t.is_segment&&{[$s]:((a=t.attributes)==null?void 0:a[Vn])!=="http.client"?na(n.url):void 0,[`${Ds}.referer`]:s?[s]:void 0}})}}),vu="cause",Iu=5,Tu="LinkedErrors",ku=(t={})=>{const e=t.limit||Iu,n=t.key||vu;return{name:Tu,preprocessEvent(r,s,o){const i=o.getOptions();Sa(Te,i.stackParser,n,e,r,s)}}},wu=ku,Ru=/^HTML(\w*)Element$/;function Ou(t){if(typeof window<"u"&&t===window)return"[Window]";if(typeof document<"u"&&t===document)return"[Document]";if(dc(t)){const e=Nu(t);if(Ru.test(e))return`[HTMLElement: ${Nr(t)}]`}}function Nu(t){const e=Object.getPrototypeOf(t);return e!=null&&e.constructor?e.constructor.name:"null prototype"}function Cu(){return Au()?(Ft&&j(()=>{console.error("[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/")}),!0):!1}function Au(){var s;if(typeof y.window>"u")return!1;const t=y;if(t.nw)return!1;const e=t.chrome||t.browser;if(!((s=e==null?void 0:e.runtime)!=null&&s.id))return!1;const n=Ie();return!(y===y.top&&/^(?:chrome-extension|moz-extension|ms-browser-extension|safari-web-extension):\/\//.test(n))}function xu(t){return[da(),ua(),$a(),nu(),zc(),Da(),hu(),wu(),Oa(),bu(),lu(),cu()]}function Pu(t={}){const e=!t.skipBrowserExtensionCheck&&Cu();let n=t.defaultIntegrations==null?xu():t.defaultIntegrations;const r=vo({integrations:t.integrations,defaultIntegrations:n}),s={...t,enabled:e?!1:t.enabled,stackParser:Hr(t.stackParser||Wc),integrations:r,transport:t.transport||Nc};return es(Ou),Yi(wc,s)}export{di as captureException,Pu as init,Du as setTag,Lu as setUser}; diff --git a/public/build/b2a/manifest.json b/public/build/b2a/manifest.json new file mode 100644 index 00000000..d180cacd --- /dev/null +++ b/public/build/b2a/manifest.json @@ -0,0 +1,48 @@ +{ + "resources/css/web/shared-styles.css": { + "file": "shared-styles-BbGt7f_e.css", + "src": "resources/css/web/shared-styles.css", + "isEntry": true + }, + "resources/css/web/theme-b2a.css": { + "file": "theme-b2a-BCAFYDZJ.css", + "src": "resources/css/web/theme-b2a.css", + "isEntry": true + }, + "resources/css/web/theme-b2in.css": { + "file": "theme-b2in-DK_BFMo-.css", + "src": "resources/css/web/theme-b2in.css", + "isEntry": true + }, + "resources/css/web/theme-stileigentum.css": { + "file": "theme-stileigentum-skwGRiP0.css", + "src": "resources/css/web/theme-stileigentum.css", + "isEntry": true + }, + "resources/css/web/theme-style2own.css": { + "file": "theme-style2own-1F1Xts-B.css", + "src": "resources/css/web/theme-style2own.css", + "isEntry": true + }, + "resources/js/app.js": { + "file": "app-OG3MHWAj.js", + "name": "app", + "src": "resources/js/app.js", + "isEntry": true + }, + "resources/js/error-reporting-sdk.js": { + "file": "error-reporting-sdk-CLmutOST.js", + "name": "error-reporting-sdk", + "src": "resources/js/error-reporting-sdk.js", + "isDynamicEntry": true + }, + "resources/js/error-reporting.js": { + "file": "error-reporting-BiGrjXpD.js", + "name": "error-reporting", + "src": "resources/js/error-reporting.js", + "isEntry": true, + "dynamicImports": [ + "resources/js/error-reporting-sdk.js" + ] + } +} \ No newline at end of file diff --git a/public/build/b2a/shared-styles-BbGt7f_e.css b/public/build/b2a/shared-styles-BbGt7f_e.css new file mode 100644 index 00000000..08008ef5 --- /dev/null +++ b/public/build/b2a/shared-styles-BbGt7f_e.css @@ -0,0 +1 @@ +@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2) format("woff2")}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary{cursor:pointer}.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{font-weight:500;letter-spacing:-.025em;font-family:var(--font-secondary, "Inter"),var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif}.text-hero{font-size:clamp(2.6rem,3.5vw,3.6rem);line-height:1.1;font-weight:300;letter-spacing:-.025em}.text-hero-alt{font-size:clamp(2rem,3vw,3rem);line-height:1.1;font-weight:300;letter-spacing:-.025em}.text-section-title{font-size:clamp(1.6rem,3vw,3rem);line-height:1.3em;font-weight:300;letter-spacing:-.025em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important;color:hsl(var(--primary-foreground));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-primary:hover{background-color:hsl(var(--primary-dark));background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-primary-accent{background-color:hsl(var(--primary));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important;color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-primary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-secondary{background-color:hsl(var(--secondary));background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important;color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-secondary-accent{background-color:hsl(var(--secondary));background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important;color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;text-decoration:none;cursor:pointer}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important;color:hsl(var(--accent-foreground));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-accent:hover{background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important;color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow)}.form-field{display:block;width:100%;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:.6rem;box-shadow:inset 0 1px 2px hsl(var(--foreground) / .04);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease}.form-field::placeholder{color:hsl(var(--muted-foreground) / .7)}.form-field:hover{border-color:hsl(var(--primary) / .45)}.form-field:focus,.form-field:focus-visible{outline:none;border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary) / .22);background-color:hsl(var(--background))}.form-select{-moz-appearance:none;appearance:none;-webkit-appearance:none;padding-right:2.6rem;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-repeat:no-repeat;background-position:right .9rem center;background-size:1.1rem 1.1rem}.form-select optgroup{font-weight:600;font-style:normal;color:hsl(var(--primary))}.form-select option{font-weight:400;color:hsl(var(--foreground))}.card-elevated{background-color:hsl(var(--card));border-radius:1rem;box-shadow:var(--shadow-card);border:1px solid hsl(var(--border) / .5)}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (min-width: 1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient: linear-gradient( 100deg, hsl(var(--primary-dark)) 0%, hsl(var(--primary)) 42%, hsl(var(--cta-band-end, var(--secondary-dark))) 100% );position:relative;overflow:hidden;background:var(--cta-band-gradient)}.cta-band:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line, 0 0% 100%) / .6) 50%,transparent 100%)}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:linear-gradient(165deg,hsl(0 0% 100% / .07) 0%,transparent 48%)}.section-footer{background-color:hsl(var(--footer-bg, var(--dark-bg)));color:hsl(var(--footer-fg, var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted, var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line, var(--dark-muted)) / .3)}.text-clay{color:hsl(var(--clay, var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (min-width: 640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (min-width: 640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary) / .1)}.bg-secondary\/15{background-color:hsl(var(--secondary) / .15)}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-card\/95{background-color:hsl(var(--card) / .95)}.border-border\/50{border-color:hsl(var(--border) / .5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted) / .3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{position:fixed;top:0;left:0;right:0;z-index:50;background-color:hsl(var(--background) / .8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out}.header-normal{position:relative;transition:all .3s ease-in-out;border-bottom:1px solid hsl(var(--border)/.3)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.border-border\/30{border-color:hsl(var(--border) / .3)}.font-secondary{font-family:var(--font-secondary, "Inter"),var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;transform:translateY(30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;transform:translateY(-30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;transform:translate(-30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;transform:translate(30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;transform:scale(.97);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion: reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{transition:none!important;opacity:1!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary) / .2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary) / .3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary) / .15),0 0 20px hsl(var(--secondary) / .1),0 4px 10px -4px hsl(var(--secondary) / .2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary) / .25),0 0 30px hsl(var(--secondary) / .15),0 5px 10px -5px hsl(var(--secondary) / .3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary) / .35),0 0 60px hsl(var(--secondary) / .2),0 0 90px hsl(var(--secondary-dark) / .1),0 10px 10px -10px hsl(var(--secondary) / .4)}.icon-secondary-linear{background-color:hsl(var(--secondary) / .1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));color:hsl(var(--secondary-foreground))!important;position:relative}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent) /.5),hsl(var(--accent-dark) / .5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{border:1px solid rgba(255,255,255,.9);background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));box-shadow:#0000001a 0 10px 20px 5px;position:relative}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card)) 40%,hsl(var(--card) / .92));box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005;border:1px solid rgba(255,255,255,.9);transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s ease;position:relative}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008;transform:translateY(-2px) scale(1.005);filter:brightness(1.01)}.variante-glass-flow .btn,.variante-glass-flow button,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{position:relative;overflow:hidden;isolation:isolate;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s ease}.variante-glass-flow .btn:hover,.variante-glass-flow button:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary) / .3);transform:translateY(-2px);filter:brightness(1.08)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;transform:none;filter:none;overflow:visible;isolation:auto;transition:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary) / .06);stroke:hsl(var(--secondary) / .45);stroke-width:1.5;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep, var(--secondary)));font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary) / .18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));font-size:11px;text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke} diff --git a/public/build/b2a/theme-b2a-BCAFYDZJ.css b/public/build/b2a/theme-b2a-BCAFYDZJ.css new file mode 100644 index 00000000..9c564501 --- /dev/null +++ b/public/build/b2a/theme-b2a-BCAFYDZJ.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:0 25% 96%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:207 70% 26%;--primary-light:207 70% 36%;--primary-lighter:207 70% 86%;--primary-dark:207 70% 20%;--primary-foreground:30 25% 98%;--secondary:352 76% 48%;--secondary-light:352 76% 56%;--secondary-lighter:352 76% 75%;--secondary-dark:352 76% 42%;--secondary-foreground:0 25% 96%;--muted:0 0% 92%;--muted-foreground:199 50% 45%;--accent:210 20% 95%;--accent-foreground:20 14% 16%;--dark-bg:207 70% 26%;--dark-text:30 25% 98%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--ring:20 14% 16%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"Merriweather",Georgia,serif}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/b2a/theme-b2in-DK_BFMo-.css b/public/build/b2a/theme-b2in-DK_BFMo-.css new file mode 100644 index 00000000..e35ad105 --- /dev/null +++ b/public/build/b2a/theme-b2in-DK_BFMo-.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:38 33% 95%;--foreground:26 8% 16%;--card:40 43% 98%;--card-foreground:26 8% 16%;--popover:40 43% 98%;--popover-foreground:26 8% 16%;--primary:175 16% 15%;--primary-light:175 13% 22%;--primary-lighter:175 8% 82%;--primary-dark:175 18% 11%;--primary-foreground:38 33% 95%;--secondary:37 69% 39%;--secondary-light:37 62% 48%;--secondary-lighter:37 55% 78%;--secondary-dark:37 70% 32%;--secondary-deep:37 70% 30%;--cta-band-line:37 69% 39%;--secondary-foreground:38 33% 95%;--clay:24 15% 57%;--muted:30 24% 90%;--muted-foreground:24 12% 40%;--accent:28 25% 80%;--accent-dark:28 25% 74%;--accent-foreground:26 8% 16%;--dark-bg:175 16% 15%;--dark-text:38 33% 95%;--dark-muted:38 20% 76%;--footer-bg:28 25% 80%;--footer-fg:175 16% 15%;--footer-muted:24 12% 40%;--footer-line:175 16% 15%;--cta-band-end:175 12% 26%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:28 20% 84%;--input:40 40% 98%;--ring:175 16% 15%;--radius:.75rem;--hero-container:30 28% 89%;--hero-container-dark:28 25% 83%;--hero-container-light:36 32% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"EB Garamond","Georgia","Times New Roman",serif}.world-immobilien{--background:32 20% 97%;--foreground:20 14% 16%;--card:0 25% 96%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:209 32% 25%;--primary-light:209 32% 35%;--primary-lighter:209 32% 85%;--primary-dark:209 32% 20%;--primary-foreground:0 25% 96%;--secondary:199 74% 49%;--secondary-light:199 74% 56%;--secondary-lighter:199 74% 75%;--secondary-dark:199 74% 42%;--secondary-deep:199 74% 36%;--secondary-foreground:0 25% 96%;--clay:199 50% 35%;--muted:0 0% 92%;--muted-foreground:199 50% 35%;--accent:210 0% 90%;--accent-dark:210 0% 85%;--accent-foreground:20 14% 16%;--dark-bg:209 32% 25%;--dark-text:0 0% 100%;--dark-muted:0 0% 80%;--footer-bg:209 32% 25%;--footer-fg:0 0% 100%;--footer-muted:0 0% 80%;--footer-line:0 0% 80%;--cta-band-end:199 74% 42%;--border:0 0% 80%;--input:0 0% 92%;--ring:20 14% 16%;--hero-container:0 0% 93%;--hero-container-dark:0 0% 85%;--hero-container-light:0 0% 95%;--font-secondary:"IBM Plex Sans","Inter",system-ui,-apple-system,sans-serif}.world-interior{--background:40 25% 98%;--card:0 0% 100%;--popover:0 0% 100%;--muted:40 12% 94%;--muted-foreground:24 8% 38%;--accent:36 14% 93%;--accent-dark:36 14% 88%;--border:36 12% 88%;--input:0 0% 100%;--hero-container:40 14% 95%;--hero-container-dark:40 12% 90%;--hero-container-light:40 25% 98%;--footer-bg:175 16% 15%;--footer-fg:38 33% 95%;--footer-muted:38 20% 76%;--footer-line:38 20% 76%;--shadow-card:0 6px 24px -10px hsl(var(--foreground)/.14);--shadow-elevated:0 24px 48px -20px hsl(var(--foreground)/.2)}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.world-interior .btn-secondary-accent{color:hsl(var(--primary));border:1px solid hsl(var(--primary)/.55);box-shadow:none;background:0 0!important}.world-interior .btn-secondary-accent:hover{color:hsl(var(--primary-foreground));border-color:hsl(var(--primary));background:hsl(var(--primary))!important}.world-interior .section-footer .text-secondary{color:hsl(var(--secondary))}.world-interior .section-footer{border-top:1px solid hsl(var(--footer-muted)/.35)}.world-interior .appointment-toggle.btn-secondary-accent{background:hsl(var(--card))!important}.world-interior .appointment-toggle.btn-secondary-accent:hover{background:hsl(var(--primary))!important}.world-interior .cookie-consent-wrapper{--cc-primary:hsl(var(--secondary));--cc-primary-hover:hsl(var(--secondary-dark));--cc-save:hsl(var(--primary));--cc-save-hover:hsl(var(--primary-light));--cc-button-bg:hsl(var(--primary));--cc-button-hover:hsl(var(--primary-light))}.world-interior .cookie-consent-wrapper .cc-floating-btn{color:hsl(var(--primary-foreground));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)));--tw-ring-color:hsl(var(--secondary))!important}.world-interior .cookie-consent-wrapper .cc-floating-btn:hover{background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))}.footer-logo-dark,.world-interior .footer-logo-light{display:none}.world-interior .footer-logo-dark{display:block}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}.world-interior :is(h2,h3).text-xl{font-size:1.5rem;line-height:1.25}.world-interior h4{font-size:1.25rem;line-height:1.3}.variante-glass-flow button[data-hero-dot],.variante-glass-flow button[data-hero-dot]:hover{box-shadow:none;filter:none;overflow:visible;transform:none}section.bg-secondary [data-vision-box] .text-secondary{color:hsl(var(--secondary))}.world-interior .variante-glass-flow div.hero-frame,.world-interior div.hero-frame{background:linear-gradient(to bottom right,#f5f4f3,#f2f0ed)padding-box,linear-gradient(125deg,hsl(var(--secondary-lighter)/.9),hsl(var(--secondary-light)/.75)22%,hsl(var(--secondary-lighter)/.45)55%,hsl(var(--secondary-light)/.75)82%,hsl(var(--secondary-lighter)/.9))border-box;border:1.5px solid #0000}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/b2a/theme-stileigentum-skwGRiP0.css b/public/build/b2a/theme-stileigentum-skwGRiP0.css new file mode 100644 index 00000000..ae385070 --- /dev/null +++ b/public/build/b2a/theme-stileigentum-skwGRiP0.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:38 40% 97%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:209 65% 20%;--primary-light:209 65% 30%;--primary-lighter:209 65% 80%;--primary-dark:209 65% 15%;--primary-foreground:0 25% 96%;--secondary:38 40% 66%;--secondary-light:38 40% 76%;--secondary-lighter:38 40% 85%;--secondary-dark:38 40% 55%;--secondary-foreground:20 14% 16%;--muted:209 35% 94%;--muted-foreground:209 10% 40%;--accent:38 40% 88%;--accent-foreground:209 10% 40%;--dark-bg:209 65% 20%;--dark-text:0 0% 100%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"EB Garamond",Georgia,serif}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.text-section-title{line-height:.95em}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/b2a/theme-style2own-1F1Xts-B.css b/public/build/b2a/theme-style2own-1F1Xts-B.css new file mode 100644 index 00000000..c6487a9a --- /dev/null +++ b/public/build/b2a/theme-style2own-1F1Xts-B.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:30 25% 98%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:195 100% 34%;--primary-light:195 100% 44%;--primary-lighter:195 100% 84%;--primary-dark:195 100% 24%;--primary-foreground:30 25% 98%;--secondary:46 95% 56%;--secondary-light:46 95% 66%;--secondary-lighter:46 95% 86%;--secondary-dark:46 95% 46%;--secondary-foreground:20 14% 16%;--muted:0 0% 92%;--muted-foreground:199 50% 45%;--accent:210 20% 95%;--accent-foreground:20 14% 16%;--dark-bg:195 100% 34%;--dark-text:30 25% 98%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"Ephesis",cursive}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.text-hero{font-size:clamp(3.6rem,4.2vw,7.8rem)!important}.text-section-title{line-height:.85em;font-size:clamp(2.1rem,3.9vw,3.9rem)!important}.text-xl{font-size:clamp(1.3rem,2.2vw,2.2rem)!important}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/b2in/app-OG3MHWAj.js b/public/build/b2in/app-OG3MHWAj.js new file mode 100644 index 00000000..a71b089a --- /dev/null +++ b/public/build/b2in/app-OG3MHWAj.js @@ -0,0 +1 @@ +(function(){let o=null;document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r):r();function r(){s(),u(),c(),document.addEventListener("livewire:navigated",function(){s()}),document.addEventListener("livewire:load",function(){s()}),window.addEventListener("livewire:update",function(){setTimeout(()=>{s()},100)})}function s(){const n={threshold:.15,rootMargin:"0px 0px -80px 0px"};o||(o=new IntersectionObserver(e=>{e.forEach(t=>{t.isIntersecting&&(setTimeout(()=>{t.target.classList.add("is-visible")},50),o.unobserve(t.target))})},n)),document.querySelectorAll(".scroll-animate:not(.is-visible):not(.observed), .fade-in:not(.is-visible):not(.observed), .slide-up:not(.is-visible):not(.observed), .slide-right:not(.is-visible):not(.observed), .slide-left:not(.is-visible):not(.observed), .scale-in:not(.is-visible):not(.observed), .slide-down:not(.is-visible):not(.observed)").forEach(e=>{e.classList.add("observed"),o.observe(e)}),window.appointmentLinksInitialized||(document.addEventListener("click",function(e){const t=e.target.closest("a[data-open-appointment]");t&&(e.preventDefault(),window.dispatchEvent(new CustomEvent("open-appointment",{detail:{topic:t.dataset.appointmentTopic||null}})))}),window.appointmentLinksInitialized=!0),window.smoothScrollInitialized||(document.addEventListener("click",function(e){const t=e.target.closest('a[href^="#"]');if(t&&t.hash){const l=document.querySelector(t.hash);if(l){e.preventDefault();const f=l.getBoundingClientRect().top+window.pageYOffset-80;window.scrollTo({top:f,behavior:"smooth"})}}}),window.smoothScrollInitialized=!0)}function c(){const n=document.getElementById("main-header");if(!n)return;function i(){(window.pageYOffset||document.documentElement.scrollTop)>50?n.classList.add("scrolled"):n.classList.remove("scrolled")}let e=!1;window.addEventListener("scroll",function(){e||(window.requestAnimationFrame(function(){i(),e=!1}),e=!0)}),i()}function u(){const n=document.createElement("div");n.className="scroll-progress-bar",document.body.appendChild(n);function i(){const t=window.innerHeight,l=document.documentElement.scrollHeight,d=window.pageYOffset||document.documentElement.scrollTop,a=d/(l-t)*100;n.style.width=`${Math.min(a,100)}%`,d>100?n.classList.add("visible"):n.classList.remove("visible")}let e=!1;window.addEventListener("scroll",function(){e||(window.requestAnimationFrame(function(){i(),e=!1}),e=!0)}),i()}})(); diff --git a/public/build/b2in/error-reporting-BiGrjXpD.js b/public/build/b2in/error-reporting-BiGrjXpD.js new file mode 100644 index 00000000..0cd20769 --- /dev/null +++ b/public/build/b2in/error-reporting-BiGrjXpD.js @@ -0,0 +1 @@ +const y="modulepreload",A=function(e){return"https://b2in.test/build/"+e},h={},_=function(r,t,a){let u=Promise.resolve();if(t&&t.length>0){let o=function(s){return Promise.all(s.map(c=>Promise.resolve(c).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const n=document.querySelector("meta[property=csp-nonce]"),m=(n==null?void 0:n.nonce)||(n==null?void 0:n.getAttribute("nonce"));u=o(t.map(s=>{if(s=A(s),s in h)return;h[s]=!0;const c=s.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${f}`))return;const l=document.createElement("link");if(l.rel=c?"stylesheet":y,c||(l.as="script"),l.crossOrigin="",l.href=s,m&&l.setAttribute("nonce",m),document.head.appendChild(l),c)return new Promise((b,S)=>{l.addEventListener("load",b),l.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${s}`)))})}))}function d(o){const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=o,window.dispatchEvent(n),!n.defaultPrevented)throw o}return u.then(o=>{for(const n of o||[])n.status==="rejected"&&d(n.reason);return r().catch(d)})},i=(()=>{const e=document.querySelector('meta[name="pk-error-reporting"]');try{return e?JSON.parse(e.content):null}catch{return null}})(),v=["page","q","tab","sort"],P=new RegExp("(?<=\\/)[A-Za-z0-9_-]{32,}(?=\\/|$)","g"),w=/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi;function p(e){try{const r=new URL(e,window.location.origin);r.pathname=r.pathname.replace(P,"[Filtered]");for(const t of[...r.searchParams.keys()])!v.includes(t)&&!t.startsWith("utm_")&&r.searchParams.set(t,"[Filtered]");return r.hash="",r.toString().replace(w,"[email]")}catch{return"[Filtered]"}}let E=null;function R(){return E??(E=_(()=>import("./error-reporting-sdk-CLmutOST.js"),[]).then(e=>(e.init({dsn:i.dsn,release:i.release||void 0,environment:i.environment,sampleRate:i.sampleRate??1,sendDefaultPii:!1,integrations:r=>r.filter(t=>!["GlobalHandlers","Breadcrumbs","BrowserSession","BrowserApiErrors"].includes(t.name)),ignoreErrors:["ResizeObserver loop","Script error.","AbortError"],denyUrls:[/^chrome-extension:\/\//,/^moz-extension:\/\//,/^safari-(web-)?extension:\/\//],beforeSend(r){var t,a,u,d;(t=r.request)!=null&&t.url&&(r.request.url=p(r.request.url)),(u=(a=r.request)==null?void 0:a.headers)!=null&&u.Referer&&(r.request.headers.Referer=p(r.request.headers.Referer));for(const o of((d=r.exception)==null?void 0:d.values)??[])o.value&&(o.value=o.value.replace(w,"[email]"));return r}}),i.userId&&e.setUser({id:String(i.userId)}),e.setTag("area",i.area),e))),E}function k(e){var a;if(e instanceof Error)return e;const r=((a=e==null?void 0:e.constructor)==null?void 0:a.name)??typeof e;let t;try{t=typeof e=="string"?e:JSON.stringify(e)}catch{t=String(e)}return new Error(`Unbehandelte Ablehnung (${r}): ${String(t??"").slice(0,300)}`)}function g(e){R().then(r=>r.captureException(e)).catch(()=>{})}i!=null&&i.dsn&&(window.addEventListener("error",e=>{e.error&&g(e.error)}),window.addEventListener("unhandledrejection",e=>{g(k(e.reason))})); diff --git a/public/build/b2in/error-reporting-sdk-CLmutOST.js b/public/build/b2in/error-reporting-sdk-CLmutOST.js new file mode 100644 index 00000000..e5da0866 --- /dev/null +++ b/public/build/b2in/error-reporting-sdk-CLmutOST.js @@ -0,0 +1,15 @@ +const m=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,_=globalThis,W="11.6.0";function rt(){return gt(_),_}function gt(t){const e=t.__SENTRY__=t.__SENTRY__||{};return e.version=e.version||W,e[W]=e[W]||{}}function st(t,e,n=_){const r=n.__SENTRY__=n.__SENTRY__||{},s=r[W]=r[W]||{};return s[t]||(s[t]=e())}const Nn=["debug","info","warn","error","log","assert","trace"],Mr="Sentry Logger ",Ot={};function j(t){if(!("console"in _))return t();const e=_.console,n={},r=Object.keys(Ot);r.forEach(s=>{const o=Ot[s];n[s]=e[s],e[s]=o});try{return t()}finally{r.forEach(s=>{e[s]=n[s]})}}function $r(){me().enabled=!0}function Fr(){me().enabled=!1}function Cn(){return me().enabled}function jr(...t){he("log",...t)}function Br(...t){he("warn",...t)}function Ur(...t){he("error",...t)}function he(t,...e){m&&Cn()&&j(()=>{_.console[t](`${Mr}[${t}]:`,...e)})}function me(){return m?st("loggerSettings",()=>({enabled:!1})):{enabled:!1}}const h={enable:$r,disable:Fr,isEnabled:Cn,log:jr,warn:Br,error:Ur},An=50,q="?",Re=/\(error: (.*)\)/,Oe=/captureMessage|captureException/;function xn(...t){const e=t.sort((n,r)=>n[0]-r[0]).map(n=>n[1]);return(n,r=0,s=0)=>{const o=[],i=n.split(` +`);for(let a=r;a1024&&(c=c.slice(0,1024));const u=Re.test(c)?c.replace(Re,"$1"):c;if(!u.includes("Error: ")){for(const f of e){const l=f(u);if(l){o.push(l);break}}if(o.length>=An+s)break}}return Wr(o.slice(s))}}function Hr(t){return Array.isArray(t)?xn(...t):t}function Wr(t){if(!t.length)return[];const e=Array.from(t);return/sentryWrapped/.test(vt(e).function||"")&&e.pop(),e.reverse(),Oe.test(vt(e).function||"")&&(e.pop(),Oe.test(vt(e).function||"")&&e.pop()),e.slice(0,An).map(n=>({...n,filename:n.filename||vt(e).filename,function:n.function||q}))}function vt(t){return t[t.length-1]||{}}const jt="";function $(t){try{return!t||typeof t!="function"?jt:t.name||jt}catch{return jt}}function Ne(t){const e=t.exception;if(e){const n=[];try{return e.values.forEach(r=>{r.stacktrace.frames&&n.push(...r.stacktrace.frames)}),n}catch{return}}}const ft={},Ce={};function z(t,e){return ft[t]=ft[t]||[],ft[t].push(e),()=>{const n=ft[t];if(n){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}}}function Y(t,e){if(!Ce[t]){Ce[t]=!0;try{e()}catch(n){m&&h.error(`Error while instrumenting ${t}`,n)}}}function w(t,e){const n=t&&ft[t];if(n)for(const r of n)try{r(e)}catch(s){m&&h.error(`Error while triggering instrumentation handler. +Type: ${t} +Name: ${$(r)} +Error:`,s)}}let Bt=null;function qr(t){const e="error";z(e,t),Y(e,Gr)}function Gr(){Bt=_.onerror,_.onerror=function(t,e,n,r,s){return w("error",{column:r,error:s,line:n,msg:t,url:e}),Bt?Bt.apply(this,arguments):!1},_.onerror.__SENTRY_INSTRUMENTED__=!0}let Ut=null;function zr(t){const e="unhandledrejection";z(e,t),Y(e,Yr)}function Yr(){Ut=_.onunhandledrejection,_.onunhandledrejection=function(t){return w("unhandledrejection",t),Ut?Ut.apply(this,arguments):!0},_.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const Dn=Object.prototype.toString;function D(t){switch(Dn.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object WebAssembly.Exception]":return!0;default:return _e(t,Error)}}function ot(t,e){return Dn.call(t)===`[object ${e}]`}function Ln(t){return ot(t,"ErrorEvent")}function Ae(t){return ot(t,"DOMError")}function Kr(t){return ot(t,"DOMException")}function x(t){return ot(t,"String")}function ge(t){return typeof t=="object"&&t!==null&&"__sentry_template_string__"in t&&"__sentry_template_values__"in t}function it(t){return t===null||ge(t)||typeof t!="object"&&typeof t!="function"}function Nt(t){return ot(t,"Object")}function xt(t){return typeof t=="object"&&t!==null}function Dt(t){return typeof Event<"u"&&_e(t,Event)}function Vr(t){return ot(t,"RegExp")}function at(t){return!!(t!=null&&t.then&&typeof t.then=="function")}function _e(t,e){try{return t instanceof e}catch{return!1}}function Pn(t){return typeof Request<"u"&&_e(t,Request)}function T(t,e,n){if(!(e in t))return;const r=t[e];if(typeof r!="function")return;const s=n(r);typeof s=="function"&&Mn(s,r);try{t[e]=s}catch{m&&h.log(`Failed to replace method "${e}" in object`,t)}}function F(t,e,n){try{Object.defineProperty(t,e,{value:n,writable:!0,configurable:!0})}catch{m&&h.log(`Failed to add non-enumerable property "${String(e)}" to object`,t)}}function Mn(t,e){try{const n=e.prototype||{};t.prototype=e.prototype=n,F(t,"__sentry_original__",e)}catch{}}function ye(t){return t.__sentry_original__}function $n(t){if(D(t))return{message:t.message,name:t.name,stack:t.stack,...xe(t)};if(Dt(t)){const{type:e,target:n,currentTarget:r,detail:s}=t;return{type:e,target:n,currentTarget:r,...s?{detail:s}:{},...xe(t)}}return t}function xe(t){return xt(t)?Object.fromEntries(Object.entries(t)):{}}function Xr(t){const e=Object.keys($n(t));return e.sort(),e[0]?e.join(", "):"[object has no keys]"}let J;function pt(t){if(J!==void 0)return J?J(t):t();const e=Symbol.for("__SENTRY_SAFE_RANDOM_ID_WRAPPER__"),n=_;return e in n&&typeof n[e]=="function"?(J=n[e],J(t)):(J=null,t())}function Ee(){return pt(()=>Math.random())}function K(){return pt(()=>Date.now())}const Jr=Symbol.for("sentry.skipNormalization"),Qr=Symbol.for("sentry.overrideNormalizationDepth");function Zr(t){return!!t[Jr]}function ts(t){const e=t[Qr];return typeof e=="number"?e:void 0}let Kt;function es(t){Kt=t}function A(t,e=100,n=1/0){try{return Vt("",t,e,n)}catch(r){return{ERROR:`**non-serializable** (${r})`}}}function Fn(t,e=3,n=100*1024){const r=A(t,e);return ss(r)>n?Fn(t,e-1,n):r}function Vt(t,e,n=1/0,r=1/0,s=os()){const[o,i]=s;if(e==null||["boolean","string"].includes(typeof e)||typeof e=="number"&&Number.isFinite(e))return e;const a=jn(t,e);if(!a.startsWith("[object "))return a;if(Zr(e))return e;const c=ts(e),u=c!==void 0?c:n;if(u===0)return a.replace("object ","");if(o(e))return"[Circular ~]";const f=e;if(f&&typeof f.toJSON=="function")try{const p=f.toJSON();return Vt("",p,u-1,r,s)}catch{}const l=Array.isArray(e)?[]:{};let d=0;const g=$n(e);for(const p in g){if(!Object.prototype.hasOwnProperty.call(g,p))continue;if(d>=r){l[p]="[MaxProperties ~]";break}const I=g[p];l[p]=Vt(p,I,u-1,r,s),d++}return i(e),l}function jn(t,e){try{if(Kt){const r=Kt(e);if(r)return r}return typeof global<"u"&&e===global?"[Global]":typeof e=="number"&&!Number.isFinite(e)?`[${e}]`:typeof e=="function"?`[Function: ${$(e)}]`:typeof e=="symbol"?`[${String(e)}]`:typeof e=="bigint"?`[BigInt: ${String(e)}]`:`[object ${ns(e)}]`}catch(n){return`**non-serializable** (${n})`}}function ns(t){const e=Object.getPrototypeOf(t);return e!=null&&e.constructor?e.constructor.name:"null prototype"}function rs(t){return~-encodeURI(t).split(/%..|./).length}function ss(t){return rs(JSON.stringify(t))}function os(){const t=new WeakSet;function e(r){return t.has(r)?!0:(t.add(r),!1)}function n(r){t.delete(r)}return[e,n]}function Xt(t,e=0){return typeof t!="string"||e===0||t.length<=e?t:`${t.slice(0,e)}...`}function is(t,e){if(!Array.isArray(t))return"";const n=[];for(let r=0;rt.randomUUID()).replace(/-/g,"")}catch{}return Ht||(Ht="10000000100040008000"+1e11),Ht.replace(/[018]/g,e=>(e^(cs()&15)>>e/4).toString(16))}function Bn(t){var e,n;return(n=(e=t.exception)==null?void 0:e.values)==null?void 0:n[0]}function H(t){const{message:e,event_id:n}=t;if(e)return e;const r=Bn(t);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||n||"":n||""}function Jt(t,e,n){const r=t.exception=t.exception||{},s=r.values=r.values||[],o=s[0]=s[0]||{};o.value||(o.value=e||""),o.type||(o.type="Error")}function Z(t,e){const n=Bn(t);n&&Un(n,e)}function us(t,e){var s;const n=(s=t.exception)==null?void 0:s.values,r=(n==null?void 0:n.find(o=>{var i;return((i=o.mechanism)==null?void 0:i.exception_id)===0}))??(n==null?void 0:n[0]);r&&Un(r,e)}function Un(t,e){const n={type:"generic",handled:!0},r=t.mechanism;t.mechanism={...n,...r,...e},e&&"data"in e&&(t.mechanism.data={...r==null?void 0:r.data,...e.data})}function De(t){if(fs(t))return!0;try{F(t,"__sentry_captured__",!0)}catch{}return!1}function fs(t){try{return t.__sentry_captured__}catch{}}const Hn=1e3,ls=1e3,ds=100;function yt(){return K()/Hn}let Q=[];function ps(){const{performance:t}=_;if(!(t!=null&&t.now)||!t.timeOrigin)return t!=null&&t.now&&(Q=[{from:0,origin:K()-pt(()=>t.now())}]),yt;let e=t.timeOrigin;Q=[{from:0,origin:e}];let n=!0,r=0;return()=>pt(()=>{const s=t.now(),o=Date.now();return Math.abs(e+s-o)>ls&&(e=o-s,n?Q=[{from:0,origin:e}]:(Q.push({from:r,origin:e}),Q.length>ds&&Q.splice(1,1))),n=!1,r=s,(e+s)/Hn})}let Le;function R(){return(Le??(Le=ps()))()}function hs(t){const e=R(),n={sid:k(),init:!0,timestamp:e,started:e,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>gs(n)};return t&&tt(n,t),n}function tt(t,e={}){if(e.user&&(!t.ipAddress&&e.user.ip_address&&(t.ipAddress=e.user.ip_address),!t.did&&!e.did&&(t.did=e.user.id||e.user.email||e.user.username)),t.timestamp=e.timestamp||R(),e.abnormal_mechanism&&(t.abnormal_mechanism=e.abnormal_mechanism),e.ignoreDuration&&(t.ignoreDuration=e.ignoreDuration),e.sid&&(t.sid=e.sid.length===32?e.sid:k()),e.init!==void 0&&(t.init=e.init),!t.did&&e.did&&(t.did=`${e.did}`),typeof e.started=="number"&&(t.started=e.started),t.ignoreDuration)t.duration=void 0;else if(typeof e.duration=="number")t.duration=e.duration;else{const n=t.timestamp-t.started;t.duration=n>=0?n:0}e.release&&(t.release=e.release),e.environment&&(t.environment=e.environment),!t.ipAddress&&e.ipAddress&&(t.ipAddress=e.ipAddress),!t.userAgent&&e.userAgent&&(t.userAgent=e.userAgent),typeof e.errors=="number"&&(t.errors=e.errors),e.status&&(t.status=e.status)}function ms(t,e){let n={};t.status==="ok"&&(n={status:"exited"}),tt(t,n)}function gs(t){return{sid:`${t.sid}`,init:t.init,started:new Date(t.started*1e3).toISOString(),timestamp:new Date(t.timestamp*1e3).toISOString(),status:t.status,errors:t.errors,did:typeof t.did=="number"||typeof t.did=="string"?`${t.did}`:void 0,duration:t.duration,abnormal_mechanism:t.abnormal_mechanism,attrs:{release:t.release,environment:t.environment,ip_address:t.ipAddress,user_agent:t.userAgent}}}function Et(t,e,n=2){if(!e||typeof e!="object"||n<=0)return e;if(t&&Object.keys(e).length===0)return t;const r={...t};for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=Et(r[s],e[s],n-1));return r}function _s(){return k()}function Wn(){return k().substring(16)}const ys=100;class O{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._attributes={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},F(this,"refs",{}),this._propagationContext={traceId:_s(),sampleRand:Ee()}}clone(){const e=new O;return e._breadcrumbs=[...this._breadcrumbs],e._tags={...this._tags},e._attributes={...this._attributes},e._extra={...this._extra},e._contexts={...this._contexts},this._contexts.flags&&(e._contexts.flags={values:[...this._contexts.flags.values]}),e._user=this._user,e._level=this._level,e._session=this._session,e._transactionName=this._transactionName,e._fingerprint=this._fingerprint,e._eventProcessors=[...this._eventProcessors],e._attachments=[...this._attachments],e._sdkProcessingMetadata={...this._sdkProcessingMetadata},e._propagationContext={...this._propagationContext},e._client=this._client,e._lastEventId=this._lastEventId,e._conversationId=this._conversationId,e.refs={...this.refs},e}setClient(e){this._client=e}setLastEventId(e){this._lastEventId=e}getClient(){return this._client}lastEventId(){return this._lastEventId}addScopeListener(e){this._scopeListeners.push(e)}addEventProcessor(e){return this._eventProcessors.push(e),this}setUser(e){return this._user=e||{email:void 0,id:void 0,ip_address:void 0,username:void 0},this._session&&tt(this._session,{user:e}),this._notifyScopeListeners(),this}getUser(){return this._user}setConversationId(e){return this._conversationId=e||void 0,this._notifyScopeListeners(),this}setTags(e){return this._tags={...this._tags,...e},this._notifyScopeListeners(),this}setTag(e,n){return this.setTags({[e]:n})}setAttributes(e){return this._attributes={...this._attributes,...e},this._notifyScopeListeners(),this}setAttribute(e,n){return this.setAttributes({[e]:n})}removeAttribute(e){return e in this._attributes&&(delete this._attributes[e],this._notifyScopeListeners()),this}setExtras(e){return this._extra={...this._extra,...e},this._notifyScopeListeners(),this}setExtra(e,n){return this._extra={...this._extra,[e]:n},this._notifyScopeListeners(),this}setFingerprint(e){return this._fingerprint=e,this._notifyScopeListeners(),this}setLevel(e){return this._level=e,this._notifyScopeListeners(),this}setTransactionName(e){return this._transactionName=e,this._notifyScopeListeners(),this}setContext(e,n){return n===null?delete this._contexts[e]:this._contexts[e]=n,this._notifyScopeListeners(),this}setSession(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(e){if(!e)return this;const n=typeof e=="function"?e(this):e,r=n instanceof O?n.getScopeData():Nt(n)?e:void 0,{tags:s,attributes:o,extra:i,user:a,contexts:c,level:u,fingerprint:f=[],propagationContext:l,conversationId:d}=r||{};return this._tags={...this._tags,...s},this._attributes={...this._attributes,...o},this._extra={...this._extra,...i},this._contexts={...this._contexts,...c},a&&Object.keys(a).length&&(this._user=a),u&&(this._level=u),f.length&&(this._fingerprint=f),l&&(this._propagationContext=l),d&&(this._conversationId=d),this}addBreadcrumb(e,n){const r=typeof n=="number"?n:ys;if(r<=0)return this;const s={timestamp:yt(),...e,message:e.message?Xt(e.message,2048):e.message};return this._breadcrumbs.push(s),this._breadcrumbs.length>r&&(this._breadcrumbs=this._breadcrumbs.slice(-r)),this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(e){return this._attachments.push(e),this}clearAttachments(){return this._attachments=[],this}getScopeData(){return{breadcrumbs:this._breadcrumbs,attachments:this._attachments,contexts:this._contexts,tags:this._tags,attributes:this._attributes,extra:this._extra,user:this._user,level:this._level,fingerprint:this._fingerprint||[],eventProcessors:this._eventProcessors,propagationContext:this._propagationContext,sdkProcessingMetadata:this._sdkProcessingMetadata,transactionName:this._transactionName,conversationId:this._conversationId}}setSDKProcessingMetadata(e){return this._sdkProcessingMetadata=Et(this._sdkProcessingMetadata,e,2),this}setPropagationContext(e){return this._propagationContext=e,this}getPropagationContext(){return this._propagationContext}captureException(e,n){const r=(n==null?void 0:n.event_id)||k();if(!this._client)return m&&h.warn("No client configured on scope - will not capture exception!"),r;const s=new Error("Sentry syntheticException");return this._client.captureException(e,{originalException:e,syntheticException:s,...n,event_id:r},this),r}captureMessage(e,n,r){const s=(r==null?void 0:r.event_id)||k();if(!this._client)return m&&h.warn("No client configured on scope - will not capture message!"),s;const o=(r==null?void 0:r.syntheticException)??new Error(e);return this._client.captureMessage(e,n,{originalException:e,syntheticException:o,...r,event_id:s},this),s}captureEvent(e,n){const r=e.event_id||(n==null?void 0:n.event_id)||k();return this._client?(this._client.captureEvent(e,{...n,event_id:r},this),r):(m&&h.warn("No client configured on scope - will not capture event!"),r)}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(e=>{e(this)}),this._notifyingListeners=!1)}}function Es(){return st("defaultCurrentScope",()=>new O)}function Ss(){return st("defaultIsolationScope",()=>new O)}const Pe="__SENTRY_SUPPRESS_TRACING__",Me=t=>t instanceof Promise&&!t[qn],qn=Symbol("chained PromiseLike"),bs=(t,e,n)=>{const r=t.then(s=>(e(s),s),s=>{throw n(s),s});return Me(r)&&Me(t)?r:vs(t,r)},vs=(t,e)=>{if(!e)return t;let n=!1;for(const r in t){if(r in e)continue;n=!0;const s=t[r];typeof s=="function"?Object.defineProperty(e,r,{value:(...o)=>s.apply(t,o),enumerable:!0,configurable:!0,writable:!0}):e[r]=s}return n&&Object.assign(e,{[qn]:!0}),e};class Is{constructor(e,n){let r;e?r=e:r=new O;let s;n?s=n:s=new O,this._stack=[{scope:r}],this._isolationScope=s}withScope(e){const n=this._pushScope();let r;try{r=e(n)}catch(s){throw this._popScope(),s}return at(r)?bs(r,()=>this._popScope(),()=>this._popScope()):(this._popScope(),r)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStackTop(){return this._stack[this._stack.length-1]}_pushScope(){const e=this.getScope().clone();return this._stack.push({client:this.getClient(),scope:e}),e}_popScope(){return this._stack.length<=1?!1:!!this._stack.pop()}}function et(){const t=rt(),e=gt(t);return e.stack=e.stack||new Is(Es(),Ss())}function Gn(t){return et().withScope(t)}function Ts(t,e){const n=et();return n.withScope(()=>(n.getStackTop().scope=t,e(t)))}function $e(t){return et().withScope(()=>t(et().getIsolationScope()))}function ks(){return{suppressTracing:ws,withIsolationScope:$e,withScope:Gn,withSetScope:Ts,withSetIsolationScope:(t,e)=>$e(e),getCurrentScope:()=>et().getScope(),getIsolationScope:()=>et().getIsolationScope()}}function ws(t){return Gn(e=>{e.setSDKProcessingMetadata({[Pe]:!0});const n=t();return e.setSDKProcessingMetadata({[Pe]:void 0}),n})}function Lt(t){const e=gt(t);return e.acs?e.acs:ks()}function Rs(t){return typeof t=="object"&&t!=null&&!Array.isArray(t)&&Object.keys(t).includes("value")}function Os(t,e){const{value:n,unit:r}=Rs(t)?t:{value:t,unit:void 0},s=Ns(n),o=r&&typeof r=="string"?{unit:r}:{};if(s)return{...s,...o};if(!e||e==="skip-undefined"&&n===void 0)return;let i="";try{i=JSON.stringify(n)??""}catch{}return{value:i,type:"string",...o}}function Fe(t,e=!1){const n={};for(const[r,s]of Object.entries(t??{})){const o=Os(s,e);o&&(n[r]=o)}return n}function Ns(t){if(Array.isArray(t))return{value:t,type:"array"};const e=typeof t=="string"?"string":typeof t=="boolean"?"boolean":typeof t=="number"&&!Number.isNaN(t)?Number.isInteger(t)?"integer":"double":null;if(e)return{value:t,type:e}}function zn(){var t,e;return(e=(t=gt(rt())).externalPropagationContextProvider)==null?void 0:e.call(t)}function N(){const t=rt();return Lt(t).getCurrentScope()}function L(){const t=rt();return Lt(t).getIsolationScope()}function Cs(){return st("globalScope",()=>new O)}function As(...t){const e=rt(),n=Lt(e);if(t.length===2){const[r,s]=t;return r?n.withSetScope(r,s):n.withScope(s)}return n.withScope(t[0])}function S(){return N().getClient()}function Yn(t){const e=zn();if(e)return{trace_id:e.traceId,span_id:e.spanId};const n=t.getPropagationContext(),{traceId:r,parentSpanId:s,propagationSpanId:o}=n,i={trace_id:r,span_id:o||Wn()};return s&&(i.parent_span_id=s),i}const xs="gen_ai.conversation.id",Ds="http.request.header",Kn="sentry.exclusive_time",Ls="sentry.is_localhost",Vn="sentry.op",Ps="sentry.origin",Xn="sentry.profile_id",Ms="sentry.segment.name.source",$s="url.full",Fs="user_agent.original",js="sentry.sample_rate",Bs="sentry.previous_trace_sample_rate",Us=["ok","deadline_exceeded","unauthenticated","permission_denied","not_found","resource_exhausted","invalid_argument","unimplemented","unavailable","internal_error","unknown_error","cancelled","already_exists","failed_precondition","aborted","out_of_range","data_loss"],Hs=0,Ws=1;function qs(t){return t!=="ok"&&Us.includes(t)}function Jn(t){if(t){if(typeof t=="object"&&"deref"in t&&typeof t.deref=="function")try{return t.deref()}catch{return}return t}}const Gs="_sentryScope",zs="_sentryIsolationScope";function Qt(t){const e=t;return{scope:e[Gs],isolationScope:Jn(e[zs])}}const je="sentry-";function Ys(t){const e=Ks(t);if(!e)return;const n=Object.entries(e).reduce((r,[s,o])=>{if(s.startsWith(je)){const i=s.slice(je.length);r[i]=o}return r},{});if(Object.keys(n).length>0)return n}function Ks(t){if(!(!t||!x(t)&&!Array.isArray(t)))return Array.isArray(t)?t.reduce((e,n)=>{const r=Be(n);return Object.entries(r).forEach(([s,o])=>{e[s]=o}),e},{}):Be(t)}function Be(t){return t.split(",").map(e=>{const n=e.indexOf("=");if(n===-1)return[];const r=e.slice(0,n),s=e.slice(n+1);return[r,s].map(o=>{try{return decodeURIComponent(o.trim())}catch{return}})}).reduce((e,[n,r])=>(n&&r&&(e[n]=r),e),{})}const Vs=/^o(\d+)\./,Xs=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)((?:\[[:.%\w]+\]|[\w.-]+))(?::(\d+))?\/(.+)/;function Js(t){return t==="http"||t==="https"}function St(t,e=!1){const{host:n,path:r,pass:s,port:o,projectId:i,protocol:a,publicKey:c}=t;return`${a}://${c}${e&&s?`:${s}`:""}@${n}${o?`:${o}`:""}/${r&&`${r}/`}${i}`}function Qs(t){const e=Xs.exec(t);if(!e){j(()=>{console.error(`Invalid Sentry Dsn: ${t}`)});return}const[n,r,s="",o="",i="",a=""]=e.slice(1);let c="",u=a;const f=u.split("/");if(f.length>1&&(c=f.slice(0,-1).join("/"),u=f.pop()),u){const l=u.match(/^\d+/);l&&(u=l[0])}return Qn({host:o,pass:s,path:c,projectId:u,port:i,protocol:n,publicKey:r})}function Qn(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function Zs(t){if(!m)return!0;const{port:e,projectId:n,protocol:r}=t;return["protocol","publicKey","host","projectId"].find(i=>t[i]?!1:(h.error(`Invalid Sentry Dsn: ${i} missing`),!0))?!1:n.match(/^\d+$/)?Js(r)?e&&isNaN(parseInt(e,10))?(h.error(`Invalid Sentry Dsn: Invalid port ${e}`),!1):!0:(h.error(`Invalid Sentry Dsn: Invalid protocol ${r}`),!1):(h.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),!1)}function to(t){const e=t.match(Vs);return e==null?void 0:e[1]}function eo(t){const e=t.getOptions(),{host:n}=t.getDsn()||{};let r;return e.orgId?r=String(e.orgId):n&&(r=to(n)),r}function no(t){const e=typeof t=="string"?Qs(t):Qn(t);if(!(!e||!Zs(e)))return e}function ro(t){if(typeof t=="boolean")return Number(t);const e=typeof t=="string"?parseFloat(t):t;if(!(typeof e!="number"||isNaN(e)||e<0||e>1))return e}const so="span";function oo(t){return Jn(t.refs[so])}const Zn=1;function io(t){const{spanId:e,traceId:n,isRemote:r}=t.spanContext(),s=r?e:Pt(t).parent_span_id,o=Qt(t).scope,i=r?(o==null?void 0:o.getPropagationContext().propagationSpanId)||Wn():e;return{parent_span_id:s,span_id:i,trace_id:n}}function ao(t){if(t&&t.length>0)return t.map(({context:{spanId:e,traceId:n,traceFlags:r,...s},attributes:o})=>({span_id:e,trace_id:n,sampled:r===Zn,attributes:o,...s}))}function Ue(t){return typeof t=="number"?He(t):Array.isArray(t)?t[0]+t[1]/1e9:t instanceof Date?He(t.getTime()):R()}function He(t){return t>9999999999?t/1e3:t}function Pt(t){if(lo(t))return t.getStaticSpanJSON();const{spanId:e,traceId:n}=t.spanContext();if(fo(t)){const{attributes:r,startTime:s,name:o,endTime:i,status:a,links:c}=t;return{span_id:e,trace_id:n,data:r,description:o,parent_span_id:co(t),start_timestamp:Ue(s),timestamp:Ue(i)||void 0,status:ho(a),op:r[Vn],origin:r[Ps],links:ao(c)}}return{span_id:e,trace_id:n,start_timestamp:0,status:"ok",data:{}}}function co(t){var e;return"parentSpanId"in t?t.parentSpanId:"parentSpanContext"in t?(e=t.parentSpanContext)==null?void 0:e.spanId:void 0}function uo(t){var e;return{...t,end_timestamp:t.end_timestamp??t.start_timestamp,attributes:Fe(t.attributes),links:(e=t.links)==null?void 0:e.map(n=>({...n,attributes:Fe(n.attributes)}))}}function fo(t){const e=t;return!!e.attributes&&!!e.startTime&&!!e.name&&!!e.endTime&&!!e.status}function lo(t){return typeof t.getSpanJSON=="function"}function po(t){const{traceFlags:e}=t.spanContext();return e===Zn}function ho(t){return!t||t.code===Hs||t.code===Ws?"ok":t.message&&qs(t.message)?t.message:"internal_error"}const mo="_sentryRootSpan",tr=go;function go(t){return t[mo]||t}function _o(t){const e=rt(),n=Lt(e);return n.getActiveSpan?n.getActiveSpan(t):oo(t||N())}function We(t){var n;if(typeof __SENTRY_TRACING__=="boolean"&&!__SENTRY_TRACING__)return!1;const e=t||((n=S())==null?void 0:n.getOptions());return!!e&&(e.tracesSampleRate!=null||!!e.tracesSampler)}function qe(t){h.log(`Ignoring span ${t.op} - ${t.description} because it matches \`ignoreSpans\`.`)}function Ge(t,e){if(!(e!=null&&e.length))return!1;for(const n of e){if(So(n)){if(t.description&&dt(t.description,n))return m&&qe(t),!0;continue}const r=!!n.attributes&&Object.keys(n.attributes).length>0;if(!n.name&&!n.op&&!r)continue;const s=n.name?t.description&&dt(t.description,n.name):!0,o=n.op?t.op&&dt(t.op,n.op):!0,i=n.attributes?Object.entries(n.attributes).every(([a,c])=>{var u;return yo((u=t.attributes)==null?void 0:u[a],c)}):!0;if(s&&o&&i)return m&&qe(t),!0}return!1}function yo(t,e){return typeof t=="string"&&(typeof e=="string"||e instanceof RegExp)?dt(t,e):Array.isArray(t)&&Array.isArray(e)?t.length===e.length&&t.every((n,r)=>n===e[r]):t===e}function Eo(t,e){const n=e.parent_span_id,r=e.span_id;if(n)for(const s of t)s.parent_span_id===r&&(s.parent_span_id=n)}function So(t){return typeof t=="string"||t instanceof RegExp}const ze=[];function bo(t){const e={};return t.forEach(n=>{const{name:r}=n,s=e[r];s&&!s.isDefaultInstance&&n.isDefaultInstance||(e[r]=n)}),Object.values(e)}function vo(t){const e=t.defaultIntegrations||[],n=t.integrations;e.forEach(s=>{s.isDefaultInstance=!0});let r;if(Array.isArray(n))r=[...e,...n];else if(typeof n=="function"){const s=n(e);r=Array.isArray(s)?s:[s]}else r=e;return bo(r)}function Io(t,e){const n={};return e.forEach(r=>{r!=null&&r.beforeSetup&&r.beforeSetup(t)}),e.forEach(r=>{r&&er(t,r,n)}),n}function Ye(t,e){for(const n of e)n!=null&&n.afterAllSetup&&n.afterAllSetup(t)}function er(t,e,n){if(n[e.name]){m&&h.log(`Integration skipped because it was already installed: ${e.name}`);return}if(n[e.name]=e,!ze.includes(e.name)&&typeof e.setupOnce=="function"&&(e.setupOnce(),ze.push(e.name)),e.setup&&typeof e.setup=="function"&&e.setup(t),typeof e.preprocessEvent=="function"){const r=e.preprocessEvent.bind(e);t.on("preprocessEvent",(s,o)=>r(s,o,t))}if(typeof e.processEvent=="function"){const r=e.processEvent.bind(e),s=Object.assign((o,i)=>r(o,i,t),{id:e.name});t.addEventProcessor(s)}["processSpan","processSegmentSpan"].forEach(r=>{const s=e[r];typeof s=="function"&&t.on(r,o=>s.call(e,o,t))}),m&&h.log(`Integration installed: ${e.name}`)}const Se="production",To=Symbol.for("sentry.nonRecordingSpan");function ko(t){return!!t&&t[To]===!0}const wo="_frozenDsc";function nr(t,e){const n=e.getOptions(),{publicKey:r}=e.getDsn()||{},s={environment:n.environment||Se,release:n.release,public_key:r,trace_id:t,org_id:eo(e)};return e.emit("createDsc",s),s}function rr(t,e){if(zn())return;const n=e.getPropagationContext();return n.dsc||nr(n.traceId,t)}function Ro(t){var V;const e=S();if(!e)return{};const n=tr(t),r=Pt(n),s=r.data,o=n.spanContext().traceState,i=(o==null?void 0:o.get("sentry.sample_rate"))??s[js]??s[Bs];function a(b){return(typeof i=="number"||typeof i=="string")&&(b.sample_rate=`${i}`),b}const c=n[wo];if(c)return a(c);const u=ko(n),f=u&&n.dropReason==="ignored";if(u&&(!We(e.getOptions())||f)){const b=Qt(n).scope,B=b&&rr(e,b);if(B){const X={...B};return f&&(X.sampled="false"),a(X)}}const l=o==null?void 0:o.get("sentry.dsc"),d=l&&Ys(l);if(d)return a(d);const g=nr(t.spanContext().traceId,e),p=s[Ms],I=r.description;return p!=="url"&&I&&(g.transaction=I),We()&&(g.sampled=String(po(n)),g.sample_rand=(o==null?void 0:o.get("sentry.sample_rand"))??((V=Qt(n).scope)==null?void 0:V.getPropagationContext().sampleRand.toString())),a(g),e.emit("createDsc",g,n),g}function Oo(t,e){const{fingerprint:n,breadcrumbs:r,sdkProcessingMetadata:s}=e;No(t,e),Do(t,n),Co(t,r),Ao(t,s)}function Ke(t,e){const{extra:n,tags:r,attributes:s,user:o,contexts:i,level:a,sdkProcessingMetadata:c,breadcrumbs:u,fingerprint:f,eventProcessors:l,attachments:d,propagationContext:g,transactionName:p}=e;ut(t,"extra",n),ut(t,"tags",r),ut(t,"attributes",s),ut(t,"user",o),ut(t,"contexts",i),t.sdkProcessingMetadata=Et(t.sdkProcessingMetadata,c,2),a&&(t.level=a),p&&(t.transactionName=p),u.length&&(t.breadcrumbs=[...t.breadcrumbs,...u]),f.length&&(t.fingerprint=[...t.fingerprint,...f]),l.length&&(t.eventProcessors=[...t.eventProcessors,...l]),d.length&&(t.attachments=[...t.attachments,...d]),t.propagationContext={...t.propagationContext,...g}}function ut(t,e,n){t[e]=Et(t[e],n,1)}function sr(t,e){const n=Cs().getScopeData();return t&&Ke(n,t.getScopeData()),e&&Ke(n,e.getScopeData()),n}function No(t,e){const{extra:n,tags:r,user:s,contexts:o,level:i,transactionName:a}=e;Object.keys(n).length&&(t.extra={...n,...t.extra}),Object.keys(r).length&&(t.tags={...r,...t.tags}),Object.keys(s).length&&(t.user={...s,...t.user}),Object.keys(o).length&&(t.contexts={...o,...t.contexts}),i&&(t.level=i),a&&t.type!=="transaction"&&(t.transaction=a)}function Co(t,e){const n=[...t.breadcrumbs||[],...e];t.breadcrumbs=n.length?n:void 0}function Ao(t,e){t.sdkProcessingMetadata={...t.sdkProcessingMetadata,...e}}function xo(t,e){t.contexts={trace:io(e),...t.contexts},t.sdkProcessingMetadata={dynamicSamplingContext:Ro(e),...t.sdkProcessingMetadata};const n=tr(e),r=Pt(n).description;r&&!t.transaction&&t.type==="transaction"&&(t.transaction=r)}function Do(t,e){t.fingerprint=t.fingerprint?Array.isArray(t.fingerprint)?t.fingerprint:[t.fingerprint]:[],e&&(t.fingerprint=t.fingerprint.concat(e)),t.fingerprint.length||delete t.fingerprint}function ht(t,e,n){let r;try{r=e()}catch(s){return Ve(t,s,n)}return at(r)?r.then(void 0,s=>Ve(t,s,n)):r}function Ve(t,e,n){return m&&h.error(t,e),n(e)}function or(t){return!!t&&typeof t=="function"&&"_static"in t&&!!t._static}function Xe(t,e){return ht(m?"The `beforeSendSpan` callback threw an error, sending the span unmodified:":"",()=>e(t),()=>t)||t}function Lo(t){const e={trace_id:t.trace_id,span_id:t.span_id,parent_span_id:t.parent_span_id,name:t.description||"",start_timestamp:t.start_timestamp,end_timestamp:t.timestamp,status:!t.status||t.status==="ok"||t.status==="cancelled"?"ok":"error",is_segment:!1,attributes:{...t.data},links:t.links};return uo(e)}function ir(t,e){const n=t.attributes??(t.attributes={});Object.entries(e).forEach(([r,s])=>{s!=null&&!(r in n)&&(n[r]=s)})}function Po(t){return t.getOptions().traceLifecycle==="stream"}function ar(t){return typeof t=="object"&&typeof t.unref=="function"&&t.unref(),t}function ct(t,e=[]){return[t,e]}function Je(t,e){const[n,r]=t;return[n,[...r,e]]}function Zt(t,e){const n=t[1];for(const r of n){const s=r[0].type;if(e(r,s))return!0}return!1}function Mo(t,e){return Zt(t,(n,r)=>e.includes(r))}function te(t){const e=gt(_);return e.encodePolyfill?e.encodePolyfill(t):new TextEncoder().encode(t)}function $o(t){const[e,n]=t;let r=JSON.stringify(e);function s(o){typeof r=="string"?r=typeof o=="string"?r+o:[te(r),o]:r.push(typeof o=="string"?te(o):o)}for(const o of n){const[i,a]=o;if(s(` +${JSON.stringify(i)} +`),typeof a=="string"||a instanceof Uint8Array)s(a);else{let c;try{c=JSON.stringify(a)}catch{c=JSON.stringify(A(a))}s(c)}}return typeof r=="string"?r:Fo(r)}function Fo(t){const e=t.reduce((s,o)=>s+o.length,0),n=new Uint8Array(e);let r=0;for(const s of t)n.set(s,r),r+=s.length;return n}function jo(t){const e=typeof t.data=="string"?te(t.data):t.data;return[{type:"attachment",length:e.length,filename:t.filename,content_type:t.contentType,attachment_type:t.attachmentType},e]}const cr={sessions:"session",event:"error",client_report:"internal",user_report:"default",profile_chunk:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",raw_security:"security",log:"log_item",trace_metric:"metric"};function Bo(t){return t in cr}function Qe(t){return Bo(t)?cr[t]:t}function ur(t){if(!(t!=null&&t.sdk))return;const{name:e,version:n}=t.sdk;return{name:e,version:n}}function Uo(t,e,n,r){var o;const s=(o=t.sdkProcessingMetadata)==null?void 0:o.dynamicSamplingContext;return{event_id:t.event_id,sent_at:new Date(K()).toISOString(),...e&&{sdk:e},...!!n&&r&&{dsn:St(r)},...s&&{trace:s}}}function ee(t){return t==="replay_event"?"replay":t||"error"}function Ho(){return typeof __SENTRY_BROWSER_BUNDLE__<"u"&&!!__SENTRY_BROWSER_BUNDLE__}function Wo(){/*! __SENTRY_SDK_SOURCE__ */return"npm"}function qo(){return!Ho()&&Object.prototype.toString.call(typeof process<"u"?process:0)==="[object process]"}function Mt(){return typeof window<"u"&&(!qo()||Go())}function Go(){const t=_.process;return(t==null?void 0:t.type)==="renderer"}function zo(t,e){const n=e.getDataCollectionOptions().userInfo?"auto":"never";return[{type:"span",item_count:t.length,content_type:"application/vnd.sentry.items.span.v2+json"},{version:2,ingest_settings:Mt()?{infer_ip:n,infer_user_agent:n}:void 0,items:t}]}const Yo=new WeakMap;function Ko(t){return it(t)?void 0:t}function Vo(t,e,n){var a;const r=Ko(e.originalException),s=r&&Yo.get(r);if(!s)return;const o=(a=t.contexts)==null?void 0:a.trace;((o==null?void 0:o.trace_id)??(n&&Yn(n).trace_id))===s.trace_id&&(t.contexts={...t.contexts,trace:{...o,...s}})}function Xo(t,e){var r,s,o,i;if(!e)return t;const n=t.sdk||{};return t.sdk={...n,name:n.name||e.name,version:n.version||e.version,integrations:[...((r=t.sdk)==null?void 0:r.integrations)||[],...e.integrations||[]],packages:[...((s=t.sdk)==null?void 0:s.packages)||[],...e.packages||[]],settings:(o=t.sdk)!=null&&o.settings||e.settings?{...(i=t.sdk)==null?void 0:i.settings,...e.settings}:void 0},t}function Jo(t,e,n,r){const s=ur(n),o={sent_at:new Date(K()).toISOString(),...s&&{sdk:s},...!!r&&e&&{dsn:St(e)}},i="aggregates"in t?[{type:"sessions"},t]:[{type:"session"},t.toJSON()];return ct(o,[i])}function Qo(t,e,n,r){const s=ur(n),o=t.type&&t.type!=="replay_event"?t.type:"event";Xo(t,n==null?void 0:n.sdk);const i=Uo(t,s,r,e);return delete t.sdkProcessingMetadata,ct(i,[[{type:o},t]])}const Wt=0,Ze=1,tn=2;function bt(t){return new mt(e=>{e(t)})}function fr(t){return new mt((e,n)=>{n(t)})}class mt{constructor(e){this._state=Wt,this._handlers=[],this._runExecutor(e)}then(e,n){return new mt((r,s)=>{this._handlers.push([!1,o=>{if(!e)r(o);else try{r(e(o))}catch(i){s(i)}},o=>{if(!n)s(o);else try{r(n(o))}catch(i){s(i)}}]),this._executeHandlers()})}catch(e){return this.then(n=>n,e)}finally(e){return new mt((n,r)=>{let s,o;return this.then(i=>{o=!1,s=i,e&&e()},i=>{o=!0,s=i,e&&e()}).then(()=>{if(o){r(s);return}n(s)})})}_executeHandlers(){if(this._state===Wt)return;const e=this._handlers.slice();this._handlers=[],e.forEach(n=>{n[0]||(this._state===Ze&&n[1](this._value),this._state===tn&&n[2](this._value),n[0]=!0)})}_runExecutor(e){const n=(o,i)=>{if(this._state===Wt){if(at(i)){i.then(r,s);return}this._state=o,this._value=i,this._executeHandlers()}},r=o=>{n(Ze,o)},s=o=>{n(tn,o)};try{e(r,s)}catch(o){s(o)}}}function Zo(t,e,n,r=0,s){try{const o=ne(e,n,t,r,s);return at(o)?o:bt(o)}catch(o){return fr(o)}}function ne(t,e,n,r,s){const o=n[r];if(!t||!o)return t;const i=`Event processor "${o.id||"?"}"`;let a=!1;const c=ht(m?`${i} threw an error, dropping event:`:"",()=>o({...t},e),()=>(a=!0,null));return m&&c===null&&h.log(`${i} dropped event`),at(c)?c.then(u=>u?ne(u,e,n,r+1,s):(s==null||s(a?"callback_error":"event_processor"),null)):c?ne(c,e,n,r+1,s):(s==null||s(a?"callback_error":"event_processor"),null)}let C,en,nn,P;function ti(t){const e=_._sentryDebugIds,n=_._debugIds;if(!e&&!n)return{};const r=e?Object.keys(e):[],s=n?Object.keys(n):[];if(P&&r.length===en&&s.length===nn)return P;en=r.length,nn=s.length,P={},C||(C={});const o=(i,a)=>{for(const c of i){const u=a[c],f=C==null?void 0:C[c];if(f&&P&&u)P[f[0]]=u,C&&(C[c]=[f[0],u]);else if(u){const l=t(c);for(let d=l.length-1;d>=0;d--){const g=l[d],p=g==null?void 0:g.filename;if(p&&P&&C){P[p]=u,C[c]=[p,u];break}}}}};return e&&o(r,e),n&&o(s,n),P}function re(t){var e;return((e=t.data)==null?void 0:e.__sentry__)===!0}function lr(t){const e=[];t.message&&e.push(t.message);try{const n=t.exception.values[t.exception.values.length-1];n!=null&&n.value&&(e.push(n.value),n.type&&e.push(`${n.type}: ${n.value}`))}catch{}return e}function ei(t,e,n,r,s,o){const{normalizeDepth:i=3,normalizeMaxBreadth:a=1e3}=t,c={...e,event_id:e.event_id||n.event_id||k(),timestamp:e.timestamp||yt()},u=n.integrations||t.integrations.map(b=>b.name);ni(c,t),oi(c,u),s&&s.emit("applyFrameMetadata",e),e.type===void 0&&ri(c,t.stackParser);const f=ai(r,n.captureContext);n.mechanism&&us(c,n.mechanism);const l=s?s.getEventProcessors():[],d=sr(o,f),g=[...n.attachments||[],...d.attachments];g.length&&(n.attachments=g),Oo(c,d);const p=_o(f);p&&xo(c,p),Vo(c,n,f);const I=[...l,...d.eventProcessors];return(re(n)?bt(c):Zo(I,c,n,0,b=>{s&&(s.recordDroppedEvent(b,ee(e.type)),e.type==="transaction"&&s.recordDroppedEvent(b,"span",1+(e.spans||[]).length))})).then(b=>b?(si(b),typeof i=="number"&&i>0?ii(b,i,a):b):null)}function ni(t,e){var a,c;const{environment:n,release:r,dist:s,maxValueLength:o}=e;t.environment=t.environment||n||Se,!t.release&&r&&(t.release=r),!t.dist&&s&&(t.dist=s);const i=t.request;i!=null&&i.url&&o&&(i.url=Xt(i.url,o)),o&&((c=(a=t.exception)==null?void 0:a.values)==null||c.forEach(u=>{u.value&&(u.value=Xt(u.value,o))}))}function ri(t,e){var r,s;const n=ti(e);(s=(r=t.exception)==null?void 0:r.values)==null||s.forEach(o=>{var i,a;(a=(i=o.stacktrace)==null?void 0:i.frames)==null||a.forEach(c=>{c.filename&&(c.debug_id=n[c.filename])})})}function si(t){var r,s;const e={};if((s=(r=t.exception)==null?void 0:r.values)==null||s.forEach(o=>{var i,a;(a=(i=o.stacktrace)==null?void 0:i.frames)==null||a.forEach(c=>{c.debug_id&&(c.abs_path?e[c.abs_path]=c.debug_id:c.filename&&(e[c.filename]=c.debug_id),delete c.debug_id)})}),Object.keys(e).length===0)return;t.debug_meta=t.debug_meta||{},t.debug_meta.images=t.debug_meta.images||[];const n=t.debug_meta.images;Object.entries(e).forEach(([o,i])=>{n.push({type:"sourcemap",code_file:o,debug_id:i})})}function oi(t,e){e.length>0&&(t.sdk=t.sdk||{},t.sdk.integrations=[...t.sdk.integrations||[],...e])}function ii(t,e,n){var s,o;if(!t)return null;const r={...t,...t.breadcrumbs&&{breadcrumbs:t.breadcrumbs.map(i=>({...i,...i.data&&{data:A(i.data,e,n)}}))},...t.user&&{user:A(t.user,e,n)},...t.contexts&&{contexts:A(t.contexts,e,n)},...t.extra&&{extra:A(t.extra,e,n)}};return(s=t.contexts)!=null&&s.trace&&r.contexts&&(r.contexts.trace=t.contexts.trace,t.contexts.trace.data&&(r.contexts.trace.data=A(t.contexts.trace.data,e,n))),t.spans&&(r.spans=t.spans.map(i=>({...i,...i.data&&{data:A(i.data,e,n)}}))),(o=t.contexts)!=null&&o.flags&&r.contexts&&(r.contexts.flags=A(t.contexts.flags,3,n)),r}function ai(t,e){if(!e)return t;const n=t?t.clone():new O;return n.update(e),n}function ci(t){if(t)return ui(t)?{captureContext:t}:li(t)?{captureContext:t}:t}function ui(t){return t instanceof O||typeof t=="function"}const fi=["user","level","extra","contexts","tags","fingerprint","propagationContext"];function li(t){return Object.keys(t).some(e=>fi.includes(e))}function di(t,e){return N().captureException(t,ci(e))}function dr(t,e){return N().captureEvent(t,e)}function Du(t,e){L().setTag(t,e)}function Lu(t){L().setUser(t)}function rn(t){const e=L(),{user:n}=sr(e,N()),{userAgent:r}=_.navigator||{},s=hs({user:n,...r&&{userAgent:r},...t}),o=e.getSession();return(o==null?void 0:o.status)==="ok"&&tt(o,{status:"exited"}),pr(),e.setSession(s),s}function pr(){const t=L(),n=N().getSession()||t.getSession();n&&ms(n),hr(),t.setSession()}function hr(){const t=L(),e=S(),n=t.getSession();n&&e&&e.captureSession(n)}function qt(t=!1){if(t){pr();return}hr()}const pi="7";function hi(t){const e=t.protocol?`${t.protocol}:`:"",n=t.port?`:${t.port}`:"";return`${e}//${t.host}${n}${t.path?`/${t.path}`:""}/api/`}function mi(t){return`${hi(t)}${t.projectId}/envelope/`}function gi(t,e){const n={sentry_version:pi};return t.publicKey&&(n.sentry_key=t.publicKey),e&&(n.sentry_client=`${e.name}/${e.version}`),new URLSearchParams(n).toString()}function _i(t,e,n){return e||`${mi(t)}?${gi(t,n)}`}function yi(t,e){const n=e?"auto":"never";return[{type:"log",item_count:t.length,content_type:"application/vnd.sentry.items.log+json"},{version:2,...Mt()&&{ingest_settings:{infer_ip:n,infer_user_agent:n}},items:t}]}function Ei(t,e,n,r,s){const o={};return e!=null&&e.sdk&&(o.sdk={name:e.sdk.name,version:e.sdk.version}),n&&r&&(o.dsn=St(r)),ct(o,[yi(t,s)])}function Si(t,e){const n=e??bi(t)??[];if(n.length===0)return;const r=t.getOptions(),s=Ei(n,r._metadata,r.tunnel,t.getDsn(),t.getDataCollectionOptions().userInfo);mr().set(t,[]),t.emit("flushLogs"),t.sendEnvelope(s)}function bi(t){return mr().get(t)}function mr(){return st("clientToLogBufferMap",()=>new WeakMap)}function vi(t,e){const n=e?"auto":"never";return[{type:"trace_metric",item_count:t.length,content_type:"application/vnd.sentry.items.trace-metric+json"},{version:2,...Mt()&&{ingest_settings:{infer_ip:n,infer_user_agent:n}},items:t}]}function Ii(t,e,n,r,s){const o={};return e!=null&&e.sdk&&(o.sdk={name:e.sdk.name,version:e.sdk.version}),n&&r&&(o.dsn=St(r)),ct(o,[vi(t,s)])}function Ti(t,e){const n=e??ki(t)??[];if(n.length===0)return;const r=t.getOptions(),s=Ii(n,r._metadata,r.tunnel,t.getDsn(),t.getDataCollectionOptions().userInfo);gr().set(t,[]),t.emit("flushMetrics"),t.sendEnvelope(s)}function ki(t){return gr().get(t)}function gr(){return st("clientToMetricBufferMap",()=>new WeakMap)}function wi(t,e){var s,o,i;if(t.type!=="transaction"||!((s=t.spans)!=null&&s.length)||!((o=t.sdkProcessingMetadata)!=null&&o.hasGenAiSpans)||Po(e))return;const n=[],r=[];for(const a of t.spans)(i=a.op)!=null&&i.startsWith("gen_ai.")?n.push(Lo(a)):r.push(a);if(n.length!==0)return t.spans=r,zo(n,e)}const be=Symbol.for("SentryBufferFullError");function ve(t=100){const e=new Set;function n(){return e.sizer(a),()=>r(a)),a}function o(i){if(!e.size)return bt(!0);const a=Promise.allSettled(Array.from(e)).then(()=>!0);if(!i)return a;const c=[a,new Promise(u=>ar(setTimeout(()=>u(!1),i)))];return Promise.race(c)}return{get $(){return Array.from(e)},add:s,drain:o}}const Ri=60*1e3;function Oi(t,e=K()){const n=parseInt(`${t}`,10);if(!isNaN(n))return n*1e3;const r=Date.parse(`${t}`);return isNaN(r)?Ri:r-e}function Ni(t,e){return t[e]||t.all||0}function Ci(t,e,n=K()){return Ni(t,e)>n}function Ai(t,{statusCode:e,headers:n},r=K()){const s={...t},o=n==null?void 0:n["x-sentry-rate-limits"],i=n==null?void 0:n["retry-after"];if(o)for(const a of o.trim().split(",")){const[c,u,,,f]=a.split(":",5),l=parseInt(c,10),d=(isNaN(l)?60:l)*1e3;if(!u)s.all=r+d;else for(const g of u.split(";"))g==="metric_bucket"?(!f||f.split(";").includes("custom"))&&(s[g]=r+d):s[g]=r+d}else i?s.all=r+Oi(i,r):e===429&&(s.all=r+60*1e3);return s}const _r=64;function xi(t,e,n=ve(t.bufferSize||_r)){let r={};const s=i=>n.drain(i);function o(i){const a=[];if(Zt(i,(l,d)=>{const g=Qe(d);Ci(r,g)?t.recordDroppedEvent("ratelimit_backoff",g):a.push(l)}),a.length===0)return Promise.resolve({});const c=ct(i[0],a),u=l=>{if(Mo(c,["client_report"])){m&&h.warn(`Dropping client report. Will not send outcomes (reason: ${l}).`);return}Zt(c,(d,g)=>{t.recordDroppedEvent(l,Qe(g))})},f=()=>e({body:$o(c)}).then(l=>l.statusCode===413?(m&&h.error("Sentry responded with status code 413. Envelope was discarded due to exceeding size limits."),u("send_error"),l):(m&&l.statusCode!==void 0&&(l.statusCode<200||l.statusCode>=300)&&h.warn(`Sentry responded with status code ${l.statusCode} to sent event.`),r=Ai(r,l),l),l=>{throw u("network_error"),m&&h.error("Encountered error running transport request:",l),l});return n.add(f).then(l=>l,l=>{if(l===be)return m&&h.error("Skipped sending event because buffer is full."),u("queue_overflow"),Promise.resolve({});throw l})}return{send:o,flush:s}}function Di(t,e,n){const r=[{type:"client_report"},{timestamp:yt(),discarded_events:t}];return ct(e?{dsn:e}:{},[r])}function Li(t){var c;const{trace_id:e,parent_span_id:n,span_id:r,status:s,origin:o,data:i,op:a}=((c=t.contexts)==null?void 0:c.trace)??{};return{data:i??{},description:t.transaction,op:a,parent_span_id:n,span_id:r??"",start_timestamp:t.start_timestamp??0,status:s??"ok",timestamp:t.timestamp,trace_id:e??"",origin:o,profile_id:i==null?void 0:i[Xn],exclusive_time:i==null?void 0:i[Kn],measurements:t.measurements,is_segment:!0}}function Pi(t){return{type:"transaction",timestamp:t.timestamp,start_timestamp:t.start_timestamp,transaction:t.description,contexts:{trace:{trace_id:t.trace_id,span_id:t.span_id,parent_span_id:t.parent_span_id,op:t.op,status:t.status,origin:t.origin,data:{...t.data,...t.profile_id&&{[Xn]:t.profile_id},...t.exclusive_time&&{[Kn]:t.exclusive_time}}}},measurements:t.measurements}}function Mi(t){var e;t.traceLifecycle!=="stream"||!(t.beforeSendTransaction||(e=t.ignoreTransactions)!=null&&e.length)||j(()=>{console.warn("[Sentry] `beforeSendTransaction` and `ignoreTransactions` are ignored with `traceLifecycle: 'stream'` (enabled by default). Use `beforeSendSpan` and `ignoreSpans` instead, or set `traceLifecycle: 'static'`.")})}const v={userInfo:!0,cookies:!0,httpHeaders:{request:!0,response:!0},httpBodies:["incomingRequest","outgoingRequest","incomingResponse","outgoingResponse"],urlQueryParams:!0,graphQL:{document:!0,variables:!0},genAI:{inputs:!0,outputs:!0},databaseQueryData:!0,queues:!0,stackFrameVariables:!0,frameContextLines:5};function $i(t){return typeof t=="boolean"||"allow"in t||"deny"in t}function Fi(t){return t===void 0?{...v.httpHeaders}:$i(t)?{request:t,response:t}:{request:t.request??v.httpHeaders.request,response:t.response??v.httpHeaders.response}}function ji(t){var n,r,s,o;const e=t.dataCollection??{};return{userInfo:e.userInfo??v.userInfo,cookies:e.cookies??v.cookies,httpHeaders:Fi(e.httpHeaders),httpBodies:e.httpBodies??v.httpBodies,urlQueryParams:e.urlQueryParams??v.urlQueryParams,graphQL:{document:((n=e.graphQL)==null?void 0:n.document)??v.graphQL.document,variables:((r=e.graphQL)==null?void 0:r.variables)??v.graphQL.variables},genAI:{inputs:((s=e.genAI)==null?void 0:s.inputs)??v.genAI.inputs,outputs:((o=e.genAI)==null?void 0:o.outputs)??v.genAI.outputs},databaseQueryData:e.databaseQueryData??v.databaseQueryData,queues:e.queues??v.queues,stackFrameVariables:e.stackFrameVariables??v.stackFrameVariables,frameContextLines:e.frameContextLines??v.frameContextLines}}const sn="Not capturing exception because it's already been captured.",on="Discarded session because of missing or non-string release",yr=Symbol.for("SentryInternalError"),Er=Symbol.for("SentryDoNotSendEventError"),Bi=5e3,Sr=Symbol.for("SentryClosedClient");function Ui(t){return Sr in t}function kt(t){return{message:t,[yr]:!0}}function Gt(t){return{message:t,[Er]:!0}}function an(t){return xt(t)&&yr in t}function cn(t){return xt(t)&&Er in t}function un(t,e,n,r,s){let o=0,i,a=!1;t.on(n,()=>{o=0,clearTimeout(i),a=!1}),t.on(e,c=>{if(o+=r(c),o>=8e5)s(t);else if(!a){const u=t.getOptions()._flushInterval??Bi;u>0&&(a=!0,i=ar(setTimeout(()=>{s(t)},u)))}}),t.on("flush",()=>{s(t)})}class Hi{constructor(e){var s;this._options={attachStacktrace:!0,...e,traceLifecycle:e.traceLifecycle==="static"?"static":"stream"},this._integrations={},this._numProcessing=0,this._outcomes={},this._hooks={},this._eventProcessors=[],this._promiseBuffer=ve(((s=e.transportOptions)==null?void 0:s.bufferSize)??_r),this._dataCollection=ji(e),this._unhandledSessionStatus="crashed",e.dsn?this._dsn=no(e.dsn):m&&h.warn("No DSN provided, client will not send events.");const{beforeSendSpan:n,traceLifecycle:r}=this._options;if(m&&n&&or(n)!==(r==="static")&&j(()=>{console.warn(`Ignoring \`beforeSendSpan\`: ${r==="static"?"wrap it with":"remove"} \`Sentry.withStaticSpan\` to use it with \`traceLifecycle: "${r}"\`.`)}),this._dsn){const o=_i(this._dsn,e.tunnel,e._metadata?e._metadata.sdk:void 0);this._transport=e.transport({tunnel:this._options.tunnel,recordDroppedEvent:this.recordDroppedEvent.bind(this),...e.transportOptions,url:o})}un(this,"afterCaptureLog","flushLogs",zi,Si),un(this,"afterCaptureMetric","flushMetrics",Gi,Ti)}captureException(e,n,r){const s=k();if(De(e))return m&&h.log(sn),s;const o={event_id:s,...n};return this._process(()=>this.eventFromException(e,o).then(i=>this._captureEvent(i,o,r)).then(i=>i),"error"),o.event_id}captureMessage(e,n,r,s){const o={event_id:k(),...r},i=ge(e)?e:String(e),a=it(e),c=a?this.eventFromMessage(i,n,o):this.eventFromException(e,o);return this._process(()=>c.then(u=>this._captureEvent(u,o,s)),a?"unknown":"error"),o.event_id}captureEvent(e,n,r){const s=k();if(n!=null&&n.originalException&&De(n.originalException))return m&&h.log(sn),s;const o={event_id:s,...n},i=e.sdkProcessingMetadata||{},a=i.capturedSpanScope,c=i.capturedSpanIsolationScope,u=ee(e.type);return this._process(()=>this._captureEvent(e,o,a||r,c),u),o.event_id}captureSession(e){this.sendSession(e),tt(e,{init:!1})}getDsn(){return this._dsn}getOptions(){return this._options}getDataCollectionOptions(){return this._dataCollection}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}async flush(e){const n=this._transport;if(this.emit("flush"),!n)return!0;const r=await this._isClientDoneProcessing(e),s=await n.flush(e);return r&&s}async close(e){Object.defineProperty(this,Sr,{value:!0});const n=await this.flush(e);return this.getOptions().enabled=!1,this.emit("close"),n}getEventProcessors(){return this._eventProcessors}addEventProcessor(e){this._eventProcessors.push(e)}init(){(this._isEnabled()||this._options.integrations.some(({name:e})=>e.startsWith("Spotlight")))&&(this._setupIntegrations(),Mi(this._options))}getIntegrationByName(e){return this._integrations[e]}getIntegrationNames(){return Object.keys(this._integrations)}addIntegration(e){const n=this._integrations[e.name];!n&&e.beforeSetup&&e.beforeSetup(this),er(this,e,this._integrations),n||Ye(this,[e])}sendEvent(e,n={}){this.emit("beforeSendEvent",e,n);const r=wi(e,this);let s=Qo(e,this._dsn,this._options._metadata,this._options.tunnel);if(!re(n))for(const o of n.attachments||[])s=Je(s,jo(o));r&&(s=Je(s,r)),this.sendEnvelope(s).then(o=>this.emit("afterSendEvent",e,o))}sendSession(e){const{release:n,environment:r=Se}=this._options;if("aggregates"in e){const o=e.attrs||{};if(!o.release&&!n){m&&h.warn(on);return}o.release=o.release||n,o.environment=o.environment||r,e.attrs=o}else{if(!e.release&&!n){m&&h.warn(on);return}e.release=e.release||n,e.environment=e.environment||r}this.emit("beforeSendSession",e);const s=Jo(e,this._dsn,this._options._metadata,this._options.tunnel);this.sendEnvelope(s)}recordDroppedEvent(e,n,r=1){if(this._options.sendClientReports){const s=`${e}:${n}`;m&&h.log(`Recording outcome: "${s}"${r>1?` (${r} times)`:""}`),this._outcomes[s]=(this._outcomes[s]||0)+r}}on(e,n){const r=this._hooks[e]=this._hooks[e]||new Set,s=(...o)=>n(...o);return r.add(s),()=>{r.delete(s)}}emit(e,...n){const r=this._hooks[e];r&&r.forEach(s=>s(...n))}async sendEnvelope(e){if(this.emit("beforeEnvelope",e),this._isEnabled()&&this._transport)try{const n=await this._transport.send(e);return this.emit("afterEnvelope",e),n}catch(n){return m&&h.error("Error while sending envelope:",n),{}}return m&&h.error("Transport disabled"),{}}registerCleanup(e){}dispose(){}_setupIntegrations(){const{integrations:e}=this._options;this._integrations=Io(this,e),Ye(this,e)}_updateSessionFromEvent(e,n){var c,u;let r=n.level==="fatal",s=!1;const o=(c=n.exception)==null?void 0:c.values;if(o){s=!0,r=!1;for(const f of o)if(((u=f.mechanism)==null?void 0:u.handled)===!1){r=!0;break}}const i=e.status==="ok";(i&&e.errors===0||i&&r)&&(tt(e,{...r&&{status:this._unhandledSessionStatus},errors:e.errors||Number(s||r)}),this.captureSession(e))}async _isClientDoneProcessing(e){let n=0;for(;!e||nsetTimeout(r,1)),!this._numProcessing)return!0;n++}return!1}_isEnabled(){return this.getOptions().enabled!==!1&&this._transport!==void 0}_prepareEvent(e,n,r,s){const o=this.getOptions(),i=this.getIntegrationNames();return!n.integrations&&i.length&&(n.integrations=i),this.emit("preprocessEvent",e,n),e.type||s.setLastEventId(e.event_id||n.event_id),ei(o,e,n,r,this,s).then(a=>{var u;if(a===null)return a;this.emit("postprocessEvent",a,n),a.contexts={trace:{...(u=a.contexts)==null?void 0:u.trace,...Yn(r)},...a.contexts};const c=rr(this,r);return a.sdkProcessingMetadata={dynamicSamplingContext:c,...a.sdkProcessingMetadata},a})}_captureEvent(e,n={},r=N(),s=L()){return m&&se(e)&&h.log(`Captured error event \`${lr(e)[0]||""}\``),this._processEvent(e,n,r,s).then(o=>o.event_id,o=>{m&&(cn(o)?h.log(o.message):an(o)?h.warn(o.message):h.warn(o))})}_processEvent(e,n,r,s){const o=this.getOptions(),{sampleRate:i}=o,a=br(e),c=se(e),f=`before send for type \`${e.type||"error"}\``;let l="before_send";const d=typeof i>"u"?void 0:ro(i),g=ee(e.type);return this._prepareEvent(e,n,r,s).then(p=>{if(p===null)throw Gt("An event processor returned `null`, will not send event.");if(re(n))return p;const I=qi(this,o,p,n,()=>{l="callback_error"});return Wi(I,f)}).then(p=>{var b;if(p===null){if(this.recordDroppedEvent(l,g),a){const X=e.spans||[];this.recordDroppedEvent(l,"span",1+X.length)}throw Gt(`${f} ${l==="callback_error"?"threw an error":"returned `null`"}, will not send event.`)}const I=r.getSession()||s.getSession();if(c&&I&&this._updateSessionFromEvent(I,p),c&&typeof d=="number"&&Ee()>d)throw this.recordDroppedEvent("sample_rate","error"),Gt(`Discarding event because it's not included in the random sample (sampling rate = ${i})`);if(a){const B=((b=p.sdkProcessingMetadata)==null?void 0:b.spanCountBeforeProcessing)||0,X=p.spans?p.spans.length:0,we=B-X;we>0&&this.recordDroppedEvent("before_send","span",we)}const V=p.transaction_info;if(a&&V&&p.transaction!==e.transaction){const B="custom";p.transaction_info={...V,source:B}}return this.sendEvent(p,n),p}).then(null,p=>{throw cn(p)||an(p)?p:(this.captureException(p,{mechanism:{handled:!1,type:"internal"},data:{__sentry__:!0},originalException:p}),kt(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. +Reason: ${p}`))})}_process(e,n){this._numProcessing++,this._promiseBuffer.add(e).then(r=>(this._numProcessing--,r),r=>(this._numProcessing--,r===be&&this.recordDroppedEvent("queue_overflow",n),r))}_clearOutcomes(){const e=this._outcomes;return this._outcomes={},Object.entries(e).map(([n,r])=>{const[s,o]=n.split(":");return{reason:s,category:o,quantity:r}})}_flushOutcomes(){m&&h.log("Flushing outcomes...");const e=this._clearOutcomes();if(e.length===0){m&&h.log("No outcomes to send");return}if(!this._dsn){m&&h.log("No dsn provided, will not send outcomes");return}m&&h.log("Sending outcomes:",e);const n=Di(e,this._options.tunnel&&St(this._dsn));this.sendEnvelope(n)}}function Wi(t,e){const n=`${e} must return \`null\` or a valid event.`;if(at(t))return t.then(r=>{if(!Nt(r)&&r!==null)throw kt(n);return r},r=>{throw kt(`${e} rejected with ${r}`)});if(!Nt(t)&&t!==null)throw kt(n);return t}function qi(t,e,n,r,s){const{beforeSend:o,ignoreSpans:i,beforeSendTransaction:a}=e,c=or(e.beforeSendSpan)&&e.beforeSendSpan;let u=n;if(se(u)&&o){const f=u;return ht(m?"The `beforeSend` callback threw an error, dropping the event:":"",()=>o(f,r),()=>(s(),null))}if(br(u)){if(c||i){const f=Li(u);if(i!=null&&i.length&&Ge({description:f.description,op:f.op,attributes:f.data},i))return null;if(c){const l=Xe(f,c);u=Et(n,Pi(l))}if(u.spans){const l=[],d=u.spans;for(const p of d){if(i!=null&&i.length&&Ge({description:p.description,op:p.op,attributes:p.data},i)){Eo(d,p);continue}c?l.push(Xe(p,c)):l.push(p)}const g=u.spans.length-l.length;g&&t.recordDroppedEvent("before_send","span",g),u.spans=l}}if(a){if(u.spans){const f=u.spans.length;u.sdkProcessingMetadata={...n.sdkProcessingMetadata,spanCountBeforeProcessing:f}}return ht(m?"The `beforeSendTransaction` callback threw an error, dropping the event:":"",()=>a(u,r),()=>(s(),null))}}return u}function se(t){return t.type===void 0}function br(t){return t.type==="transaction"}function Gi(t){let e=0;return t.name&&(e+=t.name.length*2),e+=8,e+vr(t.attributes)}function zi(t){let e=0;return t.message&&(e+=t.message.length*2),e+vr(t.attributes)}function vr(t){if(!t)return 0;let e=0;return Object.values(t).forEach(n=>{Array.isArray(n)?e+=n.length*fn(n[0]):it(n)?e+=fn(n):e+=100}),e}function fn(t){return typeof t=="string"?t.length*2:typeof t=="number"?8:typeof t=="boolean"?4:0}function Yi(t,e){e.debug===!0&&(m?h.enable():j(()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),Vi(),N().update(e.initialScope);const r=new t(e);return Xi(r),r.init(),r}function Ki(){const t=S();return t&&!Ui(t)?t:void 0}function Vi(){Ki()&&j(()=>{console.warn("[Sentry] `Sentry.init()` was called more than once. The new client replaces the active client, but the active client is not closed, so state from both can mix. Call `Sentry.init()` only once, or call `await Sentry.close()` before you call it again.")})}function Xi(t){N().setClient(t)}const Ir="[Filtered]",Ji=["auth","token","secret","session","password","passwd","pwd","key","jwt","bearer","sso","saml","csrf","xsrf","credentials","sid","identity","set-cookie","cookie"];function Qi(t,e){return e.some(n=>t.includes(n))}function Tr(t,e,n){if(e===!1)return!0;const r=t.toLowerCase();if(Qi(r,Ji))return!0;if(e===!0)return!1;const i=("deny"in e?e.deny:e.allow).some(a=>r.includes(a.toLowerCase()));return"deny"in e?i:!i}function ln(t,e,n){if(e===!1)return{};const r={};for(const s of Object.keys(t))r[s]=Tr(s,e)?Ir:t[s];return r}function Zi(t,e){if(!(!t||e===!1))return t.split("&").map(n=>{const r=n.indexOf("="),s=r===-1?n:n.slice(0,r),o=new URLSearchParams(`${s}=`).keys().next().value;return o!==void 0&&Tr(o,e)?`${s}=${Ir}`:n}).join("&")}function ta(t,e){const n=t.indexOf("#"),r=n===-1?t.length:n,s=t.indexOf("?");if(s===-1||s>r)return t;const o=t.slice(0,s),i=t.slice(s+1,r),a=t.slice(r),c=Zi(i,e);return c?`${o}?${c}${a}`:`${o}${a}`}function ea(t){var e;return((e=t??S())==null?void 0:e.getDataCollectionOptions().urlQueryParams)??!0}function na(t,e){return t===void 0?void 0:ta(t,ea(e))}function zt(t){if(!t)return{};const e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};const n=e[6]||"",r=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],search:n,hash:r,relative:e[5]+n+r}}function ra(t,e=!0){if(t.startsWith("data:")){const n=t.match(/^data:([^;,]+)/),r=n?n[1]:"text/plain",s=t.includes(";base64,"),o=t.indexOf(",");let i="";if(e&&o!==-1){const a=t.slice(o+1);i=a.length>10?`${a.slice(0,10)}... [truncated]`:a}return`data:${r}${s?",base64":""}${i?`,${i}`:""}`}return t}function sa(t){var e;"aggregates"in t?((e=t.attrs)==null?void 0:e.ip_address)===void 0&&(t.attrs={...t.attrs,ip_address:"{{auto}}"}):t.ipAddress===void 0&&(t.ipAddress="{{auto}}")}function oa(t,e,n=[e],r="npm"){const s=(t._metadata=t._metadata||{}).sdk=t._metadata.sdk||{};s.name||(s.name=`sentry.javascript.${e}`,s.packages=n.map(o=>({name:`${r}:@sentry/${o}`,version:W})),s.version=W)}const ia=100;function G(t,e){const n=S(),r=L();if(!n)return;const{beforeBreadcrumb:s=null,maxBreadcrumbs:o=ia}=n.getOptions();if(o<=0)return;const a={timestamp:yt(),...t},c=s?ht(m?"The `beforeBreadcrumb` callback threw an error, dropping the breadcrumb:":"",()=>j(()=>s(a,e)),()=>null):a;c!==null&&(n.emit&&n.emit("beforeAddBreadcrumb",c,e),r.addBreadcrumb(c,o))}const aa="FunctionToString",dn=new WeakMap,ca=()=>({name:aa,setupOnce(){const t=Function.prototype.toString;try{Function.prototype.toString=function(...e){const n=ye(this);let r;try{dn.has(S())&&n!==void 0&&(r=n)}catch{}return t.apply(r??this,e)}}catch{}},setup(t){dn.set(t,!0)}}),ua=ca,fa=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/,/^ResizeObserver loop completed with undelivered notifications.$/,/^Cannot redefine property: googletag$/,/^Can't find variable: gmo$/,/^undefined is not an object \(evaluating 'a\.[A-Z]'\)$/,/can't redefine non-configurable property "solana"/,/vv\(\)\.getRestrictions is not a function/,/Can't find variable: _AutofillCallbackHandler/,/Object Not Found Matching Id:\d+, MethodName:simulateEvent/,/Java exception was raised during method invocation$/,/Java object is gone$/],la="EventFilters",da=(t={})=>{let e;return{name:la,setup(n){const r=n.getOptions();e=pn(t,r)},processEvent(n,r,s){if(!e){const o=s.getOptions();e=pn(t,o)}return pa(n,e)?null:n}}};function pn(t={},e={}){return{allowUrls:[...t.allowUrls||[],...e.allowUrls||[]],denyUrls:[...t.denyUrls||[],...e.denyUrls||[]],ignoreErrors:[...t.ignoreErrors||[],...e.ignoreErrors||[],...t.disableErrorDefaults?[]:fa],ignoreTransactions:[...t.ignoreTransactions||[],...e.ignoreTransactions||[]]}}function pa(t,e){if(t.type){if(t.type==="transaction"&&ma(t,e.ignoreTransactions))return m&&h.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. +Event: ${H(t)}`),!0}else{if(ha(t,e.ignoreErrors))return m&&h.warn(`Event dropped due to being matched by \`ignoreErrors\` option. +Event: ${H(t)}`),!0;if(Ea(t))return m&&h.warn(`Event dropped due to not having an error message, error type or stacktrace. +Event: ${H(t)}`),!0;if(ga(t,e.denyUrls))return m&&h.warn(`Event dropped due to being matched by \`denyUrls\` option. +Event: ${H(t)}. +Url: ${Ct(t)}`),!0;if(!_a(t,e.allowUrls))return m&&h.warn(`Event dropped due to not being matched by \`allowUrls\` option. +Event: ${H(t)}. +Url: ${Ct(t)}`),!0}return!1}function ha(t,e){return e!=null&&e.length?lr(t).some(n=>_t(n,e)):!1}function ma(t,e){if(!(e!=null&&e.length))return!1;const n=t.transaction;return n?_t(n,e):!1}function ga(t,e){if(!(e!=null&&e.length))return!1;const n=Ct(t);return n?_t(n,e):!1}function _a(t,e){if(!(e!=null&&e.length))return!0;const n=Ct(t);return n?_t(n,e):!0}function ya(t=[]){for(let e=t.length-1;e>=0;e--){const n=t[e];if(n&&n.filename!==""&&n.filename!=="[native code]")return n.filename||null}return null}function Ct(t){var e,n;try{const r=[...((e=t.exception)==null?void 0:e.values)??[]].reverse().find(o=>{var i,a,c;return((i=o.mechanism)==null?void 0:i.parent_id)===void 0&&((c=(a=o.stacktrace)==null?void 0:a.frames)==null?void 0:c.length)}),s=(n=r==null?void 0:r.stacktrace)==null?void 0:n.frames;return s?ya(s):null}catch{return m&&h.error(`Cannot extract url for event ${H(t)}`),null}}function Ea(t){var e,n;return(n=(e=t.exception)==null?void 0:e.values)!=null&&n.length?!t.message&&!t.exception.values.some(r=>r.stacktrace||r.type&&r.type!=="Error"||r.value):!1}function Sa(t,e,n,r,s,o){var a;if(!((a=s.exception)!=null&&a.values)||!o||!D(o.originalException))return;const i=s.exception.values.length>0?s.exception.values[s.exception.values.length-1]:void 0;i&&(s.exception.values=oe(t,e,r,o.originalException,n,s.exception.values,i,0))}function oe(t,e,n,r,s,o,i,a){if(o.length>=n+1)return o;let c=[...o];if(D(r[s])){hn(i,a,r);const u=t(e,r[s]),f=c.length;mn(u,s,f,a),c=oe(t,e,n,r[s],s,[u,...c],u,f)}return kr(r)&&r.errors.forEach((u,f)=>{if(D(u)){hn(i,a,r);const l=t(e,u),d=c.length;mn(l,`errors[${f}]`,d,a),c=oe(t,e,n,u,s,[l,...c],l,d)}}),c}function kr(t){return Array.isArray(t.errors)}function hn(t,e,n){t.mechanism={handled:!0,type:"auto.core.linked_errors",...kr(n)&&{is_exception_group:!0},...t.mechanism,exception_id:e}}function mn(t,e,n,r){t.mechanism={handled:!0,...t.mechanism,type:"chained",source:e,exception_id:n,parent_id:r}}function ba(t){return D(t)&&"__sentry_fetch_url_host__"in t&&typeof t.__sentry_fetch_url_host__=="string"}function gn(t){return ba(t)?`${t.message} (${t.__sentry_fetch_url_host__})`:t.message}const At=new Set([]);function va(t){const e="console",n=z(e,t);return Y(e,Ta),n}function Ia(t){for(const e of t)At.add(e);return()=>{for(const e of t)At.delete(e)}}const _n=new Set;function Ta(){"console"in _&&Nn.forEach(function(t){_n.has(t)||!(t in _.console)||(_n.add(t),T(_.console,t,function(e){return Ot[t]=e,function(...n){const r=n[0],s=Ot[t],o=At.size&&typeof r=="string"&&_t(r,At);o||w("console",{args:n,level:t}),(!o||m&&h.isEnabled())&&(s==null||s.apply(_.console,n))}}))})}function ka(t){return t==="warn"?"warning":["fatal","error","warning","log","info","debug"].includes(t)?t:"log"}const wa="Dedupe",Ra=()=>{let t;return{name:wa,processEvent(e){if(e.type)return e;try{if(Na(e,t))return m&&h.warn("Event dropped due to being a duplicate of previously captured event."),null}catch{}return t=e}}},Oa=Ra;function Na(t,e){return e?!!(Ca(t,e)||Aa(t,e)):!1}function Ca(t,e){const n=t.message,r=e.message;return!(!n&&!r||n&&!r||!n&&r||n!==r||!Rr(t,e)||!wr(t,e))}function Aa(t,e){const n=yn(e),r=yn(t);return!(!n||!r||n.type!==r.type||n.value!==r.value||!Rr(t,e)||!wr(t,e))}function wr(t,e){const n=Ne(t),r=Ne(e);if(!n||!r)return!n&&!r;if(r.length!==n.length)return!1;for(let s=0;s{const e=new Set(t.levels||Nn);return{name:xa,setup(n){const r=va(({args:s,level:o})=>{S()!==n||!e.has(o)||La(o,s)});if(n.registerCleanup(r),t.filter){const s=Ia(t.filter);n.registerCleanup(s)}}}};function La(t,e){const n={category:"console",data:{arguments:e,logger:"console"},level:ka(t),message:En(e)};if(t==="assert")if(e[0]===!1){const r=e.slice(1);n.message=r.length>0?`Assertion failed: ${En(r)}`:"Assertion failed",n.data.arguments=r}else return;G(n,{input:e,level:t})}function En(t){return"util"in _&&typeof _.util.format=="function"?_.util.format(...t):is(t," ")}const Pa="ConversationId",Ma=()=>({name:Pa,setup(t){t.on("spanStart",e=>{const n=N().getScopeData(),r=L().getScopeData(),s=n.conversationId||r.conversationId;if(s){const{op:o,data:i,description:a}=Pt(e);if(!(o!=null&&o.startsWith("gen_ai."))&&!i["ai.operationId"]&&!(a!=null&&a.startsWith("ai.")))return;e.setAttribute(xs,s)}})}}),$a=Ma,ie=_;function Fa(){if(!("fetch"in ie))return!1;try{return new Headers,new Request("data:,"),new Response,!0}catch{return!1}}function ae(t){return t&&/^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}function ja(){var n;if(typeof EdgeRuntime=="string")return!0;if(!Fa())return!1;if(ae(ie.fetch))return!0;let t=!1;const e=ie.document;if(e&&typeof e.createElement=="function")try{const r=e.createElement("iframe");r.hidden=!0,e.head.appendChild(r),(n=r.contentWindow)!=null&&n.fetch&&(t=ae(r.contentWindow.fetch)),e.head.removeChild(r)}catch(r){m&&h.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",r)}return t}function Ba(t){const e="fetch",n=z(e,t);return Y(e,()=>Ua()),n}function Ua(t){Mt()&&!ja()||T(_,"fetch",function(e){return new Proxy(e,{apply(n,r,s){const o=new Error,{method:i,url:a}=Ha(s),c={args:s,fetchData:{method:i,url:a},startTimestamp:R()*1e3,virtualError:o,headers:Wa(s)};return w("fetch",{...c}),Reflect.apply(n,_,s).then(async u=>(w("fetch",{...c,endTimestamp:R()*1e3,response:u}),u),u=>{w("fetch",{...c,endTimestamp:R()*1e3,error:u}),D(u)&&u.stack===void 0&&(u.stack=o.stack,F(u,"framesToPop",1));const f=S(),l=(f==null?void 0:f.getOptions().enhanceFetchErrorMessages)??"always";if(l!==!1&&D(u)&&u.name==="TypeError"&&(u.message==="Failed to fetch"||u.message==="Load failed"||u.message==="NetworkError when attempting to fetch resource."))try{const p=new URL(c.fetchData.url).host;l==="always"?u.message=`${u.message} (${p})`:F(u,"__sentry_fetch_url_host__",p)}catch{}throw u})}})})}function wt(t,e){return xt(t)&&!!t[e]}function Sn(t){return typeof t=="string"?t:t?wt(t,"url")?t.url:t.toString?t.toString():"":""}function Ha(t){if(t.length===0)return{method:"GET",url:""};if(t.length===2){const[n,r]=t;return{url:Sn(n),method:wt(r,"method")?String(r.method).toUpperCase():Pn(n)&&wt(n,"method")?String(n.method).toUpperCase():"GET"}}const e=t[0];return{url:Sn(e),method:wt(e,"method")?String(e.method).toUpperCase():"GET"}}function Wa(t){const[e,n]=t;try{if(typeof n=="object"&&n!==null&&"headers"in n&&n.headers)return new Headers(n.headers);if(Pn(e))return new Headers(e.headers)}catch{}}function Or(t){if(t!==void 0)return t>=400&&t<500?"warning":t>=500?"error":void 0}const ce=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,E=_,qa=80,U={};try{typeof Node<"u"&&(U.parentNode=Object.getOwnPropertyDescriptor(Node.prototype,"parentNode").get),typeof Element<"u"&&(U.tagName=Object.getOwnPropertyDescriptor(Element.prototype,"tagName").get,U.id=Object.getOwnPropertyDescriptor(Element.prototype,"id").get,U.className=Object.getOwnPropertyDescriptor(Element.prototype,"className").get,U.getAttribute=Element.prototype.getAttribute),typeof HTMLElement<"u"&&(U.dataset=Object.getOwnPropertyDescriptor(HTMLElement.prototype,"dataset").get)}catch{}function M(t,e,n){const r=U[e];if(r)try{return r.call(t,n)}catch{}const s=t[e];return typeof s=="function"?s.call(t,n):s}function Nr(t,e={}){if(!t)return"";try{let n=t;const r=5,s=[];let o=0,i=0;const a=" > ",c=a.length;let u;const f=Array.isArray(e)?e:e.keyAttrs,l=!Array.isArray(e)&&e.maxStringLength||qa;for(;n&&o++1&&i+s.length*c+u.length>=l));)s.push(u),i+=u.length,n=M(n,"parentNode");return s.reverse().join(a)}catch{return""}}function Ga(t,e){const n=[],r=M(t,"tagName");if(!r)return"";if(typeof HTMLElement<"u"&&t instanceof HTMLElement){const o=M(t,"dataset");if(o){if(o.sentryComponent)return o.sentryComponent;if(o.sentryElement)return o.sentryElement}}n.push(r.toLowerCase());const s=e!=null&&e.length?e.filter(o=>M(t,"getAttribute",o)).map(o=>[o,M(t,"getAttribute",o)]):null;if(s!=null&&s.length)s.forEach(o=>{n.push(`[${o[0]}="${o[1]}"]`)});else{const o=M(t,"id");o&&n.push(`#${o}`);const i=M(t,"className");if(i&&x(i)){const a=i.split(/\s+/);for(const c of a)n.push(`.${c}`)}}for(const o of["aria-label","type","name","title","alt"]){const i=M(t,"getAttribute",o);i&&n.push(`[${o}="${i}"]`)}return n.join("")}function za(t,e,n){E.document&&E.addEventListener(t,e,n)}function Ya(t,e,n){E.document&&E.removeEventListener(t,e,n)}const Ka=t=>{var n;const e=E.requestIdleCallback||E.setTimeout;if(((n=E.document)==null?void 0:n.visibilityState)==="hidden")t();else{let r=!1;const s=()=>{r||(t(),r=!0)};za("visibilitychange",s,{once:!0,capture:!0}),e(()=>{s(),Ya("visibilitychange",s,{capture:!0})})}};function Va(t,e=5){if(!_.HTMLElement)return null;let n=t;for(let r=0;r{var o,i;const s=(o=E[n])==null?void 0:o.prototype;(i=s==null?void 0:s.hasOwnProperty)!=null&&i.call(s,"addEventListener")&&(T(s,"addEventListener",function(a){return function(c,u,f){if((c==="click"||c=="keypress")&&u)try{const l=this.__sentry_instrumentation_handlers__=this.__sentry_instrumentation_handlers__||{},d=l[c]=l[c]||{captureListeners:new WeakSet,bubbleListeners:new WeakSet,listenerCount:0},g=vn(f);if(!d.handler){const I=In(t);d.handler=I,d.capture=g,a.call(this,c,I,d.capture)}const p=d[g?"captureListeners":"bubbleListeners"];p.has(u)||(typeof f=="object"&&(f!=null&&f.once||f!=null&&f.signal)?d.sticky=!0:(p.add(u),d.listenerCount++))}catch{}return a.call(this,c,u,f)}}),T(s,"removeEventListener",function(a){return function(c,u,f){if((c==="click"||c=="keypress")&&u)try{const l=this.__sentry_instrumentation_handlers__||{},d=l[c];d!=null&&d[vn(f)?"captureListeners":"bubbleListeners"].delete(u)&&(!--d.listenerCount&&!d.sticky&&(a.call(this,c,d.handler,d.capture),d.handler=void 0,delete l[c]),Object.keys(l).length===0&&delete this.__sentry_instrumentation_handlers__)}catch{}return a.call(this,c,u,f)}}))})}function ec(t){if(t.type!==ue)return!1;try{if(!t.target||t.target._sentryId!==fe)return!1}catch{}return!0}function nc(t,e){return t!=="keypress"?!1:e!=null&&e.tagName?!(e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.isContentEditable):!0}function In(t,e=!1){return n=>{if(!n||n._sentryCaptured)return;const r=rc(n);if(nc(n.type,r))return;F(n,"_sentryCaptured",!0),r&&!r._sentryId&&F(r,"_sentryId",k());const s=n.type==="keypress"?"input":n.type;ec(n)||(t({event:n,name:s,global:e}),ue=n.type,fe=r?r._sentryId:void 0),clearTimeout(bn),bn=E.setTimeout(()=>{fe=void 0,ue=void 0},Qa)}}function rc(t){try{return t.target}catch{return null}}let It;function sc(){return"history"in E&&!!E.history}function Ar(t){const e="history";z(e,t),Y(e,oc)}function oc(){if(E.addEventListener("popstate",()=>{const e=E.location.href,n=It;if(It=e,n===e)return;w("history",{from:n,to:e})}),!sc())return;function t(e){return function(...n){const r=n.length>2?n[2]:void 0;if(r){const s=It,o=ic(String(r));if(It=o,s===o)return e.apply(this,n);w("history",{from:s,to:o})}return e.apply(this,n)}}T(E.history,"pushState",t),T(E.history,"replaceState",t)}function ic(t){try{return new URL(t,E.location.origin).toString()}catch{return t}}const Rt={};function ac(t){const e=Rt[t];if(e)return e;let n=E[t];if(ae(n))return Rt[t]=n.bind(E);const r=E.document;if(r&&typeof r.createElement=="function")try{const s=r.createElement("iframe");s.hidden=!0,r.head.appendChild(s);const o=s.contentWindow;o!=null&&o[t]&&(n=o[t]),r.head.removeChild(s)}catch(s){ce&&h.warn(`Could not create sandbox iframe for ${t} check, bailing to window.${t}: `,s)}return n&&(Rt[t]=n.bind(E))}function cc(t){Rt[t]=void 0}const lt="__sentry_xhr_v3__";function uc(t){const e="xhr";z(e,t),Y(e,fc)}function fc(){if(!E.XMLHttpRequest)return;const t=XMLHttpRequest.prototype;t.open=new Proxy(t.open,{apply(e,n,r){let s=new Error;const o=R()*1e3,i=x(r[0])?r[0].toUpperCase():void 0,a=lc(r[1]);if(!i||!a)return e.apply(n,r);n[lt]={method:i,url:a,request_headers:{}},i==="POST"&&a.match(/sentry_key/)&&(n.__sentry_own_request__=!0);const c=()=>{const u=n[lt];if(u&&n.readyState===4){try{u.status_code=n.status}catch{}const f={endTimestamp:R()*1e3,startTimestamp:o,xhr:n,virtualError:s};w("xhr",f),s=void 0,n.removeEventListener("readystatechange",c)}};return"onreadystatechange"in n&&typeof n.onreadystatechange=="function"?n.onreadystatechange=new Proxy(n.onreadystatechange,{apply(u,f,l){return c(),u.apply(f,l)}}):n.addEventListener("readystatechange",c),n.setRequestHeader=new Proxy(n.setRequestHeader,{apply(u,f,l){const[d,g]=l,p=f[lt];return p&&x(d)&&x(g)&&(p.request_headers[d.toLowerCase()]=g),u.apply(f,l)}}),e.apply(n,r)}}),t.send=new Proxy(t.send,{apply(e,n,r){const s=n[lt];if(!s)return e.apply(n,r);r[0]!==void 0&&(s.body=r[0]);const o={startTimestamp:R()*1e3,xhr:n};return w("xhr",o),e.apply(n,r)}})}function lc(t){if(x(t))return t;try{return t.toString()}catch{}}function dc(t){if(typeof Element>"u")return!1;try{return t instanceof Element}catch{return!1}}const y=_;let le=0;const Tn=[];function xr(t){if(le>0)return!0;const e=t?Tn.findIndex(n=>pc(n,t)):-1;return e===-1?!1:(Tn.splice(e,1),!0)}function pc(t,e){return t.msg===e.msg&&t.url===e.url&&t.line===e.line&&t.column===e.column}function hc(){le++,setTimeout(()=>{le--})}function nt(t,e={}){function n(s){return typeof s=="function"}if(!n(t))return t;try{if(Object.prototype.hasOwnProperty.call(t,"__sentry_wrapped__")){const o=t.__sentry_wrapped__;return typeof o=="function"?o:t}if(ye(t))return t}catch{return t}const r=function(...s){_._sentryWrappedDepth=(_._sentryWrappedDepth||0)+1;try{const o=s.map(i=>nt(i,e));return t.apply(this,o)}catch(o){throw hc(),As(i=>{i.addEventProcessor(a=>(e.mechanism&&(Jt(a,void 0),Z(a,e.mechanism)),a.extra={...a.extra,arguments:s},a)),di(o)}),o}finally{_._sentryWrappedDepth=(_._sentryWrappedDepth||0)-1}};try{for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&(r[s]=t[s])}catch{}Mn(r,t),F(t,"__sentry_wrapped__",r);try{Object.getOwnPropertyDescriptor(r,"name").configurable&&Object.defineProperty(r,"name",{get(){return t.name}})}catch{}return r}function kn(){const t=Ie(),{referrer:e}=y.document||{},{userAgent:n}=y.navigator||{},r={...e&&{Referer:e},...n&&{"User-Agent":n}};return{url:t,headers:r}}function Te(t,e){const n=$t(t,e),r={type:Ec(e),value:Sc(e)};return n.length&&(r.stacktrace={frames:n}),r.type===void 0&&r.value===""&&(r.value="Unrecoverable error caught"),r}function mc(t,e,n,r){const s=S(),o=s==null?void 0:s.getOptions().normalizeDepth,i=kc(e),a={__serialized__:Fn(e,o)};if(i)return{exception:{values:[Te(t,i)]},extra:a};const u={exception:{values:[{type:Dt(e)?e.constructor.name:r?"UnhandledRejection":"Error",value:Ic(e,{isUnhandledRejection:r})}]},extra:a};if(n){const f=$t(t,n);f.length&&(u.exception.values[0].stacktrace={frames:f})}return u}function Yt(t,e){return{exception:{values:[Te(t,e)]}}}function $t(t,e){const n=e.stacktrace||e.stack||"",r=_c(e),s=yc(e);try{return t(n,r,s)}catch{}return[]}const gc=/Minified React error #\d+;/i;function _c(t){return t&&gc.test(t.message)?1:0}function yc(t){return typeof t.framesToPop=="number"?t.framesToPop:0}function Dr(t){return typeof WebAssembly<"u"&&typeof WebAssembly.Exception<"u"?t instanceof WebAssembly.Exception:!1}function Ec(t){const e=t==null?void 0:t.name;return!e&&Dr(t)?t.message&&Array.isArray(t.message)&&t.message.length==2?t.message[0]:"WebAssembly.Exception":e}function Sc(t){const e=t==null?void 0:t.message;return Dr(t)?Array.isArray(t.message)&&t.message.length==2?t.message[1]:"wasm exception":e?e.error&&typeof e.error.message=="string"?gn(e.error):gn(t):"No error message"}function bc(t,e,n,r){const s=(n==null?void 0:n.syntheticException)||void 0,o=ke(t,e,s,r);return Z(o),o.level="error",n!=null&&n.event_id&&(o.event_id=n.event_id),bt(o)}function vc(t,e,n="info",r,s){const o=(r==null?void 0:r.syntheticException)||void 0,i=de(t,e,o,s);return i.level=n,r!=null&&r.event_id&&(i.event_id=r.event_id),bt(i)}function ke(t,e,n,r,s){var a,c;let o;if(Ln(e)&&e.error)return Yt(t,e.error);if(Ae(e)||Kr(e)){const u=e;if("stack"in e){o=Yt(t,e);const f=(c=(a=o.exception)==null?void 0:a.values)==null?void 0:c[0];if(r&&n&&f&&!f.stacktrace){const l=$t(t,n);l.length&&(f.stacktrace={frames:l},Z(o,{synthetic:!0}))}}else{const f=u.name||(Ae(u)?"DOMError":"DOMException"),l=u.message?`${f}: ${u.message}`:f;o=de(t,l,n,r),Jt(o,l)}return o}if(D(e))return Yt(t,e);if(Nt(e)||Dt(e))return o=mc(t,e,n,s),Z(o,{synthetic:!0}),o;const i=String(e);return o=de(t,i,n,r),Jt(o,i),Z(o,{synthetic:!0}),o}function de(t,e,n,r){const s={};if(r&&n){const o=$t(t,n);o.length&&(s.exception={values:[{value:e,stacktrace:{frames:o}}]}),Z(s,{synthetic:!0})}if(ge(e)){const{__sentry_template_string__:o,__sentry_template_values__:i}=e;return s.logentry={message:o,params:i},s}return s.message=e,s}function Ic(t,{isUnhandledRejection:e}){const n=Xr(t),r=e?"promise rejection":"exception";return Ln(t)?`Event \`ErrorEvent\` captured as ${r} with message \`${t.message}\``:Dt(t)?`Event \`${Tc(t)}\` (type=${t.type}) captured as ${r}`:`Object captured as ${r} with keys: ${n}`}function Tc(t){try{const e=Object.getPrototypeOf(t);return e?e.constructor.name:void 0}catch{}}function kc(t){return Object.values(t).find(D)}class wc extends Hi{constructor(e){var c;const n=Rc(e),r=y.SENTRY_SDK_SOURCE||Wo();oa(n,"browser",["browser"],r),super(n),n.routeProvider&&Xa(n.routeProvider,this),this._unhandledSessionStatus="unhandled";const{userInfo:s}=this.getDataCollectionOptions();(c=n._metadata)!=null&&c.sdk&&(n._metadata.sdk.settings={infer_ip:s?"auto":"never",...n._metadata.sdk.settings});const{sendClientReports:o}=this._options,i=()=>{R()},a=[[y.document,"visibilitychange",()=>{i(),y.document.visibilityState==="hidden"&&(o&&this._flushOutcomes(),queueMicrotask(()=>{this.flush()}))}],[y.document,"freeze",i],[y.document,"resume",i],[y,"pagehide",i],[y,"pageshow",i]];a.forEach(([u,f,l])=>{var d;return(d=u==null?void 0:u.addEventListener)==null?void 0:d.call(u,f,l)}),this.on("close",()=>a.forEach(([u,f,l])=>{var d;return(d=u==null?void 0:u.removeEventListener)==null?void 0:d.call(u,f,l)})),s&&this.on("beforeSendSession",sa)}eventFromException(e,n){return bc(this._options.stackParser,e,n,this._options.attachStacktrace)}eventFromMessage(e,n="info",r){return vc(this._options.stackParser,e,n,r,this._options.attachStacktrace)}_prepareEvent(e,n,r,s){return e.platform=e.platform||"javascript",super._prepareEvent(e,n,r,s)}}function Rc(t){var e;return{release:typeof __SENTRY_RELEASE__=="string"?__SENTRY_RELEASE__:(e=y.SENTRY_RELEASE)==null?void 0:e.id,sendClientReports:!0,parentSpanIsAlwaysRootSpan:!0,...t}}const Oc=40;function Nc(t,e=ac("fetch")){let n=0,r=0;async function s(o){const i=o.body.length;n+=i,r++;const a={body:o.body,method:"POST",referrerPolicy:"strict-origin",headers:t.headers,keepalive:n<=6e4&&r<15,...t.fetchOptions};try{const c=await e(t.url,a);return{statusCode:c.status,headers:{"x-sentry-rate-limits":c.headers.get("X-Sentry-Rate-Limits"),"retry-after":c.headers.get("Retry-After")}}}catch(c){throw cc("fetch"),c}finally{n-=i,r--}}return xi(t,s,ve(t.bufferSize||Oc))}const Ft=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,Cc=30,Ac=50;function pe(t,e,n,r){const s={filename:t,function:e===""?q:e,in_app:!0};return n!==void 0&&(s.lineno=n),r!==void 0&&(s.colno=r),s}const xc=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Dc=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Lc=/\((\S*)(?::(\d+))(?::(\d+))\)/,Pc=/at (.+?) ?\(data:(.+?),/,Mc=t=>{var s;const e=t.match(Pc);if(e)return{filename:``,function:e[1]};const n=xc.exec(t);if(n){const[,o,i,a]=n;return pe(o,q,+i,+a)}const r=Dc.exec(t);if(r){if(((s=r[2])==null?void 0:s.indexOf("eval"))===0){const c=Lc.exec(r[2]);c&&(r[2]=c[1],r[3]=c[2],r[4]=c[3])}const[i,a]=Lr(r[1]||q,r[2]);return pe(a,i,r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},$c=[Cc,Mc],Fc=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,jc=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Bc=t=>{const e=Fc.exec(t);if(e){if(e[3]&&e[3].indexOf(" > eval")>-1){const o=jc.exec(e[3]);o&&(e[1]=e[1]||"eval",e[3]=o[1],e[4]=o[2],e[5]="")}let r=e[3],s=e[1]||q;return[s,r]=Lr(s,r),pe(r,s,e[4]?+e[4]:void 0,e[5]?+e[5]:void 0)}},Uc=[Ac,Bc],Hc=[$c,Uc],Wc=xn(...Hc),Lr=(t,e)=>{const n=t.indexOf("safari-extension")!==-1,r=t.indexOf("safari-web-extension")!==-1;return n||r?[t.indexOf("@")!==-1?t.split("@")[0]:q,n?`safari-extension:${e}`:`safari-web-extension:${e}`]:[t,e]},Tt=1024,qc="Breadcrumbs",Gc=(t={})=>{const e={dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...t};return{name:qc,setup(n){e.dom&&Za(Kc(n,e.dom)),e.xhr&&uc(Vc(n)),e.fetch&&Ba(Xc(n)),e.history&&Ar(Jc(n)),e.sentry&&n.on("beforeSendEvent",Yc(n))}}},zc=Gc;function Yc(t){return function(n){S()===t&&G({category:`sentry.${n.type==="transaction"?"transaction":"event"}`,event_id:n.event_id,level:n.level,message:H(n)},{event:n})}}function Kc(t,e){return function(r){if(S()!==t)return;let s,o,i=typeof e=="object"?e.serializeAttribute:void 0,a=typeof e=="object"&&typeof e.maxStringLength=="number"?e.maxStringLength:void 0;a&&a>Tt&&(Ft&&h.warn(`\`dom.maxStringLength\` cannot exceed ${Tt}, but a value of ${a} was configured. Sentry will use ${Tt} instead.`),a=Tt),typeof i=="string"&&(i=[i]);try{const u=r.event,f=Qc(u)?u.target:u;s=Nr(f,{keyAttrs:i,maxStringLength:a}),o=Va(f)}catch{s=""}if(s.length===0)return;const c={category:`ui.${r.name}`,message:s};o&&(c.data={"ui.component_name":o}),G(c,{event:r.event,name:r.name,global:r.global})}}function Vc(t){return function(n){if(S()!==t)return;const{startTimestamp:r,endTimestamp:s}=n,o=n.xhr[lt];if(!r||!s||!o)return;const{method:i,url:a,status_code:c,body:u}=o,f={method:i,url:a,status_code:c},l={xhr:n.xhr,input:u,startTimestamp:r,endTimestamp:s},d={category:"xhr",data:f,type:"http",level:Or(c)};t.emit("beforeOutgoingRequestBreadcrumb",d,l),G(d,l)}}function Xc(t){return function(n){if(S()!==t)return;const{startTimestamp:r,endTimestamp:s}=n;if(s&&!(n.fetchData.url.match(/sentry_key/)&&n.fetchData.method==="POST"))if(n.error){const o={data:n.error,input:n.args,startTimestamp:r,endTimestamp:s},i={category:"fetch",data:n.fetchData,level:"error",type:"http"};t.emit("beforeOutgoingRequestBreadcrumb",i,o),G(i,o)}else{const o=n.response,i={...n.fetchData,status_code:o==null?void 0:o.status},a={input:n.args,response:o,startTimestamp:r,endTimestamp:s},c={category:"fetch",data:i,type:"http",level:Or(i.status_code)};t.emit("beforeOutgoingRequestBreadcrumb",c,a),G(c,a)}}}function Jc(t){return function(n){if(S()!==t)return;let r=n.from,s=n.to;const o=zt(y.location.href);let i=r?zt(r):void 0;const a=zt(s);i!=null&&i.path||(i=o),o.protocol===a.protocol&&o.host===a.host&&(s=a.relative),o.protocol===i.protocol&&o.host===i.host&&(r=i.relative),G({category:"navigation",data:{from:r,to:s}})}}function Qc(t){return!!t&&!!t.target}const Zc="EventTarget,Window,Node,ApplicationCache,AudioTrackList,BroadcastChannel,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(","),tu="BrowserApiErrors",eu=(t={})=>{const e={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,unregisterOriginalCallbacks:!1,...t};return{name:tu,setupOnce(){e.setTimeout&&T(y,"setTimeout",wn),e.setInterval&&T(y,"setInterval",wn),e.requestAnimationFrame&&T(y,"requestAnimationFrame",ru),e.XMLHttpRequest&&"XMLHttpRequest"in y&&T(XMLHttpRequest.prototype,"send",su);const n=e.eventTarget;n&&(Array.isArray(n)?n:Zc).forEach(s=>ou(s,e))}}},nu=eu;function wn(t){return function(...e){const n=e[0];return e[0]=nt(n,{mechanism:{handled:!1,type:`auto.browser.browserapierrors.${$(t)}`}}),t.apply(this,e)}}function ru(t){return function(e){return t.apply(this,[nt(e,{mechanism:{data:{handler:$(t)},handled:!1,type:"auto.browser.browserapierrors.requestAnimationFrame"}})])}}function su(t){return function(...e){const n=this;return["onload","onerror","onprogress","onreadystatechange"].forEach(s=>{s in n&&typeof n[s]=="function"&&T(n,s,function(o){const i={mechanism:{data:{handler:$(o)},handled:!1,type:`auto.browser.browserapierrors.xhr.${s}`}},a=ye(o);return a&&(i.mechanism.data.handler=$(a)),nt(o,i)})}),t.apply(this,e)}}function ou(t,e){var s,o;const r=(s=y[t])==null?void 0:s.prototype;(o=r==null?void 0:r.hasOwnProperty)!=null&&o.call(r,"addEventListener")&&(T(r,"addEventListener",function(i){return function(a,c,u){try{iu(c)&&(c.handleEvent=nt(c.handleEvent,{mechanism:{data:{handler:$(c),target:t},handled:!1,type:"auto.browser.browserapierrors.handleEvent"}}))}catch{}return e.unregisterOriginalCallbacks&&au(this,a,c),i.apply(this,[a,nt(c,{mechanism:{data:{handler:$(c),target:t},handled:!1,type:"auto.browser.browserapierrors.addEventListener"}}),u])}}),T(r,"removeEventListener",function(i){return function(a,c,u){try{if(Object.prototype.hasOwnProperty.call(c,"__sentry_wrapped__")){const f=c.__sentry_wrapped__;f&&i.call(this,a,f,u)}}catch{}return i.call(this,a,c,u)}}))}function iu(t){return typeof t.handleEvent=="function"}function au(t,e,n){t&&typeof t=="object"&&"removeEventListener"in t&&typeof t.removeEventListener=="function"&&t.removeEventListener(e,n)}const cu=(t={})=>{const e=t.lifecycle??"page";return{name:"BrowserSession",setupOnce(){if(typeof y.document>"u"){Ft&&h.warn("Using the `browserSessionIntegration` in non-browser environments is not supported.");return}rn({ignoreDuration:!0});let n=!1;Ka(()=>{n||(qt(),n=!0)});const r=L();let s=r.getUser();r.addScopeListener(o=>{const i=o.getUser();((s==null?void 0:s.id)!==(i==null?void 0:i.id)||(s==null?void 0:s.ip_address)!==(i==null?void 0:i.ip_address))&&(s=i,n&&qt())}),e==="route"&&Ar(({from:o,to:i})=>{o!==i&&(rn({ignoreDuration:!0}),qt(),n=!0)})}}},uu="CultureContext",fu=()=>({name:uu,preprocessEvent(t){var n;const e=Rn();e&&(t.contexts={...t.contexts,culture:{...e,...(n=t.contexts)==null?void 0:n.culture}})},processSegmentSpan(t){const e=Rn();e&&ir(t,{"culture.locale":e.locale,"culture.timezone":e.timezone,"culture.calendar":e.calendar})}}),lu=fu;function Rn(){try{const t=y.Intl;if(!t)return;const e=t.DateTimeFormat().resolvedOptions();return{locale:e.locale,timezone:e.timeZone,calendar:e.calendar}}catch{return}}const du="GlobalHandlers",pu=(t={})=>{const e={onerror:!0,onunhandledrejection:!0,...t};return{name:du,setupOnce(){Error.stackTraceLimit=50},setup(n){e.onerror&&(mu(n),On("onerror")),e.onunhandledrejection&&(gu(n),On("onunhandledrejection"))}}},hu=pu;function mu(t){qr(e=>{const{stackParser:n,attachStacktrace:r}=Pr();if(S()!==t||xr(e))return;const{msg:s,url:o,line:i,column:a,error:c}=e,u=Eu(ke(n,c||s,void 0,r,!1),o,i,a);u.level="error",dr(u,{originalException:c,mechanism:{handled:!1,type:"auto.browser.global_handlers.onerror"}})})}function gu(t){zr(e=>{const{stackParser:n,attachStacktrace:r}=Pr();if(S()!==t||xr())return;const s=_u(e),o=it(s)?yu(s):ke(n,s,void 0,r,!0);o.level="error",dr(o,{originalException:s,mechanism:{handled:!1,type:"auto.browser.global_handlers.onunhandledrejection"}})})}function _u(t){if(it(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch{}return t}function yu(t){return{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(t)}`}]}}}function Eu(t,e,n,r){const s=t.exception=t.exception||{},o=s.values=s.values||[],i=o[0]=o[0]||{},a=i.stacktrace=i.stacktrace||{},c=a.frames=a.frames||[];return c.length===0&&c.push({colno:r,lineno:n,filename:Su(e)??Ie(),function:q,in_app:!0}),t}function On(t){Ft&&h.log(`Global Handler attached: ${t}`)}function Pr(){const t=S();return(t==null?void 0:t.getOptions())||{stackParser:()=>[],attachStacktrace:!1}}function Su(t){if(!(!x(t)||t.length===0))return t.startsWith("data:")?`<${ra(t,!1)}>`:t}const bu=()=>({name:"HttpContext",preprocessEvent(t,e,n){var c;if(!y.navigator&&!y.location&&!y.document)return;const{url:r,headers:s}=kn(),o=n.getDataCollectionOptions().httpHeaders.request,i=Object.entries(((c=t.request)==null?void 0:c.headers)??{}).filter(([u])=>!(u in s)),a={...ln(s,o),...Object.fromEntries(i)};t.request={url:r,...t.request,...Object.keys(a).length>0?{headers:a}:{headers:void 0}}},processSpan(t,e){var a;if(!y.navigator&&!y.location&&!y.document)return;const n=kn(),r=ln(n.headers,e.getDataCollectionOptions().httpHeaders.request),s=r.Referer,{hostname:o,protocol:i}=y.location||{};ir(t,{[Fs]:r["User-Agent"],[Ls]:i==="file:"||o==="localhost"||o==="127.0.0.1"||o==="[::1]"||!!(o!=null&&o.endsWith(".localhost")),...t.is_segment&&{[$s]:((a=t.attributes)==null?void 0:a[Vn])!=="http.client"?na(n.url):void 0,[`${Ds}.referer`]:s?[s]:void 0}})}}),vu="cause",Iu=5,Tu="LinkedErrors",ku=(t={})=>{const e=t.limit||Iu,n=t.key||vu;return{name:Tu,preprocessEvent(r,s,o){const i=o.getOptions();Sa(Te,i.stackParser,n,e,r,s)}}},wu=ku,Ru=/^HTML(\w*)Element$/;function Ou(t){if(typeof window<"u"&&t===window)return"[Window]";if(typeof document<"u"&&t===document)return"[Document]";if(dc(t)){const e=Nu(t);if(Ru.test(e))return`[HTMLElement: ${Nr(t)}]`}}function Nu(t){const e=Object.getPrototypeOf(t);return e!=null&&e.constructor?e.constructor.name:"null prototype"}function Cu(){return Au()?(Ft&&j(()=>{console.error("[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/")}),!0):!1}function Au(){var s;if(typeof y.window>"u")return!1;const t=y;if(t.nw)return!1;const e=t.chrome||t.browser;if(!((s=e==null?void 0:e.runtime)!=null&&s.id))return!1;const n=Ie();return!(y===y.top&&/^(?:chrome-extension|moz-extension|ms-browser-extension|safari-web-extension):\/\//.test(n))}function xu(t){return[da(),ua(),$a(),nu(),zc(),Da(),hu(),wu(),Oa(),bu(),lu(),cu()]}function Pu(t={}){const e=!t.skipBrowserExtensionCheck&&Cu();let n=t.defaultIntegrations==null?xu():t.defaultIntegrations;const r=vo({integrations:t.integrations,defaultIntegrations:n}),s={...t,enabled:e?!1:t.enabled,stackParser:Hr(t.stackParser||Wc),integrations:r,transport:t.transport||Nc};return es(Ou),Yi(wc,s)}export{di as captureException,Pu as init,Du as setTag,Lu as setUser}; diff --git a/public/build/b2in/manifest.json b/public/build/b2in/manifest.json new file mode 100644 index 00000000..d180cacd --- /dev/null +++ b/public/build/b2in/manifest.json @@ -0,0 +1,48 @@ +{ + "resources/css/web/shared-styles.css": { + "file": "shared-styles-BbGt7f_e.css", + "src": "resources/css/web/shared-styles.css", + "isEntry": true + }, + "resources/css/web/theme-b2a.css": { + "file": "theme-b2a-BCAFYDZJ.css", + "src": "resources/css/web/theme-b2a.css", + "isEntry": true + }, + "resources/css/web/theme-b2in.css": { + "file": "theme-b2in-DK_BFMo-.css", + "src": "resources/css/web/theme-b2in.css", + "isEntry": true + }, + "resources/css/web/theme-stileigentum.css": { + "file": "theme-stileigentum-skwGRiP0.css", + "src": "resources/css/web/theme-stileigentum.css", + "isEntry": true + }, + "resources/css/web/theme-style2own.css": { + "file": "theme-style2own-1F1Xts-B.css", + "src": "resources/css/web/theme-style2own.css", + "isEntry": true + }, + "resources/js/app.js": { + "file": "app-OG3MHWAj.js", + "name": "app", + "src": "resources/js/app.js", + "isEntry": true + }, + "resources/js/error-reporting-sdk.js": { + "file": "error-reporting-sdk-CLmutOST.js", + "name": "error-reporting-sdk", + "src": "resources/js/error-reporting-sdk.js", + "isDynamicEntry": true + }, + "resources/js/error-reporting.js": { + "file": "error-reporting-BiGrjXpD.js", + "name": "error-reporting", + "src": "resources/js/error-reporting.js", + "isEntry": true, + "dynamicImports": [ + "resources/js/error-reporting-sdk.js" + ] + } +} \ No newline at end of file diff --git a/public/build/b2in/shared-styles-BbGt7f_e.css b/public/build/b2in/shared-styles-BbGt7f_e.css new file mode 100644 index 00000000..08008ef5 --- /dev/null +++ b/public/build/b2in/shared-styles-BbGt7f_e.css @@ -0,0 +1 @@ +@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2) format("woff2")}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary{cursor:pointer}.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{font-weight:500;letter-spacing:-.025em;font-family:var(--font-secondary, "Inter"),var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif}.text-hero{font-size:clamp(2.6rem,3.5vw,3.6rem);line-height:1.1;font-weight:300;letter-spacing:-.025em}.text-hero-alt{font-size:clamp(2rem,3vw,3rem);line-height:1.1;font-weight:300;letter-spacing:-.025em}.text-section-title{font-size:clamp(1.6rem,3vw,3rem);line-height:1.3em;font-weight:300;letter-spacing:-.025em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important;color:hsl(var(--primary-foreground));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-primary:hover{background-color:hsl(var(--primary-dark));background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-primary-accent{background-color:hsl(var(--primary));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important;color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-primary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-secondary{background-color:hsl(var(--secondary));background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important;color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-secondary-accent{background-color:hsl(var(--secondary));background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important;color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;text-decoration:none;cursor:pointer}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important;color:hsl(var(--accent-foreground));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-accent:hover{background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important;color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow)}.form-field{display:block;width:100%;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:.6rem;box-shadow:inset 0 1px 2px hsl(var(--foreground) / .04);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease}.form-field::placeholder{color:hsl(var(--muted-foreground) / .7)}.form-field:hover{border-color:hsl(var(--primary) / .45)}.form-field:focus,.form-field:focus-visible{outline:none;border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary) / .22);background-color:hsl(var(--background))}.form-select{-moz-appearance:none;appearance:none;-webkit-appearance:none;padding-right:2.6rem;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-repeat:no-repeat;background-position:right .9rem center;background-size:1.1rem 1.1rem}.form-select optgroup{font-weight:600;font-style:normal;color:hsl(var(--primary))}.form-select option{font-weight:400;color:hsl(var(--foreground))}.card-elevated{background-color:hsl(var(--card));border-radius:1rem;box-shadow:var(--shadow-card);border:1px solid hsl(var(--border) / .5)}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (min-width: 1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient: linear-gradient( 100deg, hsl(var(--primary-dark)) 0%, hsl(var(--primary)) 42%, hsl(var(--cta-band-end, var(--secondary-dark))) 100% );position:relative;overflow:hidden;background:var(--cta-band-gradient)}.cta-band:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line, 0 0% 100%) / .6) 50%,transparent 100%)}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:linear-gradient(165deg,hsl(0 0% 100% / .07) 0%,transparent 48%)}.section-footer{background-color:hsl(var(--footer-bg, var(--dark-bg)));color:hsl(var(--footer-fg, var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted, var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line, var(--dark-muted)) / .3)}.text-clay{color:hsl(var(--clay, var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (min-width: 640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (min-width: 640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary) / .1)}.bg-secondary\/15{background-color:hsl(var(--secondary) / .15)}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-card\/95{background-color:hsl(var(--card) / .95)}.border-border\/50{border-color:hsl(var(--border) / .5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted) / .3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{position:fixed;top:0;left:0;right:0;z-index:50;background-color:hsl(var(--background) / .8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out}.header-normal{position:relative;transition:all .3s ease-in-out;border-bottom:1px solid hsl(var(--border)/.3)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.border-border\/30{border-color:hsl(var(--border) / .3)}.font-secondary{font-family:var(--font-secondary, "Inter"),var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;transform:translateY(30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;transform:translateY(-30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;transform:translate(-30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;transform:translate(30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;transform:scale(.97);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion: reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{transition:none!important;opacity:1!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary) / .2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary) / .3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary) / .15),0 0 20px hsl(var(--secondary) / .1),0 4px 10px -4px hsl(var(--secondary) / .2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary) / .25),0 0 30px hsl(var(--secondary) / .15),0 5px 10px -5px hsl(var(--secondary) / .3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary) / .35),0 0 60px hsl(var(--secondary) / .2),0 0 90px hsl(var(--secondary-dark) / .1),0 10px 10px -10px hsl(var(--secondary) / .4)}.icon-secondary-linear{background-color:hsl(var(--secondary) / .1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));color:hsl(var(--secondary-foreground))!important;position:relative}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent) /.5),hsl(var(--accent-dark) / .5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{border:1px solid rgba(255,255,255,.9);background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));box-shadow:#0000001a 0 10px 20px 5px;position:relative}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card)) 40%,hsl(var(--card) / .92));box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005;border:1px solid rgba(255,255,255,.9);transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s ease;position:relative}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008;transform:translateY(-2px) scale(1.005);filter:brightness(1.01)}.variante-glass-flow .btn,.variante-glass-flow button,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{position:relative;overflow:hidden;isolation:isolate;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s ease}.variante-glass-flow .btn:hover,.variante-glass-flow button:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary) / .3);transform:translateY(-2px);filter:brightness(1.08)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;transform:none;filter:none;overflow:visible;isolation:auto;transition:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary) / .06);stroke:hsl(var(--secondary) / .45);stroke-width:1.5;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep, var(--secondary)));font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary) / .18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));font-size:11px;text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke} diff --git a/public/build/b2in/theme-b2a-BCAFYDZJ.css b/public/build/b2in/theme-b2a-BCAFYDZJ.css new file mode 100644 index 00000000..9c564501 --- /dev/null +++ b/public/build/b2in/theme-b2a-BCAFYDZJ.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:0 25% 96%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:207 70% 26%;--primary-light:207 70% 36%;--primary-lighter:207 70% 86%;--primary-dark:207 70% 20%;--primary-foreground:30 25% 98%;--secondary:352 76% 48%;--secondary-light:352 76% 56%;--secondary-lighter:352 76% 75%;--secondary-dark:352 76% 42%;--secondary-foreground:0 25% 96%;--muted:0 0% 92%;--muted-foreground:199 50% 45%;--accent:210 20% 95%;--accent-foreground:20 14% 16%;--dark-bg:207 70% 26%;--dark-text:30 25% 98%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--ring:20 14% 16%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"Merriweather",Georgia,serif}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/b2in/theme-b2in-DK_BFMo-.css b/public/build/b2in/theme-b2in-DK_BFMo-.css new file mode 100644 index 00000000..e35ad105 --- /dev/null +++ b/public/build/b2in/theme-b2in-DK_BFMo-.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:38 33% 95%;--foreground:26 8% 16%;--card:40 43% 98%;--card-foreground:26 8% 16%;--popover:40 43% 98%;--popover-foreground:26 8% 16%;--primary:175 16% 15%;--primary-light:175 13% 22%;--primary-lighter:175 8% 82%;--primary-dark:175 18% 11%;--primary-foreground:38 33% 95%;--secondary:37 69% 39%;--secondary-light:37 62% 48%;--secondary-lighter:37 55% 78%;--secondary-dark:37 70% 32%;--secondary-deep:37 70% 30%;--cta-band-line:37 69% 39%;--secondary-foreground:38 33% 95%;--clay:24 15% 57%;--muted:30 24% 90%;--muted-foreground:24 12% 40%;--accent:28 25% 80%;--accent-dark:28 25% 74%;--accent-foreground:26 8% 16%;--dark-bg:175 16% 15%;--dark-text:38 33% 95%;--dark-muted:38 20% 76%;--footer-bg:28 25% 80%;--footer-fg:175 16% 15%;--footer-muted:24 12% 40%;--footer-line:175 16% 15%;--cta-band-end:175 12% 26%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:28 20% 84%;--input:40 40% 98%;--ring:175 16% 15%;--radius:.75rem;--hero-container:30 28% 89%;--hero-container-dark:28 25% 83%;--hero-container-light:36 32% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"EB Garamond","Georgia","Times New Roman",serif}.world-immobilien{--background:32 20% 97%;--foreground:20 14% 16%;--card:0 25% 96%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:209 32% 25%;--primary-light:209 32% 35%;--primary-lighter:209 32% 85%;--primary-dark:209 32% 20%;--primary-foreground:0 25% 96%;--secondary:199 74% 49%;--secondary-light:199 74% 56%;--secondary-lighter:199 74% 75%;--secondary-dark:199 74% 42%;--secondary-deep:199 74% 36%;--secondary-foreground:0 25% 96%;--clay:199 50% 35%;--muted:0 0% 92%;--muted-foreground:199 50% 35%;--accent:210 0% 90%;--accent-dark:210 0% 85%;--accent-foreground:20 14% 16%;--dark-bg:209 32% 25%;--dark-text:0 0% 100%;--dark-muted:0 0% 80%;--footer-bg:209 32% 25%;--footer-fg:0 0% 100%;--footer-muted:0 0% 80%;--footer-line:0 0% 80%;--cta-band-end:199 74% 42%;--border:0 0% 80%;--input:0 0% 92%;--ring:20 14% 16%;--hero-container:0 0% 93%;--hero-container-dark:0 0% 85%;--hero-container-light:0 0% 95%;--font-secondary:"IBM Plex Sans","Inter",system-ui,-apple-system,sans-serif}.world-interior{--background:40 25% 98%;--card:0 0% 100%;--popover:0 0% 100%;--muted:40 12% 94%;--muted-foreground:24 8% 38%;--accent:36 14% 93%;--accent-dark:36 14% 88%;--border:36 12% 88%;--input:0 0% 100%;--hero-container:40 14% 95%;--hero-container-dark:40 12% 90%;--hero-container-light:40 25% 98%;--footer-bg:175 16% 15%;--footer-fg:38 33% 95%;--footer-muted:38 20% 76%;--footer-line:38 20% 76%;--shadow-card:0 6px 24px -10px hsl(var(--foreground)/.14);--shadow-elevated:0 24px 48px -20px hsl(var(--foreground)/.2)}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.world-interior .btn-secondary-accent{color:hsl(var(--primary));border:1px solid hsl(var(--primary)/.55);box-shadow:none;background:0 0!important}.world-interior .btn-secondary-accent:hover{color:hsl(var(--primary-foreground));border-color:hsl(var(--primary));background:hsl(var(--primary))!important}.world-interior .section-footer .text-secondary{color:hsl(var(--secondary))}.world-interior .section-footer{border-top:1px solid hsl(var(--footer-muted)/.35)}.world-interior .appointment-toggle.btn-secondary-accent{background:hsl(var(--card))!important}.world-interior .appointment-toggle.btn-secondary-accent:hover{background:hsl(var(--primary))!important}.world-interior .cookie-consent-wrapper{--cc-primary:hsl(var(--secondary));--cc-primary-hover:hsl(var(--secondary-dark));--cc-save:hsl(var(--primary));--cc-save-hover:hsl(var(--primary-light));--cc-button-bg:hsl(var(--primary));--cc-button-hover:hsl(var(--primary-light))}.world-interior .cookie-consent-wrapper .cc-floating-btn{color:hsl(var(--primary-foreground));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)));--tw-ring-color:hsl(var(--secondary))!important}.world-interior .cookie-consent-wrapper .cc-floating-btn:hover{background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))}.footer-logo-dark,.world-interior .footer-logo-light{display:none}.world-interior .footer-logo-dark{display:block}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}.world-interior :is(h2,h3).text-xl{font-size:1.5rem;line-height:1.25}.world-interior h4{font-size:1.25rem;line-height:1.3}.variante-glass-flow button[data-hero-dot],.variante-glass-flow button[data-hero-dot]:hover{box-shadow:none;filter:none;overflow:visible;transform:none}section.bg-secondary [data-vision-box] .text-secondary{color:hsl(var(--secondary))}.world-interior .variante-glass-flow div.hero-frame,.world-interior div.hero-frame{background:linear-gradient(to bottom right,#f5f4f3,#f2f0ed)padding-box,linear-gradient(125deg,hsl(var(--secondary-lighter)/.9),hsl(var(--secondary-light)/.75)22%,hsl(var(--secondary-lighter)/.45)55%,hsl(var(--secondary-light)/.75)82%,hsl(var(--secondary-lighter)/.9))border-box;border:1.5px solid #0000}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/b2in/theme-stileigentum-skwGRiP0.css b/public/build/b2in/theme-stileigentum-skwGRiP0.css new file mode 100644 index 00000000..ae385070 --- /dev/null +++ b/public/build/b2in/theme-stileigentum-skwGRiP0.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:38 40% 97%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:209 65% 20%;--primary-light:209 65% 30%;--primary-lighter:209 65% 80%;--primary-dark:209 65% 15%;--primary-foreground:0 25% 96%;--secondary:38 40% 66%;--secondary-light:38 40% 76%;--secondary-lighter:38 40% 85%;--secondary-dark:38 40% 55%;--secondary-foreground:20 14% 16%;--muted:209 35% 94%;--muted-foreground:209 10% 40%;--accent:38 40% 88%;--accent-foreground:209 10% 40%;--dark-bg:209 65% 20%;--dark-text:0 0% 100%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"EB Garamond",Georgia,serif}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.text-section-title{line-height:.95em}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/b2in/theme-style2own-1F1Xts-B.css b/public/build/b2in/theme-style2own-1F1Xts-B.css new file mode 100644 index 00000000..c6487a9a --- /dev/null +++ b/public/build/b2in/theme-style2own-1F1Xts-B.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:30 25% 98%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:195 100% 34%;--primary-light:195 100% 44%;--primary-lighter:195 100% 84%;--primary-dark:195 100% 24%;--primary-foreground:30 25% 98%;--secondary:46 95% 56%;--secondary-light:46 95% 66%;--secondary-lighter:46 95% 86%;--secondary-dark:46 95% 46%;--secondary-foreground:20 14% 16%;--muted:0 0% 92%;--muted-foreground:199 50% 45%;--accent:210 20% 95%;--accent-foreground:20 14% 16%;--dark-bg:195 100% 34%;--dark-text:30 25% 98%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"Ephesis",cursive}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.text-hero{font-size:clamp(3.6rem,4.2vw,7.8rem)!important}.text-section-title{line-height:.85em;font-size:clamp(2.1rem,3.9vw,3.9rem)!important}.text-xl{font-size:clamp(1.3rem,2.2vw,2.2rem)!important}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/portal/app-OG3MHWAj.js b/public/build/portal/app-OG3MHWAj.js new file mode 100644 index 00000000..a71b089a --- /dev/null +++ b/public/build/portal/app-OG3MHWAj.js @@ -0,0 +1 @@ +(function(){let o=null;document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r):r();function r(){s(),u(),c(),document.addEventListener("livewire:navigated",function(){s()}),document.addEventListener("livewire:load",function(){s()}),window.addEventListener("livewire:update",function(){setTimeout(()=>{s()},100)})}function s(){const n={threshold:.15,rootMargin:"0px 0px -80px 0px"};o||(o=new IntersectionObserver(e=>{e.forEach(t=>{t.isIntersecting&&(setTimeout(()=>{t.target.classList.add("is-visible")},50),o.unobserve(t.target))})},n)),document.querySelectorAll(".scroll-animate:not(.is-visible):not(.observed), .fade-in:not(.is-visible):not(.observed), .slide-up:not(.is-visible):not(.observed), .slide-right:not(.is-visible):not(.observed), .slide-left:not(.is-visible):not(.observed), .scale-in:not(.is-visible):not(.observed), .slide-down:not(.is-visible):not(.observed)").forEach(e=>{e.classList.add("observed"),o.observe(e)}),window.appointmentLinksInitialized||(document.addEventListener("click",function(e){const t=e.target.closest("a[data-open-appointment]");t&&(e.preventDefault(),window.dispatchEvent(new CustomEvent("open-appointment",{detail:{topic:t.dataset.appointmentTopic||null}})))}),window.appointmentLinksInitialized=!0),window.smoothScrollInitialized||(document.addEventListener("click",function(e){const t=e.target.closest('a[href^="#"]');if(t&&t.hash){const l=document.querySelector(t.hash);if(l){e.preventDefault();const f=l.getBoundingClientRect().top+window.pageYOffset-80;window.scrollTo({top:f,behavior:"smooth"})}}}),window.smoothScrollInitialized=!0)}function c(){const n=document.getElementById("main-header");if(!n)return;function i(){(window.pageYOffset||document.documentElement.scrollTop)>50?n.classList.add("scrolled"):n.classList.remove("scrolled")}let e=!1;window.addEventListener("scroll",function(){e||(window.requestAnimationFrame(function(){i(),e=!1}),e=!0)}),i()}function u(){const n=document.createElement("div");n.className="scroll-progress-bar",document.body.appendChild(n);function i(){const t=window.innerHeight,l=document.documentElement.scrollHeight,d=window.pageYOffset||document.documentElement.scrollTop,a=d/(l-t)*100;n.style.width=`${Math.min(a,100)}%`,d>100?n.classList.add("visible"):n.classList.remove("visible")}let e=!1;window.addEventListener("scroll",function(){e||(window.requestAnimationFrame(function(){i(),e=!1}),e=!0)}),i()}})(); diff --git a/public/build/portal/error-reporting-BiGrjXpD.js b/public/build/portal/error-reporting-BiGrjXpD.js new file mode 100644 index 00000000..0cd20769 --- /dev/null +++ b/public/build/portal/error-reporting-BiGrjXpD.js @@ -0,0 +1 @@ +const y="modulepreload",A=function(e){return"https://b2in.test/build/"+e},h={},_=function(r,t,a){let u=Promise.resolve();if(t&&t.length>0){let o=function(s){return Promise.all(s.map(c=>Promise.resolve(c).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const n=document.querySelector("meta[property=csp-nonce]"),m=(n==null?void 0:n.nonce)||(n==null?void 0:n.getAttribute("nonce"));u=o(t.map(s=>{if(s=A(s),s in h)return;h[s]=!0;const c=s.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${f}`))return;const l=document.createElement("link");if(l.rel=c?"stylesheet":y,c||(l.as="script"),l.crossOrigin="",l.href=s,m&&l.setAttribute("nonce",m),document.head.appendChild(l),c)return new Promise((b,S)=>{l.addEventListener("load",b),l.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${s}`)))})}))}function d(o){const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=o,window.dispatchEvent(n),!n.defaultPrevented)throw o}return u.then(o=>{for(const n of o||[])n.status==="rejected"&&d(n.reason);return r().catch(d)})},i=(()=>{const e=document.querySelector('meta[name="pk-error-reporting"]');try{return e?JSON.parse(e.content):null}catch{return null}})(),v=["page","q","tab","sort"],P=new RegExp("(?<=\\/)[A-Za-z0-9_-]{32,}(?=\\/|$)","g"),w=/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi;function p(e){try{const r=new URL(e,window.location.origin);r.pathname=r.pathname.replace(P,"[Filtered]");for(const t of[...r.searchParams.keys()])!v.includes(t)&&!t.startsWith("utm_")&&r.searchParams.set(t,"[Filtered]");return r.hash="",r.toString().replace(w,"[email]")}catch{return"[Filtered]"}}let E=null;function R(){return E??(E=_(()=>import("./error-reporting-sdk-CLmutOST.js"),[]).then(e=>(e.init({dsn:i.dsn,release:i.release||void 0,environment:i.environment,sampleRate:i.sampleRate??1,sendDefaultPii:!1,integrations:r=>r.filter(t=>!["GlobalHandlers","Breadcrumbs","BrowserSession","BrowserApiErrors"].includes(t.name)),ignoreErrors:["ResizeObserver loop","Script error.","AbortError"],denyUrls:[/^chrome-extension:\/\//,/^moz-extension:\/\//,/^safari-(web-)?extension:\/\//],beforeSend(r){var t,a,u,d;(t=r.request)!=null&&t.url&&(r.request.url=p(r.request.url)),(u=(a=r.request)==null?void 0:a.headers)!=null&&u.Referer&&(r.request.headers.Referer=p(r.request.headers.Referer));for(const o of((d=r.exception)==null?void 0:d.values)??[])o.value&&(o.value=o.value.replace(w,"[email]"));return r}}),i.userId&&e.setUser({id:String(i.userId)}),e.setTag("area",i.area),e))),E}function k(e){var a;if(e instanceof Error)return e;const r=((a=e==null?void 0:e.constructor)==null?void 0:a.name)??typeof e;let t;try{t=typeof e=="string"?e:JSON.stringify(e)}catch{t=String(e)}return new Error(`Unbehandelte Ablehnung (${r}): ${String(t??"").slice(0,300)}`)}function g(e){R().then(r=>r.captureException(e)).catch(()=>{})}i!=null&&i.dsn&&(window.addEventListener("error",e=>{e.error&&g(e.error)}),window.addEventListener("unhandledrejection",e=>{g(k(e.reason))})); diff --git a/public/build/portal/error-reporting-sdk-CLmutOST.js b/public/build/portal/error-reporting-sdk-CLmutOST.js new file mode 100644 index 00000000..e5da0866 --- /dev/null +++ b/public/build/portal/error-reporting-sdk-CLmutOST.js @@ -0,0 +1,15 @@ +const m=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,_=globalThis,W="11.6.0";function rt(){return gt(_),_}function gt(t){const e=t.__SENTRY__=t.__SENTRY__||{};return e.version=e.version||W,e[W]=e[W]||{}}function st(t,e,n=_){const r=n.__SENTRY__=n.__SENTRY__||{},s=r[W]=r[W]||{};return s[t]||(s[t]=e())}const Nn=["debug","info","warn","error","log","assert","trace"],Mr="Sentry Logger ",Ot={};function j(t){if(!("console"in _))return t();const e=_.console,n={},r=Object.keys(Ot);r.forEach(s=>{const o=Ot[s];n[s]=e[s],e[s]=o});try{return t()}finally{r.forEach(s=>{e[s]=n[s]})}}function $r(){me().enabled=!0}function Fr(){me().enabled=!1}function Cn(){return me().enabled}function jr(...t){he("log",...t)}function Br(...t){he("warn",...t)}function Ur(...t){he("error",...t)}function he(t,...e){m&&Cn()&&j(()=>{_.console[t](`${Mr}[${t}]:`,...e)})}function me(){return m?st("loggerSettings",()=>({enabled:!1})):{enabled:!1}}const h={enable:$r,disable:Fr,isEnabled:Cn,log:jr,warn:Br,error:Ur},An=50,q="?",Re=/\(error: (.*)\)/,Oe=/captureMessage|captureException/;function xn(...t){const e=t.sort((n,r)=>n[0]-r[0]).map(n=>n[1]);return(n,r=0,s=0)=>{const o=[],i=n.split(` +`);for(let a=r;a1024&&(c=c.slice(0,1024));const u=Re.test(c)?c.replace(Re,"$1"):c;if(!u.includes("Error: ")){for(const f of e){const l=f(u);if(l){o.push(l);break}}if(o.length>=An+s)break}}return Wr(o.slice(s))}}function Hr(t){return Array.isArray(t)?xn(...t):t}function Wr(t){if(!t.length)return[];const e=Array.from(t);return/sentryWrapped/.test(vt(e).function||"")&&e.pop(),e.reverse(),Oe.test(vt(e).function||"")&&(e.pop(),Oe.test(vt(e).function||"")&&e.pop()),e.slice(0,An).map(n=>({...n,filename:n.filename||vt(e).filename,function:n.function||q}))}function vt(t){return t[t.length-1]||{}}const jt="";function $(t){try{return!t||typeof t!="function"?jt:t.name||jt}catch{return jt}}function Ne(t){const e=t.exception;if(e){const n=[];try{return e.values.forEach(r=>{r.stacktrace.frames&&n.push(...r.stacktrace.frames)}),n}catch{return}}}const ft={},Ce={};function z(t,e){return ft[t]=ft[t]||[],ft[t].push(e),()=>{const n=ft[t];if(n){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}}}function Y(t,e){if(!Ce[t]){Ce[t]=!0;try{e()}catch(n){m&&h.error(`Error while instrumenting ${t}`,n)}}}function w(t,e){const n=t&&ft[t];if(n)for(const r of n)try{r(e)}catch(s){m&&h.error(`Error while triggering instrumentation handler. +Type: ${t} +Name: ${$(r)} +Error:`,s)}}let Bt=null;function qr(t){const e="error";z(e,t),Y(e,Gr)}function Gr(){Bt=_.onerror,_.onerror=function(t,e,n,r,s){return w("error",{column:r,error:s,line:n,msg:t,url:e}),Bt?Bt.apply(this,arguments):!1},_.onerror.__SENTRY_INSTRUMENTED__=!0}let Ut=null;function zr(t){const e="unhandledrejection";z(e,t),Y(e,Yr)}function Yr(){Ut=_.onunhandledrejection,_.onunhandledrejection=function(t){return w("unhandledrejection",t),Ut?Ut.apply(this,arguments):!0},_.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const Dn=Object.prototype.toString;function D(t){switch(Dn.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object WebAssembly.Exception]":return!0;default:return _e(t,Error)}}function ot(t,e){return Dn.call(t)===`[object ${e}]`}function Ln(t){return ot(t,"ErrorEvent")}function Ae(t){return ot(t,"DOMError")}function Kr(t){return ot(t,"DOMException")}function x(t){return ot(t,"String")}function ge(t){return typeof t=="object"&&t!==null&&"__sentry_template_string__"in t&&"__sentry_template_values__"in t}function it(t){return t===null||ge(t)||typeof t!="object"&&typeof t!="function"}function Nt(t){return ot(t,"Object")}function xt(t){return typeof t=="object"&&t!==null}function Dt(t){return typeof Event<"u"&&_e(t,Event)}function Vr(t){return ot(t,"RegExp")}function at(t){return!!(t!=null&&t.then&&typeof t.then=="function")}function _e(t,e){try{return t instanceof e}catch{return!1}}function Pn(t){return typeof Request<"u"&&_e(t,Request)}function T(t,e,n){if(!(e in t))return;const r=t[e];if(typeof r!="function")return;const s=n(r);typeof s=="function"&&Mn(s,r);try{t[e]=s}catch{m&&h.log(`Failed to replace method "${e}" in object`,t)}}function F(t,e,n){try{Object.defineProperty(t,e,{value:n,writable:!0,configurable:!0})}catch{m&&h.log(`Failed to add non-enumerable property "${String(e)}" to object`,t)}}function Mn(t,e){try{const n=e.prototype||{};t.prototype=e.prototype=n,F(t,"__sentry_original__",e)}catch{}}function ye(t){return t.__sentry_original__}function $n(t){if(D(t))return{message:t.message,name:t.name,stack:t.stack,...xe(t)};if(Dt(t)){const{type:e,target:n,currentTarget:r,detail:s}=t;return{type:e,target:n,currentTarget:r,...s?{detail:s}:{},...xe(t)}}return t}function xe(t){return xt(t)?Object.fromEntries(Object.entries(t)):{}}function Xr(t){const e=Object.keys($n(t));return e.sort(),e[0]?e.join(", "):"[object has no keys]"}let J;function pt(t){if(J!==void 0)return J?J(t):t();const e=Symbol.for("__SENTRY_SAFE_RANDOM_ID_WRAPPER__"),n=_;return e in n&&typeof n[e]=="function"?(J=n[e],J(t)):(J=null,t())}function Ee(){return pt(()=>Math.random())}function K(){return pt(()=>Date.now())}const Jr=Symbol.for("sentry.skipNormalization"),Qr=Symbol.for("sentry.overrideNormalizationDepth");function Zr(t){return!!t[Jr]}function ts(t){const e=t[Qr];return typeof e=="number"?e:void 0}let Kt;function es(t){Kt=t}function A(t,e=100,n=1/0){try{return Vt("",t,e,n)}catch(r){return{ERROR:`**non-serializable** (${r})`}}}function Fn(t,e=3,n=100*1024){const r=A(t,e);return ss(r)>n?Fn(t,e-1,n):r}function Vt(t,e,n=1/0,r=1/0,s=os()){const[o,i]=s;if(e==null||["boolean","string"].includes(typeof e)||typeof e=="number"&&Number.isFinite(e))return e;const a=jn(t,e);if(!a.startsWith("[object "))return a;if(Zr(e))return e;const c=ts(e),u=c!==void 0?c:n;if(u===0)return a.replace("object ","");if(o(e))return"[Circular ~]";const f=e;if(f&&typeof f.toJSON=="function")try{const p=f.toJSON();return Vt("",p,u-1,r,s)}catch{}const l=Array.isArray(e)?[]:{};let d=0;const g=$n(e);for(const p in g){if(!Object.prototype.hasOwnProperty.call(g,p))continue;if(d>=r){l[p]="[MaxProperties ~]";break}const I=g[p];l[p]=Vt(p,I,u-1,r,s),d++}return i(e),l}function jn(t,e){try{if(Kt){const r=Kt(e);if(r)return r}return typeof global<"u"&&e===global?"[Global]":typeof e=="number"&&!Number.isFinite(e)?`[${e}]`:typeof e=="function"?`[Function: ${$(e)}]`:typeof e=="symbol"?`[${String(e)}]`:typeof e=="bigint"?`[BigInt: ${String(e)}]`:`[object ${ns(e)}]`}catch(n){return`**non-serializable** (${n})`}}function ns(t){const e=Object.getPrototypeOf(t);return e!=null&&e.constructor?e.constructor.name:"null prototype"}function rs(t){return~-encodeURI(t).split(/%..|./).length}function ss(t){return rs(JSON.stringify(t))}function os(){const t=new WeakSet;function e(r){return t.has(r)?!0:(t.add(r),!1)}function n(r){t.delete(r)}return[e,n]}function Xt(t,e=0){return typeof t!="string"||e===0||t.length<=e?t:`${t.slice(0,e)}...`}function is(t,e){if(!Array.isArray(t))return"";const n=[];for(let r=0;rt.randomUUID()).replace(/-/g,"")}catch{}return Ht||(Ht="10000000100040008000"+1e11),Ht.replace(/[018]/g,e=>(e^(cs()&15)>>e/4).toString(16))}function Bn(t){var e,n;return(n=(e=t.exception)==null?void 0:e.values)==null?void 0:n[0]}function H(t){const{message:e,event_id:n}=t;if(e)return e;const r=Bn(t);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||n||"":n||""}function Jt(t,e,n){const r=t.exception=t.exception||{},s=r.values=r.values||[],o=s[0]=s[0]||{};o.value||(o.value=e||""),o.type||(o.type="Error")}function Z(t,e){const n=Bn(t);n&&Un(n,e)}function us(t,e){var s;const n=(s=t.exception)==null?void 0:s.values,r=(n==null?void 0:n.find(o=>{var i;return((i=o.mechanism)==null?void 0:i.exception_id)===0}))??(n==null?void 0:n[0]);r&&Un(r,e)}function Un(t,e){const n={type:"generic",handled:!0},r=t.mechanism;t.mechanism={...n,...r,...e},e&&"data"in e&&(t.mechanism.data={...r==null?void 0:r.data,...e.data})}function De(t){if(fs(t))return!0;try{F(t,"__sentry_captured__",!0)}catch{}return!1}function fs(t){try{return t.__sentry_captured__}catch{}}const Hn=1e3,ls=1e3,ds=100;function yt(){return K()/Hn}let Q=[];function ps(){const{performance:t}=_;if(!(t!=null&&t.now)||!t.timeOrigin)return t!=null&&t.now&&(Q=[{from:0,origin:K()-pt(()=>t.now())}]),yt;let e=t.timeOrigin;Q=[{from:0,origin:e}];let n=!0,r=0;return()=>pt(()=>{const s=t.now(),o=Date.now();return Math.abs(e+s-o)>ls&&(e=o-s,n?Q=[{from:0,origin:e}]:(Q.push({from:r,origin:e}),Q.length>ds&&Q.splice(1,1))),n=!1,r=s,(e+s)/Hn})}let Le;function R(){return(Le??(Le=ps()))()}function hs(t){const e=R(),n={sid:k(),init:!0,timestamp:e,started:e,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>gs(n)};return t&&tt(n,t),n}function tt(t,e={}){if(e.user&&(!t.ipAddress&&e.user.ip_address&&(t.ipAddress=e.user.ip_address),!t.did&&!e.did&&(t.did=e.user.id||e.user.email||e.user.username)),t.timestamp=e.timestamp||R(),e.abnormal_mechanism&&(t.abnormal_mechanism=e.abnormal_mechanism),e.ignoreDuration&&(t.ignoreDuration=e.ignoreDuration),e.sid&&(t.sid=e.sid.length===32?e.sid:k()),e.init!==void 0&&(t.init=e.init),!t.did&&e.did&&(t.did=`${e.did}`),typeof e.started=="number"&&(t.started=e.started),t.ignoreDuration)t.duration=void 0;else if(typeof e.duration=="number")t.duration=e.duration;else{const n=t.timestamp-t.started;t.duration=n>=0?n:0}e.release&&(t.release=e.release),e.environment&&(t.environment=e.environment),!t.ipAddress&&e.ipAddress&&(t.ipAddress=e.ipAddress),!t.userAgent&&e.userAgent&&(t.userAgent=e.userAgent),typeof e.errors=="number"&&(t.errors=e.errors),e.status&&(t.status=e.status)}function ms(t,e){let n={};t.status==="ok"&&(n={status:"exited"}),tt(t,n)}function gs(t){return{sid:`${t.sid}`,init:t.init,started:new Date(t.started*1e3).toISOString(),timestamp:new Date(t.timestamp*1e3).toISOString(),status:t.status,errors:t.errors,did:typeof t.did=="number"||typeof t.did=="string"?`${t.did}`:void 0,duration:t.duration,abnormal_mechanism:t.abnormal_mechanism,attrs:{release:t.release,environment:t.environment,ip_address:t.ipAddress,user_agent:t.userAgent}}}function Et(t,e,n=2){if(!e||typeof e!="object"||n<=0)return e;if(t&&Object.keys(e).length===0)return t;const r={...t};for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=Et(r[s],e[s],n-1));return r}function _s(){return k()}function Wn(){return k().substring(16)}const ys=100;class O{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._attributes={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},F(this,"refs",{}),this._propagationContext={traceId:_s(),sampleRand:Ee()}}clone(){const e=new O;return e._breadcrumbs=[...this._breadcrumbs],e._tags={...this._tags},e._attributes={...this._attributes},e._extra={...this._extra},e._contexts={...this._contexts},this._contexts.flags&&(e._contexts.flags={values:[...this._contexts.flags.values]}),e._user=this._user,e._level=this._level,e._session=this._session,e._transactionName=this._transactionName,e._fingerprint=this._fingerprint,e._eventProcessors=[...this._eventProcessors],e._attachments=[...this._attachments],e._sdkProcessingMetadata={...this._sdkProcessingMetadata},e._propagationContext={...this._propagationContext},e._client=this._client,e._lastEventId=this._lastEventId,e._conversationId=this._conversationId,e.refs={...this.refs},e}setClient(e){this._client=e}setLastEventId(e){this._lastEventId=e}getClient(){return this._client}lastEventId(){return this._lastEventId}addScopeListener(e){this._scopeListeners.push(e)}addEventProcessor(e){return this._eventProcessors.push(e),this}setUser(e){return this._user=e||{email:void 0,id:void 0,ip_address:void 0,username:void 0},this._session&&tt(this._session,{user:e}),this._notifyScopeListeners(),this}getUser(){return this._user}setConversationId(e){return this._conversationId=e||void 0,this._notifyScopeListeners(),this}setTags(e){return this._tags={...this._tags,...e},this._notifyScopeListeners(),this}setTag(e,n){return this.setTags({[e]:n})}setAttributes(e){return this._attributes={...this._attributes,...e},this._notifyScopeListeners(),this}setAttribute(e,n){return this.setAttributes({[e]:n})}removeAttribute(e){return e in this._attributes&&(delete this._attributes[e],this._notifyScopeListeners()),this}setExtras(e){return this._extra={...this._extra,...e},this._notifyScopeListeners(),this}setExtra(e,n){return this._extra={...this._extra,[e]:n},this._notifyScopeListeners(),this}setFingerprint(e){return this._fingerprint=e,this._notifyScopeListeners(),this}setLevel(e){return this._level=e,this._notifyScopeListeners(),this}setTransactionName(e){return this._transactionName=e,this._notifyScopeListeners(),this}setContext(e,n){return n===null?delete this._contexts[e]:this._contexts[e]=n,this._notifyScopeListeners(),this}setSession(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(e){if(!e)return this;const n=typeof e=="function"?e(this):e,r=n instanceof O?n.getScopeData():Nt(n)?e:void 0,{tags:s,attributes:o,extra:i,user:a,contexts:c,level:u,fingerprint:f=[],propagationContext:l,conversationId:d}=r||{};return this._tags={...this._tags,...s},this._attributes={...this._attributes,...o},this._extra={...this._extra,...i},this._contexts={...this._contexts,...c},a&&Object.keys(a).length&&(this._user=a),u&&(this._level=u),f.length&&(this._fingerprint=f),l&&(this._propagationContext=l),d&&(this._conversationId=d),this}addBreadcrumb(e,n){const r=typeof n=="number"?n:ys;if(r<=0)return this;const s={timestamp:yt(),...e,message:e.message?Xt(e.message,2048):e.message};return this._breadcrumbs.push(s),this._breadcrumbs.length>r&&(this._breadcrumbs=this._breadcrumbs.slice(-r)),this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(e){return this._attachments.push(e),this}clearAttachments(){return this._attachments=[],this}getScopeData(){return{breadcrumbs:this._breadcrumbs,attachments:this._attachments,contexts:this._contexts,tags:this._tags,attributes:this._attributes,extra:this._extra,user:this._user,level:this._level,fingerprint:this._fingerprint||[],eventProcessors:this._eventProcessors,propagationContext:this._propagationContext,sdkProcessingMetadata:this._sdkProcessingMetadata,transactionName:this._transactionName,conversationId:this._conversationId}}setSDKProcessingMetadata(e){return this._sdkProcessingMetadata=Et(this._sdkProcessingMetadata,e,2),this}setPropagationContext(e){return this._propagationContext=e,this}getPropagationContext(){return this._propagationContext}captureException(e,n){const r=(n==null?void 0:n.event_id)||k();if(!this._client)return m&&h.warn("No client configured on scope - will not capture exception!"),r;const s=new Error("Sentry syntheticException");return this._client.captureException(e,{originalException:e,syntheticException:s,...n,event_id:r},this),r}captureMessage(e,n,r){const s=(r==null?void 0:r.event_id)||k();if(!this._client)return m&&h.warn("No client configured on scope - will not capture message!"),s;const o=(r==null?void 0:r.syntheticException)??new Error(e);return this._client.captureMessage(e,n,{originalException:e,syntheticException:o,...r,event_id:s},this),s}captureEvent(e,n){const r=e.event_id||(n==null?void 0:n.event_id)||k();return this._client?(this._client.captureEvent(e,{...n,event_id:r},this),r):(m&&h.warn("No client configured on scope - will not capture event!"),r)}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(e=>{e(this)}),this._notifyingListeners=!1)}}function Es(){return st("defaultCurrentScope",()=>new O)}function Ss(){return st("defaultIsolationScope",()=>new O)}const Pe="__SENTRY_SUPPRESS_TRACING__",Me=t=>t instanceof Promise&&!t[qn],qn=Symbol("chained PromiseLike"),bs=(t,e,n)=>{const r=t.then(s=>(e(s),s),s=>{throw n(s),s});return Me(r)&&Me(t)?r:vs(t,r)},vs=(t,e)=>{if(!e)return t;let n=!1;for(const r in t){if(r in e)continue;n=!0;const s=t[r];typeof s=="function"?Object.defineProperty(e,r,{value:(...o)=>s.apply(t,o),enumerable:!0,configurable:!0,writable:!0}):e[r]=s}return n&&Object.assign(e,{[qn]:!0}),e};class Is{constructor(e,n){let r;e?r=e:r=new O;let s;n?s=n:s=new O,this._stack=[{scope:r}],this._isolationScope=s}withScope(e){const n=this._pushScope();let r;try{r=e(n)}catch(s){throw this._popScope(),s}return at(r)?bs(r,()=>this._popScope(),()=>this._popScope()):(this._popScope(),r)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStackTop(){return this._stack[this._stack.length-1]}_pushScope(){const e=this.getScope().clone();return this._stack.push({client:this.getClient(),scope:e}),e}_popScope(){return this._stack.length<=1?!1:!!this._stack.pop()}}function et(){const t=rt(),e=gt(t);return e.stack=e.stack||new Is(Es(),Ss())}function Gn(t){return et().withScope(t)}function Ts(t,e){const n=et();return n.withScope(()=>(n.getStackTop().scope=t,e(t)))}function $e(t){return et().withScope(()=>t(et().getIsolationScope()))}function ks(){return{suppressTracing:ws,withIsolationScope:$e,withScope:Gn,withSetScope:Ts,withSetIsolationScope:(t,e)=>$e(e),getCurrentScope:()=>et().getScope(),getIsolationScope:()=>et().getIsolationScope()}}function ws(t){return Gn(e=>{e.setSDKProcessingMetadata({[Pe]:!0});const n=t();return e.setSDKProcessingMetadata({[Pe]:void 0}),n})}function Lt(t){const e=gt(t);return e.acs?e.acs:ks()}function Rs(t){return typeof t=="object"&&t!=null&&!Array.isArray(t)&&Object.keys(t).includes("value")}function Os(t,e){const{value:n,unit:r}=Rs(t)?t:{value:t,unit:void 0},s=Ns(n),o=r&&typeof r=="string"?{unit:r}:{};if(s)return{...s,...o};if(!e||e==="skip-undefined"&&n===void 0)return;let i="";try{i=JSON.stringify(n)??""}catch{}return{value:i,type:"string",...o}}function Fe(t,e=!1){const n={};for(const[r,s]of Object.entries(t??{})){const o=Os(s,e);o&&(n[r]=o)}return n}function Ns(t){if(Array.isArray(t))return{value:t,type:"array"};const e=typeof t=="string"?"string":typeof t=="boolean"?"boolean":typeof t=="number"&&!Number.isNaN(t)?Number.isInteger(t)?"integer":"double":null;if(e)return{value:t,type:e}}function zn(){var t,e;return(e=(t=gt(rt())).externalPropagationContextProvider)==null?void 0:e.call(t)}function N(){const t=rt();return Lt(t).getCurrentScope()}function L(){const t=rt();return Lt(t).getIsolationScope()}function Cs(){return st("globalScope",()=>new O)}function As(...t){const e=rt(),n=Lt(e);if(t.length===2){const[r,s]=t;return r?n.withSetScope(r,s):n.withScope(s)}return n.withScope(t[0])}function S(){return N().getClient()}function Yn(t){const e=zn();if(e)return{trace_id:e.traceId,span_id:e.spanId};const n=t.getPropagationContext(),{traceId:r,parentSpanId:s,propagationSpanId:o}=n,i={trace_id:r,span_id:o||Wn()};return s&&(i.parent_span_id=s),i}const xs="gen_ai.conversation.id",Ds="http.request.header",Kn="sentry.exclusive_time",Ls="sentry.is_localhost",Vn="sentry.op",Ps="sentry.origin",Xn="sentry.profile_id",Ms="sentry.segment.name.source",$s="url.full",Fs="user_agent.original",js="sentry.sample_rate",Bs="sentry.previous_trace_sample_rate",Us=["ok","deadline_exceeded","unauthenticated","permission_denied","not_found","resource_exhausted","invalid_argument","unimplemented","unavailable","internal_error","unknown_error","cancelled","already_exists","failed_precondition","aborted","out_of_range","data_loss"],Hs=0,Ws=1;function qs(t){return t!=="ok"&&Us.includes(t)}function Jn(t){if(t){if(typeof t=="object"&&"deref"in t&&typeof t.deref=="function")try{return t.deref()}catch{return}return t}}const Gs="_sentryScope",zs="_sentryIsolationScope";function Qt(t){const e=t;return{scope:e[Gs],isolationScope:Jn(e[zs])}}const je="sentry-";function Ys(t){const e=Ks(t);if(!e)return;const n=Object.entries(e).reduce((r,[s,o])=>{if(s.startsWith(je)){const i=s.slice(je.length);r[i]=o}return r},{});if(Object.keys(n).length>0)return n}function Ks(t){if(!(!t||!x(t)&&!Array.isArray(t)))return Array.isArray(t)?t.reduce((e,n)=>{const r=Be(n);return Object.entries(r).forEach(([s,o])=>{e[s]=o}),e},{}):Be(t)}function Be(t){return t.split(",").map(e=>{const n=e.indexOf("=");if(n===-1)return[];const r=e.slice(0,n),s=e.slice(n+1);return[r,s].map(o=>{try{return decodeURIComponent(o.trim())}catch{return}})}).reduce((e,[n,r])=>(n&&r&&(e[n]=r),e),{})}const Vs=/^o(\d+)\./,Xs=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)((?:\[[:.%\w]+\]|[\w.-]+))(?::(\d+))?\/(.+)/;function Js(t){return t==="http"||t==="https"}function St(t,e=!1){const{host:n,path:r,pass:s,port:o,projectId:i,protocol:a,publicKey:c}=t;return`${a}://${c}${e&&s?`:${s}`:""}@${n}${o?`:${o}`:""}/${r&&`${r}/`}${i}`}function Qs(t){const e=Xs.exec(t);if(!e){j(()=>{console.error(`Invalid Sentry Dsn: ${t}`)});return}const[n,r,s="",o="",i="",a=""]=e.slice(1);let c="",u=a;const f=u.split("/");if(f.length>1&&(c=f.slice(0,-1).join("/"),u=f.pop()),u){const l=u.match(/^\d+/);l&&(u=l[0])}return Qn({host:o,pass:s,path:c,projectId:u,port:i,protocol:n,publicKey:r})}function Qn(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function Zs(t){if(!m)return!0;const{port:e,projectId:n,protocol:r}=t;return["protocol","publicKey","host","projectId"].find(i=>t[i]?!1:(h.error(`Invalid Sentry Dsn: ${i} missing`),!0))?!1:n.match(/^\d+$/)?Js(r)?e&&isNaN(parseInt(e,10))?(h.error(`Invalid Sentry Dsn: Invalid port ${e}`),!1):!0:(h.error(`Invalid Sentry Dsn: Invalid protocol ${r}`),!1):(h.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),!1)}function to(t){const e=t.match(Vs);return e==null?void 0:e[1]}function eo(t){const e=t.getOptions(),{host:n}=t.getDsn()||{};let r;return e.orgId?r=String(e.orgId):n&&(r=to(n)),r}function no(t){const e=typeof t=="string"?Qs(t):Qn(t);if(!(!e||!Zs(e)))return e}function ro(t){if(typeof t=="boolean")return Number(t);const e=typeof t=="string"?parseFloat(t):t;if(!(typeof e!="number"||isNaN(e)||e<0||e>1))return e}const so="span";function oo(t){return Jn(t.refs[so])}const Zn=1;function io(t){const{spanId:e,traceId:n,isRemote:r}=t.spanContext(),s=r?e:Pt(t).parent_span_id,o=Qt(t).scope,i=r?(o==null?void 0:o.getPropagationContext().propagationSpanId)||Wn():e;return{parent_span_id:s,span_id:i,trace_id:n}}function ao(t){if(t&&t.length>0)return t.map(({context:{spanId:e,traceId:n,traceFlags:r,...s},attributes:o})=>({span_id:e,trace_id:n,sampled:r===Zn,attributes:o,...s}))}function Ue(t){return typeof t=="number"?He(t):Array.isArray(t)?t[0]+t[1]/1e9:t instanceof Date?He(t.getTime()):R()}function He(t){return t>9999999999?t/1e3:t}function Pt(t){if(lo(t))return t.getStaticSpanJSON();const{spanId:e,traceId:n}=t.spanContext();if(fo(t)){const{attributes:r,startTime:s,name:o,endTime:i,status:a,links:c}=t;return{span_id:e,trace_id:n,data:r,description:o,parent_span_id:co(t),start_timestamp:Ue(s),timestamp:Ue(i)||void 0,status:ho(a),op:r[Vn],origin:r[Ps],links:ao(c)}}return{span_id:e,trace_id:n,start_timestamp:0,status:"ok",data:{}}}function co(t){var e;return"parentSpanId"in t?t.parentSpanId:"parentSpanContext"in t?(e=t.parentSpanContext)==null?void 0:e.spanId:void 0}function uo(t){var e;return{...t,end_timestamp:t.end_timestamp??t.start_timestamp,attributes:Fe(t.attributes),links:(e=t.links)==null?void 0:e.map(n=>({...n,attributes:Fe(n.attributes)}))}}function fo(t){const e=t;return!!e.attributes&&!!e.startTime&&!!e.name&&!!e.endTime&&!!e.status}function lo(t){return typeof t.getSpanJSON=="function"}function po(t){const{traceFlags:e}=t.spanContext();return e===Zn}function ho(t){return!t||t.code===Hs||t.code===Ws?"ok":t.message&&qs(t.message)?t.message:"internal_error"}const mo="_sentryRootSpan",tr=go;function go(t){return t[mo]||t}function _o(t){const e=rt(),n=Lt(e);return n.getActiveSpan?n.getActiveSpan(t):oo(t||N())}function We(t){var n;if(typeof __SENTRY_TRACING__=="boolean"&&!__SENTRY_TRACING__)return!1;const e=t||((n=S())==null?void 0:n.getOptions());return!!e&&(e.tracesSampleRate!=null||!!e.tracesSampler)}function qe(t){h.log(`Ignoring span ${t.op} - ${t.description} because it matches \`ignoreSpans\`.`)}function Ge(t,e){if(!(e!=null&&e.length))return!1;for(const n of e){if(So(n)){if(t.description&&dt(t.description,n))return m&&qe(t),!0;continue}const r=!!n.attributes&&Object.keys(n.attributes).length>0;if(!n.name&&!n.op&&!r)continue;const s=n.name?t.description&&dt(t.description,n.name):!0,o=n.op?t.op&&dt(t.op,n.op):!0,i=n.attributes?Object.entries(n.attributes).every(([a,c])=>{var u;return yo((u=t.attributes)==null?void 0:u[a],c)}):!0;if(s&&o&&i)return m&&qe(t),!0}return!1}function yo(t,e){return typeof t=="string"&&(typeof e=="string"||e instanceof RegExp)?dt(t,e):Array.isArray(t)&&Array.isArray(e)?t.length===e.length&&t.every((n,r)=>n===e[r]):t===e}function Eo(t,e){const n=e.parent_span_id,r=e.span_id;if(n)for(const s of t)s.parent_span_id===r&&(s.parent_span_id=n)}function So(t){return typeof t=="string"||t instanceof RegExp}const ze=[];function bo(t){const e={};return t.forEach(n=>{const{name:r}=n,s=e[r];s&&!s.isDefaultInstance&&n.isDefaultInstance||(e[r]=n)}),Object.values(e)}function vo(t){const e=t.defaultIntegrations||[],n=t.integrations;e.forEach(s=>{s.isDefaultInstance=!0});let r;if(Array.isArray(n))r=[...e,...n];else if(typeof n=="function"){const s=n(e);r=Array.isArray(s)?s:[s]}else r=e;return bo(r)}function Io(t,e){const n={};return e.forEach(r=>{r!=null&&r.beforeSetup&&r.beforeSetup(t)}),e.forEach(r=>{r&&er(t,r,n)}),n}function Ye(t,e){for(const n of e)n!=null&&n.afterAllSetup&&n.afterAllSetup(t)}function er(t,e,n){if(n[e.name]){m&&h.log(`Integration skipped because it was already installed: ${e.name}`);return}if(n[e.name]=e,!ze.includes(e.name)&&typeof e.setupOnce=="function"&&(e.setupOnce(),ze.push(e.name)),e.setup&&typeof e.setup=="function"&&e.setup(t),typeof e.preprocessEvent=="function"){const r=e.preprocessEvent.bind(e);t.on("preprocessEvent",(s,o)=>r(s,o,t))}if(typeof e.processEvent=="function"){const r=e.processEvent.bind(e),s=Object.assign((o,i)=>r(o,i,t),{id:e.name});t.addEventProcessor(s)}["processSpan","processSegmentSpan"].forEach(r=>{const s=e[r];typeof s=="function"&&t.on(r,o=>s.call(e,o,t))}),m&&h.log(`Integration installed: ${e.name}`)}const Se="production",To=Symbol.for("sentry.nonRecordingSpan");function ko(t){return!!t&&t[To]===!0}const wo="_frozenDsc";function nr(t,e){const n=e.getOptions(),{publicKey:r}=e.getDsn()||{},s={environment:n.environment||Se,release:n.release,public_key:r,trace_id:t,org_id:eo(e)};return e.emit("createDsc",s),s}function rr(t,e){if(zn())return;const n=e.getPropagationContext();return n.dsc||nr(n.traceId,t)}function Ro(t){var V;const e=S();if(!e)return{};const n=tr(t),r=Pt(n),s=r.data,o=n.spanContext().traceState,i=(o==null?void 0:o.get("sentry.sample_rate"))??s[js]??s[Bs];function a(b){return(typeof i=="number"||typeof i=="string")&&(b.sample_rate=`${i}`),b}const c=n[wo];if(c)return a(c);const u=ko(n),f=u&&n.dropReason==="ignored";if(u&&(!We(e.getOptions())||f)){const b=Qt(n).scope,B=b&&rr(e,b);if(B){const X={...B};return f&&(X.sampled="false"),a(X)}}const l=o==null?void 0:o.get("sentry.dsc"),d=l&&Ys(l);if(d)return a(d);const g=nr(t.spanContext().traceId,e),p=s[Ms],I=r.description;return p!=="url"&&I&&(g.transaction=I),We()&&(g.sampled=String(po(n)),g.sample_rand=(o==null?void 0:o.get("sentry.sample_rand"))??((V=Qt(n).scope)==null?void 0:V.getPropagationContext().sampleRand.toString())),a(g),e.emit("createDsc",g,n),g}function Oo(t,e){const{fingerprint:n,breadcrumbs:r,sdkProcessingMetadata:s}=e;No(t,e),Do(t,n),Co(t,r),Ao(t,s)}function Ke(t,e){const{extra:n,tags:r,attributes:s,user:o,contexts:i,level:a,sdkProcessingMetadata:c,breadcrumbs:u,fingerprint:f,eventProcessors:l,attachments:d,propagationContext:g,transactionName:p}=e;ut(t,"extra",n),ut(t,"tags",r),ut(t,"attributes",s),ut(t,"user",o),ut(t,"contexts",i),t.sdkProcessingMetadata=Et(t.sdkProcessingMetadata,c,2),a&&(t.level=a),p&&(t.transactionName=p),u.length&&(t.breadcrumbs=[...t.breadcrumbs,...u]),f.length&&(t.fingerprint=[...t.fingerprint,...f]),l.length&&(t.eventProcessors=[...t.eventProcessors,...l]),d.length&&(t.attachments=[...t.attachments,...d]),t.propagationContext={...t.propagationContext,...g}}function ut(t,e,n){t[e]=Et(t[e],n,1)}function sr(t,e){const n=Cs().getScopeData();return t&&Ke(n,t.getScopeData()),e&&Ke(n,e.getScopeData()),n}function No(t,e){const{extra:n,tags:r,user:s,contexts:o,level:i,transactionName:a}=e;Object.keys(n).length&&(t.extra={...n,...t.extra}),Object.keys(r).length&&(t.tags={...r,...t.tags}),Object.keys(s).length&&(t.user={...s,...t.user}),Object.keys(o).length&&(t.contexts={...o,...t.contexts}),i&&(t.level=i),a&&t.type!=="transaction"&&(t.transaction=a)}function Co(t,e){const n=[...t.breadcrumbs||[],...e];t.breadcrumbs=n.length?n:void 0}function Ao(t,e){t.sdkProcessingMetadata={...t.sdkProcessingMetadata,...e}}function xo(t,e){t.contexts={trace:io(e),...t.contexts},t.sdkProcessingMetadata={dynamicSamplingContext:Ro(e),...t.sdkProcessingMetadata};const n=tr(e),r=Pt(n).description;r&&!t.transaction&&t.type==="transaction"&&(t.transaction=r)}function Do(t,e){t.fingerprint=t.fingerprint?Array.isArray(t.fingerprint)?t.fingerprint:[t.fingerprint]:[],e&&(t.fingerprint=t.fingerprint.concat(e)),t.fingerprint.length||delete t.fingerprint}function ht(t,e,n){let r;try{r=e()}catch(s){return Ve(t,s,n)}return at(r)?r.then(void 0,s=>Ve(t,s,n)):r}function Ve(t,e,n){return m&&h.error(t,e),n(e)}function or(t){return!!t&&typeof t=="function"&&"_static"in t&&!!t._static}function Xe(t,e){return ht(m?"The `beforeSendSpan` callback threw an error, sending the span unmodified:":"",()=>e(t),()=>t)||t}function Lo(t){const e={trace_id:t.trace_id,span_id:t.span_id,parent_span_id:t.parent_span_id,name:t.description||"",start_timestamp:t.start_timestamp,end_timestamp:t.timestamp,status:!t.status||t.status==="ok"||t.status==="cancelled"?"ok":"error",is_segment:!1,attributes:{...t.data},links:t.links};return uo(e)}function ir(t,e){const n=t.attributes??(t.attributes={});Object.entries(e).forEach(([r,s])=>{s!=null&&!(r in n)&&(n[r]=s)})}function Po(t){return t.getOptions().traceLifecycle==="stream"}function ar(t){return typeof t=="object"&&typeof t.unref=="function"&&t.unref(),t}function ct(t,e=[]){return[t,e]}function Je(t,e){const[n,r]=t;return[n,[...r,e]]}function Zt(t,e){const n=t[1];for(const r of n){const s=r[0].type;if(e(r,s))return!0}return!1}function Mo(t,e){return Zt(t,(n,r)=>e.includes(r))}function te(t){const e=gt(_);return e.encodePolyfill?e.encodePolyfill(t):new TextEncoder().encode(t)}function $o(t){const[e,n]=t;let r=JSON.stringify(e);function s(o){typeof r=="string"?r=typeof o=="string"?r+o:[te(r),o]:r.push(typeof o=="string"?te(o):o)}for(const o of n){const[i,a]=o;if(s(` +${JSON.stringify(i)} +`),typeof a=="string"||a instanceof Uint8Array)s(a);else{let c;try{c=JSON.stringify(a)}catch{c=JSON.stringify(A(a))}s(c)}}return typeof r=="string"?r:Fo(r)}function Fo(t){const e=t.reduce((s,o)=>s+o.length,0),n=new Uint8Array(e);let r=0;for(const s of t)n.set(s,r),r+=s.length;return n}function jo(t){const e=typeof t.data=="string"?te(t.data):t.data;return[{type:"attachment",length:e.length,filename:t.filename,content_type:t.contentType,attachment_type:t.attachmentType},e]}const cr={sessions:"session",event:"error",client_report:"internal",user_report:"default",profile_chunk:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",raw_security:"security",log:"log_item",trace_metric:"metric"};function Bo(t){return t in cr}function Qe(t){return Bo(t)?cr[t]:t}function ur(t){if(!(t!=null&&t.sdk))return;const{name:e,version:n}=t.sdk;return{name:e,version:n}}function Uo(t,e,n,r){var o;const s=(o=t.sdkProcessingMetadata)==null?void 0:o.dynamicSamplingContext;return{event_id:t.event_id,sent_at:new Date(K()).toISOString(),...e&&{sdk:e},...!!n&&r&&{dsn:St(r)},...s&&{trace:s}}}function ee(t){return t==="replay_event"?"replay":t||"error"}function Ho(){return typeof __SENTRY_BROWSER_BUNDLE__<"u"&&!!__SENTRY_BROWSER_BUNDLE__}function Wo(){/*! __SENTRY_SDK_SOURCE__ */return"npm"}function qo(){return!Ho()&&Object.prototype.toString.call(typeof process<"u"?process:0)==="[object process]"}function Mt(){return typeof window<"u"&&(!qo()||Go())}function Go(){const t=_.process;return(t==null?void 0:t.type)==="renderer"}function zo(t,e){const n=e.getDataCollectionOptions().userInfo?"auto":"never";return[{type:"span",item_count:t.length,content_type:"application/vnd.sentry.items.span.v2+json"},{version:2,ingest_settings:Mt()?{infer_ip:n,infer_user_agent:n}:void 0,items:t}]}const Yo=new WeakMap;function Ko(t){return it(t)?void 0:t}function Vo(t,e,n){var a;const r=Ko(e.originalException),s=r&&Yo.get(r);if(!s)return;const o=(a=t.contexts)==null?void 0:a.trace;((o==null?void 0:o.trace_id)??(n&&Yn(n).trace_id))===s.trace_id&&(t.contexts={...t.contexts,trace:{...o,...s}})}function Xo(t,e){var r,s,o,i;if(!e)return t;const n=t.sdk||{};return t.sdk={...n,name:n.name||e.name,version:n.version||e.version,integrations:[...((r=t.sdk)==null?void 0:r.integrations)||[],...e.integrations||[]],packages:[...((s=t.sdk)==null?void 0:s.packages)||[],...e.packages||[]],settings:(o=t.sdk)!=null&&o.settings||e.settings?{...(i=t.sdk)==null?void 0:i.settings,...e.settings}:void 0},t}function Jo(t,e,n,r){const s=ur(n),o={sent_at:new Date(K()).toISOString(),...s&&{sdk:s},...!!r&&e&&{dsn:St(e)}},i="aggregates"in t?[{type:"sessions"},t]:[{type:"session"},t.toJSON()];return ct(o,[i])}function Qo(t,e,n,r){const s=ur(n),o=t.type&&t.type!=="replay_event"?t.type:"event";Xo(t,n==null?void 0:n.sdk);const i=Uo(t,s,r,e);return delete t.sdkProcessingMetadata,ct(i,[[{type:o},t]])}const Wt=0,Ze=1,tn=2;function bt(t){return new mt(e=>{e(t)})}function fr(t){return new mt((e,n)=>{n(t)})}class mt{constructor(e){this._state=Wt,this._handlers=[],this._runExecutor(e)}then(e,n){return new mt((r,s)=>{this._handlers.push([!1,o=>{if(!e)r(o);else try{r(e(o))}catch(i){s(i)}},o=>{if(!n)s(o);else try{r(n(o))}catch(i){s(i)}}]),this._executeHandlers()})}catch(e){return this.then(n=>n,e)}finally(e){return new mt((n,r)=>{let s,o;return this.then(i=>{o=!1,s=i,e&&e()},i=>{o=!0,s=i,e&&e()}).then(()=>{if(o){r(s);return}n(s)})})}_executeHandlers(){if(this._state===Wt)return;const e=this._handlers.slice();this._handlers=[],e.forEach(n=>{n[0]||(this._state===Ze&&n[1](this._value),this._state===tn&&n[2](this._value),n[0]=!0)})}_runExecutor(e){const n=(o,i)=>{if(this._state===Wt){if(at(i)){i.then(r,s);return}this._state=o,this._value=i,this._executeHandlers()}},r=o=>{n(Ze,o)},s=o=>{n(tn,o)};try{e(r,s)}catch(o){s(o)}}}function Zo(t,e,n,r=0,s){try{const o=ne(e,n,t,r,s);return at(o)?o:bt(o)}catch(o){return fr(o)}}function ne(t,e,n,r,s){const o=n[r];if(!t||!o)return t;const i=`Event processor "${o.id||"?"}"`;let a=!1;const c=ht(m?`${i} threw an error, dropping event:`:"",()=>o({...t},e),()=>(a=!0,null));return m&&c===null&&h.log(`${i} dropped event`),at(c)?c.then(u=>u?ne(u,e,n,r+1,s):(s==null||s(a?"callback_error":"event_processor"),null)):c?ne(c,e,n,r+1,s):(s==null||s(a?"callback_error":"event_processor"),null)}let C,en,nn,P;function ti(t){const e=_._sentryDebugIds,n=_._debugIds;if(!e&&!n)return{};const r=e?Object.keys(e):[],s=n?Object.keys(n):[];if(P&&r.length===en&&s.length===nn)return P;en=r.length,nn=s.length,P={},C||(C={});const o=(i,a)=>{for(const c of i){const u=a[c],f=C==null?void 0:C[c];if(f&&P&&u)P[f[0]]=u,C&&(C[c]=[f[0],u]);else if(u){const l=t(c);for(let d=l.length-1;d>=0;d--){const g=l[d],p=g==null?void 0:g.filename;if(p&&P&&C){P[p]=u,C[c]=[p,u];break}}}}};return e&&o(r,e),n&&o(s,n),P}function re(t){var e;return((e=t.data)==null?void 0:e.__sentry__)===!0}function lr(t){const e=[];t.message&&e.push(t.message);try{const n=t.exception.values[t.exception.values.length-1];n!=null&&n.value&&(e.push(n.value),n.type&&e.push(`${n.type}: ${n.value}`))}catch{}return e}function ei(t,e,n,r,s,o){const{normalizeDepth:i=3,normalizeMaxBreadth:a=1e3}=t,c={...e,event_id:e.event_id||n.event_id||k(),timestamp:e.timestamp||yt()},u=n.integrations||t.integrations.map(b=>b.name);ni(c,t),oi(c,u),s&&s.emit("applyFrameMetadata",e),e.type===void 0&&ri(c,t.stackParser);const f=ai(r,n.captureContext);n.mechanism&&us(c,n.mechanism);const l=s?s.getEventProcessors():[],d=sr(o,f),g=[...n.attachments||[],...d.attachments];g.length&&(n.attachments=g),Oo(c,d);const p=_o(f);p&&xo(c,p),Vo(c,n,f);const I=[...l,...d.eventProcessors];return(re(n)?bt(c):Zo(I,c,n,0,b=>{s&&(s.recordDroppedEvent(b,ee(e.type)),e.type==="transaction"&&s.recordDroppedEvent(b,"span",1+(e.spans||[]).length))})).then(b=>b?(si(b),typeof i=="number"&&i>0?ii(b,i,a):b):null)}function ni(t,e){var a,c;const{environment:n,release:r,dist:s,maxValueLength:o}=e;t.environment=t.environment||n||Se,!t.release&&r&&(t.release=r),!t.dist&&s&&(t.dist=s);const i=t.request;i!=null&&i.url&&o&&(i.url=Xt(i.url,o)),o&&((c=(a=t.exception)==null?void 0:a.values)==null||c.forEach(u=>{u.value&&(u.value=Xt(u.value,o))}))}function ri(t,e){var r,s;const n=ti(e);(s=(r=t.exception)==null?void 0:r.values)==null||s.forEach(o=>{var i,a;(a=(i=o.stacktrace)==null?void 0:i.frames)==null||a.forEach(c=>{c.filename&&(c.debug_id=n[c.filename])})})}function si(t){var r,s;const e={};if((s=(r=t.exception)==null?void 0:r.values)==null||s.forEach(o=>{var i,a;(a=(i=o.stacktrace)==null?void 0:i.frames)==null||a.forEach(c=>{c.debug_id&&(c.abs_path?e[c.abs_path]=c.debug_id:c.filename&&(e[c.filename]=c.debug_id),delete c.debug_id)})}),Object.keys(e).length===0)return;t.debug_meta=t.debug_meta||{},t.debug_meta.images=t.debug_meta.images||[];const n=t.debug_meta.images;Object.entries(e).forEach(([o,i])=>{n.push({type:"sourcemap",code_file:o,debug_id:i})})}function oi(t,e){e.length>0&&(t.sdk=t.sdk||{},t.sdk.integrations=[...t.sdk.integrations||[],...e])}function ii(t,e,n){var s,o;if(!t)return null;const r={...t,...t.breadcrumbs&&{breadcrumbs:t.breadcrumbs.map(i=>({...i,...i.data&&{data:A(i.data,e,n)}}))},...t.user&&{user:A(t.user,e,n)},...t.contexts&&{contexts:A(t.contexts,e,n)},...t.extra&&{extra:A(t.extra,e,n)}};return(s=t.contexts)!=null&&s.trace&&r.contexts&&(r.contexts.trace=t.contexts.trace,t.contexts.trace.data&&(r.contexts.trace.data=A(t.contexts.trace.data,e,n))),t.spans&&(r.spans=t.spans.map(i=>({...i,...i.data&&{data:A(i.data,e,n)}}))),(o=t.contexts)!=null&&o.flags&&r.contexts&&(r.contexts.flags=A(t.contexts.flags,3,n)),r}function ai(t,e){if(!e)return t;const n=t?t.clone():new O;return n.update(e),n}function ci(t){if(t)return ui(t)?{captureContext:t}:li(t)?{captureContext:t}:t}function ui(t){return t instanceof O||typeof t=="function"}const fi=["user","level","extra","contexts","tags","fingerprint","propagationContext"];function li(t){return Object.keys(t).some(e=>fi.includes(e))}function di(t,e){return N().captureException(t,ci(e))}function dr(t,e){return N().captureEvent(t,e)}function Du(t,e){L().setTag(t,e)}function Lu(t){L().setUser(t)}function rn(t){const e=L(),{user:n}=sr(e,N()),{userAgent:r}=_.navigator||{},s=hs({user:n,...r&&{userAgent:r},...t}),o=e.getSession();return(o==null?void 0:o.status)==="ok"&&tt(o,{status:"exited"}),pr(),e.setSession(s),s}function pr(){const t=L(),n=N().getSession()||t.getSession();n&&ms(n),hr(),t.setSession()}function hr(){const t=L(),e=S(),n=t.getSession();n&&e&&e.captureSession(n)}function qt(t=!1){if(t){pr();return}hr()}const pi="7";function hi(t){const e=t.protocol?`${t.protocol}:`:"",n=t.port?`:${t.port}`:"";return`${e}//${t.host}${n}${t.path?`/${t.path}`:""}/api/`}function mi(t){return`${hi(t)}${t.projectId}/envelope/`}function gi(t,e){const n={sentry_version:pi};return t.publicKey&&(n.sentry_key=t.publicKey),e&&(n.sentry_client=`${e.name}/${e.version}`),new URLSearchParams(n).toString()}function _i(t,e,n){return e||`${mi(t)}?${gi(t,n)}`}function yi(t,e){const n=e?"auto":"never";return[{type:"log",item_count:t.length,content_type:"application/vnd.sentry.items.log+json"},{version:2,...Mt()&&{ingest_settings:{infer_ip:n,infer_user_agent:n}},items:t}]}function Ei(t,e,n,r,s){const o={};return e!=null&&e.sdk&&(o.sdk={name:e.sdk.name,version:e.sdk.version}),n&&r&&(o.dsn=St(r)),ct(o,[yi(t,s)])}function Si(t,e){const n=e??bi(t)??[];if(n.length===0)return;const r=t.getOptions(),s=Ei(n,r._metadata,r.tunnel,t.getDsn(),t.getDataCollectionOptions().userInfo);mr().set(t,[]),t.emit("flushLogs"),t.sendEnvelope(s)}function bi(t){return mr().get(t)}function mr(){return st("clientToLogBufferMap",()=>new WeakMap)}function vi(t,e){const n=e?"auto":"never";return[{type:"trace_metric",item_count:t.length,content_type:"application/vnd.sentry.items.trace-metric+json"},{version:2,...Mt()&&{ingest_settings:{infer_ip:n,infer_user_agent:n}},items:t}]}function Ii(t,e,n,r,s){const o={};return e!=null&&e.sdk&&(o.sdk={name:e.sdk.name,version:e.sdk.version}),n&&r&&(o.dsn=St(r)),ct(o,[vi(t,s)])}function Ti(t,e){const n=e??ki(t)??[];if(n.length===0)return;const r=t.getOptions(),s=Ii(n,r._metadata,r.tunnel,t.getDsn(),t.getDataCollectionOptions().userInfo);gr().set(t,[]),t.emit("flushMetrics"),t.sendEnvelope(s)}function ki(t){return gr().get(t)}function gr(){return st("clientToMetricBufferMap",()=>new WeakMap)}function wi(t,e){var s,o,i;if(t.type!=="transaction"||!((s=t.spans)!=null&&s.length)||!((o=t.sdkProcessingMetadata)!=null&&o.hasGenAiSpans)||Po(e))return;const n=[],r=[];for(const a of t.spans)(i=a.op)!=null&&i.startsWith("gen_ai.")?n.push(Lo(a)):r.push(a);if(n.length!==0)return t.spans=r,zo(n,e)}const be=Symbol.for("SentryBufferFullError");function ve(t=100){const e=new Set;function n(){return e.sizer(a),()=>r(a)),a}function o(i){if(!e.size)return bt(!0);const a=Promise.allSettled(Array.from(e)).then(()=>!0);if(!i)return a;const c=[a,new Promise(u=>ar(setTimeout(()=>u(!1),i)))];return Promise.race(c)}return{get $(){return Array.from(e)},add:s,drain:o}}const Ri=60*1e3;function Oi(t,e=K()){const n=parseInt(`${t}`,10);if(!isNaN(n))return n*1e3;const r=Date.parse(`${t}`);return isNaN(r)?Ri:r-e}function Ni(t,e){return t[e]||t.all||0}function Ci(t,e,n=K()){return Ni(t,e)>n}function Ai(t,{statusCode:e,headers:n},r=K()){const s={...t},o=n==null?void 0:n["x-sentry-rate-limits"],i=n==null?void 0:n["retry-after"];if(o)for(const a of o.trim().split(",")){const[c,u,,,f]=a.split(":",5),l=parseInt(c,10),d=(isNaN(l)?60:l)*1e3;if(!u)s.all=r+d;else for(const g of u.split(";"))g==="metric_bucket"?(!f||f.split(";").includes("custom"))&&(s[g]=r+d):s[g]=r+d}else i?s.all=r+Oi(i,r):e===429&&(s.all=r+60*1e3);return s}const _r=64;function xi(t,e,n=ve(t.bufferSize||_r)){let r={};const s=i=>n.drain(i);function o(i){const a=[];if(Zt(i,(l,d)=>{const g=Qe(d);Ci(r,g)?t.recordDroppedEvent("ratelimit_backoff",g):a.push(l)}),a.length===0)return Promise.resolve({});const c=ct(i[0],a),u=l=>{if(Mo(c,["client_report"])){m&&h.warn(`Dropping client report. Will not send outcomes (reason: ${l}).`);return}Zt(c,(d,g)=>{t.recordDroppedEvent(l,Qe(g))})},f=()=>e({body:$o(c)}).then(l=>l.statusCode===413?(m&&h.error("Sentry responded with status code 413. Envelope was discarded due to exceeding size limits."),u("send_error"),l):(m&&l.statusCode!==void 0&&(l.statusCode<200||l.statusCode>=300)&&h.warn(`Sentry responded with status code ${l.statusCode} to sent event.`),r=Ai(r,l),l),l=>{throw u("network_error"),m&&h.error("Encountered error running transport request:",l),l});return n.add(f).then(l=>l,l=>{if(l===be)return m&&h.error("Skipped sending event because buffer is full."),u("queue_overflow"),Promise.resolve({});throw l})}return{send:o,flush:s}}function Di(t,e,n){const r=[{type:"client_report"},{timestamp:yt(),discarded_events:t}];return ct(e?{dsn:e}:{},[r])}function Li(t){var c;const{trace_id:e,parent_span_id:n,span_id:r,status:s,origin:o,data:i,op:a}=((c=t.contexts)==null?void 0:c.trace)??{};return{data:i??{},description:t.transaction,op:a,parent_span_id:n,span_id:r??"",start_timestamp:t.start_timestamp??0,status:s??"ok",timestamp:t.timestamp,trace_id:e??"",origin:o,profile_id:i==null?void 0:i[Xn],exclusive_time:i==null?void 0:i[Kn],measurements:t.measurements,is_segment:!0}}function Pi(t){return{type:"transaction",timestamp:t.timestamp,start_timestamp:t.start_timestamp,transaction:t.description,contexts:{trace:{trace_id:t.trace_id,span_id:t.span_id,parent_span_id:t.parent_span_id,op:t.op,status:t.status,origin:t.origin,data:{...t.data,...t.profile_id&&{[Xn]:t.profile_id},...t.exclusive_time&&{[Kn]:t.exclusive_time}}}},measurements:t.measurements}}function Mi(t){var e;t.traceLifecycle!=="stream"||!(t.beforeSendTransaction||(e=t.ignoreTransactions)!=null&&e.length)||j(()=>{console.warn("[Sentry] `beforeSendTransaction` and `ignoreTransactions` are ignored with `traceLifecycle: 'stream'` (enabled by default). Use `beforeSendSpan` and `ignoreSpans` instead, or set `traceLifecycle: 'static'`.")})}const v={userInfo:!0,cookies:!0,httpHeaders:{request:!0,response:!0},httpBodies:["incomingRequest","outgoingRequest","incomingResponse","outgoingResponse"],urlQueryParams:!0,graphQL:{document:!0,variables:!0},genAI:{inputs:!0,outputs:!0},databaseQueryData:!0,queues:!0,stackFrameVariables:!0,frameContextLines:5};function $i(t){return typeof t=="boolean"||"allow"in t||"deny"in t}function Fi(t){return t===void 0?{...v.httpHeaders}:$i(t)?{request:t,response:t}:{request:t.request??v.httpHeaders.request,response:t.response??v.httpHeaders.response}}function ji(t){var n,r,s,o;const e=t.dataCollection??{};return{userInfo:e.userInfo??v.userInfo,cookies:e.cookies??v.cookies,httpHeaders:Fi(e.httpHeaders),httpBodies:e.httpBodies??v.httpBodies,urlQueryParams:e.urlQueryParams??v.urlQueryParams,graphQL:{document:((n=e.graphQL)==null?void 0:n.document)??v.graphQL.document,variables:((r=e.graphQL)==null?void 0:r.variables)??v.graphQL.variables},genAI:{inputs:((s=e.genAI)==null?void 0:s.inputs)??v.genAI.inputs,outputs:((o=e.genAI)==null?void 0:o.outputs)??v.genAI.outputs},databaseQueryData:e.databaseQueryData??v.databaseQueryData,queues:e.queues??v.queues,stackFrameVariables:e.stackFrameVariables??v.stackFrameVariables,frameContextLines:e.frameContextLines??v.frameContextLines}}const sn="Not capturing exception because it's already been captured.",on="Discarded session because of missing or non-string release",yr=Symbol.for("SentryInternalError"),Er=Symbol.for("SentryDoNotSendEventError"),Bi=5e3,Sr=Symbol.for("SentryClosedClient");function Ui(t){return Sr in t}function kt(t){return{message:t,[yr]:!0}}function Gt(t){return{message:t,[Er]:!0}}function an(t){return xt(t)&&yr in t}function cn(t){return xt(t)&&Er in t}function un(t,e,n,r,s){let o=0,i,a=!1;t.on(n,()=>{o=0,clearTimeout(i),a=!1}),t.on(e,c=>{if(o+=r(c),o>=8e5)s(t);else if(!a){const u=t.getOptions()._flushInterval??Bi;u>0&&(a=!0,i=ar(setTimeout(()=>{s(t)},u)))}}),t.on("flush",()=>{s(t)})}class Hi{constructor(e){var s;this._options={attachStacktrace:!0,...e,traceLifecycle:e.traceLifecycle==="static"?"static":"stream"},this._integrations={},this._numProcessing=0,this._outcomes={},this._hooks={},this._eventProcessors=[],this._promiseBuffer=ve(((s=e.transportOptions)==null?void 0:s.bufferSize)??_r),this._dataCollection=ji(e),this._unhandledSessionStatus="crashed",e.dsn?this._dsn=no(e.dsn):m&&h.warn("No DSN provided, client will not send events.");const{beforeSendSpan:n,traceLifecycle:r}=this._options;if(m&&n&&or(n)!==(r==="static")&&j(()=>{console.warn(`Ignoring \`beforeSendSpan\`: ${r==="static"?"wrap it with":"remove"} \`Sentry.withStaticSpan\` to use it with \`traceLifecycle: "${r}"\`.`)}),this._dsn){const o=_i(this._dsn,e.tunnel,e._metadata?e._metadata.sdk:void 0);this._transport=e.transport({tunnel:this._options.tunnel,recordDroppedEvent:this.recordDroppedEvent.bind(this),...e.transportOptions,url:o})}un(this,"afterCaptureLog","flushLogs",zi,Si),un(this,"afterCaptureMetric","flushMetrics",Gi,Ti)}captureException(e,n,r){const s=k();if(De(e))return m&&h.log(sn),s;const o={event_id:s,...n};return this._process(()=>this.eventFromException(e,o).then(i=>this._captureEvent(i,o,r)).then(i=>i),"error"),o.event_id}captureMessage(e,n,r,s){const o={event_id:k(),...r},i=ge(e)?e:String(e),a=it(e),c=a?this.eventFromMessage(i,n,o):this.eventFromException(e,o);return this._process(()=>c.then(u=>this._captureEvent(u,o,s)),a?"unknown":"error"),o.event_id}captureEvent(e,n,r){const s=k();if(n!=null&&n.originalException&&De(n.originalException))return m&&h.log(sn),s;const o={event_id:s,...n},i=e.sdkProcessingMetadata||{},a=i.capturedSpanScope,c=i.capturedSpanIsolationScope,u=ee(e.type);return this._process(()=>this._captureEvent(e,o,a||r,c),u),o.event_id}captureSession(e){this.sendSession(e),tt(e,{init:!1})}getDsn(){return this._dsn}getOptions(){return this._options}getDataCollectionOptions(){return this._dataCollection}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}async flush(e){const n=this._transport;if(this.emit("flush"),!n)return!0;const r=await this._isClientDoneProcessing(e),s=await n.flush(e);return r&&s}async close(e){Object.defineProperty(this,Sr,{value:!0});const n=await this.flush(e);return this.getOptions().enabled=!1,this.emit("close"),n}getEventProcessors(){return this._eventProcessors}addEventProcessor(e){this._eventProcessors.push(e)}init(){(this._isEnabled()||this._options.integrations.some(({name:e})=>e.startsWith("Spotlight")))&&(this._setupIntegrations(),Mi(this._options))}getIntegrationByName(e){return this._integrations[e]}getIntegrationNames(){return Object.keys(this._integrations)}addIntegration(e){const n=this._integrations[e.name];!n&&e.beforeSetup&&e.beforeSetup(this),er(this,e,this._integrations),n||Ye(this,[e])}sendEvent(e,n={}){this.emit("beforeSendEvent",e,n);const r=wi(e,this);let s=Qo(e,this._dsn,this._options._metadata,this._options.tunnel);if(!re(n))for(const o of n.attachments||[])s=Je(s,jo(o));r&&(s=Je(s,r)),this.sendEnvelope(s).then(o=>this.emit("afterSendEvent",e,o))}sendSession(e){const{release:n,environment:r=Se}=this._options;if("aggregates"in e){const o=e.attrs||{};if(!o.release&&!n){m&&h.warn(on);return}o.release=o.release||n,o.environment=o.environment||r,e.attrs=o}else{if(!e.release&&!n){m&&h.warn(on);return}e.release=e.release||n,e.environment=e.environment||r}this.emit("beforeSendSession",e);const s=Jo(e,this._dsn,this._options._metadata,this._options.tunnel);this.sendEnvelope(s)}recordDroppedEvent(e,n,r=1){if(this._options.sendClientReports){const s=`${e}:${n}`;m&&h.log(`Recording outcome: "${s}"${r>1?` (${r} times)`:""}`),this._outcomes[s]=(this._outcomes[s]||0)+r}}on(e,n){const r=this._hooks[e]=this._hooks[e]||new Set,s=(...o)=>n(...o);return r.add(s),()=>{r.delete(s)}}emit(e,...n){const r=this._hooks[e];r&&r.forEach(s=>s(...n))}async sendEnvelope(e){if(this.emit("beforeEnvelope",e),this._isEnabled()&&this._transport)try{const n=await this._transport.send(e);return this.emit("afterEnvelope",e),n}catch(n){return m&&h.error("Error while sending envelope:",n),{}}return m&&h.error("Transport disabled"),{}}registerCleanup(e){}dispose(){}_setupIntegrations(){const{integrations:e}=this._options;this._integrations=Io(this,e),Ye(this,e)}_updateSessionFromEvent(e,n){var c,u;let r=n.level==="fatal",s=!1;const o=(c=n.exception)==null?void 0:c.values;if(o){s=!0,r=!1;for(const f of o)if(((u=f.mechanism)==null?void 0:u.handled)===!1){r=!0;break}}const i=e.status==="ok";(i&&e.errors===0||i&&r)&&(tt(e,{...r&&{status:this._unhandledSessionStatus},errors:e.errors||Number(s||r)}),this.captureSession(e))}async _isClientDoneProcessing(e){let n=0;for(;!e||nsetTimeout(r,1)),!this._numProcessing)return!0;n++}return!1}_isEnabled(){return this.getOptions().enabled!==!1&&this._transport!==void 0}_prepareEvent(e,n,r,s){const o=this.getOptions(),i=this.getIntegrationNames();return!n.integrations&&i.length&&(n.integrations=i),this.emit("preprocessEvent",e,n),e.type||s.setLastEventId(e.event_id||n.event_id),ei(o,e,n,r,this,s).then(a=>{var u;if(a===null)return a;this.emit("postprocessEvent",a,n),a.contexts={trace:{...(u=a.contexts)==null?void 0:u.trace,...Yn(r)},...a.contexts};const c=rr(this,r);return a.sdkProcessingMetadata={dynamicSamplingContext:c,...a.sdkProcessingMetadata},a})}_captureEvent(e,n={},r=N(),s=L()){return m&&se(e)&&h.log(`Captured error event \`${lr(e)[0]||""}\``),this._processEvent(e,n,r,s).then(o=>o.event_id,o=>{m&&(cn(o)?h.log(o.message):an(o)?h.warn(o.message):h.warn(o))})}_processEvent(e,n,r,s){const o=this.getOptions(),{sampleRate:i}=o,a=br(e),c=se(e),f=`before send for type \`${e.type||"error"}\``;let l="before_send";const d=typeof i>"u"?void 0:ro(i),g=ee(e.type);return this._prepareEvent(e,n,r,s).then(p=>{if(p===null)throw Gt("An event processor returned `null`, will not send event.");if(re(n))return p;const I=qi(this,o,p,n,()=>{l="callback_error"});return Wi(I,f)}).then(p=>{var b;if(p===null){if(this.recordDroppedEvent(l,g),a){const X=e.spans||[];this.recordDroppedEvent(l,"span",1+X.length)}throw Gt(`${f} ${l==="callback_error"?"threw an error":"returned `null`"}, will not send event.`)}const I=r.getSession()||s.getSession();if(c&&I&&this._updateSessionFromEvent(I,p),c&&typeof d=="number"&&Ee()>d)throw this.recordDroppedEvent("sample_rate","error"),Gt(`Discarding event because it's not included in the random sample (sampling rate = ${i})`);if(a){const B=((b=p.sdkProcessingMetadata)==null?void 0:b.spanCountBeforeProcessing)||0,X=p.spans?p.spans.length:0,we=B-X;we>0&&this.recordDroppedEvent("before_send","span",we)}const V=p.transaction_info;if(a&&V&&p.transaction!==e.transaction){const B="custom";p.transaction_info={...V,source:B}}return this.sendEvent(p,n),p}).then(null,p=>{throw cn(p)||an(p)?p:(this.captureException(p,{mechanism:{handled:!1,type:"internal"},data:{__sentry__:!0},originalException:p}),kt(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. +Reason: ${p}`))})}_process(e,n){this._numProcessing++,this._promiseBuffer.add(e).then(r=>(this._numProcessing--,r),r=>(this._numProcessing--,r===be&&this.recordDroppedEvent("queue_overflow",n),r))}_clearOutcomes(){const e=this._outcomes;return this._outcomes={},Object.entries(e).map(([n,r])=>{const[s,o]=n.split(":");return{reason:s,category:o,quantity:r}})}_flushOutcomes(){m&&h.log("Flushing outcomes...");const e=this._clearOutcomes();if(e.length===0){m&&h.log("No outcomes to send");return}if(!this._dsn){m&&h.log("No dsn provided, will not send outcomes");return}m&&h.log("Sending outcomes:",e);const n=Di(e,this._options.tunnel&&St(this._dsn));this.sendEnvelope(n)}}function Wi(t,e){const n=`${e} must return \`null\` or a valid event.`;if(at(t))return t.then(r=>{if(!Nt(r)&&r!==null)throw kt(n);return r},r=>{throw kt(`${e} rejected with ${r}`)});if(!Nt(t)&&t!==null)throw kt(n);return t}function qi(t,e,n,r,s){const{beforeSend:o,ignoreSpans:i,beforeSendTransaction:a}=e,c=or(e.beforeSendSpan)&&e.beforeSendSpan;let u=n;if(se(u)&&o){const f=u;return ht(m?"The `beforeSend` callback threw an error, dropping the event:":"",()=>o(f,r),()=>(s(),null))}if(br(u)){if(c||i){const f=Li(u);if(i!=null&&i.length&&Ge({description:f.description,op:f.op,attributes:f.data},i))return null;if(c){const l=Xe(f,c);u=Et(n,Pi(l))}if(u.spans){const l=[],d=u.spans;for(const p of d){if(i!=null&&i.length&&Ge({description:p.description,op:p.op,attributes:p.data},i)){Eo(d,p);continue}c?l.push(Xe(p,c)):l.push(p)}const g=u.spans.length-l.length;g&&t.recordDroppedEvent("before_send","span",g),u.spans=l}}if(a){if(u.spans){const f=u.spans.length;u.sdkProcessingMetadata={...n.sdkProcessingMetadata,spanCountBeforeProcessing:f}}return ht(m?"The `beforeSendTransaction` callback threw an error, dropping the event:":"",()=>a(u,r),()=>(s(),null))}}return u}function se(t){return t.type===void 0}function br(t){return t.type==="transaction"}function Gi(t){let e=0;return t.name&&(e+=t.name.length*2),e+=8,e+vr(t.attributes)}function zi(t){let e=0;return t.message&&(e+=t.message.length*2),e+vr(t.attributes)}function vr(t){if(!t)return 0;let e=0;return Object.values(t).forEach(n=>{Array.isArray(n)?e+=n.length*fn(n[0]):it(n)?e+=fn(n):e+=100}),e}function fn(t){return typeof t=="string"?t.length*2:typeof t=="number"?8:typeof t=="boolean"?4:0}function Yi(t,e){e.debug===!0&&(m?h.enable():j(()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),Vi(),N().update(e.initialScope);const r=new t(e);return Xi(r),r.init(),r}function Ki(){const t=S();return t&&!Ui(t)?t:void 0}function Vi(){Ki()&&j(()=>{console.warn("[Sentry] `Sentry.init()` was called more than once. The new client replaces the active client, but the active client is not closed, so state from both can mix. Call `Sentry.init()` only once, or call `await Sentry.close()` before you call it again.")})}function Xi(t){N().setClient(t)}const Ir="[Filtered]",Ji=["auth","token","secret","session","password","passwd","pwd","key","jwt","bearer","sso","saml","csrf","xsrf","credentials","sid","identity","set-cookie","cookie"];function Qi(t,e){return e.some(n=>t.includes(n))}function Tr(t,e,n){if(e===!1)return!0;const r=t.toLowerCase();if(Qi(r,Ji))return!0;if(e===!0)return!1;const i=("deny"in e?e.deny:e.allow).some(a=>r.includes(a.toLowerCase()));return"deny"in e?i:!i}function ln(t,e,n){if(e===!1)return{};const r={};for(const s of Object.keys(t))r[s]=Tr(s,e)?Ir:t[s];return r}function Zi(t,e){if(!(!t||e===!1))return t.split("&").map(n=>{const r=n.indexOf("="),s=r===-1?n:n.slice(0,r),o=new URLSearchParams(`${s}=`).keys().next().value;return o!==void 0&&Tr(o,e)?`${s}=${Ir}`:n}).join("&")}function ta(t,e){const n=t.indexOf("#"),r=n===-1?t.length:n,s=t.indexOf("?");if(s===-1||s>r)return t;const o=t.slice(0,s),i=t.slice(s+1,r),a=t.slice(r),c=Zi(i,e);return c?`${o}?${c}${a}`:`${o}${a}`}function ea(t){var e;return((e=t??S())==null?void 0:e.getDataCollectionOptions().urlQueryParams)??!0}function na(t,e){return t===void 0?void 0:ta(t,ea(e))}function zt(t){if(!t)return{};const e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};const n=e[6]||"",r=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],search:n,hash:r,relative:e[5]+n+r}}function ra(t,e=!0){if(t.startsWith("data:")){const n=t.match(/^data:([^;,]+)/),r=n?n[1]:"text/plain",s=t.includes(";base64,"),o=t.indexOf(",");let i="";if(e&&o!==-1){const a=t.slice(o+1);i=a.length>10?`${a.slice(0,10)}... [truncated]`:a}return`data:${r}${s?",base64":""}${i?`,${i}`:""}`}return t}function sa(t){var e;"aggregates"in t?((e=t.attrs)==null?void 0:e.ip_address)===void 0&&(t.attrs={...t.attrs,ip_address:"{{auto}}"}):t.ipAddress===void 0&&(t.ipAddress="{{auto}}")}function oa(t,e,n=[e],r="npm"){const s=(t._metadata=t._metadata||{}).sdk=t._metadata.sdk||{};s.name||(s.name=`sentry.javascript.${e}`,s.packages=n.map(o=>({name:`${r}:@sentry/${o}`,version:W})),s.version=W)}const ia=100;function G(t,e){const n=S(),r=L();if(!n)return;const{beforeBreadcrumb:s=null,maxBreadcrumbs:o=ia}=n.getOptions();if(o<=0)return;const a={timestamp:yt(),...t},c=s?ht(m?"The `beforeBreadcrumb` callback threw an error, dropping the breadcrumb:":"",()=>j(()=>s(a,e)),()=>null):a;c!==null&&(n.emit&&n.emit("beforeAddBreadcrumb",c,e),r.addBreadcrumb(c,o))}const aa="FunctionToString",dn=new WeakMap,ca=()=>({name:aa,setupOnce(){const t=Function.prototype.toString;try{Function.prototype.toString=function(...e){const n=ye(this);let r;try{dn.has(S())&&n!==void 0&&(r=n)}catch{}return t.apply(r??this,e)}}catch{}},setup(t){dn.set(t,!0)}}),ua=ca,fa=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/,/^ResizeObserver loop completed with undelivered notifications.$/,/^Cannot redefine property: googletag$/,/^Can't find variable: gmo$/,/^undefined is not an object \(evaluating 'a\.[A-Z]'\)$/,/can't redefine non-configurable property "solana"/,/vv\(\)\.getRestrictions is not a function/,/Can't find variable: _AutofillCallbackHandler/,/Object Not Found Matching Id:\d+, MethodName:simulateEvent/,/Java exception was raised during method invocation$/,/Java object is gone$/],la="EventFilters",da=(t={})=>{let e;return{name:la,setup(n){const r=n.getOptions();e=pn(t,r)},processEvent(n,r,s){if(!e){const o=s.getOptions();e=pn(t,o)}return pa(n,e)?null:n}}};function pn(t={},e={}){return{allowUrls:[...t.allowUrls||[],...e.allowUrls||[]],denyUrls:[...t.denyUrls||[],...e.denyUrls||[]],ignoreErrors:[...t.ignoreErrors||[],...e.ignoreErrors||[],...t.disableErrorDefaults?[]:fa],ignoreTransactions:[...t.ignoreTransactions||[],...e.ignoreTransactions||[]]}}function pa(t,e){if(t.type){if(t.type==="transaction"&&ma(t,e.ignoreTransactions))return m&&h.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. +Event: ${H(t)}`),!0}else{if(ha(t,e.ignoreErrors))return m&&h.warn(`Event dropped due to being matched by \`ignoreErrors\` option. +Event: ${H(t)}`),!0;if(Ea(t))return m&&h.warn(`Event dropped due to not having an error message, error type or stacktrace. +Event: ${H(t)}`),!0;if(ga(t,e.denyUrls))return m&&h.warn(`Event dropped due to being matched by \`denyUrls\` option. +Event: ${H(t)}. +Url: ${Ct(t)}`),!0;if(!_a(t,e.allowUrls))return m&&h.warn(`Event dropped due to not being matched by \`allowUrls\` option. +Event: ${H(t)}. +Url: ${Ct(t)}`),!0}return!1}function ha(t,e){return e!=null&&e.length?lr(t).some(n=>_t(n,e)):!1}function ma(t,e){if(!(e!=null&&e.length))return!1;const n=t.transaction;return n?_t(n,e):!1}function ga(t,e){if(!(e!=null&&e.length))return!1;const n=Ct(t);return n?_t(n,e):!1}function _a(t,e){if(!(e!=null&&e.length))return!0;const n=Ct(t);return n?_t(n,e):!0}function ya(t=[]){for(let e=t.length-1;e>=0;e--){const n=t[e];if(n&&n.filename!==""&&n.filename!=="[native code]")return n.filename||null}return null}function Ct(t){var e,n;try{const r=[...((e=t.exception)==null?void 0:e.values)??[]].reverse().find(o=>{var i,a,c;return((i=o.mechanism)==null?void 0:i.parent_id)===void 0&&((c=(a=o.stacktrace)==null?void 0:a.frames)==null?void 0:c.length)}),s=(n=r==null?void 0:r.stacktrace)==null?void 0:n.frames;return s?ya(s):null}catch{return m&&h.error(`Cannot extract url for event ${H(t)}`),null}}function Ea(t){var e,n;return(n=(e=t.exception)==null?void 0:e.values)!=null&&n.length?!t.message&&!t.exception.values.some(r=>r.stacktrace||r.type&&r.type!=="Error"||r.value):!1}function Sa(t,e,n,r,s,o){var a;if(!((a=s.exception)!=null&&a.values)||!o||!D(o.originalException))return;const i=s.exception.values.length>0?s.exception.values[s.exception.values.length-1]:void 0;i&&(s.exception.values=oe(t,e,r,o.originalException,n,s.exception.values,i,0))}function oe(t,e,n,r,s,o,i,a){if(o.length>=n+1)return o;let c=[...o];if(D(r[s])){hn(i,a,r);const u=t(e,r[s]),f=c.length;mn(u,s,f,a),c=oe(t,e,n,r[s],s,[u,...c],u,f)}return kr(r)&&r.errors.forEach((u,f)=>{if(D(u)){hn(i,a,r);const l=t(e,u),d=c.length;mn(l,`errors[${f}]`,d,a),c=oe(t,e,n,u,s,[l,...c],l,d)}}),c}function kr(t){return Array.isArray(t.errors)}function hn(t,e,n){t.mechanism={handled:!0,type:"auto.core.linked_errors",...kr(n)&&{is_exception_group:!0},...t.mechanism,exception_id:e}}function mn(t,e,n,r){t.mechanism={handled:!0,...t.mechanism,type:"chained",source:e,exception_id:n,parent_id:r}}function ba(t){return D(t)&&"__sentry_fetch_url_host__"in t&&typeof t.__sentry_fetch_url_host__=="string"}function gn(t){return ba(t)?`${t.message} (${t.__sentry_fetch_url_host__})`:t.message}const At=new Set([]);function va(t){const e="console",n=z(e,t);return Y(e,Ta),n}function Ia(t){for(const e of t)At.add(e);return()=>{for(const e of t)At.delete(e)}}const _n=new Set;function Ta(){"console"in _&&Nn.forEach(function(t){_n.has(t)||!(t in _.console)||(_n.add(t),T(_.console,t,function(e){return Ot[t]=e,function(...n){const r=n[0],s=Ot[t],o=At.size&&typeof r=="string"&&_t(r,At);o||w("console",{args:n,level:t}),(!o||m&&h.isEnabled())&&(s==null||s.apply(_.console,n))}}))})}function ka(t){return t==="warn"?"warning":["fatal","error","warning","log","info","debug"].includes(t)?t:"log"}const wa="Dedupe",Ra=()=>{let t;return{name:wa,processEvent(e){if(e.type)return e;try{if(Na(e,t))return m&&h.warn("Event dropped due to being a duplicate of previously captured event."),null}catch{}return t=e}}},Oa=Ra;function Na(t,e){return e?!!(Ca(t,e)||Aa(t,e)):!1}function Ca(t,e){const n=t.message,r=e.message;return!(!n&&!r||n&&!r||!n&&r||n!==r||!Rr(t,e)||!wr(t,e))}function Aa(t,e){const n=yn(e),r=yn(t);return!(!n||!r||n.type!==r.type||n.value!==r.value||!Rr(t,e)||!wr(t,e))}function wr(t,e){const n=Ne(t),r=Ne(e);if(!n||!r)return!n&&!r;if(r.length!==n.length)return!1;for(let s=0;s{const e=new Set(t.levels||Nn);return{name:xa,setup(n){const r=va(({args:s,level:o})=>{S()!==n||!e.has(o)||La(o,s)});if(n.registerCleanup(r),t.filter){const s=Ia(t.filter);n.registerCleanup(s)}}}};function La(t,e){const n={category:"console",data:{arguments:e,logger:"console"},level:ka(t),message:En(e)};if(t==="assert")if(e[0]===!1){const r=e.slice(1);n.message=r.length>0?`Assertion failed: ${En(r)}`:"Assertion failed",n.data.arguments=r}else return;G(n,{input:e,level:t})}function En(t){return"util"in _&&typeof _.util.format=="function"?_.util.format(...t):is(t," ")}const Pa="ConversationId",Ma=()=>({name:Pa,setup(t){t.on("spanStart",e=>{const n=N().getScopeData(),r=L().getScopeData(),s=n.conversationId||r.conversationId;if(s){const{op:o,data:i,description:a}=Pt(e);if(!(o!=null&&o.startsWith("gen_ai."))&&!i["ai.operationId"]&&!(a!=null&&a.startsWith("ai.")))return;e.setAttribute(xs,s)}})}}),$a=Ma,ie=_;function Fa(){if(!("fetch"in ie))return!1;try{return new Headers,new Request("data:,"),new Response,!0}catch{return!1}}function ae(t){return t&&/^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}function ja(){var n;if(typeof EdgeRuntime=="string")return!0;if(!Fa())return!1;if(ae(ie.fetch))return!0;let t=!1;const e=ie.document;if(e&&typeof e.createElement=="function")try{const r=e.createElement("iframe");r.hidden=!0,e.head.appendChild(r),(n=r.contentWindow)!=null&&n.fetch&&(t=ae(r.contentWindow.fetch)),e.head.removeChild(r)}catch(r){m&&h.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",r)}return t}function Ba(t){const e="fetch",n=z(e,t);return Y(e,()=>Ua()),n}function Ua(t){Mt()&&!ja()||T(_,"fetch",function(e){return new Proxy(e,{apply(n,r,s){const o=new Error,{method:i,url:a}=Ha(s),c={args:s,fetchData:{method:i,url:a},startTimestamp:R()*1e3,virtualError:o,headers:Wa(s)};return w("fetch",{...c}),Reflect.apply(n,_,s).then(async u=>(w("fetch",{...c,endTimestamp:R()*1e3,response:u}),u),u=>{w("fetch",{...c,endTimestamp:R()*1e3,error:u}),D(u)&&u.stack===void 0&&(u.stack=o.stack,F(u,"framesToPop",1));const f=S(),l=(f==null?void 0:f.getOptions().enhanceFetchErrorMessages)??"always";if(l!==!1&&D(u)&&u.name==="TypeError"&&(u.message==="Failed to fetch"||u.message==="Load failed"||u.message==="NetworkError when attempting to fetch resource."))try{const p=new URL(c.fetchData.url).host;l==="always"?u.message=`${u.message} (${p})`:F(u,"__sentry_fetch_url_host__",p)}catch{}throw u})}})})}function wt(t,e){return xt(t)&&!!t[e]}function Sn(t){return typeof t=="string"?t:t?wt(t,"url")?t.url:t.toString?t.toString():"":""}function Ha(t){if(t.length===0)return{method:"GET",url:""};if(t.length===2){const[n,r]=t;return{url:Sn(n),method:wt(r,"method")?String(r.method).toUpperCase():Pn(n)&&wt(n,"method")?String(n.method).toUpperCase():"GET"}}const e=t[0];return{url:Sn(e),method:wt(e,"method")?String(e.method).toUpperCase():"GET"}}function Wa(t){const[e,n]=t;try{if(typeof n=="object"&&n!==null&&"headers"in n&&n.headers)return new Headers(n.headers);if(Pn(e))return new Headers(e.headers)}catch{}}function Or(t){if(t!==void 0)return t>=400&&t<500?"warning":t>=500?"error":void 0}const ce=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,E=_,qa=80,U={};try{typeof Node<"u"&&(U.parentNode=Object.getOwnPropertyDescriptor(Node.prototype,"parentNode").get),typeof Element<"u"&&(U.tagName=Object.getOwnPropertyDescriptor(Element.prototype,"tagName").get,U.id=Object.getOwnPropertyDescriptor(Element.prototype,"id").get,U.className=Object.getOwnPropertyDescriptor(Element.prototype,"className").get,U.getAttribute=Element.prototype.getAttribute),typeof HTMLElement<"u"&&(U.dataset=Object.getOwnPropertyDescriptor(HTMLElement.prototype,"dataset").get)}catch{}function M(t,e,n){const r=U[e];if(r)try{return r.call(t,n)}catch{}const s=t[e];return typeof s=="function"?s.call(t,n):s}function Nr(t,e={}){if(!t)return"";try{let n=t;const r=5,s=[];let o=0,i=0;const a=" > ",c=a.length;let u;const f=Array.isArray(e)?e:e.keyAttrs,l=!Array.isArray(e)&&e.maxStringLength||qa;for(;n&&o++1&&i+s.length*c+u.length>=l));)s.push(u),i+=u.length,n=M(n,"parentNode");return s.reverse().join(a)}catch{return""}}function Ga(t,e){const n=[],r=M(t,"tagName");if(!r)return"";if(typeof HTMLElement<"u"&&t instanceof HTMLElement){const o=M(t,"dataset");if(o){if(o.sentryComponent)return o.sentryComponent;if(o.sentryElement)return o.sentryElement}}n.push(r.toLowerCase());const s=e!=null&&e.length?e.filter(o=>M(t,"getAttribute",o)).map(o=>[o,M(t,"getAttribute",o)]):null;if(s!=null&&s.length)s.forEach(o=>{n.push(`[${o[0]}="${o[1]}"]`)});else{const o=M(t,"id");o&&n.push(`#${o}`);const i=M(t,"className");if(i&&x(i)){const a=i.split(/\s+/);for(const c of a)n.push(`.${c}`)}}for(const o of["aria-label","type","name","title","alt"]){const i=M(t,"getAttribute",o);i&&n.push(`[${o}="${i}"]`)}return n.join("")}function za(t,e,n){E.document&&E.addEventListener(t,e,n)}function Ya(t,e,n){E.document&&E.removeEventListener(t,e,n)}const Ka=t=>{var n;const e=E.requestIdleCallback||E.setTimeout;if(((n=E.document)==null?void 0:n.visibilityState)==="hidden")t();else{let r=!1;const s=()=>{r||(t(),r=!0)};za("visibilitychange",s,{once:!0,capture:!0}),e(()=>{s(),Ya("visibilitychange",s,{capture:!0})})}};function Va(t,e=5){if(!_.HTMLElement)return null;let n=t;for(let r=0;r{var o,i;const s=(o=E[n])==null?void 0:o.prototype;(i=s==null?void 0:s.hasOwnProperty)!=null&&i.call(s,"addEventListener")&&(T(s,"addEventListener",function(a){return function(c,u,f){if((c==="click"||c=="keypress")&&u)try{const l=this.__sentry_instrumentation_handlers__=this.__sentry_instrumentation_handlers__||{},d=l[c]=l[c]||{captureListeners:new WeakSet,bubbleListeners:new WeakSet,listenerCount:0},g=vn(f);if(!d.handler){const I=In(t);d.handler=I,d.capture=g,a.call(this,c,I,d.capture)}const p=d[g?"captureListeners":"bubbleListeners"];p.has(u)||(typeof f=="object"&&(f!=null&&f.once||f!=null&&f.signal)?d.sticky=!0:(p.add(u),d.listenerCount++))}catch{}return a.call(this,c,u,f)}}),T(s,"removeEventListener",function(a){return function(c,u,f){if((c==="click"||c=="keypress")&&u)try{const l=this.__sentry_instrumentation_handlers__||{},d=l[c];d!=null&&d[vn(f)?"captureListeners":"bubbleListeners"].delete(u)&&(!--d.listenerCount&&!d.sticky&&(a.call(this,c,d.handler,d.capture),d.handler=void 0,delete l[c]),Object.keys(l).length===0&&delete this.__sentry_instrumentation_handlers__)}catch{}return a.call(this,c,u,f)}}))})}function ec(t){if(t.type!==ue)return!1;try{if(!t.target||t.target._sentryId!==fe)return!1}catch{}return!0}function nc(t,e){return t!=="keypress"?!1:e!=null&&e.tagName?!(e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.isContentEditable):!0}function In(t,e=!1){return n=>{if(!n||n._sentryCaptured)return;const r=rc(n);if(nc(n.type,r))return;F(n,"_sentryCaptured",!0),r&&!r._sentryId&&F(r,"_sentryId",k());const s=n.type==="keypress"?"input":n.type;ec(n)||(t({event:n,name:s,global:e}),ue=n.type,fe=r?r._sentryId:void 0),clearTimeout(bn),bn=E.setTimeout(()=>{fe=void 0,ue=void 0},Qa)}}function rc(t){try{return t.target}catch{return null}}let It;function sc(){return"history"in E&&!!E.history}function Ar(t){const e="history";z(e,t),Y(e,oc)}function oc(){if(E.addEventListener("popstate",()=>{const e=E.location.href,n=It;if(It=e,n===e)return;w("history",{from:n,to:e})}),!sc())return;function t(e){return function(...n){const r=n.length>2?n[2]:void 0;if(r){const s=It,o=ic(String(r));if(It=o,s===o)return e.apply(this,n);w("history",{from:s,to:o})}return e.apply(this,n)}}T(E.history,"pushState",t),T(E.history,"replaceState",t)}function ic(t){try{return new URL(t,E.location.origin).toString()}catch{return t}}const Rt={};function ac(t){const e=Rt[t];if(e)return e;let n=E[t];if(ae(n))return Rt[t]=n.bind(E);const r=E.document;if(r&&typeof r.createElement=="function")try{const s=r.createElement("iframe");s.hidden=!0,r.head.appendChild(s);const o=s.contentWindow;o!=null&&o[t]&&(n=o[t]),r.head.removeChild(s)}catch(s){ce&&h.warn(`Could not create sandbox iframe for ${t} check, bailing to window.${t}: `,s)}return n&&(Rt[t]=n.bind(E))}function cc(t){Rt[t]=void 0}const lt="__sentry_xhr_v3__";function uc(t){const e="xhr";z(e,t),Y(e,fc)}function fc(){if(!E.XMLHttpRequest)return;const t=XMLHttpRequest.prototype;t.open=new Proxy(t.open,{apply(e,n,r){let s=new Error;const o=R()*1e3,i=x(r[0])?r[0].toUpperCase():void 0,a=lc(r[1]);if(!i||!a)return e.apply(n,r);n[lt]={method:i,url:a,request_headers:{}},i==="POST"&&a.match(/sentry_key/)&&(n.__sentry_own_request__=!0);const c=()=>{const u=n[lt];if(u&&n.readyState===4){try{u.status_code=n.status}catch{}const f={endTimestamp:R()*1e3,startTimestamp:o,xhr:n,virtualError:s};w("xhr",f),s=void 0,n.removeEventListener("readystatechange",c)}};return"onreadystatechange"in n&&typeof n.onreadystatechange=="function"?n.onreadystatechange=new Proxy(n.onreadystatechange,{apply(u,f,l){return c(),u.apply(f,l)}}):n.addEventListener("readystatechange",c),n.setRequestHeader=new Proxy(n.setRequestHeader,{apply(u,f,l){const[d,g]=l,p=f[lt];return p&&x(d)&&x(g)&&(p.request_headers[d.toLowerCase()]=g),u.apply(f,l)}}),e.apply(n,r)}}),t.send=new Proxy(t.send,{apply(e,n,r){const s=n[lt];if(!s)return e.apply(n,r);r[0]!==void 0&&(s.body=r[0]);const o={startTimestamp:R()*1e3,xhr:n};return w("xhr",o),e.apply(n,r)}})}function lc(t){if(x(t))return t;try{return t.toString()}catch{}}function dc(t){if(typeof Element>"u")return!1;try{return t instanceof Element}catch{return!1}}const y=_;let le=0;const Tn=[];function xr(t){if(le>0)return!0;const e=t?Tn.findIndex(n=>pc(n,t)):-1;return e===-1?!1:(Tn.splice(e,1),!0)}function pc(t,e){return t.msg===e.msg&&t.url===e.url&&t.line===e.line&&t.column===e.column}function hc(){le++,setTimeout(()=>{le--})}function nt(t,e={}){function n(s){return typeof s=="function"}if(!n(t))return t;try{if(Object.prototype.hasOwnProperty.call(t,"__sentry_wrapped__")){const o=t.__sentry_wrapped__;return typeof o=="function"?o:t}if(ye(t))return t}catch{return t}const r=function(...s){_._sentryWrappedDepth=(_._sentryWrappedDepth||0)+1;try{const o=s.map(i=>nt(i,e));return t.apply(this,o)}catch(o){throw hc(),As(i=>{i.addEventProcessor(a=>(e.mechanism&&(Jt(a,void 0),Z(a,e.mechanism)),a.extra={...a.extra,arguments:s},a)),di(o)}),o}finally{_._sentryWrappedDepth=(_._sentryWrappedDepth||0)-1}};try{for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&(r[s]=t[s])}catch{}Mn(r,t),F(t,"__sentry_wrapped__",r);try{Object.getOwnPropertyDescriptor(r,"name").configurable&&Object.defineProperty(r,"name",{get(){return t.name}})}catch{}return r}function kn(){const t=Ie(),{referrer:e}=y.document||{},{userAgent:n}=y.navigator||{},r={...e&&{Referer:e},...n&&{"User-Agent":n}};return{url:t,headers:r}}function Te(t,e){const n=$t(t,e),r={type:Ec(e),value:Sc(e)};return n.length&&(r.stacktrace={frames:n}),r.type===void 0&&r.value===""&&(r.value="Unrecoverable error caught"),r}function mc(t,e,n,r){const s=S(),o=s==null?void 0:s.getOptions().normalizeDepth,i=kc(e),a={__serialized__:Fn(e,o)};if(i)return{exception:{values:[Te(t,i)]},extra:a};const u={exception:{values:[{type:Dt(e)?e.constructor.name:r?"UnhandledRejection":"Error",value:Ic(e,{isUnhandledRejection:r})}]},extra:a};if(n){const f=$t(t,n);f.length&&(u.exception.values[0].stacktrace={frames:f})}return u}function Yt(t,e){return{exception:{values:[Te(t,e)]}}}function $t(t,e){const n=e.stacktrace||e.stack||"",r=_c(e),s=yc(e);try{return t(n,r,s)}catch{}return[]}const gc=/Minified React error #\d+;/i;function _c(t){return t&&gc.test(t.message)?1:0}function yc(t){return typeof t.framesToPop=="number"?t.framesToPop:0}function Dr(t){return typeof WebAssembly<"u"&&typeof WebAssembly.Exception<"u"?t instanceof WebAssembly.Exception:!1}function Ec(t){const e=t==null?void 0:t.name;return!e&&Dr(t)?t.message&&Array.isArray(t.message)&&t.message.length==2?t.message[0]:"WebAssembly.Exception":e}function Sc(t){const e=t==null?void 0:t.message;return Dr(t)?Array.isArray(t.message)&&t.message.length==2?t.message[1]:"wasm exception":e?e.error&&typeof e.error.message=="string"?gn(e.error):gn(t):"No error message"}function bc(t,e,n,r){const s=(n==null?void 0:n.syntheticException)||void 0,o=ke(t,e,s,r);return Z(o),o.level="error",n!=null&&n.event_id&&(o.event_id=n.event_id),bt(o)}function vc(t,e,n="info",r,s){const o=(r==null?void 0:r.syntheticException)||void 0,i=de(t,e,o,s);return i.level=n,r!=null&&r.event_id&&(i.event_id=r.event_id),bt(i)}function ke(t,e,n,r,s){var a,c;let o;if(Ln(e)&&e.error)return Yt(t,e.error);if(Ae(e)||Kr(e)){const u=e;if("stack"in e){o=Yt(t,e);const f=(c=(a=o.exception)==null?void 0:a.values)==null?void 0:c[0];if(r&&n&&f&&!f.stacktrace){const l=$t(t,n);l.length&&(f.stacktrace={frames:l},Z(o,{synthetic:!0}))}}else{const f=u.name||(Ae(u)?"DOMError":"DOMException"),l=u.message?`${f}: ${u.message}`:f;o=de(t,l,n,r),Jt(o,l)}return o}if(D(e))return Yt(t,e);if(Nt(e)||Dt(e))return o=mc(t,e,n,s),Z(o,{synthetic:!0}),o;const i=String(e);return o=de(t,i,n,r),Jt(o,i),Z(o,{synthetic:!0}),o}function de(t,e,n,r){const s={};if(r&&n){const o=$t(t,n);o.length&&(s.exception={values:[{value:e,stacktrace:{frames:o}}]}),Z(s,{synthetic:!0})}if(ge(e)){const{__sentry_template_string__:o,__sentry_template_values__:i}=e;return s.logentry={message:o,params:i},s}return s.message=e,s}function Ic(t,{isUnhandledRejection:e}){const n=Xr(t),r=e?"promise rejection":"exception";return Ln(t)?`Event \`ErrorEvent\` captured as ${r} with message \`${t.message}\``:Dt(t)?`Event \`${Tc(t)}\` (type=${t.type}) captured as ${r}`:`Object captured as ${r} with keys: ${n}`}function Tc(t){try{const e=Object.getPrototypeOf(t);return e?e.constructor.name:void 0}catch{}}function kc(t){return Object.values(t).find(D)}class wc extends Hi{constructor(e){var c;const n=Rc(e),r=y.SENTRY_SDK_SOURCE||Wo();oa(n,"browser",["browser"],r),super(n),n.routeProvider&&Xa(n.routeProvider,this),this._unhandledSessionStatus="unhandled";const{userInfo:s}=this.getDataCollectionOptions();(c=n._metadata)!=null&&c.sdk&&(n._metadata.sdk.settings={infer_ip:s?"auto":"never",...n._metadata.sdk.settings});const{sendClientReports:o}=this._options,i=()=>{R()},a=[[y.document,"visibilitychange",()=>{i(),y.document.visibilityState==="hidden"&&(o&&this._flushOutcomes(),queueMicrotask(()=>{this.flush()}))}],[y.document,"freeze",i],[y.document,"resume",i],[y,"pagehide",i],[y,"pageshow",i]];a.forEach(([u,f,l])=>{var d;return(d=u==null?void 0:u.addEventListener)==null?void 0:d.call(u,f,l)}),this.on("close",()=>a.forEach(([u,f,l])=>{var d;return(d=u==null?void 0:u.removeEventListener)==null?void 0:d.call(u,f,l)})),s&&this.on("beforeSendSession",sa)}eventFromException(e,n){return bc(this._options.stackParser,e,n,this._options.attachStacktrace)}eventFromMessage(e,n="info",r){return vc(this._options.stackParser,e,n,r,this._options.attachStacktrace)}_prepareEvent(e,n,r,s){return e.platform=e.platform||"javascript",super._prepareEvent(e,n,r,s)}}function Rc(t){var e;return{release:typeof __SENTRY_RELEASE__=="string"?__SENTRY_RELEASE__:(e=y.SENTRY_RELEASE)==null?void 0:e.id,sendClientReports:!0,parentSpanIsAlwaysRootSpan:!0,...t}}const Oc=40;function Nc(t,e=ac("fetch")){let n=0,r=0;async function s(o){const i=o.body.length;n+=i,r++;const a={body:o.body,method:"POST",referrerPolicy:"strict-origin",headers:t.headers,keepalive:n<=6e4&&r<15,...t.fetchOptions};try{const c=await e(t.url,a);return{statusCode:c.status,headers:{"x-sentry-rate-limits":c.headers.get("X-Sentry-Rate-Limits"),"retry-after":c.headers.get("Retry-After")}}}catch(c){throw cc("fetch"),c}finally{n-=i,r--}}return xi(t,s,ve(t.bufferSize||Oc))}const Ft=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,Cc=30,Ac=50;function pe(t,e,n,r){const s={filename:t,function:e===""?q:e,in_app:!0};return n!==void 0&&(s.lineno=n),r!==void 0&&(s.colno=r),s}const xc=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Dc=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Lc=/\((\S*)(?::(\d+))(?::(\d+))\)/,Pc=/at (.+?) ?\(data:(.+?),/,Mc=t=>{var s;const e=t.match(Pc);if(e)return{filename:``,function:e[1]};const n=xc.exec(t);if(n){const[,o,i,a]=n;return pe(o,q,+i,+a)}const r=Dc.exec(t);if(r){if(((s=r[2])==null?void 0:s.indexOf("eval"))===0){const c=Lc.exec(r[2]);c&&(r[2]=c[1],r[3]=c[2],r[4]=c[3])}const[i,a]=Lr(r[1]||q,r[2]);return pe(a,i,r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},$c=[Cc,Mc],Fc=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,jc=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Bc=t=>{const e=Fc.exec(t);if(e){if(e[3]&&e[3].indexOf(" > eval")>-1){const o=jc.exec(e[3]);o&&(e[1]=e[1]||"eval",e[3]=o[1],e[4]=o[2],e[5]="")}let r=e[3],s=e[1]||q;return[s,r]=Lr(s,r),pe(r,s,e[4]?+e[4]:void 0,e[5]?+e[5]:void 0)}},Uc=[Ac,Bc],Hc=[$c,Uc],Wc=xn(...Hc),Lr=(t,e)=>{const n=t.indexOf("safari-extension")!==-1,r=t.indexOf("safari-web-extension")!==-1;return n||r?[t.indexOf("@")!==-1?t.split("@")[0]:q,n?`safari-extension:${e}`:`safari-web-extension:${e}`]:[t,e]},Tt=1024,qc="Breadcrumbs",Gc=(t={})=>{const e={dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...t};return{name:qc,setup(n){e.dom&&Za(Kc(n,e.dom)),e.xhr&&uc(Vc(n)),e.fetch&&Ba(Xc(n)),e.history&&Ar(Jc(n)),e.sentry&&n.on("beforeSendEvent",Yc(n))}}},zc=Gc;function Yc(t){return function(n){S()===t&&G({category:`sentry.${n.type==="transaction"?"transaction":"event"}`,event_id:n.event_id,level:n.level,message:H(n)},{event:n})}}function Kc(t,e){return function(r){if(S()!==t)return;let s,o,i=typeof e=="object"?e.serializeAttribute:void 0,a=typeof e=="object"&&typeof e.maxStringLength=="number"?e.maxStringLength:void 0;a&&a>Tt&&(Ft&&h.warn(`\`dom.maxStringLength\` cannot exceed ${Tt}, but a value of ${a} was configured. Sentry will use ${Tt} instead.`),a=Tt),typeof i=="string"&&(i=[i]);try{const u=r.event,f=Qc(u)?u.target:u;s=Nr(f,{keyAttrs:i,maxStringLength:a}),o=Va(f)}catch{s=""}if(s.length===0)return;const c={category:`ui.${r.name}`,message:s};o&&(c.data={"ui.component_name":o}),G(c,{event:r.event,name:r.name,global:r.global})}}function Vc(t){return function(n){if(S()!==t)return;const{startTimestamp:r,endTimestamp:s}=n,o=n.xhr[lt];if(!r||!s||!o)return;const{method:i,url:a,status_code:c,body:u}=o,f={method:i,url:a,status_code:c},l={xhr:n.xhr,input:u,startTimestamp:r,endTimestamp:s},d={category:"xhr",data:f,type:"http",level:Or(c)};t.emit("beforeOutgoingRequestBreadcrumb",d,l),G(d,l)}}function Xc(t){return function(n){if(S()!==t)return;const{startTimestamp:r,endTimestamp:s}=n;if(s&&!(n.fetchData.url.match(/sentry_key/)&&n.fetchData.method==="POST"))if(n.error){const o={data:n.error,input:n.args,startTimestamp:r,endTimestamp:s},i={category:"fetch",data:n.fetchData,level:"error",type:"http"};t.emit("beforeOutgoingRequestBreadcrumb",i,o),G(i,o)}else{const o=n.response,i={...n.fetchData,status_code:o==null?void 0:o.status},a={input:n.args,response:o,startTimestamp:r,endTimestamp:s},c={category:"fetch",data:i,type:"http",level:Or(i.status_code)};t.emit("beforeOutgoingRequestBreadcrumb",c,a),G(c,a)}}}function Jc(t){return function(n){if(S()!==t)return;let r=n.from,s=n.to;const o=zt(y.location.href);let i=r?zt(r):void 0;const a=zt(s);i!=null&&i.path||(i=o),o.protocol===a.protocol&&o.host===a.host&&(s=a.relative),o.protocol===i.protocol&&o.host===i.host&&(r=i.relative),G({category:"navigation",data:{from:r,to:s}})}}function Qc(t){return!!t&&!!t.target}const Zc="EventTarget,Window,Node,ApplicationCache,AudioTrackList,BroadcastChannel,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(","),tu="BrowserApiErrors",eu=(t={})=>{const e={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,unregisterOriginalCallbacks:!1,...t};return{name:tu,setupOnce(){e.setTimeout&&T(y,"setTimeout",wn),e.setInterval&&T(y,"setInterval",wn),e.requestAnimationFrame&&T(y,"requestAnimationFrame",ru),e.XMLHttpRequest&&"XMLHttpRequest"in y&&T(XMLHttpRequest.prototype,"send",su);const n=e.eventTarget;n&&(Array.isArray(n)?n:Zc).forEach(s=>ou(s,e))}}},nu=eu;function wn(t){return function(...e){const n=e[0];return e[0]=nt(n,{mechanism:{handled:!1,type:`auto.browser.browserapierrors.${$(t)}`}}),t.apply(this,e)}}function ru(t){return function(e){return t.apply(this,[nt(e,{mechanism:{data:{handler:$(t)},handled:!1,type:"auto.browser.browserapierrors.requestAnimationFrame"}})])}}function su(t){return function(...e){const n=this;return["onload","onerror","onprogress","onreadystatechange"].forEach(s=>{s in n&&typeof n[s]=="function"&&T(n,s,function(o){const i={mechanism:{data:{handler:$(o)},handled:!1,type:`auto.browser.browserapierrors.xhr.${s}`}},a=ye(o);return a&&(i.mechanism.data.handler=$(a)),nt(o,i)})}),t.apply(this,e)}}function ou(t,e){var s,o;const r=(s=y[t])==null?void 0:s.prototype;(o=r==null?void 0:r.hasOwnProperty)!=null&&o.call(r,"addEventListener")&&(T(r,"addEventListener",function(i){return function(a,c,u){try{iu(c)&&(c.handleEvent=nt(c.handleEvent,{mechanism:{data:{handler:$(c),target:t},handled:!1,type:"auto.browser.browserapierrors.handleEvent"}}))}catch{}return e.unregisterOriginalCallbacks&&au(this,a,c),i.apply(this,[a,nt(c,{mechanism:{data:{handler:$(c),target:t},handled:!1,type:"auto.browser.browserapierrors.addEventListener"}}),u])}}),T(r,"removeEventListener",function(i){return function(a,c,u){try{if(Object.prototype.hasOwnProperty.call(c,"__sentry_wrapped__")){const f=c.__sentry_wrapped__;f&&i.call(this,a,f,u)}}catch{}return i.call(this,a,c,u)}}))}function iu(t){return typeof t.handleEvent=="function"}function au(t,e,n){t&&typeof t=="object"&&"removeEventListener"in t&&typeof t.removeEventListener=="function"&&t.removeEventListener(e,n)}const cu=(t={})=>{const e=t.lifecycle??"page";return{name:"BrowserSession",setupOnce(){if(typeof y.document>"u"){Ft&&h.warn("Using the `browserSessionIntegration` in non-browser environments is not supported.");return}rn({ignoreDuration:!0});let n=!1;Ka(()=>{n||(qt(),n=!0)});const r=L();let s=r.getUser();r.addScopeListener(o=>{const i=o.getUser();((s==null?void 0:s.id)!==(i==null?void 0:i.id)||(s==null?void 0:s.ip_address)!==(i==null?void 0:i.ip_address))&&(s=i,n&&qt())}),e==="route"&&Ar(({from:o,to:i})=>{o!==i&&(rn({ignoreDuration:!0}),qt(),n=!0)})}}},uu="CultureContext",fu=()=>({name:uu,preprocessEvent(t){var n;const e=Rn();e&&(t.contexts={...t.contexts,culture:{...e,...(n=t.contexts)==null?void 0:n.culture}})},processSegmentSpan(t){const e=Rn();e&&ir(t,{"culture.locale":e.locale,"culture.timezone":e.timezone,"culture.calendar":e.calendar})}}),lu=fu;function Rn(){try{const t=y.Intl;if(!t)return;const e=t.DateTimeFormat().resolvedOptions();return{locale:e.locale,timezone:e.timeZone,calendar:e.calendar}}catch{return}}const du="GlobalHandlers",pu=(t={})=>{const e={onerror:!0,onunhandledrejection:!0,...t};return{name:du,setupOnce(){Error.stackTraceLimit=50},setup(n){e.onerror&&(mu(n),On("onerror")),e.onunhandledrejection&&(gu(n),On("onunhandledrejection"))}}},hu=pu;function mu(t){qr(e=>{const{stackParser:n,attachStacktrace:r}=Pr();if(S()!==t||xr(e))return;const{msg:s,url:o,line:i,column:a,error:c}=e,u=Eu(ke(n,c||s,void 0,r,!1),o,i,a);u.level="error",dr(u,{originalException:c,mechanism:{handled:!1,type:"auto.browser.global_handlers.onerror"}})})}function gu(t){zr(e=>{const{stackParser:n,attachStacktrace:r}=Pr();if(S()!==t||xr())return;const s=_u(e),o=it(s)?yu(s):ke(n,s,void 0,r,!0);o.level="error",dr(o,{originalException:s,mechanism:{handled:!1,type:"auto.browser.global_handlers.onunhandledrejection"}})})}function _u(t){if(it(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch{}return t}function yu(t){return{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(t)}`}]}}}function Eu(t,e,n,r){const s=t.exception=t.exception||{},o=s.values=s.values||[],i=o[0]=o[0]||{},a=i.stacktrace=i.stacktrace||{},c=a.frames=a.frames||[];return c.length===0&&c.push({colno:r,lineno:n,filename:Su(e)??Ie(),function:q,in_app:!0}),t}function On(t){Ft&&h.log(`Global Handler attached: ${t}`)}function Pr(){const t=S();return(t==null?void 0:t.getOptions())||{stackParser:()=>[],attachStacktrace:!1}}function Su(t){if(!(!x(t)||t.length===0))return t.startsWith("data:")?`<${ra(t,!1)}>`:t}const bu=()=>({name:"HttpContext",preprocessEvent(t,e,n){var c;if(!y.navigator&&!y.location&&!y.document)return;const{url:r,headers:s}=kn(),o=n.getDataCollectionOptions().httpHeaders.request,i=Object.entries(((c=t.request)==null?void 0:c.headers)??{}).filter(([u])=>!(u in s)),a={...ln(s,o),...Object.fromEntries(i)};t.request={url:r,...t.request,...Object.keys(a).length>0?{headers:a}:{headers:void 0}}},processSpan(t,e){var a;if(!y.navigator&&!y.location&&!y.document)return;const n=kn(),r=ln(n.headers,e.getDataCollectionOptions().httpHeaders.request),s=r.Referer,{hostname:o,protocol:i}=y.location||{};ir(t,{[Fs]:r["User-Agent"],[Ls]:i==="file:"||o==="localhost"||o==="127.0.0.1"||o==="[::1]"||!!(o!=null&&o.endsWith(".localhost")),...t.is_segment&&{[$s]:((a=t.attributes)==null?void 0:a[Vn])!=="http.client"?na(n.url):void 0,[`${Ds}.referer`]:s?[s]:void 0}})}}),vu="cause",Iu=5,Tu="LinkedErrors",ku=(t={})=>{const e=t.limit||Iu,n=t.key||vu;return{name:Tu,preprocessEvent(r,s,o){const i=o.getOptions();Sa(Te,i.stackParser,n,e,r,s)}}},wu=ku,Ru=/^HTML(\w*)Element$/;function Ou(t){if(typeof window<"u"&&t===window)return"[Window]";if(typeof document<"u"&&t===document)return"[Document]";if(dc(t)){const e=Nu(t);if(Ru.test(e))return`[HTMLElement: ${Nr(t)}]`}}function Nu(t){const e=Object.getPrototypeOf(t);return e!=null&&e.constructor?e.constructor.name:"null prototype"}function Cu(){return Au()?(Ft&&j(()=>{console.error("[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/")}),!0):!1}function Au(){var s;if(typeof y.window>"u")return!1;const t=y;if(t.nw)return!1;const e=t.chrome||t.browser;if(!((s=e==null?void 0:e.runtime)!=null&&s.id))return!1;const n=Ie();return!(y===y.top&&/^(?:chrome-extension|moz-extension|ms-browser-extension|safari-web-extension):\/\//.test(n))}function xu(t){return[da(),ua(),$a(),nu(),zc(),Da(),hu(),wu(),Oa(),bu(),lu(),cu()]}function Pu(t={}){const e=!t.skipBrowserExtensionCheck&&Cu();let n=t.defaultIntegrations==null?xu():t.defaultIntegrations;const r=vo({integrations:t.integrations,defaultIntegrations:n}),s={...t,enabled:e?!1:t.enabled,stackParser:Hr(t.stackParser||Wc),integrations:r,transport:t.transport||Nc};return es(Ou),Yi(wc,s)}export{di as captureException,Pu as init,Du as setTag,Lu as setUser}; diff --git a/public/build/portal/manifest.json b/public/build/portal/manifest.json new file mode 100644 index 00000000..969b16fe --- /dev/null +++ b/public/build/portal/manifest.json @@ -0,0 +1,28 @@ +{ + "resources/css/portal.css": { + "file": "portal-CtGNvLu1.css", + "src": "resources/css/portal.css", + "isEntry": true + }, + "resources/js/app.js": { + "file": "app-OG3MHWAj.js", + "name": "app", + "src": "resources/js/app.js", + "isEntry": true + }, + "resources/js/error-reporting-sdk.js": { + "file": "error-reporting-sdk-CLmutOST.js", + "name": "error-reporting-sdk", + "src": "resources/js/error-reporting-sdk.js", + "isDynamicEntry": true + }, + "resources/js/error-reporting.js": { + "file": "error-reporting-BiGrjXpD.js", + "name": "error-reporting", + "src": "resources/js/error-reporting.js", + "isEntry": true, + "dynamicImports": [ + "resources/js/error-reporting-sdk.js" + ] + } +} \ No newline at end of file diff --git a/public/build/portal/portal-CtGNvLu1.css b/public/build/portal/portal-CtGNvLu1.css new file mode 100644 index 00000000..58e2f15d --- /dev/null +++ b/public/build/portal/portal-CtGNvLu1.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}@layer theme{:root,:host{--font-sans:"Inter",system-ui,-apple-system,sans-serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-500:oklch(.795 .184 86.047);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-yellow-950:oklch(.286 .066 53.813);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-300:oklch(.897 .196 126.665);--color-lime-400:oklch(.841 .238 128.85);--color-lime-500:oklch(.768 .233 130.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-700:oklch(.532 .157 131.589);--color-lime-800:oklch(.453 .124 130.933);--color-lime-900:oklch(.405 .101 131.063);--color-lime-950:oklch(.274 .072 132.109);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-800:oklch(.432 .095 166.913);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-300:oklch(.855 .138 181.071);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-cyan-50:oklch(.984 .019 200.873);--color-cyan-200:oklch(.917 .08 205.041);--color-cyan-300:oklch(.865 .127 207.078);--color-cyan-400:oklch(.789 .154 211.53);--color-cyan-500:oklch(.715 .143 215.221);--color-cyan-600:oklch(.609 .126 221.723);--color-cyan-800:oklch(.45 .085 224.283);--color-sky-50:oklch(.977 .013 236.62);--color-sky-100:oklch(.951 .026 236.824);--color-sky-200:oklch(.901 .058 230.902);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-sky-800:oklch(.443 .11 240.79);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-50:oklch(.969 .016 293.756);--color-violet-200:oklch(.894 .057 293.283);--color-violet-300:oklch(.811 .111 293.571);--color-violet-400:oklch(.702 .183 293.541);--color-violet-500:oklch(.606 .25 292.717);--color-violet-600:oklch(.541 .281 293.009);--color-violet-700:oklch(.491 .27 292.581);--color-violet-800:oklch(.432 .232 292.759);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-fuchsia-50:oklch(.977 .017 320.058);--color-fuchsia-200:oklch(.903 .076 319.62);--color-fuchsia-300:oklch(.833 .145 321.434);--color-fuchsia-400:oklch(.74 .238 322.16);--color-fuchsia-500:oklch(.667 .295 322.15);--color-fuchsia-600:oklch(.591 .293 322.896);--color-fuchsia-700:oklch(.518 .253 323.949);--color-fuchsia-800:oklch(.452 .211 324.591);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-200:oklch(.899 .061 343.231);--color-pink-300:oklch(.823 .12 346.018);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-700:oklch(.525 .223 3.958);--color-pink-800:oklch(.459 .187 3.815);--color-pink-900:oklch(.408 .153 2.432);--color-rose-50:oklch(.969 .015 12.422);--color-rose-200:oklch(.892 .058 10.001);--color-rose-300:oklch(.81 .117 11.638);--color-rose-400:oklch(.712 .194 13.428);--color-rose-500:oklch(.645 .246 16.439);--color-rose-600:oklch(.586 .253 17.585);--color-rose-700:oklch(.514 .222 16.935);--color-rose-800:oklch(.455 .188 13.697);--color-slate-800:oklch(.279 .041 260.031);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-stone-800:oklch(.268 .007 34.298);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings);--color-accent:#209fd9;--color-accent-content:#1a7ead;--color-accent-foreground:var(--color-white);--background:32 20% 97%;--color-accent-50:#f2f9fd;--color-accent-100:#dcf0fa;--color-accent-200:#afdef3;--color-accent-300:#7ac7eb;--color-accent-400:#49b3e4;--color-accent-500:#209fd9;--color-accent-600:#1a7ead;--color-accent-700:#135e81;--color-accent-800:#0d3e54;--color-accent-900:#082735;--color-accent-950:#05171f}.dark{--color-accent:#49b3e4;--color-accent-content:#209fd9;--color-accent-foreground:var(--color-white)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}*,:after,:before,::backdrop{border-color:var(--color-gray-200,currentColor)}::file-selector-button{border-color:var(--color-gray-200,currentColor)}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.end-\[-2px\]{inset-inline-end:-2px}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[-2px\]{top:-2px}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-3\.5{right:calc(var(--spacing)*3.5)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[-1rem\]{bottom:-1rem}.bottom-\[-3px\]{bottom:-3px}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.z-0{z-index:0}.z-1{z-index:1}.z-10{z-index:10}.z-20,.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-span-full{grid-row:1/-1}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.m-2{margin:calc(var(--spacing)*2)}.m-\[-2px\]{margin:-2px}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.-mx-\[\.3125rem\]{margin-inline:-.3125rem}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-6{margin-inline:calc(var(--spacing)*6)}.mx-\[-5px\]{margin-inline:-5px}.mx-auto{margin-inline:auto}.-my-1{margin-block:calc(var(--spacing)*-1)}.-my-\[calc\(0\.25rem-1px\)\]{margin-block:calc(1px - .25rem)}.-my-\[calc\(0\.25rem-2px\)\]{margin-block:calc(2px - .25rem)}.-my-px{margin-block:-1px}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.my-\[\.3125rem\]{margin-block:.3125rem}.my-px{margin-block:1px}.-ms-1{margin-inline-start:calc(var(--spacing)*-1)}.-ms-1\.5{margin-inline-start:calc(var(--spacing)*-1.5)}.-ms-2{margin-inline-start:calc(var(--spacing)*-2)}.-ms-2\.5{margin-inline-start:calc(var(--spacing)*-2.5)}.-ms-3{margin-inline-start:calc(var(--spacing)*-3)}.-ms-4{margin-inline-start:calc(var(--spacing)*-4)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-1\.5{margin-inline-start:calc(var(--spacing)*1.5)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.ms-5{margin-inline-start:calc(var(--spacing)*5)}.ms-auto{margin-inline-start:auto}.-me-1{margin-inline-end:calc(var(--spacing)*-1)}.-me-1\.5{margin-inline-end:calc(var(--spacing)*-1.5)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.-me-2\.5{margin-inline-end:calc(var(--spacing)*-2.5)}.-me-3{margin-inline-end:calc(var(--spacing)*-3)}.-me-4{margin-inline-end:calc(var(--spacing)*-4)}.-me-\[\.3125rem\]{margin-inline-end:-.3125rem}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-1\.25{margin-inline-end:calc(var(--spacing)*1.25)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-4{margin-inline-end:calc(var(--spacing)*4)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-2\.5{margin-top:calc(var(--spacing)*-2.5)}.-mt-3{margin-top:calc(var(--spacing)*-3)}.-mt-4{margin-top:calc(var(--spacing)*-4)}.-mt-\[\.3125rem\]{margin-top:-.3125rem}.-mt-px{margin-top:-1px}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-0\.25{margin-top:calc(var(--spacing)*.25)}.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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-\[-5px\]{margin-top:-5px}.mt-\[3px\]{margin-top:3px}.mt-auto{margin-top:auto}.mt-px{margin-top:1px}.-mr-1\.25{margin-right:calc(var(--spacing)*-1.25)}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-1{margin-bottom:calc(var(--spacing)*-1)}.-mb-1\.5{margin-bottom:calc(var(--spacing)*-1.5)}.-mb-2\.5{margin-bottom:calc(var(--spacing)*-2.5)}.-mb-3{margin-bottom:calc(var(--spacing)*-3)}.-mb-\[\.3125rem\]{margin-bottom:-.3125rem}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-0\.25{margin-bottom:calc(var(--spacing)*.25)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.mb-\[5px\]{margin-bottom:5px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.\!size-4{width:calc(var(--spacing)*4)!important;height:calc(var(--spacing)*4)!important}.\!size-6{width:calc(var(--spacing)*6)!important;height:calc(var(--spacing)*6)!important}.\!size-8{width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.size-1{width:calc(var(--spacing)*1);height:calc(var(--spacing)*1)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-4\!{width:calc(var(--spacing)*4)!important;height:calc(var(--spacing)*4)!important}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-5\!{width:calc(var(--spacing)*5)!important;height:calc(var(--spacing)*5)!important}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-11{width:calc(var(--spacing)*11);height:calc(var(--spacing)*11)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-13{width:calc(var(--spacing)*13);height:calc(var(--spacing)*13)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-\[1\.125rem\]{width:1.125rem;height:1.125rem}.size-\[6px\]{width:6px;height:6px}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(2rem\+2px\)\]{height:calc(2rem + 2px)}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-auto\!{height:auto!important}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[20rem\]{max-height:20rem}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[100vh\]{max-height:100vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-\[calc\(100dvh-1rem\)\]{max-height:calc(100dvh - 1rem)}.max-h-dvh{max-height:100dvh}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-6{min-height:calc(var(--spacing)*6)}.min-h-8{min-height:calc(var(--spacing)*8)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-14{min-height:calc(var(--spacing)*14)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-\[calc\(100dvh-1rem\)\]{min-height:calc(100dvh - 1rem)}.min-h-auto{min-height:auto}.min-h-dvh{min-height:100dvh}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-6\!{width:calc(var(--spacing)*6)!important}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-8\!{width:calc(var(--spacing)*8)!important}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(2ch\+2px\)\]{width:calc(2ch + 2px)}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-\[full\]{width:full}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-80{max-width:calc(var(--spacing)*80)}.max-w-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-2{min-width:calc(var(--spacing)*2)}.min-w-3{min-width:calc(var(--spacing)*3)}.min-w-4{min-width:calc(var(--spacing)*4)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-6{min-width:calc(var(--spacing)*6)}.min-w-8{min-width:calc(var(--spacing)*8)}.min-w-12{min-width:calc(var(--spacing)*12)}.min-w-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[10rem\]{min-width:10rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[100vw\]{min-width:100vw}.min-w-\[120px\]{min-width:120px}.min-w-\[360px\]{min-width:360px}.min-w-\[calc\(100vw-1rem\)\]{min-width:calc(100vw - 1rem)}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.table-fixed{table-layout:fixed}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:calc(var(--spacing)*0);--tw-border-spacing-y:calc(var(--spacing)*0);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[3px\]{--tw-translate-x:3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[15px\]{--tw-translate-x:15px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-manipulation{touch-action:manipulation}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-my-\[\.3125rem\]{scroll-margin-block:.3125rem}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.scroll-py-\[\.3125rem\]{scroll-padding-block:.3125rem}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-cols-\[auto_1fr_1fr_auto\]{grid-template-columns:auto 1fr 1fr auto}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.grid-rows-\[auto_auto_auto_auto_auto\]{grid-template-rows:auto auto auto auto auto}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*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-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.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)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[\.3rem\]{border-radius:.3rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[3px\]{border-radius:3px}.rounded-\[4px\]{border-radius:4px}.rounded-\[6px\]{border-radius:6px}.rounded-\[8px\]{border-radius:8px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-\[var\(--avatar-radius\)\]{border-radius:var(--avatar-radius)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-s-lg{border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.rounded-e-lg{border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-t-\[calc\(0\.5rem-1px\)\]{border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.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-s-0{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-e-0{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2,.border-b-\[2px\]{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\(--callout-border\){border-color:var(--callout-border)}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-accent-100{border-color:var(--color-accent-100)}.border-accent-200{border-color:var(--color-accent-200)}.border-accent-500{border-color:var(--color-accent-500)}.border-accent-600{border-color:var(--color-accent-600)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-black\/10{border-color:color-mix(in oklab,var(--color-black)10%,transparent)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-red-500{border-color:var(--color-red-500)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-zinc-800\/10{border-color:color-mix(in oklab,var(--color-zinc-800)10%,transparent)}.border-zinc-800\/15{border-color:color-mix(in oklab,var(--color-zinc-800)15%,transparent)}.border-x-zinc-100{border-inline-color:var(--color-zinc-100)}.border-t-transparent{border-top-color:#0000}.border-b-zinc-300\/80{border-bottom-color:color-mix(in oklab,var(--color-zinc-300)80%,transparent)}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\(--callout-background\){background-color:var(--callout-background)}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-\[var\(--color-accent\)\]{background-color:var(--color-accent)}.bg-\[var\(--color-accent-foreground\)\]{background-color:var(--color-accent-foreground)}.bg-accent{background-color:var(--color-accent)}.bg-accent-50{background-color:var(--color-accent-50)}.bg-accent-100{background-color:var(--color-accent-100)}.bg-accent-600{background-color:var(--color-accent-600)}.bg-accent\/20{background-color:color-mix(in oklab,var(--color-accent)20%,transparent)}.bg-accent\/30{background-color:color-mix(in oklab,var(--color-accent)30%,transparent)}.bg-accent\/50{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-200{background-color:var(--color-amber-200)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-400\/25{background-color:color-mix(in oklab,var(--color-amber-400)25%,transparent)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/10{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/25{background-color:color-mix(in oklab,var(--color-black)25%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-200{background-color:var(--color-blue-200)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-400\/20{background-color:color-mix(in oklab,var(--color-blue-400)20%,transparent)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-cyan-200{background-color:var(--color-cyan-200)}.bg-cyan-400\/20{background-color:color-mix(in oklab,var(--color-cyan-400)20%,transparent)}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-200{background-color:var(--color-emerald-200)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-400\/20{background-color:color-mix(in oklab,var(--color-emerald-400)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-fuchsia-200{background-color:var(--color-fuchsia-200)}.bg-fuchsia-400\/20{background-color:color-mix(in oklab,var(--color-fuchsia-400)20%,transparent)}.bg-fuchsia-500{background-color:var(--color-fuchsia-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-200{background-color:var(--color-green-200)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-400\/20{background-color:color-mix(in oklab,var(--color-green-400)20%,transparent)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-200{background-color:var(--color-indigo-200)}.bg-indigo-400\/20{background-color:color-mix(in oklab,var(--color-indigo-400)20%,transparent)}.bg-indigo-500{background-color:var(--color-indigo-500)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-lime-400\/25{background-color:color-mix(in oklab,var(--color-lime-400)25%,transparent)}.bg-lime-500{background-color:var(--color-lime-500)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-200{background-color:var(--color-orange-200)}.bg-orange-400\/20{background-color:color-mix(in oklab,var(--color-orange-400)20%,transparent)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-pink-200{background-color:var(--color-pink-200)}.bg-pink-400\/20{background-color:color-mix(in oklab,var(--color-pink-400)20%,transparent)}.bg-pink-500{background-color:var(--color-pink-500)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-200{background-color:var(--color-purple-200)}.bg-purple-400\/20{background-color:color-mix(in oklab,var(--color-purple-400)20%,transparent)}.bg-purple-500{background-color:var(--color-purple-500)}.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-200{background-color:var(--color-red-200)}.bg-red-400\/20{background-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-rose-200{background-color:var(--color-rose-200)}.bg-rose-400\/20{background-color:color-mix(in oklab,var(--color-rose-400)20%,transparent)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-sky-200{background-color:var(--color-sky-200)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-400\/20{background-color:color-mix(in oklab,var(--color-sky-400)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-200{background-color:var(--color-teal-200)}.bg-teal-400\/20{background-color:color-mix(in oklab,var(--color-teal-400)20%,transparent)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-violet-200{background-color:var(--color-violet-200)}.bg-violet-400\/20{background-color:color-mix(in oklab,var(--color-violet-400)20%,transparent)}.bg-violet-500{background-color:var(--color-violet-500)}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-200{background-color:var(--color-yellow-200)}.bg-yellow-400\/25{background-color:color-mix(in oklab,var(--color-yellow-400)25%,transparent)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-400{background-color:var(--color-zinc-400)}.bg-zinc-400\/15{background-color:color-mix(in oklab,var(--color-zinc-400)15%,transparent)}.bg-zinc-500{background-color:var(--color-zinc-500)}.bg-zinc-600{background-color:var(--color-zinc-600)}.bg-zinc-800{background-color:var(--color-zinc-800)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-800\/6{background-color:color-mix(in oklab,var(--color-zinc-800)6%,transparent)}.bg-zinc-800\/10{background-color:color-mix(in oklab,var(--color-zinc-800)10%,transparent)}.bg-zinc-800\/15{background-color:color-mix(in oklab,var(--color-zinc-800)15%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[url\(\'data\:image\/svg\+xml\,\%3Csvg\%20xmlns\=\%22http\:\/\/www\.w3\.org\/2000\/svg\%22\%20viewBox\=\%220\%200\%2016\%2016\%22\%20fill\=\%22\%2300000040\%22\%20class\=\%22size-4\%22\%3E\%3Cpath\%20fill-rule\=\%22evenodd\%22\%20d\=\%22M4\.22\%206\.22a\.75\.75\%200\%200\%201\%201\.06\%200L8\%208\.94l2\.72-2\.72a\.75\.75\%200\%201\%201\%201\.06\%201\.06l-3\.25\%203\.25a\.75\.75\%200\%200\%201-1\.06\%200L4\.22\%207\.28a\.75\.75\%200\%200\%201\%200-1\.06Z\%22\%20clip-rule\=\%22evenodd\%22\/\%3E\%3C\/svg\%3E\'\)\]{background-image:url(data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2016%2016%22%20fill=%22%2300000040%22%20class=%22size-4%22%3E%3Cpath%20fill-rule=%22evenodd%22%20d=%22M4.22%206.22a.75.75%200%200%201%201.06%200L8%208.94l2.72-2.72a.75.75%200%201%201%201.06%201.06l-3.25%203.25a.75.75%200%200%201-1.06%200L4.22%207.28a.75.75%200%200%201%200-1.06Z%22%20clip-rule=%22evenodd%22/%3E%3C/svg%3E)}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-accent-50{--tw-gradient-from:var(--color-accent-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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-100{--tw-gradient-from:var(--color-zinc-100);--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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-1\%{--tw-gradient-from-position:1%}.via-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-\[length\:16px_16px\]{background-size:16px 16px}.bg-cover{background-size:cover}.bg-center{background-position:50%}.bg-no-repeat{background-repeat:no-repeat}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.stroke-zinc-300{stroke:var(--color-zinc-300)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[\.3125rem\]{padding:.3125rem}.p-\[1px\]{padding:1px}.p-\[5px\]{padding:5px}.p-\[calc\(0\.25rem-1px\)\]{padding:calc(.25rem - 1px)}.p-\[calc\(0\.75rem-1px\)\]{padding:calc(.75rem - 1px)}.p-px{padding:1px}.px-0\!{padding-inline:calc(var(--spacing)*0)!important}.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-2\.5\!{padding-inline:calc(var(--spacing)*2.5)!important}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.px-\[\.3125rem\]{padding-inline:.3125rem}.px-\[3px\]{padding-inline:3px}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.py-\[2px\]{padding-block:2px}.py-\[3px\]{padding-block:3px}.py-\[calc\(0\.5rem-1px\)\]{padding-block:calc(.5rem - 1px)}.py-\[calc\(0\.25rem\)\]{padding-block:.25rem}.py-\[calc\(0\.25rem-1px\)\]{padding-block:calc(.25rem - 1px)}.py-\[calc\(0\.25rem-2px\)\]{padding-block:calc(.25rem - 2px)}.py-\[calc\(0\.75rem-3px\)\]{padding-block:calc(.75rem - 3px)}.py-\[calc\(0\.125rem\+1px\)\]{padding-block:calc(.125rem + 1px)}.ps-1{padding-inline-start:calc(var(--spacing)*1)}.ps-2{padding-inline-start:calc(var(--spacing)*2)}.ps-2\.5{padding-inline-start:calc(var(--spacing)*2.5)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-3\.5{padding-inline-start:calc(var(--spacing)*3.5)}.ps-4{padding-inline-start:calc(var(--spacing)*4)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.ps-9{padding-inline-start:calc(var(--spacing)*9)}.ps-10{padding-inline-start:calc(var(--spacing)*10)}.ps-11{padding-inline-start:calc(var(--spacing)*11)}.ps-\[calc\(0\.5rem-1px\)\]{padding-inline-start:calc(.5rem - 1px)}.ps-\[calc\(0\.25rem\)\]{padding-inline-start:.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-2\.5{padding-inline-end:calc(var(--spacing)*2.5)}.pe-3{padding-inline-end:calc(var(--spacing)*3)}.pe-3\.5{padding-inline-end:calc(var(--spacing)*3.5)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pe-6{padding-inline-end:calc(var(--spacing)*6)}.pe-9{padding-inline-end:calc(var(--spacing)*9)}.pe-10{padding-inline-end:calc(var(--spacing)*10)}.pe-11{padding-inline-end:calc(var(--spacing)*11)}.pe-16{padding-inline-end:calc(var(--spacing)*16)}.pe-23{padding-inline-end:calc(var(--spacing)*23)}.pe-30{padding-inline-end:calc(var(--spacing)*30)}.pe-37{padding-inline-end:calc(var(--spacing)*37)}.pe-44{padding-inline-end:calc(var(--spacing)*44)}.pe-51{padding-inline-end:calc(var(--spacing)*51)}.pe-\[\.3125rem\]{padding-inline-end:.3125rem}.pe-\[1\.35rem\]{padding-inline-end:1.35rem}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pt-\[\.3125rem\]{padding-top:.3125rem}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pb-\[\.3125rem\]{padding-bottom:.3125rem}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.\[font-size\:inherit\]{font-size:inherit}.text-\[\.625rem\]{font-size:.625rem}.text-\[\.5625rem\]{font-size:.5625rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-\[1\.125rem\]{--tw-leading:1.125rem;line-height:1.125rem}.leading-\[1\.375rem\]{--tw-leading:1.375rem;line-height:1.375rem}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.\[line-height\:inherit\]{line-height:inherit}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.text-nowrap{text-wrap:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-\[var\(--callout-icon\)\]{color:var(--callout-icon)}.text-\[var\(--color-accent-content\)\]{color:var(--color-accent-content)}.text-\[var\(--color-accent-foreground\)\]{color:var(--color-accent-foreground)}.text-accent-500{color:var(--color-accent-500)}.text-accent-600{color:var(--color-accent-600)}.text-accent-700{color:var(--color-accent-700)}.text-accent-800{color:var(--color-accent-800)}.text-accent-foreground{color:var(--color-accent-foreground)}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-cyan-600{color:var(--color-cyan-600)}.text-cyan-800{color:var(--color-cyan-800)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-emerald-900{color:var(--color-emerald-900)}.text-fuchsia-600{color:var(--color-fuchsia-600)}.text-fuchsia-700{color:var(--color-fuchsia-700)}.text-fuchsia-800{color:var(--color-fuchsia-800)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-lime-800{color:var(--color-lime-800)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-800{color:var(--color-orange-800)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-pink-700{color:var(--color-pink-700)}.text-pink-800{color:var(--color-pink-800)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-sky-800{color:var(--color-sky-800)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-teal-800{color:var(--color-teal-800)}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-violet-800{color:var(--color-violet-800)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-200\/50{color:color-mix(in oklab,var(--color-zinc-200)50%,transparent)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-400\!{color:var(--color-zinc-400)!important}.text-zinc-400\/75{color:color-mix(in oklab,var(--color-zinc-400)75%,transparent)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-800\!{color:var(--color-zinc-800)!important}.text-zinc-800\/70{color:color-mix(in oklab,var(--color-zinc-800)70%,transparent)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-\[color-mix\(in_oklab\,var\(--color-accent-content\)\,transparent_80\%\)\]{-webkit-text-decoration-color:color-mix(in oklab,var(--color-accent-content),transparent 80%);text-decoration-color:color-mix(in oklab,var(--color-accent-content),transparent 80%)}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.decoration-zinc-800\/20{-webkit-text-decoration-color:color-mix(in oklab,var(--color-zinc-800)20%,transparent);text-decoration-color:color-mix(in oklab,var(--color-zinc-800)20%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.underline-offset-\[6px\]{text-underline-offset:6px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-zinc-400::placeholder{color:var(--color-zinc-400)}.placeholder-zinc-500::placeholder{color:var(--color-zinc-500)}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xs{--tw-shadow:0 1px 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)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_1px_2px_0px_rgba\(0\,0\,0\,\.05\)\,0px_2px_4px_0px_rgba\(0\,0\,0\,\.1\)\]{--tw-shadow:0px 1px 2px 0px var(--tw-shadow-color,#0000000d),0px 2px 4px 0px 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-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0px_1px_--theme\(--color-white\/\.2\)\]{--tw-shadow:inset 0px 1px 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)}.shadow-\[inset_0px_1px_var\(--color-red-500\)\,inset_0px_2px_--theme\(--color-white\/\.15\)\]{--tw-shadow:inset 0px 1px var(--tw-shadow-color,var(--color-red-500)),inset 0px 2px var(--tw-shadow-color,oklab(100% 0 5.96046e-8/.15));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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,.ring-\[2px\]{--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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-black\/5{--tw-ring-color:color-mix(in oklab,var(--color-black)5%,transparent)}.ring-black\/7{--tw-ring-color:color-mix(in oklab,var(--color-black)7%,transparent)}.ring-black\/15{--tw-ring-color:color-mix(in oklab,var(--color-black)15%,transparent)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline-hidden{outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.outline-none\!{--tw-outline-style:none;outline-style:none!important}.select-none{-webkit-user-select:none;user-select:none}.\[--avatar-radius\:calc\(infinity\*1px\)\]{--avatar-radius:calc(infinity*1px)}.\[--avatar-radius\:var\(--radius-lg\)\]{--avatar-radius:var(--radius-lg)}.\[--avatar-radius\:var\(--radius-md\)\]{--avatar-radius:var(--radius-md)}.\[--avatar-radius\:var\(--radius-sm\)\]{--avatar-radius:var(--radius-sm)}.\[--avatar-radius\:var\(--radius-xl\)\]{--avatar-radius:var(--radius-xl)}.\[--callout-background\:var\(--color-amber-50\)\]{--callout-background:var(--color-amber-50)}.\[--callout-background\:var\(--color-blue-50\)\]{--callout-background:var(--color-blue-50)}.\[--callout-background\:var\(--color-cyan-50\)\]{--callout-background:var(--color-cyan-50)}.\[--callout-background\:var\(--color-emerald-50\)\]{--callout-background:var(--color-emerald-50)}.\[--callout-background\:var\(--color-fuchsia-50\)\]{--callout-background:var(--color-fuchsia-50)}.\[--callout-background\:var\(--color-green-50\)\]{--callout-background:var(--color-green-50)}.\[--callout-background\:var\(--color-indigo-50\)\]{--callout-background:var(--color-indigo-50)}.\[--callout-background\:var\(--color-lime-50\)\]{--callout-background:var(--color-lime-50)}.\[--callout-background\:var\(--color-orange-50\)\]{--callout-background:var(--color-orange-50)}.\[--callout-background\:var\(--color-pink-50\)\]{--callout-background:var(--color-pink-50)}.\[--callout-background\:var\(--color-purple-50\)\]{--callout-background:var(--color-purple-50)}.\[--callout-background\:var\(--color-red-50\)\]{--callout-background:var(--color-red-50)}.\[--callout-background\:var\(--color-rose-50\)\]{--callout-background:var(--color-rose-50)}.\[--callout-background\:var\(--color-sky-50\)\]{--callout-background:var(--color-sky-50)}.\[--callout-background\:var\(--color-teal-50\)\]{--callout-background:var(--color-teal-50)}.\[--callout-background\:var\(--color-violet-50\)\]{--callout-background:var(--color-violet-50)}.\[--callout-background\:var\(--color-white\)\]{--callout-background:var(--color-white)}.\[--callout-background\:var\(--color-yellow-50\)\]{--callout-background:var(--color-yellow-50)}.\[--callout-background\:var\(--color-zinc-50\)\]{--callout-background:var(--color-zinc-50)}.\[--callout-border\:var\(--color-amber-400\)\]{--callout-border:var(--color-amber-400)}.\[--callout-border\:var\(--color-blue-200\)\]{--callout-border:var(--color-blue-200)}.\[--callout-border\:var\(--color-cyan-200\)\]{--callout-border:var(--color-cyan-200)}.\[--callout-border\:var\(--color-emerald-200\)\]{--callout-border:var(--color-emerald-200)}.\[--callout-border\:var\(--color-fuchsia-200\)\]{--callout-border:var(--color-fuchsia-200)}.\[--callout-border\:var\(--color-green-300\)\]{--callout-border:var(--color-green-300)}.\[--callout-border\:var\(--color-indigo-200\)\]{--callout-border:var(--color-indigo-200)}.\[--callout-border\:var\(--color-lime-400\)\]{--callout-border:var(--color-lime-400)}.\[--callout-border\:var\(--color-orange-200\)\]{--callout-border:var(--color-orange-200)}.\[--callout-border\:var\(--color-pink-200\)\]{--callout-border:var(--color-pink-200)}.\[--callout-border\:var\(--color-purple-300\)\]{--callout-border:var(--color-purple-300)}.\[--callout-border\:var\(--color-red-200\)\]{--callout-border:var(--color-red-200)}.\[--callout-border\:var\(--color-rose-200\)\]{--callout-border:var(--color-rose-200)}.\[--callout-border\:var\(--color-sky-200\)\]{--callout-border:var(--color-sky-200)}.\[--callout-border\:var\(--color-teal-200\)\]{--callout-border:var(--color-teal-200)}.\[--callout-border\:var\(--color-violet-200\)\]{--callout-border:var(--color-violet-200)}.\[--callout-border\:var\(--color-yellow-400\)\]{--callout-border:var(--color-yellow-400)}.\[--callout-border\:var\(--color-zinc-200\)\]{--callout-border:var(--color-zinc-200)}.\[--callout-heading\:var\(--color-amber-600\)\]{--callout-heading:var(--color-amber-600)}.\[--callout-heading\:var\(--color-blue-600\)\]{--callout-heading:var(--color-blue-600)}.\[--callout-heading\:var\(--color-cyan-600\)\]{--callout-heading:var(--color-cyan-600)}.\[--callout-heading\:var\(--color-emerald-600\)\]{--callout-heading:var(--color-emerald-600)}.\[--callout-heading\:var\(--color-fuchsia-600\)\]{--callout-heading:var(--color-fuchsia-600)}.\[--callout-heading\:var\(--color-green-600\)\]{--callout-heading:var(--color-green-600)}.\[--callout-heading\:var\(--color-indigo-600\)\]{--callout-heading:var(--color-indigo-600)}.\[--callout-heading\:var\(--color-lime-700\)\]{--callout-heading:var(--color-lime-700)}.\[--callout-heading\:var\(--color-orange-600\)\]{--callout-heading:var(--color-orange-600)}.\[--callout-heading\:var\(--color-pink-600\)\]{--callout-heading:var(--color-pink-600)}.\[--callout-heading\:var\(--color-purple-800\)\]{--callout-heading:var(--color-purple-800)}.\[--callout-heading\:var\(--color-red-700\)\]{--callout-heading:var(--color-red-700)}.\[--callout-heading\:var\(--color-rose-600\)\]{--callout-heading:var(--color-rose-600)}.\[--callout-heading\:var\(--color-sky-600\)\]{--callout-heading:var(--color-sky-600)}.\[--callout-heading\:var\(--color-teal-600\)\]{--callout-heading:var(--color-teal-600)}.\[--callout-heading\:var\(--color-violet-600\)\]{--callout-heading:var(--color-violet-600)}.\[--callout-heading\:var\(--color-yellow-600\)\]{--callout-heading:var(--color-yellow-600)}.\[--callout-heading\:var\(--color-zinc-800\)\]{--callout-heading:var(--color-zinc-800)}.\[--callout-icon\:var\(--color-amber-500\)\]{--callout-icon:var(--color-amber-500)}.\[--callout-icon\:var\(--color-blue-500\)\]{--callout-icon:var(--color-blue-500)}.\[--callout-icon\:var\(--color-cyan-500\)\]{--callout-icon:var(--color-cyan-500)}.\[--callout-icon\:var\(--color-emerald-500\)\]{--callout-icon:var(--color-emerald-500)}.\[--callout-icon\:var\(--color-fuchsia-500\)\]{--callout-icon:var(--color-fuchsia-500)}.\[--callout-icon\:var\(--color-green-500\)\]{--callout-icon:var(--color-green-500)}.\[--callout-icon\:var\(--color-indigo-500\)\]{--callout-icon:var(--color-indigo-500)}.\[--callout-icon\:var\(--color-lime-500\)\]{--callout-icon:var(--color-lime-500)}.\[--callout-icon\:var\(--color-orange-500\)\]{--callout-icon:var(--color-orange-500)}.\[--callout-icon\:var\(--color-pink-500\)\]{--callout-icon:var(--color-pink-500)}.\[--callout-icon\:var\(--color-purple-500\)\]{--callout-icon:var(--color-purple-500)}.\[--callout-icon\:var\(--color-red-400\)\]{--callout-icon:var(--color-red-400)}.\[--callout-icon\:var\(--color-rose-500\)\]{--callout-icon:var(--color-rose-500)}.\[--callout-icon\:var\(--color-sky-500\)\]{--callout-icon:var(--color-sky-500)}.\[--callout-icon\:var\(--color-teal-500\)\]{--callout-icon:var(--color-teal-500)}.\[--callout-icon\:var\(--color-violet-500\)\]{--callout-icon:var(--color-violet-500)}.\[--callout-icon\:var\(--color-yellow-500\)\]{--callout-icon:var(--color-yellow-500)}.\[--callout-icon\:var\(--color-zinc-400\)\]{--callout-icon:var(--color-zinc-400)}.\[--callout-text\:var\(--color-amber-600\)\]{--callout-text:var(--color-amber-600)}.\[--callout-text\:var\(--color-blue-600\)\]{--callout-text:var(--color-blue-600)}.\[--callout-text\:var\(--color-cyan-600\)\]{--callout-text:var(--color-cyan-600)}.\[--callout-text\:var\(--color-emerald-600\)\]{--callout-text:var(--color-emerald-600)}.\[--callout-text\:var\(--color-fuchsia-600\)\]{--callout-text:var(--color-fuchsia-600)}.\[--callout-text\:var\(--color-green-600\)\]{--callout-text:var(--color-green-600)}.\[--callout-text\:var\(--color-indigo-600\)\]{--callout-text:var(--color-indigo-600)}.\[--callout-text\:var\(--color-lime-600\)\]{--callout-text:var(--color-lime-600)}.\[--callout-text\:var\(--color-orange-600\)\]{--callout-text:var(--color-orange-600)}.\[--callout-text\:var\(--color-pink-600\)\]{--callout-text:var(--color-pink-600)}.\[--callout-text\:var\(--color-purple-700\)\]{--callout-text:var(--color-purple-700)}.\[--callout-text\:var\(--color-red-700\)\]{--callout-text:var(--color-red-700)}.\[--callout-text\:var\(--color-rose-600\)\]{--callout-text:var(--color-rose-600)}.\[--callout-text\:var\(--color-sky-600\)\]{--callout-text:var(--color-sky-600)}.\[--callout-text\:var\(--color-teal-600\)\]{--callout-text:var(--color-teal-600)}.\[--callout-text\:var\(--color-violet-600\)\]{--callout-text:var(--color-violet-600)}.\[--callout-text\:var\(--color-yellow-700\)\]{--callout-text:var(--color-yellow-700)}.\[--callout-text\:var\(--color-zinc-500\)\]{--callout-text:var(--color-zinc-500)}.\[--color-accent-content\:var\(--color-amber-600\)\]{--color-accent-content:var(--color-amber-600)}.\[--color-accent-content\:var\(--color-blue-600\)\]{--color-accent-content:var(--color-blue-600)}.\[--color-accent-content\:var\(--color-cyan-600\)\]{--color-accent-content:var(--color-cyan-600)}.\[--color-accent-content\:var\(--color-emerald-600\)\]{--color-accent-content:var(--color-emerald-600)}.\[--color-accent-content\:var\(--color-fuchsia-600\)\]{--color-accent-content:var(--color-fuchsia-600)}.\[--color-accent-content\:var\(--color-gray-800\)\]{--color-accent-content:var(--color-gray-800)}.\[--color-accent-content\:var\(--color-green-600\)\]{--color-accent-content:var(--color-green-600)}.\[--color-accent-content\:var\(--color-indigo-600\)\]{--color-accent-content:var(--color-indigo-600)}.\[--color-accent-content\:var\(--color-lime-600\)\]{--color-accent-content:var(--color-lime-600)}.\[--color-accent-content\:var\(--color-neutral-800\)\]{--color-accent-content:var(--color-neutral-800)}.\[--color-accent-content\:var\(--color-orange-600\)\]{--color-accent-content:var(--color-orange-600)}.\[--color-accent-content\:var\(--color-pink-600\)\]{--color-accent-content:var(--color-pink-600)}.\[--color-accent-content\:var\(--color-purple-600\)\]{--color-accent-content:var(--color-purple-600)}.\[--color-accent-content\:var\(--color-red-600\)\]{--color-accent-content:var(--color-red-600)}.\[--color-accent-content\:var\(--color-rose-500\)\]{--color-accent-content:var(--color-rose-500)}.\[--color-accent-content\:var\(--color-sky-600\)\]{--color-accent-content:var(--color-sky-600)}.\[--color-accent-content\:var\(--color-slate-800\)\]{--color-accent-content:var(--color-slate-800)}.\[--color-accent-content\:var\(--color-stone-800\)\]{--color-accent-content:var(--color-stone-800)}.\[--color-accent-content\:var\(--color-teal-600\)\]{--color-accent-content:var(--color-teal-600)}.\[--color-accent-content\:var\(--color-violet-600\)\]{--color-accent-content:var(--color-violet-600)}.\[--color-accent-content\:var\(--color-yellow-600\)\]{--color-accent-content:var(--color-yellow-600)}.\[--color-accent-content\:var\(--color-zinc-800\)\]{--color-accent-content:var(--color-zinc-800)}.\[--color-accent-foreground\:var\(--color-amber-950\)\]{--color-accent-foreground:var(--color-amber-950)}.\[--color-accent-foreground\:var\(--color-lime-900\)\]{--color-accent-foreground:var(--color-lime-900)}.\[--color-accent-foreground\:var\(--color-white\)\]{--color-accent-foreground:var(--color-white)}.\[--color-accent-foreground\:var\(--color-yellow-950\)\]{--color-accent-foreground:var(--color-yellow-950)}.\[--color-accent\:var\(--color-amber-400\)\]{--color-accent:var(--color-amber-400)}.\[--color-accent\:var\(--color-blue-500\)\]{--color-accent:var(--color-blue-500)}.\[--color-accent\:var\(--color-cyan-600\)\]{--color-accent:var(--color-cyan-600)}.\[--color-accent\:var\(--color-emerald-600\)\]{--color-accent:var(--color-emerald-600)}.\[--color-accent\:var\(--color-fuchsia-600\)\]{--color-accent:var(--color-fuchsia-600)}.\[--color-accent\:var\(--color-gray-800\)\]{--color-accent:var(--color-gray-800)}.\[--color-accent\:var\(--color-green-600\)\]{--color-accent:var(--color-green-600)}.\[--color-accent\:var\(--color-indigo-500\)\]{--color-accent:var(--color-indigo-500)}.\[--color-accent\:var\(--color-lime-400\)\]{--color-accent:var(--color-lime-400)}.\[--color-accent\:var\(--color-neutral-800\)\]{--color-accent:var(--color-neutral-800)}.\[--color-accent\:var\(--color-orange-500\)\]{--color-accent:var(--color-orange-500)}.\[--color-accent\:var\(--color-pink-600\)\]{--color-accent:var(--color-pink-600)}.\[--color-accent\:var\(--color-purple-500\)\]{--color-accent:var(--color-purple-500)}.\[--color-accent\:var\(--color-red-500\)\]{--color-accent:var(--color-red-500)}.\[--color-accent\:var\(--color-rose-500\)\]{--color-accent:var(--color-rose-500)}.\[--color-accent\:var\(--color-sky-600\)\]{--color-accent:var(--color-sky-600)}.\[--color-accent\:var\(--color-slate-800\)\]{--color-accent:var(--color-slate-800)}.\[--color-accent\:var\(--color-stone-800\)\]{--color-accent:var(--color-stone-800)}.\[--color-accent\:var\(--color-teal-600\)\]{--color-accent:var(--color-teal-600)}.\[--color-accent\:var\(--color-violet-500\)\]{--color-accent:var(--color-violet-500)}.\[--color-accent\:var\(--color-yellow-400\)\]{--color-accent:var(--color-yellow-400)}.\[--color-accent\:var\(--color-zinc-800\)\]{--color-accent:var(--color-zinc-800)}.\[--flux-flyout-translate\:translateX\(-50px\)\]{--flux-flyout-translate:translateX(-50px)}.\[--flux-flyout-translate\:translateX\(50px\)\]{--flux-flyout-translate:translateX(50px)}.\[--flux-flyout-translate\:translateY\(50px\)\]{--flux-flyout-translate:translateY(50px)}.\[--flux-scroll-percentage\:0\%\]{--flux-scroll-percentage:0%}.\[--haze-border\:color-mix\(in_oklab\,_var\(--color-accent-content\)\,_transparent_80\%\)\]{--haze-border:color-mix(in oklab,var(--color-accent-content),transparent 80%)}.\[--haze-light\:color-mix\(in_oklab\,_var\(--color-accent\)\,_transparent_98\%\)\]{--haze-light:color-mix(in oklab,var(--color-accent),transparent 98%)}.\[--haze\:color-mix\(in_oklab\,_var\(--color-accent-content\)\,_transparent_97\.5\%\)\]{--haze:color-mix(in oklab,var(--color-accent-content),transparent 97.5%)}.\[--hover-fill\:color-mix\(in_oklab\,_var\(--color-accent-content\)\,_transparent_90\%\)\]{--hover-fill:color-mix(in oklab,var(--color-accent-content),transparent 90%)}.\[a-z0-9\:-\]{a-z0-9:-}.\[grid-area\:aside\]{grid-area:aside}.\[grid-area\:footer\]{grid-area:footer}.\[grid-area\:header\]{grid-area:header}.\[grid-area\:main\]{grid-area:main}.\[grid-area\:sidebar\]{grid-area:sidebar}.\[print-color-adjust\:exact\]{-webkit-print-color-adjust:exact;print-color-adjust:exact}:is(.\*\:col-start-1>*){grid-column-start:1}:is(.\*\:row-start-1>*){grid-row-start:1}:is(.\*\:h-auto>*){height:auto}:is(.\*\:p-1\.5>*){padding:calc(var(--spacing)*1.5)}:is(.\*\:opacity-0>*){opacity:0}:is(.\*\: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))}:is(.\*\*\:ring-white *){--tw-ring-color:var(--color-white)}:is(.\*\:not-first\:-ml-2>*):not(:first-child){margin-left:calc(var(--spacing)*-2)}.not-first-of-type\:mt-1:not(:first-of-type){margin-top:calc(var(--spacing)*1)}.not-in-data-flux-sidebar-collapsed-desktop\:hidden:not(:where([data-flux-sidebar-collapsed-desktop]) *){display:none}.not-in-data-loading\:opacity-0:not(:where([data-loading]) *){opacity:0}.not-in-\[tr\:first-child\]\:border-t:not(:where(:is(tr:first-child)) *){border-top-style:var(--tw-border-style);border-top-width:1px}.not-data-open\:hidden:not([data-open]){display:none}@supports not ((-moz-appearance:none)){.not-\[\@supports\(-moz-appearance\:none\)\]\:hidden{display:none}}.group-last\/breadcrumb\:hidden:is(:where(.group\/breadcrumb):last-child *){display:none}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-accent-50:is(:where(.group):hover *){background-color:var(--color-accent-50)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-accent-200:is(:where(.group):hover *){color:var(--color-accent-200)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:text-zinc-800:is(:where(.group):hover *){color:var(--color-zinc-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/accordion-heading\:text-zinc-800:is(:where(.group\/accordion-heading):hover *){color:var(--color-zinc-800)}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}.group-hover\/sortable\:text-zinc-800:is(:where(.group\/sortable):hover *){color:var(--color-zinc-800)}.group-hover\/sortable\:opacity-100:is(:where(.group\/sortable):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-active\/item\:text-zinc-800:is(:where(.group\/item)[data-active] *){color:var(--color-zinc-800)}.group-data-checked\:translate-x-\[15px\]:is(:where(.group)[data-checked] *){--tw-translate-x:15px;translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-checked\:bg-\(--color-accent-foreground\):is(:where(.group)[data-checked] *){background-color:var(--color-accent-foreground)}.group-data-checked\/menu-checkbox\:block:is(:where(.group\/menu-checkbox)[data-checked] *),.group-data-checked\/menu-radio\:block:is(:where(.group\/menu-radio)[data-checked] *),.group-data-open\/accordion-heading\:block:is(:where(.group\/accordion-heading)[data-open] *){display:block}.group-data-open\/accordion-heading\:hidden:is(:where(.group\/accordion-heading)[data-open] *){display:none}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-accent-50::file-selector-button{background-color:var(--color-accent-50)}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.file\:text-accent-700::file-selector-button{color:var(--color-accent-700)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-0:before{content:var(--tw-content);inset:calc(var(--spacing)*0)}.before\:z-10:before{content:var(--tw-content);z-index:10}.before\:-translate-x-full:before{content:var(--tw-content);--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.before\:animate-\[flux-shimmer_2s_infinite\]:before{content:var(--tw-content);animation:2s infinite flux-shimmer}.before\:bg-gradient-to-r:before{content:var(--tw-content);--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.before\:from-transparent:before{content:var(--tw-content);--tw-gradient-from:transparent;--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))}.before\:via-\[var\(--flux-shimmer-color\)\]\/50:before{content:var(--tw-content);--tw-gradient-via:color-mix(in oklab,var(--flux-shimmer-color)50%,transparent);--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)}.before\:to-transparent:before{content:var(--tw-content);--tw-gradient-to:transparent;--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))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:-inset-px:after{content:var(--tw-content);top:-1px;right:-1px;bottom:-1px;left:-1px}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing)*0)}.after\:inset-\[3px\]:after{content:var(--tw-content);top:3px;right:3px;bottom:3px;left:3px}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-\[1px\]:after{content:var(--tw-content);border-radius:1px}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.after\:rounded-lg:after{content:var(--tw-content);border-radius:var(--radius-lg)}.after\:rounded-md:after{content:var(--tw-content);border-radius:var(--radius-md)}.after\:rounded-sm:after{content:var(--tw-content);border-radius:var(--radius-sm)}.after\:rounded-xl:after{content:var(--tw-content);border-radius:var(--radius-xl)}.after\:bg-white:after{content:var(--tw-content);background-color:var(--color-white)}.after\:inset-ring-\[1px\]:after{content:var(--tw-content);--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.after\:inset-ring-black\/7:after{content:var(--tw-content);--tw-inset-ring-color:color-mix(in oklab,var(--color-black)7%,transparent)}.after\:content-\[var\(--flux-file-upload-progress-as-string\)\]:after{--tw-content:var(--flux-file-upload-progress-as-string);content:var(--tw-content)}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:sticky:first-child{position:sticky}.first\:left-0:first-child{left:calc(var(--spacing)*0)}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.first\:ps-0:first-child{padding-inline-start:calc(var(--spacing)*0)}.first\:pt-0:first-child{padding-top:calc(var(--spacing)*0)}.first\:after\:pointer-events-none:first-child:after{content:var(--tw-content);pointer-events:none}.first\:after\:absolute:first-child:after{content:var(--tw-content);position:absolute}.first\:after\:inset-y-0:first-child:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.first\:after\:right-0:first-child:after{content:var(--tw-content);right:calc(var(--spacing)*0)}.first\:after\:w-8:first-child:after{content:var(--tw-content);width:calc(var(--spacing)*8)}.first\:after\:translate-x-full:first-child:after{content:var(--tw-content);--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.last\:sticky:last-child{position:sticky}.last\:right-0:last-child{right:calc(var(--spacing)*0)}.last\:bottom-0:last-child{bottom:calc(var(--spacing)*0)}.last\:z-20:last-child{z-index:20}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.last\:pe-0:last-child{padding-inline-end:calc(var(--spacing)*0)}.last\:pb-0:last-child{padding-bottom:calc(var(--spacing)*0)}.last\:after\:pointer-events-none:last-child:after{content:var(--tw-content);pointer-events:none}.last\:after\:absolute:last-child:after{content:var(--tw-content);position:absolute}.last\:after\:inset-y-0:last-child:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.last\:after\:left-0:last-child:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.last\:after\:w-8:last-child:after{content:var(--tw-content);width:calc(var(--spacing)*8)}.last\:after\:-translate-x-full:last-child:after{content:var(--tw-content);--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.first-of-type\:rounded-s-lg:first-of-type{border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.last-of-type\:rounded-e-lg:last-of-type{border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-\[var\(--haze-border\)\]:hover{border-color:var(--haze-border)}.hover\:border-accent-300:hover{border-color:var(--color-accent-300)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-200:hover{border-color:var(--color-zinc-200)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-\[color-mix\(in_oklab\,_var\(--color-accent\)\,_transparent_10\%\)\]:hover{background-color:color-mix(in oklab,var(--color-accent),transparent 10%)}.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-accent-200:hover{background-color:var(--color-accent-200)}.hover\:bg-accent-700:hover{background-color:var(--color-accent-700)}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:bg-zinc-800\/10:hover{background-color:color-mix(in oklab,var(--color-zinc-800)10%,transparent)}.hover\:bg-zinc-800\/\[4\%\]:hover{background-color:color-mix(in oklab,var(--color-zinc-800)4%,transparent)}.hover\:bg-\[url\(\'data\:image\/svg\+xml\,\%3Csvg\%20xmlns\=\%22http\:\/\/www\.w3\.org\/2000\/svg\%22\%20viewBox\=\%220\%200\%2016\%2016\%22\%20fill\=\%22\%231f2937\%22\%20class\=\%22size-4\%22\%3E\%3Cpath\%20fill-rule\=\%22evenodd\%22\%20d\=\%22M4\.22\%206\.22a\.75\.75\%200\%200\%201\%201\.06\%200L8\%208\.94l2\.72-2\.72a\.75\.75\%200\%201\%201\%201\.06\%201\.06l-3\.25\%203\.25a\.75\.75\%200\%200\%201-1\.06\%200L4\.22\%207\.28a\.75\.75\%200\%200\%201\%200-1\.06Z\%22\%20clip-rule\=\%22evenodd\%22\/\%3E\%3C\/svg\%3E\'\)\]:hover{background-image:url(data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2016%2016%22%20fill=%22%231f2937%22%20class=%22size-4%22%3E%3Cpath%20fill-rule=%22evenodd%22%20d=%22M4.22%206.22a.75.75%200%200%201%201.06%200L8%208.94l2.72-2.72a.75.75%200%201%201%201.06%201.06l-3.25%203.25a.75.75%200%200%201-1.06%200L4.22%207.28a.75.75%200%200%201%200-1.06Z%22%20clip-rule=%22evenodd%22/%3E%3C/svg%3E)}.hover\:bg-\[length\:16px_16px\]:hover{background-size:16px 16px}.hover\:text-accent-700:hover{color:var(--color-accent-700)}.hover\:text-accent-800:hover{color:var(--color-accent-800)}.hover\:text-accent-900:hover{color:var(--color-accent-900)}.hover\:text-accent-foreground:hover{color:var(--color-accent-foreground)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-800\!:hover{color:var(--color-zinc-800)!important}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-current:hover{text-decoration-color:currentColor}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-accent-100:hover::file-selector-button{background-color:var(--color-accent-100)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}.hover\:after\:bg-\[var\(--haze-light\)\]:hover:after{content:var(--tw-content);background-color:var(--haze-light)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:border-zinc-200:focus{border-color:var(--color-zinc-200)}.focus\:bg-accent:focus{background-color:var(--color-accent)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-accent-foreground:focus{color:var(--color-accent-foreground)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:text-zinc-800:focus{color:var(--color-zinc-800)}.focus\:opacity-100:focus{opacity:1}.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-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.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\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-offset-\[revert\]:focus{outline-offset:revert}.focus\:outline-\[revert\]:focus{outline-color:revert}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.active\:text-gray-800:active{color:var(--color-gray-800)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-b-zinc-200:disabled{border-bottom-color:var(--color-zinc-200)}.disabled\:text-zinc-400:disabled{color:var(--color-zinc-400)}.disabled\:text-zinc-500:disabled{color:var(--color-zinc-500)}.disabled\:placeholder-zinc-400:disabled::placeholder{color:var(--color-zinc-400)}.disabled\:placeholder-zinc-400\/70:disabled::placeholder{color:color-mix(in oklab,var(--color-zinc-400)70%,transparent)}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:opacity-75:disabled{opacity:.75}.disabled\:shadow-none:disabled{--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)}.disabled\:shadow-xs\!:disabled{--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)!important}:where([data-checked]) .in-data-checked\:text-zinc-800{color:var(--color-zinc-800)}:where([data-dragging]) .in-data-dragging\:border-zinc-300{border-color:var(--color-zinc-300)}:where([data-dragging]) .in-data-dragging\:bg-zinc-100{background-color:var(--color-zinc-100)}:where([data-dragging]) .in-data-dragging\:text-zinc-800{color:var(--color-zinc-800)}:where([data-flux-menu]) .in-data-flux-menu\:block{display:block}:where([data-flux-menu]) .in-data-flux-menu\:px-2{padding-inline:calc(var(--spacing)*2)}:where([data-flux-menu]) .in-data-flux-menu\:text-zinc-400{color:var(--color-zinc-400)}:where([data-flux-menu]) .in-data-flux-menu\:text-zinc-800{color:var(--color-zinc-800)}@media (hover:hover){:where([data-flux-menu]) .in-data-flux-menu\:hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}}:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:absolute{position:absolute}:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:hidden{display:none}:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:w-10{width:calc(var(--spacing)*10)}:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:cursor-e-resize{cursor:e-resize}:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:justify-center{justify-content:center}:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:px-0{padding-inline:calc(var(--spacing)*0)}:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:px-3{padding-inline:calc(var(--spacing)*3)}:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:opacity-0{opacity:0}:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:not-in-data-flux-menu\:w-10:not(:where([data-flux-menu]) *){width:calc(var(--spacing)*10)}:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:not-in-data-flux-menu\:justify-center:not(:where([data-flux-menu]) *){justify-content:center}:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:not-in-data-flux-sidebar-group-dropdown\:hidden:not(:where([data-flux-sidebar-group-dropdown]) *){display:none}:where([data-flux-sidebar-active]) :is(:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:in-data-flux-sidebar-active\:absolute){position:absolute}:where([data-flux-sidebar-active]) :is(:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:in-data-flux-sidebar-active\:opacity-0){opacity:0}:where([data-flux-sidebar-active]) :is(:where([data-flux-sidebar-collapsed-desktop]) .in-data-flux-sidebar-collapsed-desktop\:in-data-flux-sidebar-active\:opacity-100){opacity:1}:where([data-flux-sidebar-group-dropdown]) .in-data-flux-sidebar-group-dropdown\:hidden{display:none}:where([data-flux-sidebar-group-dropdown]) .in-data-flux-sidebar-group-dropdown\:w-auto\!{width:auto!important}:where([data-flux-sidebar-group-dropdown]) .in-data-flux-sidebar-group-dropdown\:bg-white\!{background-color:var(--color-white)!important}:where([data-flux-sidebar-group-dropdown]) .in-data-flux-sidebar-group-dropdown\:px-2\!{padding-inline:calc(var(--spacing)*2)!important}:where([data-flux-sidebar-group-dropdown]) .in-data-flux-sidebar-group-dropdown\:text-zinc-400\!{color:var(--color-zinc-400)!important}:where([data-flux-sidebar-group-dropdown]) .in-data-flux-sidebar-group-dropdown\:text-zinc-800\!{color:var(--color-zinc-800)!important}@media (hover:hover){:where([data-flux-sidebar-group-dropdown]) .in-data-flux-sidebar-group-dropdown\:hover\:bg-zinc-50\!:hover{background-color:var(--color-zinc-50)!important}}:where([data-flux-sidebar-active]) :is(:where([data-flux-sidebar-collapsed-desktop]) :is(:where([data-flux-sidebar-header]) .in-data-flux-sidebar-header\:in-data-flux-sidebar-collapsed-desktop\:in-data-flux-sidebar-active\:hidden)),:where([data-flux-sidebar-on-mobile]) .in-data-flux-sidebar-on-mobile\:hidden{display:none}:where([data-flux-sidebar-on-mobile]) .in-data-flux-sidebar-on-mobile\:h-10{height:calc(var(--spacing)*10)}:where([data-loading]) .in-data-loading\:opacity-0{opacity:0}:where([data-loading]) .in-data-loading\:opacity-100{opacity:1}:where([data-scrolled-left]) .in-data-scrolled-left\:last\:after\:inset-shadow-\[-8px_0px_8px_-8px_rgba\(0\,0\,0\,0\.05\)\]:last-child:after{content:var(--tw-content);--tw-inset-shadow:inset -8px 0px 8px -8px var(--tw-inset-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)}:where([data-scrolled-right]) .in-data-scrolled-right\:first\:after\:inset-shadow-\[8px_0px_8px_-8px_rgba\(0\,0\,0\,0\.05\)\]:first-child:after{content:var(--tw-content);--tw-inset-shadow:inset 8px 0px 8px -8px var(--tw-inset-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)}:where(.group\/center-align) .in-\[\.group\\\/center-align\]\:justify-center{justify-content:center}:where(.group\/end-align) .in-\[\.group\\\/end-align\]\:-ms-8{margin-inline-start:calc(var(--spacing)*-8)}:where(.group\/end-align) .in-\[\.group\\\/end-align\]\:-me-2{margin-inline-end:calc(var(--spacing)*-2)}:where(.group\/end-align) .in-\[\.group\\\/end-align\]\:flex-row-reverse{flex-direction:row-reverse}:where(.group\/end-align) .in-\[\.group\\\/end-align\]\:justify-end{justify-content:flex-end}:where(:is(data-target)) .in-\[data-target\]\:text-start{text-align:start}:where(:is(ui-toast-group)) .in-\[ui-toast-group\]\:w-xs{width:var(--container-xs)}:where(:is(ui-toast-group)) .in-\[ui-toast-group\]\:max-w-auto{max-width:auto}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-within\:z-10:has(:focus-within){z-index:10}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-focus-visible\:outline-\[-webkit-focus-ring-color\]:has(:focus-visible){outline-color:-webkit-focus-ring-color}.has-data-flux-navlist-badge\:not-in-data-flux-sidebar-collapsed-desktop\:pe-1\.5:has([data-flux-navlist-badge]):not(:where([data-flux-sidebar-collapsed-desktop]) *){padding-inline-end:calc(var(--spacing)*1.5)}.has-data-flux-slider-tick-line\:mt-1:has([data-flux-slider-tick-line]){margin-top:calc(var(--spacing)*1)}.has-data-invalid\:border-red-500:has([data-invalid]){border-color:var(--color-red-500)}.has-data-invalid\:outline-red-500\!:has([data-invalid]){outline-color:var(--color-red-500)!important}.has-data-\[circle\=true\]\:rounded-full:has([data-circle=true]){border-radius:3.40282e38px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.has-\[\[data-flux-control\]\~\[data-flux-label\]\]\:grid-cols-\[auto_1fr\]:has(:is([data-flux-control]~[data-flux-label])){grid-template-columns:auto 1fr}.has-\[\[data-flux-label\]\~\[data-flux-control\]\]\:grid-cols-\[1fr_auto\]:has(:is([data-flux-label]~[data-flux-control])){grid-template-columns:1fr auto}.has-\[option\.placeholder\:checked\]\:text-zinc-400:has(:is(option.placeholder:checked)){color:var(--color-zinc-400)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:var(--color-accent)}.aria-selected\:bg-accent\/50[aria-selected=true]{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}.aria-selected\:text-accent-foreground[aria-selected=true]{color:var(--color-accent-foreground)}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-active\:bg-red-50[data-active]{background-color:var(--color-red-50)}.data-active\:bg-zinc-50[data-active]{background-color:var(--color-zinc-50)}.data-active\:bg-zinc-100[data-active]{background-color:var(--color-zinc-100)}.data-active\:text-red-600[data-active]{color:var(--color-red-600)}.data-active\:text-zinc-500[data-active]{color:var(--color-zinc-500)}.data-active\:opacity-100[data-active]{opacity:1}.data-checked\:border-0[data-checked]{border-style:var(--tw-border-style);border-width:0}.data-checked\:border-\(--color-accent\)[data-checked]{border-color:var(--color-accent)}.data-checked\:border-zinc-800[data-checked]{border-color:var(--color-zinc-800)}.data-checked\:bg-\(--color-accent\)[data-checked]{background-color:var(--color-accent)}.data-checked\:bg-white[data-checked]{background-color:var(--color-white)}.data-checked\:bg-zinc-50[data-checked]{background-color:var(--color-zinc-50)}.data-checked\:bg-zinc-800[data-checked]{background-color:var(--color-zinc-800)}.data-checked\:text-\(--color-accent-foreground\)[data-checked]{color:var(--color-accent-foreground)}.data-checked\:text-white[data-checked]{color:var(--color-white)}.data-checked\:text-zinc-800[data-checked]{color:var(--color-zinc-800)}.data-checked\:shadow-xs[data-checked]{--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)}.data-checked\:after\:bg-\(--haze\)[data-checked]:after{content:var(--tw-content);background-color:var(--haze)}@media (hover:hover){.hover\:data-checked\:border-\(--color-accent\):hover[data-checked]{border-color:var(--color-accent)}.hover\:data-checked\:bg-\(--color-accent\):hover[data-checked]{background-color:var(--color-accent)}.hover\:data-checked\:text-\(--color-accent-foreground\):hover[data-checked]{color:var(--color-accent-foreground)}.hover\:data-checked\:after\:bg-\(--haze\):hover[data-checked]:after{content:var(--tw-content);background-color:var(--haze)}}.data-current\:border[data-current]{border-style:var(--tw-border-style);border-width:1px}.data-current\:border-zinc-200[data-current]{border-color:var(--color-zinc-200)}.data-current\:bg-white[data-current]{background-color:var(--color-white)}.data-current\:bg-zinc-800\/\[4\%\][data-current]{background-color:color-mix(in oklab,var(--color-zinc-800)4%,transparent)}.data-current\:text-\(--color-accent-content\)[data-current]{color:var(--color-accent-content)}.data-current\:text-zinc-800[data-current]{color:var(--color-zinc-800)}.data-current\:shadow-xs[data-current]{--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)}.data-current\:after\:absolute[data-current]:after{content:var(--tw-content);position:absolute}.data-current\:after\:inset-x-0[data-current]:after{content:var(--tw-content);inset-inline:calc(var(--spacing)*0)}.data-current\:after\:-bottom-3[data-current]:after{content:var(--tw-content);bottom:calc(var(--spacing)*-3)}.data-current\:after\:h-\[2px\][data-current]:after{content:var(--tw-content);height:2px}.data-current\:after\:bg-\(--color-accent-content\)[data-current]:after{content:var(--tw-content);background-color:var(--color-accent-content)}.data-current\:after\:bg-zinc-800[data-current]:after{content:var(--tw-content);background-color:var(--color-zinc-800)}@media (hover:hover){.hover\:data-current\:bg-\(--hover-fill\):hover[data-current]{background-color:var(--hover-fill)}.hover\:data-current\:text-\(--color-accent-content\):hover[data-current]{color:var(--color-accent-content)}}.data-end\:rounded-e-lg[data-end],.data-end-preview\:rounded-e-lg[data-end-preview]{border-start-end-radius:var(--radius-lg);border-end-end-radius:var(--radius-lg)}:is(.\*\*\:data-flux-badge-icon\:me-1 *)[data-flux-badge-icon]{margin-inline-end:calc(var(--spacing)*1)}:is(.\*\*\:data-flux-badge-icon\:me-1\.5 *)[data-flux-badge-icon]{margin-inline-end:calc(var(--spacing)*1.5)}:is(.\*\*\:data-flux-badge-icon\:me-2 *)[data-flux-badge-icon]{margin-inline-end:calc(var(--spacing)*2)}:is(.\*\:data-flux-field\:mb-3>*)[data-flux-field]{margin-bottom:calc(var(--spacing)*3)}:is(.\*\:data-flux-input\:grow>*)[data-flux-input]{flex-grow:1}:is(.\*\:data-flux-label\:mb-3>*)[data-flux-label]{margin-bottom:calc(var(--spacing)*3)}.data-flux-loading\:pointer-events-none[data-flux-loading]{pointer-events:none}:is(.\*\*\:data-flux-menu-item-icon\:text-zinc-400 *)[data-flux-menu-item-icon]{color:var(--color-zinc-400)}.data-flux-sidebar-collapsed-desktop\:w-14[data-flux-sidebar-collapsed-desktop]{width:calc(var(--spacing)*14)}.data-flux-sidebar-collapsed-desktop\:cursor-e-resize[data-flux-sidebar-collapsed-desktop]{cursor:e-resize}.data-flux-sidebar-collapsed-desktop\:px-2[data-flux-sidebar-collapsed-desktop]{padding-inline:calc(var(--spacing)*2)}.data-flux-sidebar-on-mobile\:fixed\![data-flux-sidebar-on-mobile]{position:fixed!important}.data-flux-sidebar-on-mobile\:start-0\![data-flux-sidebar-on-mobile]{inset-inline-start:calc(var(--spacing)*0)!important}.data-flux-sidebar-on-mobile\:top-0\![data-flux-sidebar-on-mobile]{top:calc(var(--spacing)*0)!important}.data-flux-sidebar-on-mobile\:max-h-dvh\![data-flux-sidebar-on-mobile]{max-height:100dvh!important}.data-flux-sidebar-on-mobile\:min-h-dvh\![data-flux-sidebar-on-mobile]{min-height:100dvh!important}.data-flux-sidebar-on-mobile\:not-data-flux-sidebar-collapsed-mobile\:block[data-flux-sidebar-on-mobile]:not([data-flux-sidebar-collapsed-mobile]){display:block}.data-flux-sidebar-on-mobile\:data-flux-sidebar-collapsed-mobile\:-translate-x-full[data-flux-sidebar-on-mobile][data-flux-sidebar-collapsed-mobile]{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-flux-table-sortable\:last\:me-0 *)[data-flux-table-sortable]:last-child{margin-inline-end:calc(var(--spacing)*0)}.data-hidden\:hidden[data-hidden]{display:none}.data-in-range\:bg-zinc-100[data-in-range]{background-color:var(--color-zinc-100)}.data-indeterminate\:border-transparent[data-indeterminate]{border-color:#0000}.data-invalid\:border-red-500[data-invalid]{border-color:var(--color-red-500)}.data-invalid\:text-red-500[data-invalid]{color:var(--color-red-500)}.data-invalid\:shadow-none[data-invalid]{--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)}.data-invalid\:outline-red-500[data-invalid]{outline-color:var(--color-red-500)}.disabled\:data-invalid\:border-red-500:disabled[data-invalid]{border-color:var(--color-red-500)}.data-loading\:pointer-events-none[data-loading]{pointer-events:none}.data-match\:text-zinc-800[data-match]{color:var(--color-zinc-800)}:is(.\*\*\:data-navmenu-icon\:text-zinc-400 *)[data-navmenu-icon]{color:var(--color-zinc-400)}.data-open\:block[data-open]{display:block}.data-open\:text-zinc-800[data-open]{color:var(--color-zinc-800)}.data-outside\:opacity-50[data-outside]{opacity:.5}.data-selected\:border-\(--color-accent-content\)[data-selected]{border-color:var(--color-accent-content)}.data-selected\:border-zinc-800[data-selected]{border-color:var(--color-zinc-800)}.data-selected\:bg-\(--color-accent\)[data-selected]{background-color:var(--color-accent)}.data-selected\:bg-white[data-selected]{background-color:var(--color-white)}.data-selected\:bg-zinc-800[data-selected]{background-color:var(--color-zinc-800)}.data-selected\:text-\(--color-accent-content\)[data-selected]{color:var(--color-accent-content)}.data-selected\:text-\(--color-accent-foreground\)[data-selected]{color:var(--color-accent-foreground)}.data-selected\:text-white[data-selected]{color:var(--color-white)}.data-selected\:text-zinc-800[data-selected]{color:var(--color-zinc-800)}.data-selected\:shadow-xs[data-selected]{--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)}@media (hover:hover){.hover\:data-selected\:bg-\(--color-accent\):hover[data-selected]{background-color:var(--color-accent)}.hover\:data-selected\:text-\(--color-accent-content\):hover[data-selected]{color:var(--color-accent-content)}.hover\:data-selected\:text-\(--color-accent-foreground\):hover[data-selected]{color:var(--color-accent-foreground)}}.data-start\:rounded-s-lg[data-start]{border-start-start-radius:var(--radius-lg);border-end-start-radius:var(--radius-lg)}.data-unavailable\:line-through[data-unavailable]{text-decoration-line:line-through}.data-\[active\]\:bg-accent\/50[data-active]{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[selected\=\'true\'\]\:bg-accent[data-selected=true]{background-color:var(--color-accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--color-accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=avatar\]\:ring-4 *)[data-slot=avatar]{--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)}:is(.\*\*\:data-\[slot\=avatar\]\:data-\[size\=sm\]\:ring-2 *)[data-slot=avatar][data-size=sm],:is(.\*\*\:data-\[slot\=avatar\]\:data-\[size\=xs\]\:ring-2 *)[data-slot=avatar][data-size=xs]{--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)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}:is(.\*\*\:data-\[slot\=content\]\:p-2\! *)[data-slot=content]{padding:calc(var(--spacing)*2)!important}:is(.\*\*\:data-\[slot\=content\]\:text-base\! *)[data-slot=content]{font-size:var(--text-base)!important;line-height:var(--tw-leading,var(--text-base--line-height))!important}:is(.\*\*\:data-\[slot\=content\]\:text-zinc-700 *)[data-slot=content]{color:var(--color-zinc-700)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--color-accent)}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--color-accent-foreground)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--color-accent)}.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--color-accent-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden,.max-lg\:data-flux-sidebar-cloak\:hidden[data-flux-sidebar-cloak]{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width<40rem){.max-sm\:fixed\!{position:fixed!important}.max-sm\:inset-0\!{inset:calc(var(--spacing)*0)!important}.max-sm\:hidden{display:none}.max-sm\:max-h-full\!{max-height:100%!important}.max-sm\:data-outside\:opacity-0[data-outside]{opacity:0}}@media (width>=40rem){.sm\:top-2{top:calc(var(--spacing)*2)}.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:right-3{right:calc(var(--spacing)*3)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:bottom-2{bottom:calc(var(--spacing)*2)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.sm\:size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.sm\:size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.sm\:size-11{width:calc(var(--spacing)*11);height:calc(var(--spacing)*11)}.sm\:size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.sm\:size-14{width:calc(var(--spacing)*14);height:calc(var(--spacing)*14)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-8{height:calc(var(--spacing)*8)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-6\!{width:calc(var(--spacing)*6)!important}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[11\.25rem\]{width:11.25rem}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2{gap:calc(var(--spacing)*2)}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:border{border-style:var(--tw-border-style);border-width:1px}.sm\:p-2{padding:calc(var(--spacing)*2)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-2{padding-inline:calc(var(--spacing)*2)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:px-16{padding-inline:calc(var(--spacing)*16)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-10{padding-block:calc(var(--spacing)*10)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:ps-2{padding-inline-start:calc(var(--spacing)*2)}.sm\:ps-5{padding-inline-start:calc(var(--spacing)*5)}.sm\:pe-8{padding-inline-end:calc(var(--spacing)*8)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.sm\:shadow-2xs{--tw-shadow:0 1px 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)}.sm\:backdrop\:bg-transparent::backdrop{background-color:#0000}:where(:is(ui-toast-group)) .sm\:in-\[ui-toast-group\]\:w-sm{width:var(--container-sm)}:is(.sm\:\*\*\:data-\[slot\=content\]\:text-sm\! *)[data-slot=content]{font-size:var(--text-sm)!important;line-height:var(--tw-leading,var(--text-sm--line-height))!important}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-1\.5{padding-block:calc(var(--spacing)*1.5)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}@container (width<28rem){.\@max-md\:py-2{padding-block:calc(var(--spacing)*2)}}@container (width>=28rem){.\@md\:m-\[-2px\]{margin:-2px}.\@md\:flex{display:flex}.\@md\:flex-row-reverse{flex-direction:row-reverse}.\@md\:justify-end{justify-content:flex-end}.\@md\:ps-4{padding-inline-start:calc(var(--spacing)*4)}.\@md\:pe-4{padding-inline-end:calc(var(--spacing)*4)}}@container (width>=40rem){.\@\[40rem\]\:flex{display:flex}.\@\[40rem\]\:hidden{display:none}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:mr-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--spacing)*0)}.rtl\:mr-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:auto}.rtl\:ml-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:calc(var(--spacing)*0)}.rtl\:ml-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:auto}.rtl\:block:where(:dir(rtl),[dir=rtl],[dir=rtl] *){display:block}.rtl\:hidden:where(:dir(rtl),[dir=rtl],[dir=rtl] *){display:none}.rtl\:inline:where(:dir(rtl),[dir=rtl],[dir=rtl] *){display:inline}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:-translate-x-\[3px\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x: -3px ;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\:-scale-x-100:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-scale-x: -100% ;scale:var(--tw-scale-x)var(--tw-scale-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\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}.rtl\:text-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}.rtl\:\[--flux-flyout-translate\:translateX\(-50px\)\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--flux-flyout-translate:translateX(-50px)}.rtl\:\[--flux-flyout-translate\:translateX\(50px\)\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--flux-flyout-translate:translateX(50px)}.rtl\:group-data-checked\:-translate-x-\[15px\]:where(:dir(rtl),[dir=rtl],[dir=rtl] *):is(:where(.group)[data-checked] *){--tw-translate-x: -15px ;translate:var(--tw-translate-x)var(--tw-translate-y)}:where([data-flux-sidebar-collapsed-desktop]) .rtl\:in-data-flux-sidebar-collapsed-desktop\:cursor-w-resize:where(:dir(rtl),[dir=rtl],[dir=rtl] *),.rtl\:data-flux-sidebar-collapsed-desktop\:cursor-w-resize:where(:dir(rtl),[dir=rtl],[dir=rtl] *)[data-flux-sidebar-collapsed-desktop]{cursor:w-resize}.data-flux-sidebar-on-mobile\:data-flux-sidebar-collapsed-mobile\:rtl\:translate-x-full[data-flux-sidebar-on-mobile][data-flux-sidebar-collapsed-mobile]:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.dark\:block:where(.dark,.dark *){display:block}.dark\:hidden:where(.dark,.dark *){display:none}.dark\:translate-x-\[2px\]:where(.dark,.dark *){--tw-translate-x:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}:where(.dark\:divide-zinc-700:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border:where(.dark,.dark *){border-style:var(--tw-border-style);border-width:1px}.dark\:border-0:where(.dark,.dark *){border-style:var(--tw-border-style);border-width:0}.dark\:border-e:where(.dark,.dark *){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-accent-800:where(.dark,.dark *){border-color:var(--color-accent-800)}.dark\:border-accent-900\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-accent-900)30%,transparent)}.dark\:border-amber-500\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700:where(.dark,.dark *){border-color:var(--color-amber-700)}.dark\:border-amber-800:where(.dark,.dark *){border-color:var(--color-amber-800)}.dark\:border-blue-400:where(.dark,.dark *){border-color:var(--color-blue-400)}.dark\:border-blue-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700:where(.dark,.dark *){border-color:var(--color-blue-700)}.dark\:border-blue-800:where(.dark,.dark *){border-color:var(--color-blue-800)}.dark\:border-gray-500:where(.dark,.dark *){border-color:var(--color-gray-500)}.dark\:border-gray-600:where(.dark,.dark *){border-color:var(--color-gray-600)}.dark\:border-gray-700:where(.dark,.dark *){border-color:var(--color-gray-700)}.dark\:border-gray-800:where(.dark,.dark *){border-color:var(--color-gray-800)}.dark\:border-gray-900:where(.dark,.dark *){border-color:var(--color-gray-900)}.dark\:border-green-800:where(.dark,.dark *){border-color:var(--color-green-800)}.dark\:border-indigo-600:where(.dark,.dark *){border-color:var(--color-indigo-600)}.dark\:border-neutral-800:where(.dark,.dark *){border-color:var(--color-neutral-800)}.dark\:border-orange-800:where(.dark,.dark *){border-color:var(--color-orange-800)}.dark\:border-purple-800:where(.dark,.dark *){border-color:var(--color-purple-800)}.dark\:border-red-800:where(.dark,.dark *){border-color:var(--color-red-800)}.dark\:border-teal-800:where(.dark,.dark *){border-color:var(--color-teal-800)}.dark\:border-white\/5:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}.dark\:border-white\/10:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-white\/20:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.dark\:border-yellow-800:where(.dark,.dark *){border-color:var(--color-yellow-800)}.dark\:border-zinc-500:where(.dark,.dark *){border-color:var(--color-zinc-500)}.dark\:border-zinc-600:where(.dark,.dark *){border-color:var(--color-zinc-600)}.dark\:border-zinc-700:where(.dark,.dark *){border-color:var(--color-zinc-700)}.dark\:border-zinc-800:where(.dark,.dark *){border-color:var(--color-zinc-800)}.dark\:border-l-red-500:where(.dark,.dark *){border-left-color:var(--color-red-500)}.dark\:bg-accent-500:where(.dark,.dark *){background-color:var(--color-accent-500)}.dark\:bg-accent-800:where(.dark,.dark *){background-color:var(--color-accent-800)}.dark\:bg-accent-900:where(.dark,.dark *){background-color:var(--color-accent-900)}.dark\:bg-accent-900\/15:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-accent-900)15%,transparent)}.dark\:bg-accent-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-accent-900)20%,transparent)}.dark\:bg-accent-900\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-accent-900)40%,transparent)}.dark\:bg-amber-400:where(.dark,.dark *){background-color:var(--color-amber-400)}.dark\:bg-amber-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-400)40%,transparent)}.dark\:bg-amber-500:where(.dark,.dark *){background-color:var(--color-amber-500)}.dark\:bg-amber-900:where(.dark,.dark *){background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black:where(.dark,.dark *){background-color:var(--color-black)}.dark\:bg-blue-400:where(.dark,.dark *){background-color:var(--color-blue-400)}.dark\:bg-blue-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-blue-400)40%,transparent)}.dark\:bg-blue-600:where(.dark,.dark *){background-color:var(--color-blue-600)}.dark\:bg-blue-800:where(.dark,.dark *){background-color:var(--color-blue-800)}.dark\:bg-blue-900:where(.dark,.dark *){background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950:where(.dark,.dark *){background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-cyan-400:where(.dark,.dark *){background-color:var(--color-cyan-400)}.dark\:bg-cyan-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-cyan-400)40%,transparent)}.dark\:bg-cyan-600:where(.dark,.dark *){background-color:var(--color-cyan-600)}.dark\:bg-emerald-400:where(.dark,.dark *){background-color:var(--color-emerald-400)}.dark\:bg-emerald-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-emerald-400)40%,transparent)}.dark\:bg-emerald-600:where(.dark,.dark *){background-color:var(--color-emerald-600)}.dark\:bg-fuchsia-400:where(.dark,.dark *){background-color:var(--color-fuchsia-400)}.dark\:bg-fuchsia-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-fuchsia-400)40%,transparent)}.dark\:bg-fuchsia-600:where(.dark,.dark *){background-color:var(--color-fuchsia-600)}.dark\:bg-gray-200:where(.dark,.dark *){background-color:var(--color-gray-200)}.dark\:bg-gray-700:where(.dark,.dark *){background-color:var(--color-gray-700)}.dark\:bg-gray-800:where(.dark,.dark *){background-color:var(--color-gray-800)}.dark\:bg-gray-900:where(.dark,.dark *){background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-400:where(.dark,.dark *){background-color:var(--color-green-400)}.dark\:bg-green-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-green-400)40%,transparent)}.dark\:bg-green-600:where(.dark,.dark *){background-color:var(--color-green-600)}.dark\:bg-green-900\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-400:where(.dark,.dark *){background-color:var(--color-indigo-400)}.dark\:bg-indigo-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-indigo-400)40%,transparent)}.dark\:bg-indigo-600:where(.dark,.dark *){background-color:var(--color-indigo-600)}.dark\:bg-indigo-900:where(.dark,.dark *){background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-400:where(.dark,.dark *){background-color:var(--color-lime-400)}.dark\:bg-lime-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-lime-400)40%,transparent)}.dark\:bg-lime-600:where(.dark,.dark *){background-color:var(--color-lime-600)}.dark\:bg-lime-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700:where(.dark,.dark *){background-color:var(--color-neutral-700)}.dark\:bg-orange-400:where(.dark,.dark *){background-color:var(--color-orange-400)}.dark\:bg-orange-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-orange-400)40%,transparent)}.dark\:bg-orange-600:where(.dark,.dark *){background-color:var(--color-orange-600)}.dark\:bg-orange-900\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-400:where(.dark,.dark *){background-color:var(--color-pink-400)}.dark\:bg-pink-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-pink-400)40%,transparent)}.dark\:bg-pink-600:where(.dark,.dark *){background-color:var(--color-pink-600)}.dark\:bg-pink-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-400:where(.dark,.dark *){background-color:var(--color-purple-400)}.dark\:bg-purple-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-purple-400)40%,transparent)}.dark\:bg-purple-600:where(.dark,.dark *){background-color:var(--color-purple-600)}.dark\:bg-purple-900\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-400:where(.dark,.dark *){background-color:var(--color-red-400)}.dark\:bg-red-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-400)40%,transparent)}.dark\:bg-red-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-600:where(.dark,.dark *){background-color:var(--color-red-600)}.dark\:bg-red-900\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-rose-400:where(.dark,.dark *){background-color:var(--color-rose-400)}.dark\:bg-rose-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-rose-400)40%,transparent)}.dark\:bg-rose-600:where(.dark,.dark *){background-color:var(--color-rose-600)}.dark\:bg-sky-400:where(.dark,.dark *){background-color:var(--color-sky-400)}.dark\:bg-sky-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-sky-400)40%,transparent)}.dark\:bg-sky-600:where(.dark,.dark *){background-color:var(--color-sky-600)}.dark\:bg-teal-400:where(.dark,.dark *){background-color:var(--color-teal-400)}.dark\:bg-teal-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-teal-400)40%,transparent)}.dark\:bg-teal-600:where(.dark,.dark *){background-color:var(--color-teal-600)}.dark\:bg-teal-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-transparent:where(.dark,.dark *){background-color:#0000}.dark\:bg-violet-400:where(.dark,.dark *){background-color:var(--color-violet-400)}.dark\:bg-violet-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-violet-400)40%,transparent)}.dark\:bg-violet-600:where(.dark,.dark *){background-color:var(--color-violet-600)}.dark\:bg-white:where(.dark,.dark *){background-color:var(--color-white)}.dark\:bg-white\/5:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.dark\:bg-white\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.dark\:bg-white\/25:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.dark\:bg-white\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-white\/\[6\%\]:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)6%,transparent)}.dark\:bg-yellow-400:where(.dark,.dark *){background-color:var(--color-yellow-400)}.dark\:bg-yellow-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-yellow-400)40%,transparent)}.dark\:bg-yellow-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-300:where(.dark,.dark *){background-color:var(--color-zinc-300)}.dark\:bg-zinc-400:where(.dark,.dark *){background-color:var(--color-zinc-400)}.dark\:bg-zinc-400\/40:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-400)40%,transparent)}.dark\:bg-zinc-600:where(.dark,.dark *){background-color:var(--color-zinc-600)}.dark\:bg-zinc-600\!:where(.dark,.dark *){background-color:var(--color-zinc-600)!important}.dark\:bg-zinc-700:where(.dark,.dark *){background-color:var(--color-zinc-700)}.dark\:bg-zinc-800:where(.dark,.dark *){background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900:where(.dark,.dark *){background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b:where(.dark,.dark *){--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:bg-\[url\(\'data\:image\/svg\+xml\,\%3Csvg\%20xmlns\=\%22http\:\/\/www\.w3\.org\/2000\/svg\%22\%20viewBox\=\%220\%200\%2016\%2016\%22\%20fill\=\%22\%23ffffff75\%22\%20class\=\%22size-4\%22\%3E\%3Cpath\%20fill-rule\=\%22evenodd\%22\%20d\=\%22M4\.22\%206\.22a\.75\.75\%200\%200\%201\%201\.06\%200L8\%208\.94l2\.72-2\.72a\.75\.75\%200\%201\%201\%201\.06\%201\.06l-3\.25\%203\.25a\.75\.75\%200\%200\%201-1\.06\%200L4\.22\%207\.28a\.75\.75\%200\%200\%201\%200-1\.06Z\%22\%20clip-rule\=\%22evenodd\%22\/\%3E\%3C\/svg\%3E\'\)\]:where(.dark,.dark *){background-image:url(data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2016%2016%22%20fill=%22%23ffffff75%22%20class=%22size-4%22%3E%3Cpath%20fill-rule=%22evenodd%22%20d=%22M4.22%206.22a.75.75%200%200%201%201.06%200L8%208.94l2.72-2.72a.75.75%200%201%201%201.06%201.06l-3.25%203.25a.75.75%200%200%201-1.06%200L4.22%207.28a.75.75%200%200%201%200-1.06Z%22%20clip-rule=%22evenodd%22/%3E%3C/svg%3E)}.dark\:from-accent-900\/20:where(.dark,.dark *){--tw-gradient-from:color-mix(in oklab,var(--color-accent-900)20%,transparent);--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))}.dark\:from-blue-900\/20:where(.dark,.dark *){--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20:where(.dark,.dark *){--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20:where(.dark,.dark *){--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\:from-slate-900:where(.dark,.dark *){--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))}.dark\:from-white\/10:where(.dark,.dark *){--tw-gradient-from:color-mix(in oklab,var(--color-white)10%,transparent);--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))}.dark\:from-zinc-900:where(.dark,.dark *){--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950:where(.dark,.dark *){--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950:where(.dark,.dark *){--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900:where(.dark,.dark *){--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20:where(.dark,.dark *){--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20:where(.dark,.dark *){--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950:where(.dark,.dark *){--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20:where(.dark,.dark *){--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20:where(.dark,.dark *){--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800:where(.dark,.dark *){--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900:where(.dark,.dark *){--tw-gradient-to:var(--color-zinc-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))}.dark\:bg-\[length\:16px_16px\]:where(.dark,.dark *){background-size:16px 16px}.dark\:text-\[var\(--callout-icon\)\]:where(.dark,.dark *){color:var(--callout-icon)}.dark\:text-accent-100:where(.dark,.dark *){color:var(--color-accent-100)}.dark\:text-accent-200:where(.dark,.dark *){color:var(--color-accent-200)}.dark\:text-accent-300:where(.dark,.dark *){color:var(--color-accent-300)}.dark\:text-accent-400:where(.dark,.dark *){color:var(--color-accent-400)}.dark\:text-amber-200:where(.dark,.dark *){color:var(--color-amber-200)}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-amber-500:where(.dark,.dark *){color:var(--color-amber-500)}.dark\:text-blue-100:where(.dark,.dark *){color:var(--color-blue-100)}.dark\:text-blue-200:where(.dark,.dark *){color:var(--color-blue-200)}.dark\:text-blue-300:where(.dark,.dark *){color:var(--color-blue-300)}.dark\:text-blue-400:where(.dark,.dark *){color:var(--color-blue-400)}.dark\:text-blue-600:where(.dark,.dark *){color:var(--color-blue-600)}.dark\:text-cyan-200:where(.dark,.dark *){color:var(--color-cyan-200)}.dark\:text-cyan-400:where(.dark,.dark *){color:var(--color-cyan-400)}.dark\:text-emerald-100:where(.dark,.dark *){color:var(--color-emerald-100)}.dark\:text-emerald-200:where(.dark,.dark *){color:var(--color-emerald-200)}.dark\:text-emerald-300:where(.dark,.dark *){color:var(--color-emerald-300)}.dark\:text-emerald-400:where(.dark,.dark *){color:var(--color-emerald-400)}.dark\:text-emerald-600:where(.dark,.dark *){color:var(--color-emerald-600)}.dark\:text-fuchsia-200:where(.dark,.dark *){color:var(--color-fuchsia-200)}.dark\:text-fuchsia-400:where(.dark,.dark *){color:var(--color-fuchsia-400)}.dark\:text-gray-100:where(.dark,.dark *){color:var(--color-gray-100)}.dark\:text-gray-200:where(.dark,.dark *){color:var(--color-gray-200)}.dark\:text-gray-300:where(.dark,.dark *){color:var(--color-gray-300)}.dark\:text-gray-400:where(.dark,.dark *){color:var(--color-gray-400)}.dark\:text-gray-500:where(.dark,.dark *){color:var(--color-gray-500)}.dark\:text-gray-600:where(.dark,.dark *){color:var(--color-gray-600)}.dark\:text-gray-800:where(.dark,.dark *){color:var(--color-gray-800)}.dark\:text-gray-950:where(.dark,.dark *){color:var(--color-gray-950)}.dark\:text-green-100:where(.dark,.dark *){color:var(--color-green-100)}.dark\:text-green-200:where(.dark,.dark *){color:var(--color-green-200)}.dark\:text-green-300:where(.dark,.dark *){color:var(--color-green-300)}.dark\:text-green-400:where(.dark,.dark *){color:var(--color-green-400)}.dark\:text-green-500:where(.dark,.dark *){color:var(--color-green-500)}.dark\:text-green-600:where(.dark,.dark *){color:var(--color-green-600)}.dark\:text-indigo-200:where(.dark,.dark *){color:var(--color-indigo-200)}.dark\:text-indigo-300:where(.dark,.dark *){color:var(--color-indigo-300)}.dark\:text-indigo-400:where(.dark,.dark *){color:var(--color-indigo-400)}.dark\:text-lime-200:where(.dark,.dark *){color:var(--color-lime-200)}.dark\:text-lime-400:where(.dark,.dark *){color:var(--color-lime-400)}.dark\:text-lime-500:where(.dark,.dark *){color:var(--color-lime-500)}.dark\:text-orange-100:where(.dark,.dark *){color:var(--color-orange-100)}.dark\:text-orange-200:where(.dark,.dark *){color:var(--color-orange-200)}.dark\:text-orange-300:where(.dark,.dark *){color:var(--color-orange-300)}.dark\:text-orange-400:where(.dark,.dark *){color:var(--color-orange-400)}.dark\:text-orange-600:where(.dark,.dark *){color:var(--color-orange-600)}.dark\:text-pink-200:where(.dark,.dark *){color:var(--color-pink-200)}.dark\:text-pink-400:where(.dark,.dark *){color:var(--color-pink-400)}.dark\:text-purple-100:where(.dark,.dark *){color:var(--color-purple-100)}.dark\:text-purple-200:where(.dark,.dark *){color:var(--color-purple-200)}.dark\:text-purple-300:where(.dark,.dark *){color:var(--color-purple-300)}.dark\:text-purple-400:where(.dark,.dark *){color:var(--color-purple-400)}.dark\:text-purple-600:where(.dark,.dark *){color:var(--color-purple-600)}.dark\:text-red-100:where(.dark,.dark *){color:var(--color-red-100)}.dark\:text-red-200:where(.dark,.dark *){color:var(--color-red-200)}.dark\:text-red-300:where(.dark,.dark *){color:var(--color-red-300)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-red-600:where(.dark,.dark *){color:var(--color-red-600)}.dark\:text-rose-200:where(.dark,.dark *){color:var(--color-rose-200)}.dark\:text-rose-400:where(.dark,.dark *){color:var(--color-rose-400)}.dark\:text-sky-200:where(.dark,.dark *){color:var(--color-sky-200)}.dark\:text-sky-300:where(.dark,.dark *){color:var(--color-sky-300)}.dark\:text-sky-400:where(.dark,.dark *){color:var(--color-sky-400)}.dark\:text-teal-200:where(.dark,.dark *){color:var(--color-teal-200)}.dark\:text-teal-400:where(.dark,.dark *){color:var(--color-teal-400)}.dark\:text-violet-200:where(.dark,.dark *){color:var(--color-violet-200)}.dark\:text-violet-400:where(.dark,.dark *){color:var(--color-violet-400)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:text-white\!:where(.dark,.dark *){color:var(--color-white)!important}.dark\:text-white\/15:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)15%,transparent)}.dark\:text-white\/40:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)40%,transparent)}.dark\:text-white\/50:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/60:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)60%,transparent)}.dark\:text-white\/70:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100:where(.dark,.dark *){color:var(--color-yellow-100)}.dark\:text-yellow-200:where(.dark,.dark *){color:var(--color-yellow-200)}.dark\:text-yellow-300:where(.dark,.dark *){color:var(--color-yellow-300)}.dark\:text-yellow-400:where(.dark,.dark *){color:var(--color-yellow-400)}.dark\:text-yellow-500:where(.dark,.dark *){color:var(--color-yellow-500)}.dark\:text-zinc-100:where(.dark,.dark *){color:var(--color-zinc-100)}.dark\:text-zinc-200:where(.dark,.dark *){color:var(--color-zinc-200)}.dark\:text-zinc-300:where(.dark,.dark *){color:var(--color-zinc-300)}.dark\:text-zinc-400:where(.dark,.dark *){color:var(--color-zinc-400)}.dark\:text-zinc-500:where(.dark,.dark *){color:var(--color-zinc-500)}.dark\:text-zinc-500\!:where(.dark,.dark *){color:var(--color-zinc-500)!important}.dark\:text-zinc-600:where(.dark,.dark *){color:var(--color-zinc-600)}.dark\:text-zinc-800:where(.dark,.dark *){color:var(--color-zinc-800)}.dark\:text-zinc-950:where(.dark,.dark *){color:var(--color-zinc-950)}.dark\:decoration-white\/20:where(.dark,.dark *){-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)20%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)20%,transparent)}.dark\:placeholder-white\/60:where(.dark,.dark *)::placeholder{color:color-mix(in oklab,var(--color-white)60%,transparent)}.dark\:placeholder-zinc-400:where(.dark,.dark *)::placeholder{color:var(--color-zinc-400)}.dark\:shadow-none:where(.dark,.dark *){--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)}.dark\:ring-1:where(.dark,.dark *){--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)}.dark\:ring-black\/30:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab,var(--color-black)30%,transparent)}.dark\:ring-blue-800:where(.dark,.dark *){--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900:where(.dark,.dark *){--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800:where(.dark,.dark *){--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-700:where(.dark,.dark *){--tw-ring-color:var(--color-zinc-700)}.dark\:ring-zinc-800:where(.dark,.dark *){--tw-ring-color:var(--color-zinc-800)}.dark\:ring-zinc-900:where(.dark,.dark *){--tw-ring-color:var(--color-zinc-900)}.dark\:ring-offset-zinc-800:where(.dark,.dark *){--tw-ring-offset-color:var(--color-zinc-800)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-amber-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-amber-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-blue-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-blue-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-cyan-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-cyan-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-emerald-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-emerald-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-fuchsia-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-fuchsia-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-green-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-green-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-indigo-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-indigo-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-lime-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-lime-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-orange-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-orange-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-pink-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-pink-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-purple-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-purple-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-red-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-red-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-rose-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-rose-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-sky-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-sky-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-teal-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-teal-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-violet-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-violet-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-yellow-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-yellow-400),transparent 90%)}.dark\:\[--callout-background\:color-mix\(in_oklab\,var\(--color-zinc-400\)\,transparent_90\%\)\]:where(.dark,.dark *){--callout-background:color-mix(in oklab,var(--color-zinc-400),transparent 90%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-amber-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-amber-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-blue-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-blue-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-cyan-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-cyan-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-emerald-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-emerald-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-fuchsia-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-fuchsia-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-green-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-green-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-indigo-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-indigo-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-lime-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-lime-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-orange-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-orange-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-pink-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-pink-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-purple-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-purple-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-red-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-red-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-rose-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-rose-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-sky-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-sky-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-teal-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-teal-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-violet-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-violet-400),transparent 50%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-white\)\,transparent_95\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-white),transparent 95%)}.dark\:\[--callout-border\:color-mix\(in_oklab\,var\(--color-yellow-400\)\,transparent_50\%\)\]:where(.dark,.dark *){--callout-border:color-mix(in oklab,var(--color-yellow-400),transparent 50%)}.dark\:\[--callout-heading\:var\(--color-amber-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-amber-200)}.dark\:\[--callout-heading\:var\(--color-blue-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-blue-200)}.dark\:\[--callout-heading\:var\(--color-cyan-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-cyan-200)}.dark\:\[--callout-heading\:var\(--color-emerald-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-emerald-200)}.dark\:\[--callout-heading\:var\(--color-fuchsia-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-fuchsia-200)}.dark\:\[--callout-heading\:var\(--color-green-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-green-200)}.dark\:\[--callout-heading\:var\(--color-indigo-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-indigo-200)}.dark\:\[--callout-heading\:var\(--color-lime-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-lime-200)}.dark\:\[--callout-heading\:var\(--color-orange-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-orange-200)}.dark\:\[--callout-heading\:var\(--color-pink-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-pink-200)}.dark\:\[--callout-heading\:var\(--color-purple-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-purple-200)}.dark\:\[--callout-heading\:var\(--color-red-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-red-200)}.dark\:\[--callout-heading\:var\(--color-rose-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-rose-200)}.dark\:\[--callout-heading\:var\(--color-sky-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-sky-200)}.dark\:\[--callout-heading\:var\(--color-teal-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-teal-200)}.dark\:\[--callout-heading\:var\(--color-violet-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-violet-200)}.dark\:\[--callout-heading\:var\(--color-yellow-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-yellow-200)}.dark\:\[--callout-heading\:var\(--color-zinc-200\)\]:where(.dark,.dark *){--callout-heading:var(--color-zinc-200)}.dark\:\[--callout-icon\:var\(--color-amber-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-amber-400)}.dark\:\[--callout-icon\:var\(--color-blue-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-blue-400)}.dark\:\[--callout-icon\:var\(--color-cyan-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-cyan-400)}.dark\:\[--callout-icon\:var\(--color-emerald-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-emerald-400)}.dark\:\[--callout-icon\:var\(--color-fuchsia-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-fuchsia-400)}.dark\:\[--callout-icon\:var\(--color-green-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-green-400)}.dark\:\[--callout-icon\:var\(--color-indigo-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-indigo-400)}.dark\:\[--callout-icon\:var\(--color-lime-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-lime-400)}.dark\:\[--callout-icon\:var\(--color-orange-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-orange-400)}.dark\:\[--callout-icon\:var\(--color-pink-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-pink-400)}.dark\:\[--callout-icon\:var\(--color-purple-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-purple-400)}.dark\:\[--callout-icon\:var\(--color-red-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-red-400)}.dark\:\[--callout-icon\:var\(--color-rose-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-rose-400)}.dark\:\[--callout-icon\:var\(--color-sky-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-sky-400)}.dark\:\[--callout-icon\:var\(--color-teal-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-teal-400)}.dark\:\[--callout-icon\:var\(--color-violet-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-violet-400)}.dark\:\[--callout-icon\:var\(--color-yellow-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-yellow-400)}.dark\:\[--callout-icon\:var\(--color-zinc-400\)\]:where(.dark,.dark *){--callout-icon:var(--color-zinc-400)}.dark\:\[--callout-text\:var\(--color-amber-300\)\]:where(.dark,.dark *){--callout-text:var(--color-amber-300)}.dark\:\[--callout-text\:var\(--color-blue-300\)\]:where(.dark,.dark *){--callout-text:var(--color-blue-300)}.dark\:\[--callout-text\:var\(--color-cyan-300\)\]:where(.dark,.dark *){--callout-text:var(--color-cyan-300)}.dark\:\[--callout-text\:var\(--color-emerald-300\)\]:where(.dark,.dark *){--callout-text:var(--color-emerald-300)}.dark\:\[--callout-text\:var\(--color-fuchsia-300\)\]:where(.dark,.dark *){--callout-text:var(--color-fuchsia-300)}.dark\:\[--callout-text\:var\(--color-green-300\)\]:where(.dark,.dark *){--callout-text:var(--color-green-300)}.dark\:\[--callout-text\:var\(--color-indigo-300\)\]:where(.dark,.dark *){--callout-text:var(--color-indigo-300)}.dark\:\[--callout-text\:var\(--color-lime-300\)\]:where(.dark,.dark *){--callout-text:var(--color-lime-300)}.dark\:\[--callout-text\:var\(--color-orange-300\)\]:where(.dark,.dark *){--callout-text:var(--color-orange-300)}.dark\:\[--callout-text\:var\(--color-pink-300\)\]:where(.dark,.dark *){--callout-text:var(--color-pink-300)}.dark\:\[--callout-text\:var\(--color-purple-300\)\]:where(.dark,.dark *){--callout-text:var(--color-purple-300)}.dark\:\[--callout-text\:var\(--color-red-300\)\]:where(.dark,.dark *){--callout-text:var(--color-red-300)}.dark\:\[--callout-text\:var\(--color-rose-300\)\]:where(.dark,.dark *){--callout-text:var(--color-rose-300)}.dark\:\[--callout-text\:var\(--color-sky-300\)\]:where(.dark,.dark *){--callout-text:var(--color-sky-300)}.dark\:\[--callout-text\:var\(--color-teal-300\)\]:where(.dark,.dark *){--callout-text:var(--color-teal-300)}.dark\:\[--callout-text\:var\(--color-violet-300\)\]:where(.dark,.dark *){--callout-text:var(--color-violet-300)}.dark\:\[--callout-text\:var\(--color-yellow-300\)\]:where(.dark,.dark *){--callout-text:var(--color-yellow-300)}.dark\:\[--callout-text\:var\(--color-zinc-300\)\]:where(.dark,.dark *){--callout-text:var(--color-zinc-300)}.dark\:\[--color-accent-content\:var\(--color-amber-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-amber-400)}.dark\:\[--color-accent-content\:var\(--color-blue-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-blue-400)}.dark\:\[--color-accent-content\:var\(--color-cyan-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-cyan-400)}.dark\:\[--color-accent-content\:var\(--color-emerald-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-emerald-400)}.dark\:\[--color-accent-content\:var\(--color-fuchsia-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-fuchsia-400)}.dark\:\[--color-accent-content\:var\(--color-green-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-green-400)}.dark\:\[--color-accent-content\:var\(--color-indigo-300\)\]:where(.dark,.dark *){--color-accent-content:var(--color-indigo-300)}.dark\:\[--color-accent-content\:var\(--color-lime-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-lime-400)}.dark\:\[--color-accent-content\:var\(--color-orange-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-orange-400)}.dark\:\[--color-accent-content\:var\(--color-pink-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-pink-400)}.dark\:\[--color-accent-content\:var\(--color-purple-300\)\]:where(.dark,.dark *){--color-accent-content:var(--color-purple-300)}.dark\:\[--color-accent-content\:var\(--color-red-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-red-400)}.dark\:\[--color-accent-content\:var\(--color-rose-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-rose-400)}.dark\:\[--color-accent-content\:var\(--color-sky-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-sky-400)}.dark\:\[--color-accent-content\:var\(--color-teal-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-teal-400)}.dark\:\[--color-accent-content\:var\(--color-violet-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-violet-400)}.dark\:\[--color-accent-content\:var\(--color-white\)\]:where(.dark,.dark *){--color-accent-content:var(--color-white)}.dark\:\[--color-accent-content\:var\(--color-yellow-400\)\]:where(.dark,.dark *){--color-accent-content:var(--color-yellow-400)}.dark\:\[--color-accent-foreground\:var\(--color-amber-950\)\]:where(.dark,.dark *){--color-accent-foreground:var(--color-amber-950)}.dark\:\[--color-accent-foreground\:var\(--color-gray-800\)\]:where(.dark,.dark *){--color-accent-foreground:var(--color-gray-800)}.dark\:\[--color-accent-foreground\:var\(--color-lime-950\)\]:where(.dark,.dark *){--color-accent-foreground:var(--color-lime-950)}.dark\:\[--color-accent-foreground\:var\(--color-neutral-800\)\]:where(.dark,.dark *){--color-accent-foreground:var(--color-neutral-800)}.dark\:\[--color-accent-foreground\:var\(--color-orange-950\)\]:where(.dark,.dark *){--color-accent-foreground:var(--color-orange-950)}.dark\:\[--color-accent-foreground\:var\(--color-slate-800\)\]:where(.dark,.dark *){--color-accent-foreground:var(--color-slate-800)}.dark\:\[--color-accent-foreground\:var\(--color-stone-800\)\]:where(.dark,.dark *){--color-accent-foreground:var(--color-stone-800)}.dark\:\[--color-accent-foreground\:var\(--color-white\)\]:where(.dark,.dark *){--color-accent-foreground:var(--color-white)}.dark\:\[--color-accent-foreground\:var\(--color-yellow-950\)\]:where(.dark,.dark *){--color-accent-foreground:var(--color-yellow-950)}.dark\:\[--color-accent-foreground\:var\(--color-zinc-800\)\]:where(.dark,.dark *){--color-accent-foreground:var(--color-zinc-800)}.dark\:\[--color-accent\:var\(--color-amber-400\)\]:where(.dark,.dark *){--color-accent:var(--color-amber-400)}.dark\:\[--color-accent\:var\(--color-blue-500\)\]:where(.dark,.dark *){--color-accent:var(--color-blue-500)}.dark\:\[--color-accent\:var\(--color-cyan-600\)\]:where(.dark,.dark *){--color-accent:var(--color-cyan-600)}.dark\:\[--color-accent\:var\(--color-emerald-600\)\]:where(.dark,.dark *){--color-accent:var(--color-emerald-600)}.dark\:\[--color-accent\:var\(--color-fuchsia-600\)\]:where(.dark,.dark *){--color-accent:var(--color-fuchsia-600)}.dark\:\[--color-accent\:var\(--color-green-600\)\]:where(.dark,.dark *){--color-accent:var(--color-green-600)}.dark\:\[--color-accent\:var\(--color-indigo-500\)\]:where(.dark,.dark *){--color-accent:var(--color-indigo-500)}.dark\:\[--color-accent\:var\(--color-lime-400\)\]:where(.dark,.dark *){--color-accent:var(--color-lime-400)}.dark\:\[--color-accent\:var\(--color-orange-400\)\]:where(.dark,.dark *){--color-accent:var(--color-orange-400)}.dark\:\[--color-accent\:var\(--color-pink-600\)\]:where(.dark,.dark *){--color-accent:var(--color-pink-600)}.dark\:\[--color-accent\:var\(--color-purple-500\)\]:where(.dark,.dark *){--color-accent:var(--color-purple-500)}.dark\:\[--color-accent\:var\(--color-red-500\)\]:where(.dark,.dark *){--color-accent:var(--color-red-500)}.dark\:\[--color-accent\:var\(--color-rose-500\)\]:where(.dark,.dark *){--color-accent:var(--color-rose-500)}.dark\:\[--color-accent\:var\(--color-sky-600\)\]:where(.dark,.dark *){--color-accent:var(--color-sky-600)}.dark\:\[--color-accent\:var\(--color-teal-600\)\]:where(.dark,.dark *){--color-accent:var(--color-teal-600)}.dark\:\[--color-accent\:var\(--color-violet-500\)\]:where(.dark,.dark *){--color-accent:var(--color-violet-500)}.dark\:\[--color-accent\:var\(--color-white\)\]:where(.dark,.dark *){--color-accent:var(--color-white)}.dark\:\[--color-accent\:var\(--color-yellow-400\)\]:where(.dark,.dark *){--color-accent:var(--color-yellow-400)}.dark\:\[--haze\:color-mix\(in_oklab\,_var\(--color-accent-content\)\,_transparent_90\%\)\]:where(.dark,.dark *){--haze:color-mix(in oklab,var(--color-accent-content),transparent 90%)}:is(.\*\*\:dark\:ring-zinc-900 *):where(.dark,.dark *){--tw-ring-color:var(--color-zinc-900)}@media (hover:hover){.dark\:group-hover\:bg-accent-900\/20:where(.dark,.dark *):is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-accent-900)20%,transparent)}.dark\:group-hover\:text-white:where(.dark,.dark *):is(:where(.group):hover *),.dark\:group-hover\/accordion-heading\:text-white:where(.dark,.dark *):is(:where(.group\/accordion-heading):hover *),.dark\:group-hover\/sortable\:text-white:where(.dark,.dark *):is(:where(.group\/sortable):hover *){color:var(--color-white)}}.dark\:group-data-active\/item\:text-white:where(.dark,.dark *):is(:where(.group\/item)[data-active] *){color:var(--color-white)}.dark\:group-data-checked\:translate-x-\[15px\]:where(.dark,.dark *):is(:where(.group)[data-checked] *){--tw-translate-x:15px;translate:var(--tw-translate-x)var(--tw-translate-y)}.dark\:file\:bg-accent-900\/20:where(.dark,.dark *)::file-selector-button{background-color:color-mix(in oklab,var(--color-accent-900)20%,transparent)}.dark\:file\:bg-zinc-700:where(.dark,.dark *)::file-selector-button{background-color:var(--color-zinc-700)}.dark\:file\:text-accent-400:where(.dark,.dark *)::file-selector-button{color:var(--color-accent-400)}.dark\:before\:via-\[var\(--flux-shimmer-color\)\]\/50:where(.dark,.dark *):before{content:var(--tw-content);--tw-gradient-via:color-mix(in oklab,var(--flux-shimmer-color)50%,transparent);--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)}.dark\:after\:bg-zinc-900:where(.dark,.dark *):after{content:var(--tw-content);background-color:var(--color-zinc-900)}.dark\:after\:inset-ring-white\/10:where(.dark,.dark *):after{content:var(--tw-content);--tw-inset-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:odd\:bg-zinc-800\/30:where(.dark,.dark *):nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:where(.dark,.dark *):nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-accent-700:where(.dark,.dark *):hover{border-color:var(--color-accent-700)}.dark\:hover\:border-gray-600:where(.dark,.dark *):hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:where(.dark,.dark *):hover{border-color:var(--color-gray-700)}.dark\:hover\:border-white\/10:where(.dark,.dark *):hover{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:hover\:border-zinc-500:where(.dark,.dark *):hover{border-color:var(--color-zinc-500)}.dark\:hover\:border-zinc-600:where(.dark,.dark *):hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-accent-600:where(.dark,.dark *):hover{background-color:var(--color-accent-600)}.dark\:hover\:bg-accent-900\/60:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-accent-900)60%,transparent)}.dark\:hover\:bg-gray-600:where(.dark,.dark *):hover{background-color:var(--color-gray-600)}.dark\:hover\:bg-gray-700:where(.dark,.dark *):hover{background-color:var(--color-gray-700)}.dark\:hover\:bg-gray-800:where(.dark,.dark *):hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-gray-800\/75:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:where(.dark,.dark *):hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-red-400\/20:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}.dark\:hover\:bg-red-500:where(.dark,.dark *):hover{background-color:var(--color-red-500)}.dark\:hover\:bg-white:where(.dark,.dark *):hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.dark\:hover\:bg-white\/10:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:hover\:bg-white\/15:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)15%,transparent)}.dark\:hover\:bg-white\/20:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.dark\:hover\:bg-white\/\[7\%\]:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-600:where(.dark,.dark *):hover{background-color:var(--color-zinc-600)}.dark\:hover\:bg-zinc-600\/75:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-zinc-600)75%,transparent)}.dark\:hover\:bg-zinc-700:where(.dark,.dark *):hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:where(.dark,.dark *):hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:bg-\[url\(\'data\:image\/svg\+xml\,\%3Csvg\%20xmlns\=\%22http\:\/\/www\.w3\.org\/2000\/svg\%22\%20viewBox\=\%220\%200\%2016\%2016\%22\%20fill\=\%22\%23ffffff\%22\%20class\=\%22size-4\%22\%3E\%3Cpath\%20fill-rule\=\%22evenodd\%22\%20d\=\%22M4\.22\%206\.22a\.75\.75\%200\%200\%201\%201\.06\%200L8\%208\.94l2\.72-2\.72a\.75\.75\%200\%201\%201\%201\.06\%201\.06l-3\.25\%203\.25a\.75\.75\%200\%200\%201-1\.06\%200L4\.22\%207\.28a\.75\.75\%200\%200\%201\%200-1\.06Z\%22\%20clip-rule\=\%22evenodd\%22\/\%3E\%3C\/svg\%3E\'\)\]:where(.dark,.dark *):hover{background-image:url(data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2016%2016%22%20fill=%22%23ffffff%22%20class=%22size-4%22%3E%3Cpath%20fill-rule=%22evenodd%22%20d=%22M4.22%206.22a.75.75%200%200%201%201.06%200L8%208.94l2.72-2.72a.75.75%200%201%201%201.06%201.06l-3.25%203.25a.75.75%200%200%201-1.06%200L4.22%207.28a.75.75%200%200%201%200-1.06Z%22%20clip-rule=%22evenodd%22/%3E%3C/svg%3E)}.dark\:hover\:bg-\[length\:16px_16px\]:where(.dark,.dark *):hover{background-size:16px 16px}.dark\:hover\:text-accent-200:where(.dark,.dark *):hover{color:var(--color-accent-200)}.dark\:hover\:text-accent-300:where(.dark,.dark *):hover{color:var(--color-accent-300)}.dark\:hover\:text-gray-100:where(.dark,.dark *):hover{color:var(--color-gray-100)}.dark\:hover\:text-gray-200:where(.dark,.dark *):hover{color:var(--color-gray-200)}.dark\:hover\:text-gray-300:where(.dark,.dark *):hover{color:var(--color-gray-300)}.dark\:hover\:text-gray-400:where(.dark,.dark *):hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:where(.dark,.dark *):hover{color:var(--color-gray-500)}.dark\:hover\:text-red-400:where(.dark,.dark *):hover{color:var(--color-red-400)}.dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--color-white)}.dark\:hover\:text-white\!:where(.dark,.dark *):hover{color:var(--color-white)!important}.dark\:hover\:text-white\/70:where(.dark,.dark *):hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:where(.dark,.dark *):hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:where(.dark,.dark *):hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-200:where(.dark,.dark *):hover{color:var(--color-zinc-200)}.dark\:hover\:text-zinc-300:where(.dark,.dark *):hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-600:where(.dark,.dark *):hover{--tw-ring-color:var(--color-zinc-600)}.dark\:hover\:ring-zinc-700:where(.dark,.dark *):hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:where(.dark,.dark *):hover::file-selector-button{background-color:var(--color-zinc-600)}.dark\:hover\:after\:bg-white\/\[4\%\]:where(.dark,.dark *):hover:after{content:var(--tw-content);background-color:color-mix(in oklab,var(--color-white)4%,transparent)}}.dark\:focus\:border-blue-700:where(.dark,.dark *):focus{border-color:var(--color-blue-700)}.dark\:focus\:border-blue-800:where(.dark,.dark *):focus{border-color:var(--color-blue-800)}.dark\:focus\:border-gray-600:where(.dark,.dark *):focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:where(.dark,.dark *):focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:where(.dark,.dark *):focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:where(.dark,.dark *):focus{border-color:var(--color-indigo-600)}.dark\:focus\:border-zinc-600:where(.dark,.dark *):focus{border-color:var(--color-zinc-600)}.dark\:focus\:bg-gray-700:where(.dark,.dark *):focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:where(.dark,.dark *):focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:where(.dark,.dark *):focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:where(.dark,.dark *):focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:where(.dark,.dark *):focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:where(.dark,.dark *):focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:where(.dark,.dark *):focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:where(.dark,.dark *):focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:where(.dark,.dark *):focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:where(.dark,.dark *):focus{color:var(--color-indigo-200)}.dark\:focus\:text-white:where(.dark,.dark *):focus{color:var(--color-white)}.dark\:focus\:ring-indigo-600:where(.dark,.dark *):focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:where(.dark,.dark *):focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:where(.dark,.dark *):focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:where(.dark,.dark *):active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:where(.dark,.dark *):active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:where(.dark,.dark *):active{color:var(--color-gray-300)}.dark\:disabled\:border-white\/5:where(.dark,.dark *):disabled{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}.dark\:disabled\:bg-white\/\[7\%\]:where(.dark,.dark *):disabled{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:disabled\:bg-white\/\[9\%\]:where(.dark,.dark *):disabled{background-color:color-mix(in oklab,var(--color-white)9%,transparent)}.dark\:disabled\:text-zinc-400:where(.dark,.dark *):disabled{color:var(--color-zinc-400)}.dark\:disabled\:placeholder-white\/40:where(.dark,.dark *):disabled::placeholder{color:color-mix(in oklab,var(--color-white)40%,transparent)}.dark\:disabled\:placeholder-zinc-500:where(.dark,.dark *):disabled::placeholder{color:var(--color-zinc-500)}.dark\:disabled\:opacity-75:where(.dark,.dark *):disabled{opacity:.75}.dark\:disabled\:shadow-none\!:where(.dark,.dark *):disabled{--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)!important}:where([data-checked]) .dark\:in-data-checked\:text-white:where(.dark,.dark *){color:var(--color-white)}:where([data-dragging]) .dark\:in-data-dragging\:border-white\/20:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)20%,transparent)}:where([data-dragging]) .dark\:in-data-dragging\:bg-white\/15:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white)15%,transparent)}:where([data-dragging]) .dark\:in-data-dragging\:text-white:where(.dark,.dark *),:where([data-flux-menu]) .in-data-flux-menu\:dark\:text-white:where(.dark,.dark *){color:var(--color-white)}:where([data-flux-menu]) .in-data-flux-menu\:dark\:text-white\/80:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)80%,transparent)}@media (hover:hover){:where([data-flux-menu]) .dark\:in-data-flux-menu\:hover\:bg-zinc-600:where(.dark,.dark *):hover{background-color:var(--color-zinc-600)}}:where([data-flux-sidebar-group-dropdown]) .dark\:in-data-flux-sidebar-group-dropdown\:bg-transparent\!:where(.dark,.dark *){background-color:#0000!important}:where([data-flux-sidebar-group-dropdown]) .dark\:in-data-flux-sidebar-group-dropdown\:text-white\!:where(.dark,.dark *){color:var(--color-white)!important}:where([data-flux-sidebar-group-dropdown]) .dark\:in-data-flux-sidebar-group-dropdown\:text-white\/80\!:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)80%,transparent)!important}@media (hover:hover){:where([data-flux-sidebar-group-dropdown]) .dark\:in-data-flux-sidebar-group-dropdown\:hover\:bg-zinc-600\!:where(.dark,.dark *):hover{background-color:var(--color-zinc-600)!important}}.dark\:has-\[option\.placeholder\:checked\]\:text-zinc-400:where(.dark,.dark *):has(:is(option.placeholder:checked)){color:var(--color-zinc-400)}.dark\:data-active\:bg-red-400\/20:where(.dark,.dark *)[data-active]{background-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}.dark\:data-active\:bg-zinc-600:where(.dark,.dark *)[data-active]{background-color:var(--color-zinc-600)}.dark\:data-active\:text-red-400:where(.dark,.dark *)[data-active]{color:var(--color-red-400)}.dark\:data-active\:text-white:where(.dark,.dark *)[data-active]{color:var(--color-white)}.dark\:data-checked\:border-white:where(.dark,.dark *)[data-checked]{border-color:var(--color-white)}.dark\:data-checked\:bg-white:where(.dark,.dark *)[data-checked]{background-color:var(--color-white)}.dark\:data-checked\:bg-white\/15:where(.dark,.dark *)[data-checked]{background-color:color-mix(in oklab,var(--color-white)15%,transparent)}.dark\:data-checked\:bg-white\/20:where(.dark,.dark *)[data-checked]{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.dark\:data-checked\:text-white:where(.dark,.dark *)[data-checked]{color:var(--color-white)}.dark\:data-checked\:text-zinc-800:where(.dark,.dark *)[data-checked]{color:var(--color-zinc-800)}.dark\:data-current\:border-transparent:where(.dark,.dark *)[data-current]{border-color:#0000}.dark\:data-current\:border-white\/10:where(.dark,.dark *)[data-current]{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:data-current\:bg-white\/10:where(.dark,.dark *)[data-current]{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:data-current\:bg-white\/\[7\%\]:where(.dark,.dark *)[data-current]{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:data-current\:text-zinc-100:where(.dark,.dark *)[data-current]{color:var(--color-zinc-100)}.dark\:data-current\:after\:bg-white:where(.dark,.dark *)[data-current]:after{content:var(--tw-content);background-color:var(--color-white)}:is(.dark\:\*\*\:data-flux-menu-item-icon\:text-white\/60:where(.dark,.dark *) *)[data-flux-menu-item-icon]{color:color-mix(in oklab,var(--color-white)60%,transparent)}.dark\:data-in-range\:bg-white\/10:where(.dark,.dark *)[data-in-range]{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:data-invalid\:border-red-500:where(.dark,.dark *)[data-invalid]{border-color:var(--color-red-500)}.dark\:data-invalid\:text-red-400:where(.dark,.dark *)[data-invalid]{color:var(--color-red-400)}.dark\:disabled\:data-invalid\:border-red-500:where(.dark,.dark *):disabled[data-invalid]{border-color:var(--color-red-500)}.dark\:data-match\:text-white:where(.dark,.dark *)[data-match]{color:var(--color-white)}:is(.dark\:\*\*\:data-navmenu-icon\:text-white\/60:where(.dark,.dark *) *)[data-navmenu-icon]{color:color-mix(in oklab,var(--color-white)60%,transparent)}.dark\:data-open\:text-white:where(.dark,.dark *)[data-open]{color:var(--color-white)}.dark\:data-selected\:border-white:where(.dark,.dark *)[data-selected]{border-color:var(--color-white)}.dark\:data-selected\:bg-white:where(.dark,.dark *)[data-selected]{background-color:var(--color-white)}.dark\:data-selected\:bg-white\/20:where(.dark,.dark *)[data-selected]{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.dark\:data-selected\:text-white:where(.dark,.dark *)[data-selected]{color:var(--color-white)}.dark\:data-selected\:text-zinc-800:where(.dark,.dark *)[data-selected]{color:var(--color-zinc-800)}:is(.dark\:\*\*\:data-\[slot\=content\]\:text-zinc-300:where(.dark,.dark *) *)[data-slot=content]{color:var(--color-zinc-300)}.dark\:rtl\:-translate-x-\[2px\]:where(.dark,.dark *):where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x: -2px ;translate:var(--tw-translate-x)var(--tw-translate-y)}.dark\:rtl\:group-data-checked\:-translate-x-\[15px\]:where(.dark,.dark *):where(:dir(rtl),[dir=rtl],[dir=rtl] *):is(:where(.group)[data-checked] *){--tw-translate-x: -15px ;translate:var(--tw-translate-x)var(--tw-translate-y)}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_\[data-flux-button\]\]\:rounded-lg [data-flux-button]{border-radius:var(--radius-lg)}.\[\&_\[data-flux-input-group\]\]\:w-auto [data-flux-input-group]{width:auto}.\[\&_\[data-slot\=heading\]\]\:text-\(--callout-heading\) [data-slot=heading]{color:var(--callout-heading)}.\[\&_\[data-slot\=text\]\]\:text-\(--callout-text\) [data-slot=text]{color:var(--callout-text)}.\[\&_\[popover\]\]\:whitespace-normal [popover]{white-space:normal}.\[\&_button\]\:text-amber-700\! button{color:var(--color-amber-700)!important}.\[\&_button\]\:text-blue-800\! button{color:var(--color-blue-800)!important}.\[\&_button\]\:text-cyan-800\! button{color:var(--color-cyan-800)!important}.\[\&_button\]\:text-emerald-800\! button{color:var(--color-emerald-800)!important}.\[\&_button\]\:text-fuchsia-700\! button{color:var(--color-fuchsia-700)!important}.\[\&_button\]\:text-green-800\! button{color:var(--color-green-800)!important}.\[\&_button\]\:text-indigo-700\! button{color:var(--color-indigo-700)!important}.\[\&_button\]\:text-lime-800\! button{color:var(--color-lime-800)!important}.\[\&_button\]\:text-orange-700\! button{color:var(--color-orange-700)!important}.\[\&_button\]\:text-pink-700\! button{color:var(--color-pink-700)!important}.\[\&_button\]\:text-purple-700\! button{color:var(--color-purple-700)!important}.\[\&_button\]\:text-red-700\! button{color:var(--color-red-700)!important}.\[\&_button\]\:text-rose-700\! button{color:var(--color-rose-700)!important}.\[\&_button\]\:text-sky-800\! button{color:var(--color-sky-800)!important}.\[\&_button\]\:text-teal-800\! button{color:var(--color-teal-800)!important}.\[\&_button\]\:text-violet-700\! button{color:var(--color-violet-700)!important}.\[\&_button\]\:text-yellow-800\! button{color:var(--color-yellow-800)!important}.\[\&_button\]\:text-zinc-700\! button{color:var(--color-zinc-700)!important}.dark\:\[\&_button\]\:text-amber-200\!:where(.dark,.dark *) button{color:var(--color-amber-200)!important}.dark\:\[\&_button\]\:text-blue-200\!:where(.dark,.dark *) button{color:var(--color-blue-200)!important}.dark\:\[\&_button\]\:text-cyan-200\!:where(.dark,.dark *) button{color:var(--color-cyan-200)!important}.dark\:\[\&_button\]\:text-emerald-200\!:where(.dark,.dark *) button{color:var(--color-emerald-200)!important}.dark\:\[\&_button\]\:text-fuchsia-200\!:where(.dark,.dark *) button{color:var(--color-fuchsia-200)!important}.dark\:\[\&_button\]\:text-green-200\!:where(.dark,.dark *) button{color:var(--color-green-200)!important}.dark\:\[\&_button\]\:text-indigo-200\!:where(.dark,.dark *) button{color:var(--color-indigo-200)!important}.dark\:\[\&_button\]\:text-lime-200\!:where(.dark,.dark *) button{color:var(--color-lime-200)!important}.dark\:\[\&_button\]\:text-orange-200\!:where(.dark,.dark *) button{color:var(--color-orange-200)!important}.dark\:\[\&_button\]\:text-pink-200\!:where(.dark,.dark *) button{color:var(--color-pink-200)!important}.dark\:\[\&_button\]\:text-purple-200\!:where(.dark,.dark *) button{color:var(--color-purple-200)!important}.dark\:\[\&_button\]\:text-red-200\!:where(.dark,.dark *) button{color:var(--color-red-200)!important}.dark\:\[\&_button\]\:text-rose-200\!:where(.dark,.dark *) button{color:var(--color-rose-200)!important}.dark\:\[\&_button\]\:text-sky-200\!:where(.dark,.dark *) button{color:var(--color-sky-200)!important}.dark\:\[\&_button\]\:text-teal-200\!:where(.dark,.dark *) button{color:var(--color-teal-200)!important}.dark\:\[\&_button\]\:text-violet-200\!:where(.dark,.dark *) button{color:var(--color-violet-200)!important}.dark\:\[\&_button\]\:text-yellow-200\!:where(.dark,.dark *) button{color:var(--color-yellow-200)!important}.dark\:\[\&_button\]\:text-zinc-200\!:where(.dark,.dark *) button{color:var(--color-zinc-200)!important}.\[\&_dialog\]\:whitespace-normal dialog{white-space:normal}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\+\&\>\[data-flux-menu-separator-top\]\]\:hidden+.\[\&\+\&\>\[data-flux-menu-separator-top\]\]\:hidden>[data-flux-menu-separator-top],.\[\&\:first-child\>\[data-flux-menu-separator-top\]\]\:hidden:first-child>[data-flux-menu-separator-top]{display:none}.\[\&\:first-of-type_td\[data-in-range\]\:not\(\[data-selected\]\)\:first-child\]\:rounded-s-none:first-of-type td[data-in-range]:not([data-selected]):first-child{border-start-start-radius:0;border-end-start-radius:0}.\[\&\:has\(\+\[data-flux-subheading\]\)\]\:mb-2:has(+[data-flux-subheading]){margin-bottom:calc(var(--spacing)*2)}.\[\&\:has\(\+\[data-slot\=image\]\)\]\:hidden:has(+[data-slot=image]){display:none}.\[\&\:has\(\+input\:focus\)\]\:text-zinc-800:has(+input:focus){color:var(--color-zinc-800)}.dark\:\[\&\:has\(\+input\:focus\)\]\:text-zinc-400:where(.dark,.dark *):has(+input:focus){color:var(--color-zinc-400)}.\[\&\:has\(\>\:not\(span\)\:first-child\)\]\:ps-3:has(>:not(span):first-child){padding-inline-start:calc(var(--spacing)*3)}.\[\&\:has\(\>\:not\(span\)\:last-child\)\]\:pe-3:has(>:not(span):last-child){padding-inline-end:calc(var(--spacing)*3)}.\[\&\:has\(\>\[data-flux-checkbox-group\]\[disabled\]\)\>\[data-flux-label\]\]\:opacity-50:has(>[data-flux-checkbox-group][disabled])>[data-flux-label],.\[\&\:has\(\>\[data-flux-radio-group\]\[disabled\]\)\>\[data-flux-label\]\]\:opacity-50:has(>[data-flux-radio-group][disabled])>[data-flux-label]{opacity:.5}.\[\&\:has\(\[aria-selected\]\)\]\:bg-accent:has([aria-selected]){background-color:var(--color-accent)}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[aria-selected\]\.day-outside\)\]\:bg-accent\/50:has([aria-selected].day-outside){background-color:color-mix(in oklab,var(--color-accent)50%,transparent)}.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[data-flux-label-trailing\]\)\]\:flex:has([data-flux-label-trailing]){display:flex}.\[\&\:has\(\[data-slot\=image\]\)\]\:p-\[calc\(0\.5rem-1px\)\]:has([data-slot=image]){padding:calc(.5rem - 1px)}.\[\&\:has\(\[disabled\]\)\]\:shadow-none:has([disabled]){--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)}.dark\:\[\&\:has\(\[disabled\]\)\]\:bg-white\/\[7\%\]:where(.dark,.dark *):has([disabled]){background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\:hover_\[data-flux-checkbox-indicator\]\]\:border-\[var\(--haze-border\)\]:hover [data-flux-checkbox-indicator]{border-color:var(--haze-border)}.dark\:\[\&\:hover_\[data-flux-checkbox-indicator\]\]\:border-white\/10:where(.dark,.dark *):hover [data-flux-checkbox-indicator]{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.\[\&\:hover_\[data-flux-radio-indicator\]\]\:border-\[var\(--haze-border\)\]:hover [data-flux-radio-indicator]{border-color:var(--haze-border)}.dark\:\[\&\:hover_\[data-flux-radio-indicator\]\]\:border-white\/10:where(.dark,.dark *):hover [data-flux-radio-indicator]{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.\[\&\:hover_\[data-navmenu-icon\]\]\:text-current:hover [data-navmenu-icon]{color:currentColor}.\[\&\:hover\>\*\]\:text-zinc-800:hover>*{color:var(--color-zinc-800)}.dark\:\[\&\:hover\>\*\]\:text-white:where(.dark,.dark *):hover>*{color:var(--color-white)}@media (hover:hover){.\[\&\:is\(button\)\]\:hover\:bg-amber-400\/40:is(button):hover{background-color:color-mix(in oklab,var(--color-amber-400)40%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-amber-600:is(button):hover{background-color:var(--color-amber-600)}.\[\&\:is\(button\)\]\:hover\:bg-blue-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-blue-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-blue-600:is(button):hover{background-color:var(--color-blue-600)}.\[\&\:is\(button\)\]\:hover\:bg-cyan-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-cyan-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-cyan-600:is(button):hover{background-color:var(--color-cyan-600)}.\[\&\:is\(button\)\]\:hover\:bg-emerald-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-emerald-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-emerald-600:is(button):hover{background-color:var(--color-emerald-600)}.\[\&\:is\(button\)\]\:hover\:bg-fuchsia-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-fuchsia-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-fuchsia-600:is(button):hover{background-color:var(--color-fuchsia-600)}.\[\&\:is\(button\)\]\:hover\:bg-green-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-green-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-green-600:is(button):hover{background-color:var(--color-green-600)}.\[\&\:is\(button\)\]\:hover\:bg-indigo-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-indigo-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-indigo-600:is(button):hover{background-color:var(--color-indigo-600)}.\[\&\:is\(button\)\]\:hover\:bg-lime-400\/35:is(button):hover{background-color:color-mix(in oklab,var(--color-lime-400)35%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-lime-600:is(button):hover{background-color:var(--color-lime-600)}.\[\&\:is\(button\)\]\:hover\:bg-orange-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-orange-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-orange-600:is(button):hover{background-color:var(--color-orange-600)}.\[\&\:is\(button\)\]\:hover\:bg-pink-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-pink-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-pink-600:is(button):hover{background-color:var(--color-pink-600)}.\[\&\:is\(button\)\]\:hover\:bg-purple-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-purple-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-purple-600:is(button):hover{background-color:var(--color-purple-600)}.\[\&\:is\(button\)\]\:hover\:bg-red-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-red-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-red-600:is(button):hover{background-color:var(--color-red-600)}.\[\&\:is\(button\)\]\:hover\:bg-rose-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-rose-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-rose-600:is(button):hover{background-color:var(--color-rose-600)}.\[\&\:is\(button\)\]\:hover\:bg-sky-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-sky-600:is(button):hover{background-color:var(--color-sky-600)}.\[\&\:is\(button\)\]\:hover\:bg-teal-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-teal-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-teal-600:is(button):hover{background-color:var(--color-teal-600)}.\[\&\:is\(button\)\]\:hover\:bg-violet-400\/30:is(button):hover{background-color:color-mix(in oklab,var(--color-violet-400)30%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-violet-600:is(button):hover{background-color:var(--color-violet-600)}.\[\&\:is\(button\)\]\:hover\:bg-yellow-400\/40:is(button):hover{background-color:color-mix(in oklab,var(--color-yellow-400)40%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-yellow-600:is(button):hover{background-color:var(--color-yellow-600)}.\[\&\:is\(button\)\]\:hover\:bg-zinc-400\/25:is(button):hover{background-color:color-mix(in oklab,var(--color-zinc-400)25%,transparent)}.\[\&\:is\(button\)\]\:hover\:bg-zinc-700:is(button):hover{background-color:var(--color-zinc-700)}.dark\:\[button\]\:hover\:bg-amber-400:where(.dark,.dark *):is(button):hover{background-color:var(--color-amber-400)}.dark\:\[button\]\:hover\:bg-amber-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-amber-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-blue-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-blue-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-blue-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-blue-500)}.dark\:\[button\]\:hover\:bg-cyan-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-cyan-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-cyan-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-cyan-500)}.dark\:\[button\]\:hover\:bg-emerald-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-emerald-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-emerald-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-emerald-500)}.dark\:\[button\]\:hover\:bg-fuchsia-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-fuchsia-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-fuchsia-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-fuchsia-500)}.dark\:\[button\]\:hover\:bg-green-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-green-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-green-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-green-500)}.dark\:\[button\]\:hover\:bg-indigo-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-indigo-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-indigo-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-indigo-500)}.dark\:\[button\]\:hover\:bg-lime-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-lime-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-lime-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-lime-500)}.dark\:\[button\]\:hover\:bg-orange-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-orange-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-orange-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-orange-500)}.dark\:\[button\]\:hover\:bg-pink-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-pink-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-pink-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-pink-500)}.dark\:\[button\]\:hover\:bg-purple-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-purple-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-purple-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-purple-500)}.dark\:\[button\]\:hover\:bg-red-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-red-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-red-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-red-500)}.dark\:\[button\]\:hover\:bg-rose-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-rose-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-rose-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-rose-500)}.dark\:\[button\]\:hover\:bg-sky-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-sky-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-sky-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-sky-500)}.dark\:\[button\]\:hover\:bg-teal-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-teal-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-teal-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-teal-500)}.dark\:\[button\]\:hover\:bg-violet-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-violet-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-violet-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-violet-500)}.dark\:\[button\]\:hover\:bg-yellow-300:where(.dark,.dark *):is(button):hover{background-color:var(--color-yellow-300)}.dark\:\[button\]\:hover\:bg-yellow-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-yellow-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-zinc-400\/50:where(.dark,.dark *):is(button):hover{background-color:color-mix(in oklab,var(--color-zinc-400)50%,transparent)}.dark\:\[button\]\:hover\:bg-zinc-500:where(.dark,.dark *):is(button):hover{background-color:var(--color-zinc-500)}}.\[\&\:last-child\>\[data-flux-menu-separator-bottom\]\]\:hidden:last-child>[data-flux-menu-separator-bottom]{display:none}.\[\&\:last-of-type_td\[data-in-range\]\:not\(\[data-selected\]\)\:last-child\]\:rounded-e-none:last-of-type td[data-in-range]:not([data-selected]):last-child{border-start-end-radius:0;border-end-end-radius:0}.\[\&\:not\(\:empty\)\]\:pb-2:not(:empty){padding-bottom:calc(var(--spacing)*2)}.\[\&\:not\(\:empty\)\+div\]\:font-normal:not(:empty)+div{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.\[\&\:not\(\:empty\)\+div\]\:text-zinc-500:not(:empty)+div{color:var(--color-zinc-500)}.\[\&\:not\(\:empty\)\+div\]\:dark\:text-zinc-300:not(:empty)+div:where(.dark,.dark *){color:var(--color-zinc-300)}.\[\&\:not\(\:has\(\>_\*\)\)\]\:hidden:not(:has(>*)){display:none}.\[\&\:not\(\:has\(\[data-flux-field\]\)\)\:has\(\[data-flux-control\]\[disabled\]\)\>\[data-flux-label\]\]\:opacity-50:not(:has([data-flux-field])):has([data-flux-control][disabled])>[data-flux-label]{opacity:.5}.\[\&\:not\(\:has\(ui-empty\[data-hidden\]\)\)\]\:hidden:not(:has(ui-empty[data-hidden])),.\[\&\:not\(\[data-selected\]\)\]\:hidden:not([data-selected]){display:none}.\[\&\:popover-open\]\:flex:popover-open{display:flex}.\[\&\:popover-open\]\:flex-col:popover-open{flex-direction:column}.\[\&\>\*\:first-child\:not\(\:last-child\)\>\[data-flux-group-target\]\]\:rounded-e-none>:first-child:not(:last-child)>[data-flux-group-target],.\[\&\>\*\:first-child\:not\(\:last-child\)\>\[data-flux-input\]\>\[data-flux-group-target\]\]\:rounded-e-none>:first-child:not(:last-child)>[data-flux-input]>[data-flux-group-target]{border-start-end-radius:0;border-end-end-radius:0}.\[\&\>\*\:has\(\+\[data-flux-input-group-suffix\]\)\>\[data-flux-group-target\]\:not\(\[data-invalid\]\)\]\:border-e-0>:has(+[data-flux-input-group-suffix])>[data-flux-group-target]:not([data-invalid]){border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.\[\&\>\*\:last-child\:not\(\:first-child\)\>\[data-flux-group-target\]\]\:rounded-s-none>:last-child:not(:first-child)>[data-flux-group-target]{border-start-start-radius:0;border-end-start-radius:0}.\[\&\>\*\:last-child\:not\(\:first-child\)\>\[data-flux-group-target\]\:not\(\[data-invalid\]\)\]\:border-s-0>:last-child:not(:first-child)>[data-flux-group-target]:not([data-invalid]){border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.\[\&\>\*\:last-child\:not\(\:first-child\)\>\[data-flux-input\]\>\[data-flux-group-target\]\]\:rounded-s-none>:last-child:not(:first-child)>[data-flux-input]>[data-flux-group-target]{border-start-start-radius:0;border-end-start-radius:0}.\[\&\>\*\:not\(\:first-child\)\:not\(\:last-child\)\:not\(\:only-child\)\>\[data-flux-group-target\]\]\:rounded-none>:not(:first-child):not(:last-child):not(:only-child)>[data-flux-group-target],.\[\&\>\*\:not\(\:first-child\)\:not\(\:last-child\)\:not\(\:only-child\)\>\[data-flux-input\]\>\[data-flux-group-target\]\]\:rounded-none>:not(:first-child):not(:last-child):not(:only-child)>[data-flux-input]>[data-flux-group-target]{border-radius:0}.\[\&\>\*\:not\(\:first-child\)\:not\(\:last-child\)\>\[data-flux-group-target\]\:not\(\[data-invalid\]\)\]\:border-s-0>:not(:first-child):not(:last-child)>[data-flux-group-target]:not([data-invalid]){border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.\[\&\>\*\:not\(\[data-flux-label\]\)\+\[data-flux-description\]\]\:mt-3>:not([data-flux-label])+[data-flux-description]{margin-top:calc(var(--spacing)*3)}.\[\&\>\[data-flux-control\]\~\[data-flux-description\]\]\:col-start-2>[data-flux-control]~[data-flux-description]{grid-column-start:2}.\[\&\>\[data-flux-control\]\~\[data-flux-description\]\]\:row-start-2>[data-flux-control]~[data-flux-description]{grid-row-start:2}.\[\&\>\[data-flux-control\]\~\[data-flux-error\]\]\:col-span-2>[data-flux-control]~[data-flux-error]{grid-column:span 2/span 2}.\[\&\>\[data-flux-control\]\~\[data-flux-error\]\]\:mt-1>[data-flux-control]~[data-flux-error]{margin-top:calc(var(--spacing)*1)}.\[\&\>\[data-flux-field\]\:has\(\>\[data-flux-description\]\)\]\:mb-4>[data-flux-field]:has(>[data-flux-description]){margin-bottom:calc(var(--spacing)*4)}.\[\&\>\[data-flux-field\]\:last-child\]\:mb-0\!>[data-flux-field]:last-child{margin-bottom:calc(var(--spacing)*0)!important}.\[\&\>\[data-flux-group-target\]\:first-child\:not\(\:last-child\)\]\:rounded-e-none>[data-flux-group-target]:first-child:not(:last-child){border-start-end-radius:0;border-end-end-radius:0}.\[\&\>\[data-flux-group-target\]\:has\(\+\[data-flux-input-group-suffix\]\)\]\:border-e-0>[data-flux-group-target]:has(+[data-flux-input-group-suffix]){border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.\[\&\>\[data-flux-group-target\]\:last-child\:not\(\:first-child\)\]\:rounded-s-none>[data-flux-group-target]:last-child:not(:first-child){border-start-start-radius:0;border-end-start-radius:0}.\[\&\>\[data-flux-group-target\]\:last-child\:not\(\:first-child\)\]\:border-s-0>[data-flux-group-target]:last-child:not(:first-child){border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.\[\&\>\[data-flux-group-target\]\:not\(\:first-child\)\:not\(\:last-child\)\]\:rounded-none>[data-flux-group-target]:not(:first-child):not(:last-child){border-radius:0}.\[\&\>\[data-flux-group-target\]\:not\(\:first-child\)\:not\(\:last-child\)\]\:border-s-0>[data-flux-group-target]:not(:first-child):not(:last-child){border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.\[\&\>\[data-flux-input\]\:has\(\+\[data-flux-input-group-suffix\]\)\>\[data-flux-group-target\]\:not\(\[data-invalid\]\)\]\:border-e-0>[data-flux-input]:has(+[data-flux-input-group-suffix])>[data-flux-group-target]:not([data-invalid]){border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}.\[\&\>\[data-flux-input\]\:last-child\:not\(\:first-child\)\>\[data-flux-group-target\]\:not\(\[data-invalid\]\)\]\:border-s-0>[data-flux-input]:last-child:not(:first-child)>[data-flux-group-target]:not([data-invalid]),.\[\&\>\[data-flux-input\]\:not\(\:first-child\)\:not\(\:last-child\)\>\[data-flux-group-target\]\:not\(\[data-invalid\]\)\]\:border-s-0>[data-flux-input]:not(:first-child):not(:last-child)>[data-flux-group-target]:not([data-invalid]){border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.\[\&\>\[data-flux-label\]\+\[data-flux-description\]\]\:mt-0>[data-flux-label]+[data-flux-description]{margin-top:calc(var(--spacing)*0)}.\[\&\>\[data-flux-label\]\+\[data-flux-description\]\]\:mb-3>[data-flux-label]+[data-flux-description]{margin-bottom:calc(var(--spacing)*3)}.\[\&\>\[data-flux-label\]\:has\(\+\[data-flux-description\]\)\]\:mb-2>[data-flux-label]:has(+[data-flux-description]){margin-bottom:calc(var(--spacing)*2)}.\[\&\>\[data-flux-label\]\~\[data-flux-control\]\]\:col-start-2>[data-flux-label]~[data-flux-control]{grid-column-start:2}.\[\&\>\[data-flux-label\]\~\[data-flux-control\]\]\:row-start-1>[data-flux-label]~[data-flux-control]{grid-row-start:1}.\[\&\>\[data-flux-legend\]\]\:mb-4>[data-flux-legend],.\[\&\>\[data-flux-legend\]\+\[data-flux-description\]\]\:mb-4>[data-flux-legend]+[data-flux-description]{margin-bottom:calc(var(--spacing)*4)}.\[\&\>\[data-flux-legend\]\:has\(\+\[data-flux-description\]\)\]\:mb-2>[data-flux-legend]:has(+[data-flux-description]){margin-bottom:calc(var(--spacing)*2)}@container (width>=28rem){.\@md\:\[\&\>\[data-slot\=\"content\"\]\:has\(\[data-slot\=\"heading\"\]\)\:has\(\[data-slot\=\"text\"\]\)\+\[data-slot\=\"actions\"\]\]\:p-2>[data-slot=content]:has([data-slot=heading]):has([data-slot=text])+[data-slot=actions]{padding:calc(var(--spacing)*2)}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.dark\:\[\&\>option\]\:bg-zinc-700:where(.dark,.dark *)>option{background-color:var(--color-zinc-700)}.dark\:\[\&\>option\]\:text-white:where(.dark,.dark *)>option{color:var(--color-white)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:ms-6>svg{margin-inline-start:calc(var(--spacing)*6)}.\[\&\>svg\]\:me-2>svg{margin-inline-end:calc(var(--spacing)*2)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-zinc-400>svg{color:var(--color-zinc-400)}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}:where([data-flux-sidebar-on-desktop]) .\[\&\[collapsible\=\"mobile\"\]\]\:in-data-flux-sidebar-on-desktop\:hidden[collapsible=mobile]{display:none}.\[\&\[data-active\]_\[data-flux-menu-item-icon\]\]\:text-current[data-active] [data-flux-menu-item-icon]{color:currentColor}.\[\&\[data-active\]\>svg\]\:text-zinc-800[data-active]>svg{color:var(--color-zinc-800)}.dark\:\[\&\[data-active\]\>svg\]\:text-white:where(.dark,.dark *)[data-active]>svg{color:var(--color-white)}.\[\&\[data-flux-loading\]\>\:not\(\[data-flux-loading-indicator\]\)\]\:opacity-0[data-flux-loading]>:not([data-flux-loading-indicator]){opacity:0}.\[\&\[data-flux-loading\]\>\[data-flux-loading-indicator\]\]\:opacity-100[data-flux-loading]>[data-flux-loading-indicator]{opacity:1}.\[\&\[data-loading\]\>\:not\(\[data-flux-loading-indicator\]\)\]\:opacity-0[data-loading]>:not([data-flux-loading-indicator]){opacity:0}.\[\&\[data-loading\]\>\[data-flux-loading-indicator\]\]\:opacity-100[data-loading]>[data-flux-loading-indicator]{opacity:1}.\[\&\[data-outside\]\:has\(\+\[data-in-range\]\)\]\:bg-linear-to-l[data-outside]:has(+[data-in-range]){--tw-gradient-position:to left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.rtl\:\[\&\[data-outside\]\:has\(\+\[data-in-range\]\)\]\:bg-linear-to-r:where(:dir(rtl),[dir=rtl],[dir=rtl] *)[data-outside]:has(+[data-in-range]){--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.\[\&\[data-outside\]\:has\(\+\[data-in-range\]\[data-selected\]\)\]\:bg-none\![data-outside]:has(+[data-in-range][data-selected]){background-image:none!important}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-selected\]\+\[data-selected\]\]\:rounded-s-none[data-selected]+[data-selected]{border-start-start-radius:0;border-end-start-radius:0}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}.\[\&\[disabled\]\]\:pointer-events-none[disabled]{pointer-events:none}.\[\&\[disabled\]\]\:cursor-default[disabled]{cursor:default}.\[\&\[disabled\]\]\:text-zinc-400[disabled]{color:var(--color-zinc-400)}.\[\&\[disabled\]\]\:opacity-50[disabled]{opacity:.5}.\[\&\[disabled\]\]\:shadow-none[disabled]{--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)}.dark\:\[\&\[disabled\]\]\:border-white\/10:where(.dark,.dark *)[disabled]{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:\[\&\[disabled\]\]\:bg-white\/\[7\%\]:where(.dark,.dark *)[disabled]{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:\[\&\[disabled\]\]\:text-zinc-400:where(.dark,.dark *)[disabled]{color:var(--color-zinc-400)}.dark\:\[\&\[disabled\]\]\:opacity-75:where(.dark,.dark *)[disabled]{opacity:.75}.\[\&\[disabled\]_\&\]\:text-zinc-400[disabled] .\[\&\[disabled\]_\&\]\:text-zinc-400{color:var(--color-zinc-400)}.\[\&\[disabled\]_\[data-flux-label\]\]\:opacity-50[disabled] [data-flux-label],.\[\&\[disabled\]_\[data-flux-legend\]\]\:opacity-50[disabled] [data-flux-legend]{opacity:.5}.\[\&\[disabled\]_\[data-slot\=content\]\]\:text-zinc-500[disabled] [data-slot=content]{color:var(--color-zinc-500)}.dark\:\[\&\[disabled\]_\[data-slot\=content\]\]\:text-zinc-400:where(.dark,.dark *)[disabled] [data-slot=content]{color:var(--color-zinc-400)}.\[\&\[disabled\]\>\:not\(\[data-flux-loading-indicator\]\)\]\:opacity-0[disabled]>:not([data-flux-loading-indicator]){opacity:0}.\[\&\[disabled\]\>\[data-flux-loading-indicator\]\]\:opacity-100[disabled]>[data-flux-loading-indicator]{opacity:1}:is([data-flux-button-group]>.\[\:is\(\[data-flux-button-group\]\>\&\:first-child\,_\[data-flux-button-group\]_\:first-child\>\&\)\]\:border-s-\[1px\]:first-child,[data-flux-button-group] :first-child>.\[\:is\(\[data-flux-button-group\]\>\&\:first-child\,_\[data-flux-button-group\]_\:first-child\>\&\)\]\:border-s-\[1px\]){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}:is([data-flux-button-group]>.\[\:is\(\[data-flux-button-group\]\>\&\:last-child\,_\[data-flux-button-group\]_\:last-child\>\&\)\]\:border-e-0:last-child,[data-flux-button-group] :last-child>.\[\:is\(\[data-flux-button-group\]\>\&\:last-child\,_\[data-flux-button-group\]_\:last-child\>\&\)\]\:border-e-0){border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}:is([data-flux-button-group]>.\[\:is\(\[data-flux-button-group\]\>\&\:last-child\,_\[data-flux-button-group\]_\:last-child\>\&\)\]\:border-e-\[1px\]:last-child,[data-flux-button-group] :last-child>.\[\:is\(\[data-flux-button-group\]\>\&\:last-child\,_\[data-flux-button-group\]_\:last-child\>\&\)\]\:border-e-\[1px\]){border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}:is([data-flux-button-group]>.dark\:\[\:is\(\[data-flux-button-group\]\>\&\:last-child\,_\[data-flux-button-group\]_\:last-child\>\&\)\]\:border-s-\[1px\]:where(.dark,.dark *):last-child,[data-flux-button-group] :last-child>.dark\:\[\:is\(\[data-flux-button-group\]\>\&\:last-child\,_\[data-flux-button-group\]_\:last-child\>\&\)\]\:border-s-\[1px\]:where(.dark,.dark *)){border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}:is([data-flux-button-group]>.dark\:\[\:is\(\[data-flux-button-group\]\>\&\:last-child\,_\[data-flux-button-group\]_\:last-child\>\&\)\]\:border-e-0:where(.dark,.dark *):last-child,[data-flux-button-group] :last-child>.dark\:\[\:is\(\[data-flux-button-group\]\>\&\:last-child\,_\[data-flux-button-group\]_\:last-child\>\&\)\]\:border-e-0:where(.dark,.dark *)){border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}:is([data-flux-button-group]>.\[\:is\(\[data-flux-button-group\]\>\&\:not\(\:first-child\)\,_\[data-flux-button-group\]_\:not\(\:first-child\)\>\&\)\]\:border-s-\[color-mix\(in_srgb\,var\(--color-accent-foreground\)\,transparent_85\%\)\]:not(:first-child),[data-flux-button-group] :not(:first-child)>.\[\:is\(\[data-flux-button-group\]\>\&\:not\(\:first-child\)\,_\[data-flux-button-group\]_\:not\(\:first-child\)\>\&\)\]\:border-s-\[color-mix\(in_srgb\,var\(--color-accent-foreground\)\,transparent_85\%\)\]){border-inline-start-color:color-mix(in srgb,var(--color-accent-foreground),transparent 85%)}:where(.\[\:where\(\&\)\]\:relative){position:relative}:where(.\[\:where\(\&\)\]\:block){display:block}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}:where(.\[\:where\(\&\)\]\:size-8){width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}:where(.\[\:where\(\&\)\]\:size-10){width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}:where(.\[\:where\(\&\)\]\:size-12){width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}:where(.\[\:where\(\&\)\]\:size-16){width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}:where(.\[\:where\(\&\)\]\:h-1\.5){height:calc(var(--spacing)*1.5)}:where(.\[\:where\(\&\)\]\:h-4){height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:h-5){height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:h-6){height:calc(var(--spacing)*6)}:where(.\[\:where\(\&\)\]\:max-h-\[14rem\]){max-height:14rem}:where(.\[\:where\(\&\)\]\:max-h-\[20rem\]){max-height:20rem}:where(.\[\:where\(\&\)\]\:min-h-4){min-height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:w-64){width:calc(var(--spacing)*64)}:where(.\[\:where\(\&\)\]\:w-full){width:100%}:where(.\[\:where\(\&\)\]\:max-w-7xl){max-width:var(--container-7xl)}:where(.\[\:where\(\&\)\]\:max-w-xl){max-width:var(--container-xl)}:where(.\[\:where\(\&\)\]\:min-w-6){min-width:calc(var(--spacing)*6)}:where(.\[\:where\(\&\)\]\:min-w-48){min-width:calc(var(--spacing)*48)}:where(.\[\:where\(\&\)\]\:min-w-full){min-width:100%}:where(.\[\:where\(\&\)\]\:min-w-xs){min-width:var(--container-xs)}:where(.\[\:where\(\&\)\]\:rounded){border-radius:.25rem}:where(.\[\:where\(\&\)\]\:rounded-lg){border-radius:var(--radius-lg)}:where(.\[\:where\(\&\)\]\:rounded-md){border-radius:var(--radius-md)}:where(.\[\:where\(\&\)\]\:rounded-sm){border-radius:var(--radius-sm)}:where(.\[\:where\(\&\)\]\:rounded-xl){border-radius:var(--radius-xl)}:where(.\[\:where\(\&\)\]\:bg-white){background-color:var(--color-white)}:where(.\[\:where\(\&\)\]\:bg-zinc-100){background-color:var(--color-zinc-100)}:where(.\[\:where\(\&\)\]\:bg-zinc-200){background-color:var(--color-zinc-200)}:where(.\[\:where\(\&\)\]\:bg-zinc-400\/20){background-color:color-mix(in oklab,var(--color-zinc-400)20%,transparent)}:where(.\[\:where\(\&\)\]\:stroke-white){stroke:var(--color-white)}:where(.\[\:where\(\&\)\]\:p-4){padding:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:p-6){padding:calc(var(--spacing)*6)}:where(.\[\:where\(\&\)\]\:pt-8){padding-top:calc(var(--spacing)*8)}:where(.\[\:where\(\&\)\]\:text-base){font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}:where(.\[\:where\(\&\)\]\:text-sm){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}:where(.\[\:where\(\&\)\]\:text-xs){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}:where(.\[\:where\(\&\)\]\:font-medium){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}:where(.\[\:where\(\&\)\]\:text-zinc-300){color:var(--color-zinc-300)}:where(.\[\:where\(\&\)\]\:text-zinc-400){color:var(--color-zinc-400)}:where(.\[\:where\(\&\)\]\:text-zinc-500){color:var(--color-zinc-500)}:where(.\[\:where\(\&\)\]\:text-zinc-800){color:var(--color-zinc-800)}:where(.\[\:where\(\&\)\]\: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)}:where(.\[\:where\(\&\)\]\:\[--flux-shimmer-color\:white\]){--flux-shimmer-color:white}@media (width>=48rem){:where(.md\:\[\:where\(\&\)\]\:min-w-\[25rem\]){min-width:25rem}}:where(.\[\:where\(\&\)\]\:dark\:bg-zinc-600):where(.dark,.dark *){background-color:var(--color-zinc-600)}:where(.dark\:\[\:where\(\&\)\]\:bg-white\/10:where(.dark,.dark *)){background-color:color-mix(in oklab,var(--color-white)10%,transparent)}:where(.dark\:\[\:where\(\&\)\]\:bg-zinc-800:where(.dark,.dark *)){background-color:var(--color-zinc-800)}:where(.dark\:\[\:where\(\&\)\]\:stroke-zinc-900:where(.dark,.dark *)){stroke:var(--color-zinc-900)}:where(.\[\:where\(\&\)\]\:dark\:text-white):where(.dark,.dark *){color:var(--color-white)}:where(.\[\:where\(\&\)\]\:dark\:text-white\/50):where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)50%,transparent)}:where(.\[\:where\(\&\)\]\:dark\:text-white\/70):where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)70%,transparent)}:where(.\[\:where\(\&\)\]\:dark\:text-zinc-300):where(.dark,.dark *){color:var(--color-zinc-300)}:where(.dark\:\[\:where\(\&\)\]\:text-white\/40:where(.dark,.dark *)){color:color-mix(in oklab,var(--color-white)40%,transparent)}:where(.dark\:\[\:where\(\&\)\]\:text-zinc-100:where(.dark,.dark *)){color:var(--color-zinc-100)}:where(.dark\:\[\:where\(\&\)\]\:text-zinc-300:where(.dark,.dark *)){color:var(--color-zinc-300)}:where(.dark\:\[\:where\(\&\)\]\:\[--flux-shimmer-color\:var\(--color-zinc-900\)\]:where(.dark,.dark *)){--flux-shimmer-color:var(--color-zinc-900)}@supports ((-moz-appearance:none)){.\[\@supports\(-moz-appearance\:none\)\]\:hidden{display:none}.\[\@supports\(-moz-appearance\:none\)\]\:pe-3{padding-inline-end:calc(var(--spacing)*3)}}[data-color]>.\[\[data-color\]\>\&\]\:text-inherit{color:inherit}[data-color]>.\[\[data-color\]\>\&\]\:decoration-current\/20{-webkit-text-decoration-color:color-mix(in oklab,currentColor 20%,transparent);text-decoration-color:color-mix(in oklab,currentColor 20%,transparent)}@media (hover:hover){[data-color]>.\[\[data-color\]\>\&\]\:hover\:decoration-current:hover{text-decoration-color:currentColor}}[data-color]>.dark\:\[\[data-color\]\>\&\]\:decoration-current\/50:where(.dark,.dark *){-webkit-text-decoration-color:color-mix(in oklab,currentColor 50%,transparent);text-decoration-color:color-mix(in oklab,currentColor 50%,transparent)}[data-copyable-copied]>.\[\[data-copyable-copied\]\>\&\]\:block{display:block}[data-copyable-copied]>.\[\[data-copyable-copied\]\>\&\]\:hidden{display:none}[data-date-variant=danger] .\[\[data-date-variant\=\'danger\'\]_\&\]\:text-rose-500{color:var(--color-rose-500)}[data-date-variant=danger] .dark\:\[\[data-date-variant\=\'danger\'\]_\&\]\:text-rose-400:where(.dark,.dark *){color:var(--color-rose-400)}[data-date-variant=success] .\[\[data-date-variant\=\'success\'\]_\&\]\:text-lime-600{color:var(--color-lime-600)}[data-date-variant=success] .dark\:\[\[data-date-variant\=\'success\'\]_\&\]\:text-lime-400:where(.dark,.dark *){color:var(--color-lime-400)}[data-date-variant=warning] .\[\[data-date-variant\=\'warning\'\]_\&\]\:text-yellow-600{color:var(--color-yellow-600)}[data-date-variant=warning] .dark\:\[\[data-date-variant\=\'warning\'\]_\&\]\:text-yellow-400:where(.dark,.dark *){color:var(--color-yellow-400)}[data-flux-button-group] .\[\[data-flux-button-group\]_\&\]\:border-s-0{border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}[data-flux-button-group] .\[\[data-flux-button-group\]_\&\]\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}[data-flux-button-group] .\[\[data-flux-button-group\]_\&\]\:border-e-0{border-inline-end-style:var(--tw-border-style);border-inline-end-width:0}[data-flux-button-group] .\[\[data-flux-button-group\]_\&\]\:border-red-600{border-color:var(--color-red-600)}[data-flux-button-group] .\[\[data-flux-button-group\]_\&\]\:border-zinc-200\/80{border-color:color-mix(in oklab,var(--color-zinc-200)80%,transparent)}[data-flux-button-group] .dark\:\[\[data-flux-button-group\]_\&\]\:border-red-900\/25:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-red-900)25%,transparent)}[data-flux-button-group] .dark\:\[\[data-flux-button-group\]_\&\]\:border-zinc-900\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-zinc-900)50%,transparent)}[data-flux-command-input]:has(input:placeholder-shown) .\[\[data-flux-command-input\]\:has\(input\:placeholder-shown\)_\&\]\:hidden{display:none}[data-flux-container] .\[\[data-flux-container\]_\&\]\:px-0{padding-inline:calc(var(--spacing)*0)}[data-flux-date-picker-button]:has([data-flux-date-picker-placeholder]) .\[\[data-flux-date-picker-button\]\:has\(\[data-flux-date-picker-placeholder\]\)_\&\]\:hidden{display:none}[data-flux-date-picker-button]:hover .\[\[data-flux-date-picker-button\]\:hover_\&\]\:text-zinc-800{color:var(--color-zinc-800)}[data-flux-date-picker-button]:hover .dark\:\[\[data-flux-date-picker-button\]\:hover_\&\]\:text-white:where(.dark,.dark *){color:var(--color-white)}[data-flux-date-picker][disabled] .\[\[data-flux-date-picker\]\[disabled\]_\&\]\:hidden{display:none}[data-flux-editor-link]:not(:has(input:placeholder-shown)) .\[\[data-flux-editor-link\]\:not\(\:has\(input\:placeholder-shown\)\)_\&\]\:text-zinc-800{color:var(--color-zinc-800)}[data-flux-editor-link]:not(:has(input:placeholder-shown)) .dark\:\[\[data-flux-editor-link\]\:not\(\:has\(input\:placeholder-shown\)\)_\&\]\:text-white:where(.dark,.dark *){color:var(--color-white)}[data-flux-editor-link]:not(:has(input:placeholder-shown)) .\[\[data-flux-editor-link\]\:not\(\:has\(input\:placeholder-shown\)\)_\&\:hover\]\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}[data-flux-editor-link]:not(:has(input:placeholder-shown)) .dark\:\[\[data-flux-editor-link\]\:not\(\:has\(input\:placeholder-shown\)\)_\&\:hover\]\:bg-white\/10:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}[data-flux-file-upload-trigger]:hover .\[\[data-flux-file-upload-trigger\]\:hover_\&\]\:text-zinc-800{color:var(--color-zinc-800)}[data-flux-file-upload-trigger]:hover .dark\:\[\[data-flux-file-upload-trigger\]\:hover_\&\]\:text-white:where(.dark,.dark *){color:var(--color-white)}[data-flux-input-group] .\[\[data-flux-input-group\]_\&\]\:flex{display:flex}[data-flux-input-group] .\[\[data-flux-input-group\]_\&\]\:flex-1{flex:1}[data-flux-input-group] .\[\[data-flux-input-group\]_\&\]\:items-center{align-items:center}[data-flux-input-group] .\[\[data-flux-input-group\]_\&\]\:items-stretch{align-items:stretch}[data-flux-input-group] .\[\[data-flux-input-group\]_\&\]\:gap-0{gap:calc(var(--spacing)*0)}[data-flux-input-group] .\[\[data-flux-input-group\]_\&\]\:border-y{border-block-style:var(--tw-border-style);border-block-width:1px}[data-flux-input-group] .\[\[data-flux-input-group\]_\&\]\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}[data-flux-input-group] .\[\[data-flux-input-group\]_\&\]\:border-zinc-200{border-color:var(--color-zinc-200)}[data-flux-input-group] .\[\[data-flux-input-group\]_\&\]\:bg-white{background-color:var(--color-white)}[data-flux-input-group] .\[\[data-flux-input-group\]_\&\]\:px-4{padding-inline:calc(var(--spacing)*4)}[data-flux-input-group] .\[\[data-flux-input-group\]_\&\]\: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)}[data-flux-input-group] .dark\:\[\[data-flux-input-group\]_\&\]\:border-zinc-600:where(.dark,.dark *){border-color:var(--color-zinc-600)}[data-flux-input-group] .dark\:\[\[data-flux-input-group\]_\&\]\:bg-zinc-700:where(.dark,.dark *){background-color:var(--color-zinc-700)}[data-flux-input-group] .dark\:\[\[data-flux-input-group\]_\&\]\:text-zinc-300:where(.dark,.dark *){color:var(--color-zinc-300)}[data-flux-input]:has(input:placeholder-shown) .\[\[data-flux-input\]\:has\(input\:placeholder-shown\)_\&\]\:hidden,[data-flux-input]:has(input[disabled]) .\[\[data-flux-input\]\:has\(input\[disabled\]\)_\&\]\:hidden{display:none}[data-flux-input]:hover .\[\[data-flux-input\]\:hover_\&\]\:text-zinc-800{color:var(--color-zinc-800)}[data-flux-input]:hover .dark\:\[\[data-flux-input\]\:hover_\&\]\:text-white:where(.dark,.dark *){color:var(--color-white)}[data-flux-loading]>.\[\[data-flux-loading\]\>\&\]\:block{display:block}[data-flux-menu-item-icon]:hover .\[\[data-flux-menu-item-icon\]\:hover_\&\]\:text-current,[data-flux-menu-item]:hover .\[\[data-flux-menu-item\]\:hover_\&\]\:text-current{color:currentColor}[data-flux-menu]:has(>[data-flux-menu-item-has-icon]) .\[\[data-flux-menu\]\:has\(\>\[data-flux-menu-item-has-icon\]\)_\&\]\:block{display:block}[data-flux-pillbox-search]:has([data-flux-loading]) .\[\[data-flux-pillbox-search\]\:has\(\[data-flux-loading\]\)_\&\]\:opacity-0{opacity:0}[data-flux-pillbox-search]:has([data-flux-loading]) .\[\[data-flux-pillbox-search\]\:has\(\[data-flux-loading\]\)_\&\]\:opacity-100{opacity:1}[data-flux-pillbox-search]:has(input:placeholder-shown) .\[\[data-flux-pillbox-search\]\:has\(input\:placeholder-shown\)_\&\]\:hidden,[data-flux-pillbox-trigger]:has([data-flux-pillbox-placeholder]) .\[\[data-flux-pillbox-trigger\]\:has\(\[data-flux-pillbox-placeholder\]\)_\&\]\:hidden{display:none}[data-flux-pillbox-trigger]:hover .\[\[data-flux-pillbox-trigger\]\:hover_\&\]\:text-zinc-800{color:var(--color-zinc-800)}[data-flux-pillbox-trigger]:hover .dark\:\[\[data-flux-pillbox-trigger\]\:hover_\&\]\:text-white:where(.dark,.dark *){color:var(--color-white)}[data-flux-pillbox][disabled]:has([data-selected]) .\[\[data-flux-pillbox\]\[disabled\]\:has\(\[data-selected\]\)_\&\]\:hidden,[data-flux-select-button]:has([data-flux-select-placeholder]) .\[\[data-flux-select-button\]\:has\(\[data-flux-select-placeholder\]\)_\&\]\:hidden{display:none}[data-flux-select-button]:hover .\[\[data-flux-select-button\]\:hover_\&\]\:text-zinc-800{color:var(--color-zinc-800)}[data-flux-select-button]:hover .dark\:\[\[data-flux-select-button\]\:hover_\&\]\:text-white:where(.dark,.dark *){color:var(--color-white)}[data-flux-select-search]:has([data-flux-loading]) .\[\[data-flux-select-search\]\:has\(\[data-flux-loading\]\)_\&\]\:opacity-0{opacity:0}[data-flux-select-search]:has([data-flux-loading]) .\[\[data-flux-select-search\]\:has\(\[data-flux-loading\]\)_\&\]\:opacity-100{opacity:1}[data-flux-select-search]:has(input:placeholder-shown) .\[\[data-flux-select-search\]\:has\(input\:placeholder-shown\)_\&\]\:hidden,[data-flux-select]:has([disabled][data-selected]) .\[\[data-flux-select\]\:has\(\[disabled\]\[data-selected\]\)_\&\]\:hidden,[data-flux-select][disabled]:has([data-selected]) .\[\[data-flux-select\]\[disabled\]\:has\(\[data-selected\]\)_\&\]\:hidden{display:none}[data-flux-sidebar-group-dropdown]>button:hover .\[\[data-flux-sidebar-group-dropdown\]\>button\:hover_\&\]\:text-current,[data-flux-sidebar-group-dropdown]>button:hover :is(:where([data-flux-menu]) .in-data-flux-menu\:\[\[data-flux-sidebar-group-dropdown\]\>button\:hover_\&\]\:text-current){color:currentColor}[data-flux-sidebar-item]:hover .\[\[data-flux-sidebar-item\]\:hover_\&\]\:text-current\!{color:currentColor!important}[data-flux-subheading]+.\[\[data-flux-subheading\]\+\&\]\:mt-2{margin-top:calc(var(--spacing)*2)}[data-flux-tab][data-selected] .\[\[data-flux-tab\]\[data-selected\]_\&\]\:text-zinc-800{color:var(--color-zinc-800)}[data-flux-tab][data-selected] .dark\:\[\[data-flux-tab\]\[data-selected\]_\&\]\:text-white:where(.dark,.dark *){color:var(--color-white)}[data-flux-time-picker-button]:has([data-flux-time-picker-placeholder]) .\[\[data-flux-time-picker-button\]\:has\(\[data-flux-time-picker-placeholder\]\)_\&\]\:hidden{display:none}[data-flux-time-picker-button]:hover .\[\[data-flux-time-picker-button\]\:hover_\&\]\:text-zinc-800{color:var(--color-zinc-800)}[data-flux-time-picker-button]:hover .dark\:\[\[data-flux-time-picker-button\]\:hover_\&\]\:text-white:where(.dark,.dark *){color:var(--color-white)}[data-flux-time-picker]:has([disabled]) .\[\[data-flux-time-picker\]\:has\(\[disabled\]\)_\&\]\:hidden{display:none}[data-flux-toast-dialog][data-variant=danger] .\[\[data-flux-toast-dialog\]\[data-variant\=danger\]_\&\]\:block,[data-flux-toast-dialog][data-variant=success] .\[\[data-flux-toast-dialog\]\[data-variant\=success\]_\&\]\:block,[data-flux-toast-dialog][data-variant=warning] .\[\[data-flux-toast-dialog\]\[data-variant\=warning\]_\&\]\:block{display:block}[data-in-range]:not([data-selected]):not([data-end-preview])+.\[\[data-in-range\]\:not\(\[data-selected\]\)\:not\(\[data-end-preview\]\)\+\&\[data-outside\]\]\:bg-linear-to-r[data-outside]{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}[data-in-range]:not([data-selected]):not([data-end-preview])+.rtl\:\[\[data-in-range\]\:not\(\[data-selected\]\)\:not\(\[data-end-preview\]\)\+\&\[data-outside\]\]\:bg-linear-to-l:where(:dir(rtl),[dir=rtl],[dir=rtl] *)[data-outside]{--tw-gradient-position:to left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}[data-month]:first-of-type .\[\[data-month\]\:first-of-type_\&\]\:opacity-0{opacity:0}[data-nav-footer] .\[\[data-nav-footer\]_\&\]\:hidden{display:none}[data-nav-sidebar] [data-nav-footer] .\[\[data-nav-sidebar\]_\[data-nav-footer\]_\&\]\:block{display:block}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-viewable-open]>.\[\[data-viewable-open\]\>\&\]\:block{display:block}[data-viewable-open]>.\[\[data-viewable-open\]\>\&\]\:hidden{display:none}[disabled] .\[\[disabled\]_\&\]\:pointer-events-none{pointer-events:none}[disabled] .\[\[disabled\]_\&\]\:text-zinc-200\!{color:var(--color-zinc-200)!important}[disabled] .\[\[disabled\]_\&\]\:text-zinc-400\/70{color:color-mix(in oklab,var(--color-zinc-400)70%,transparent)}[disabled] .\[\[disabled\]_\&\]\:text-zinc-500{color:var(--color-zinc-500)}[disabled] .\[\[disabled\]_\&\]\:placeholder-zinc-400\/70::placeholder{color:color-mix(in oklab,var(--color-zinc-400)70%,transparent)}[disabled] .\[\[disabled\]_\&\]\:opacity-50{opacity:.5}[disabled] .\[\[disabled\]_\&\]\:opacity-75{opacity:.75}[disabled] .dark\:\[\[disabled\]_\&\]\:text-white\/40\!:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)40%,transparent)!important}[disabled] .dark\:\[\[disabled\]_\&\]\:text-zinc-400:where(.dark,.dark *){color:var(--color-zinc-400)}[disabled] .dark\:\[\[disabled\]_\&\]\:text-zinc-500:where(.dark,.dark *),[disabled] .dark\:\[\[disabled\]_\&\]\:placeholder-zinc-500:where(.dark,.dark *)::placeholder{color:var(--color-zinc-500)}[disabled]:hover .\[\[disabled\]\:hover_\&\]\:text-zinc-400{color:var(--color-zinc-400)}[disabled]:hover .dark\:\[\[disabled\]\:hover_\&\]\:text-white\/60:where(.dark,.dark *){color:color-mix(in oklab,var(--color-white)60%,transparent)}[inline] .\[\[inline\]_\&\]\:col-span-1{grid-column:span 1/span 1}[inline] .\[\[inline\]_\&\]\:col-span-2{grid-column:span 2/span 2}[inline] .\[\[inline\]_\&\]\:col-start-1{grid-column-start:1}[inline] .\[\[inline\]_\&\]\:col-start-2{grid-column-start:2}[inline] .\[\[inline\]_\&\]\:row-start-1{grid-row-start:1}[readonly] .\[\[readonly\]_\&\]\:pointer-events-none{pointer-events:none}[readonly] .\[\[readonly\]_\&\]\:cursor-default{cursor:default}[readonly] .\[\[readonly\]_\&\]\:bg-transparent{background-color:#0000}td[data-selected] .\[td\[data-selected\]_\&\]\:bg-\[var\(--color-accent\)\]{background-color:var(--color-accent)}td[data-selected] .\[td\[data-selected\]_\&\]\:bg-white{background-color:var(--color-white)}td[data-selected] .\[td\[data-selected\]_\&\]\:text-\[var\(--color-accent-foreground\)\]{color:var(--color-accent-foreground)}td[data-selected] .dark\:\[td\[data-selected\]_\&\]\:bg-zinc-800:where(.dark,.dark *){background-color:var(--color-zinc-800)}td[data-selected] .\[td\[data-selected\]_\&\[disabled\]\]\:opacity-50[disabled]{opacity:.5}td[data-selected]+td[data-selected] .\[td\[data-selected\]\+td\[data-selected\]_\&\]\:rounded-s-none{border-start-start-radius:0;border-end-start-radius:0}td[data-selected]:has(+td[data-selected]) .\[td\[data-selected\]\:has\(\+td\[data-selected\]\)_\&\]\:rounded-e-none{border-start-end-radius:0;border-end-end-radius:0}td[data-today] .\[td\[data-today\]_\&\]\:flex{display:flex}td[disabled] .\[td\[disabled\]_\&\]\:pointer-events-none{pointer-events:none}td[disabled] .\[td\[disabled\]_\&\]\:cursor-default{cursor:default}td[disabled] .\[td\[disabled\]_\&\]\:text-zinc-400{color:var(--color-zinc-400)}ui-checkbox[data-checked] .\[ui-checkbox\[data-checked\]_\&\]\:border-transparent{border-color:#0000}ui-checkbox[data-checked] .\[ui-checkbox\[data-checked\]_\&\]\:bg-\[var\(--color-accent\)\]{background-color:var(--color-accent)}ui-checkbox[data-checked] .\[ui-checkbox\[data-checked\]_\&\]\:text-zinc-800{color:var(--color-zinc-800)}ui-checkbox[data-checked] .\[ui-checkbox\[data-checked\]_\&\]\: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)}@media (hover:hover){ui-checkbox[data-checked] .hover\:\[ui-checkbox\[data-checked\]_\&\]\:bg-\(--color-accent\):hover{background-color:var(--color-accent)}}ui-checkbox[data-checked] .focus\:\[ui-checkbox\[data-checked\]_\&\]\:bg-\(--color-accent\):focus{background-color:var(--color-accent)}ui-checkbox[data-checked] .dark\:\[ui-checkbox\[data-checked\]_\&\]\:text-white:where(.dark,.dark *){color:var(--color-white)}ui-checkbox[data-checked]:not([data-indeterminate]) .\[ui-checkbox\[data-checked\]\:not\(\[data-indeterminate\]\)_\&\>svg\:first-child\]\:block>svg:first-child{display:block}ui-checkbox[data-checked][disabled] .\[ui-checkbox\[data-checked\]\[disabled\]_\&\]\:opacity-50{opacity:.5}ui-checkbox[data-indeterminate] .\[ui-checkbox\[data-indeterminate\]_\&\]\:border-transparent{border-color:#0000}ui-checkbox[data-indeterminate] .\[ui-checkbox\[data-indeterminate\]_\&\]\:bg-\[var\(--color-accent\)\]{background-color:var(--color-accent)}ui-checkbox[data-indeterminate] .\[ui-checkbox\[data-indeterminate\]_\&\]\: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)}@media (hover:hover){ui-checkbox[data-indeterminate] .hover\:\[ui-checkbox\[data-indeterminate\]_\&\]\:bg-\(--color-accent\):hover{background-color:var(--color-accent)}}ui-checkbox[data-indeterminate] .focus\:\[ui-checkbox\[data-indeterminate\]_\&\]\:bg-\(--color-accent\):focus{background-color:var(--color-accent)}ui-checkbox[data-indeterminate] .\[ui-checkbox\[data-indeterminate\]_\&\>svg\:last-child\]\:block>svg:last-child{display:block}ui-checkbox[disabled] .\[ui-checkbox\[disabled\]_\&\]\:border-zinc-200{border-color:var(--color-zinc-200)}ui-checkbox[disabled] .\[ui-checkbox\[disabled\]_\&\]\:opacity-75{opacity:.75}ui-checkbox[disabled] .\[ui-checkbox\[disabled\]_\&\]\: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)}ui-checkbox[disabled] .dark\:\[ui-checkbox\[disabled\]_\&\]\:border-white\/5:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}ui-checkbox[disabled][data-checked] .\[ui-checkbox\[disabled\]\[data-checked\]_\&\]\:border-transparent,ui-checkbox[disabled][data-indeterminate] .\[ui-checkbox\[disabled\]\[data-indeterminate\]_\&\]\:border-transparent{border-color:#0000}ui-dropdown>.\[ui-dropdown\>\&\]\:w-full{width:100%}ui-option[data-selected] .\[ui-option\[data-selected\]_\&\]\:block{display:block}ui-option[data-selected] .\[ui-option\[data-selected\]_\&\]\:border-transparent{border-color:#0000}ui-option[data-selected] .\[ui-option\[data-selected\]_\&\]\:bg-\[var\(--color-accent\)\]{background-color:var(--color-accent)}@media (hover:hover){ui-option[data-selected] .hover\:\[ui-option\[data-selected\]_\&\]\:bg-\(--color-accent\):hover{background-color:var(--color-accent)}}ui-option[data-selected] .focus\:\[ui-option\[data-selected\]_\&\]\:bg-\(--color-accent\):focus{background-color:var(--color-accent)}ui-option[data-selected] .\[ui-option\[data-selected\]_\&\>div\]\:block>div,ui-option[data-selected] .\[ui-option\[data-selected\]_\&\>svg\:first-child\]\:block>svg:first-child{display:block}ui-option[data-selected][disabled] .\[ui-option\[data-selected\]\[disabled\]_\&\]\:opacity-50{opacity:.5}ui-option[disabled] .\[ui-option\[disabled\]_\&\]\:border-zinc-200{border-color:var(--color-zinc-200)}ui-option[disabled] .\[ui-option\[disabled\]_\&\]\:opacity-75{opacity:.75}ui-option[disabled] .dark\:\[ui-option\[disabled\]_\&\]\:border-white\/5:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}ui-option[disabled] :is(ui-option[data-selected] .\[ui-option\[data-selected\]_\&\]\:\[ui-option\[disabled\]_\&\]\:border-transparent),ui-radio[data-checked] .\[ui-radio\[data-checked\]_\&\]\:border-transparent{border-color:#0000}ui-radio[data-checked] .\[ui-radio\[data-checked\]_\&\]\:bg-\[var\(--color-accent\)\]{background-color:var(--color-accent)}ui-radio[data-checked] .\[ui-radio\[data-checked\]_\&\]\:text-zinc-800{color:var(--color-zinc-800)}ui-radio[data-checked] .\[ui-radio\[data-checked\]_\&\]\: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)}@media (hover:hover){ui-radio[data-checked] .hover\:\[ui-radio\[data-checked\]_\&\]\:bg-\(--color-accent\):hover{background-color:var(--color-accent)}}ui-radio[data-checked] .focus\:\[ui-radio\[data-checked\]_\&\]\:bg-\(--color-accent\):focus{background-color:var(--color-accent)}ui-radio[data-checked] .dark\:\[ui-radio\[data-checked\]_\&\]\:text-white:where(.dark,.dark *){color:var(--color-white)}ui-radio[data-checked] .\[ui-radio\[data-checked\]_\&\>div\]\:block>div{display:block}ui-radio[data-checked][disabled] .\[ui-radio\[data-checked\]\[disabled\]_\&\]\:opacity-50{opacity:.5}ui-radio[disabled] .\[ui-radio\[disabled\]_\&\]\:border-zinc-200{border-color:var(--color-zinc-200)}ui-radio[disabled] .\[ui-radio\[disabled\]_\&\]\:opacity-75{opacity:.75}ui-radio[disabled] .\[ui-radio\[disabled\]_\&\]\: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)}ui-radio[disabled] .dark\:\[ui-radio\[disabled\]_\&\]\:border-white\/5:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}ui-radio[disabled] :is(ui-radio[data-checked] .\[ui-radio\[data-checked\]_\&\]\:\[ui-radio\[disabled\]_\&\]\:border-transparent){border-color:#0000}ui-selected .\[ui-selected_\&\]\:sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}ui-selected .\[ui-selected_\&\]\:hidden{display:none}ui-time-picker-options>[data-selected] .\[ui-time-picker-options\>\[data-selected\]_\&\]\:block{display:block}ui-time-picker:has([disabled]) .\[ui-time-picker\:has\(\[disabled\]\)_\&\]\:hidden,ui-time-picker[data-empty] .\[ui-time-picker\[data-empty\]_\&\]\:hidden{display:none}}@keyframes flux-shimmer{0%{transform:translate(0)}to{transform:translate(200%)}}:has(>[data-flux-main]){grid-template:"header header header""sidebar main aside"1fr"sidebar footer aside"/min-content minmax(0,1fr) min-content;grid-area:body;display:grid}:has(>[data-flux-sidebar]+[data-flux-header]){grid-template-areas:"sidebar header header""sidebar main aside""sidebar footer aside"}[data-flux-modal]>dialog,[data-flux-modal]>dialog::backdrop{opacity:0;transition:all 75ms allow-discrete}[data-flux-modal]>dialog{transform:scale(.95)}[data-flux-modal]>dialog[data-flux-flyout]{transform:scale(1)var(--flux-flyout-translate,var(--fx-flyout-translate,translateX(50px)))}[data-flux-modal]>dialog[open],[data-flux-modal]>dialog[open]::backdrop{opacity:1;transition:all .15s allow-discrete;transform:translate(0)scale(1)}@starting-style{[data-flux-modal]>dialog[open],[data-flux-modal]>dialog[open]::backdrop{opacity:0}[data-flux-modal]>dialog[open]{transform:scale(.95)}[data-flux-modal]>dialog[open][data-flux-flyout]{transform:scale(1)var(--flux-flyout-translate,var(--fx-flyout-translate,translateX(50px)))}}[data-flux-modal]>dialog::backdrop{background-color:#0000001a}select[data-flux-select-native]{print-color-adjust:exact;-webkit-print-color-adjust:exact;background-image:url("data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M8 9L12 5L16 9' stroke='%23d4d4d4' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M16 15L12 19L8 15' stroke='%23d4d4d4' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-inline-end:2.5rem}[dir=rtl] select[data-flux-select-native]{background-position:.5rem}select[data-flux-select-native]:hover:not(:disabled){background-image:url("data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M8 9L12 5L16 9' stroke='%2327272a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M16 15L12 19L8 15' stroke='%2327272a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e")}.dark select[data-flux-select-native]{background-image:url("data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M8 9L12 5L16 9' stroke='%23A1A1AA' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M16 15L12 19L8 15' stroke='%23A1A1AA' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e")}.dark select[data-flux-select-native]:hover:not(:disabled){background-image:url("data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M8 9L12 5L16 9' stroke='%23ffffff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M16 15L12 19L8 15' stroke='%23ffffff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e")}ui-button{display:block}ui-toast{background-color:#0000;max-width:24rem;margin:1.5rem;overflow:visible}ui-toast[position*=top]{margin-bottom:auto}ui-toast[position*=bottom]{margin-top:auto}ui-toast[position*=left],ui-toast[position*=start]{margin-inline-end:auto}ui-toast[position*=center]{margin-left:auto;margin-right:auto}ui-toast[position*=right],ui-toast[position*=end]{margin-inline-start:auto}ui-toast [data-flux-toast-dialog]{opacity:0;transition:opacity .35s allow-discrete,transform .35s allow-discrete,height .35s allow-discrete;transform:translate(0)}ui-toast [data-flux-toast-dialog].showing{opacity:1;transition:opacity .2s allow-discrete,transform .2s allow-discrete,height .2s allow-discrete;transform:translate(0)}@starting-style{ui-toast [data-flux-toast-dialog]{opacity:0;transform:translate(0)}ui-toast[position*=top]>[data-flux-toast-dialog]{transform:translateY(-.5rem)}ui-toast[position*=top][position*=left]>[data-flux-toast-dialog]{transform:translate(-.5rem)}ui-toast[position*=top][position*=right]>[data-flux-toast-dialog],[dir=rtl] :is(ui-toast)[position*=top][position*=left]>[data-flux-toast-dialog]{transform:translate(.5rem)}[dir=rtl] :is(ui-toast)[position*=top][position*=right]>[data-flux-toast-dialog]{transform:translate(-.5rem)}ui-toast[position*=bottom]>[data-flux-toast-dialog]{transform:translateY(.5rem)}}ui-toast-group{background-color:#0000;width:24rem;margin:1.5rem;display:flex;overflow:visible}ui-toast-group[position*=top]{margin-bottom:auto}ui-toast-group[position*=bottom]{margin-top:auto}ui-toast-group[position*=left],ui-toast-group[position*=start]{justify-content:flex-start;margin-inline-end:auto}ui-toast-group[position*=center]{justify-content:center;margin-left:auto;margin-right:auto}ui-toast-group[position*=right],ui-toast-group[position*=end]{justify-content:flex-end;margin-inline-start:auto}ui-toast-group [data-flux-toast-dialog]{transition:opacity .35s allow-discrete,transform .35s allow-discrete,height .35s allow-discrete;position:absolute;transform:translate(0)}[position*=top] :is(ui-toast-group [data-flux-toast-dialog]){padding-bottom:.75rem;top:0}[position*=bottom] :is(ui-toast-group [data-flux-toast-dialog]){padding-top:.75rem;bottom:0}ui-toast-group [data-flux-toast-dialog]>*{transition:opacity .35s allow-discrete,transform .35s allow-discrete,height .35s allow-discrete}.flux-no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.flux-no-scrollbar::-webkit-scrollbar{display:none}.has-focus-visible\:outline-default:has(:focus-visible){outline:auto highlight;outline-color:-webkit-focus-ring-color}[data-flux-field]:not(ui-radio,ui-checkbox){gap:calc(var(--spacing)*2);display:grid}[data-flux-label]{--tw-leading:var(--leading-tight);margin-bottom:calc(var(--spacing)*0)!important;line-height:var(--leading-tight)!important}input:focus[data-flux-control],textarea:focus[data-flux-control],select:focus[data-flux-control]{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-accent);--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--color-accent-foreground);outline-style:none}@media (forced-colors:active){:is(input:focus[data-flux-control],textarea:focus[data-flux-control],select:focus[data-flux-control]){outline-offset:2px;outline:2px solid #0000}}input[data-flux-control],textarea[data-flux-control],select[data-flux-control]{color:var(--color-zinc-900)}:is(input[data-flux-control],textarea[data-flux-control],select[data-flux-control]):where(.dark,.dark *){color:var(--color-zinc-50)}input[data-flux-control]::placeholder,textarea[data-flux-control]::placeholder{color:var(--color-zinc-400)}:where(.dark,.dark *) input[data-flux-control]::placeholder,:where(.dark,.dark *) textarea[data-flux-control]::placeholder{color:var(--color-zinc-500)}.shadow-elegant{box-shadow:0 4px 12px -8px #08c6}:scope button,:scope .btn,:scope .btn-secondary,:scope a[class*=btn],:scope [role=button]{cursor:pointer;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s}:scope button:hover,:scope .btn:hover,:scope .btn-secondary:hover,:scope a[class*=btn]:hover,:scope [role=button]:hover{transform:translateY(-2px);box-shadow:0 1px 2px #0000000f,0 2px 4px #00000014,0 4px 8px #0000001a,0 8px 16px #00000014,0 0 10px #209fd933}ui-switch.group[data-checked]>span:where(:dir(rtl),[dir=rtl],[dir=rtl] *){--tw-translate-x:-15px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@property --tw-border-spacing-x{syntax:"";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"";inherits:false;initial-value:0}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/stileigentum/app-OG3MHWAj.js b/public/build/stileigentum/app-OG3MHWAj.js new file mode 100644 index 00000000..a71b089a --- /dev/null +++ b/public/build/stileigentum/app-OG3MHWAj.js @@ -0,0 +1 @@ +(function(){let o=null;document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r):r();function r(){s(),u(),c(),document.addEventListener("livewire:navigated",function(){s()}),document.addEventListener("livewire:load",function(){s()}),window.addEventListener("livewire:update",function(){setTimeout(()=>{s()},100)})}function s(){const n={threshold:.15,rootMargin:"0px 0px -80px 0px"};o||(o=new IntersectionObserver(e=>{e.forEach(t=>{t.isIntersecting&&(setTimeout(()=>{t.target.classList.add("is-visible")},50),o.unobserve(t.target))})},n)),document.querySelectorAll(".scroll-animate:not(.is-visible):not(.observed), .fade-in:not(.is-visible):not(.observed), .slide-up:not(.is-visible):not(.observed), .slide-right:not(.is-visible):not(.observed), .slide-left:not(.is-visible):not(.observed), .scale-in:not(.is-visible):not(.observed), .slide-down:not(.is-visible):not(.observed)").forEach(e=>{e.classList.add("observed"),o.observe(e)}),window.appointmentLinksInitialized||(document.addEventListener("click",function(e){const t=e.target.closest("a[data-open-appointment]");t&&(e.preventDefault(),window.dispatchEvent(new CustomEvent("open-appointment",{detail:{topic:t.dataset.appointmentTopic||null}})))}),window.appointmentLinksInitialized=!0),window.smoothScrollInitialized||(document.addEventListener("click",function(e){const t=e.target.closest('a[href^="#"]');if(t&&t.hash){const l=document.querySelector(t.hash);if(l){e.preventDefault();const f=l.getBoundingClientRect().top+window.pageYOffset-80;window.scrollTo({top:f,behavior:"smooth"})}}}),window.smoothScrollInitialized=!0)}function c(){const n=document.getElementById("main-header");if(!n)return;function i(){(window.pageYOffset||document.documentElement.scrollTop)>50?n.classList.add("scrolled"):n.classList.remove("scrolled")}let e=!1;window.addEventListener("scroll",function(){e||(window.requestAnimationFrame(function(){i(),e=!1}),e=!0)}),i()}function u(){const n=document.createElement("div");n.className="scroll-progress-bar",document.body.appendChild(n);function i(){const t=window.innerHeight,l=document.documentElement.scrollHeight,d=window.pageYOffset||document.documentElement.scrollTop,a=d/(l-t)*100;n.style.width=`${Math.min(a,100)}%`,d>100?n.classList.add("visible"):n.classList.remove("visible")}let e=!1;window.addEventListener("scroll",function(){e||(window.requestAnimationFrame(function(){i(),e=!1}),e=!0)}),i()}})(); diff --git a/public/build/stileigentum/error-reporting-BiGrjXpD.js b/public/build/stileigentum/error-reporting-BiGrjXpD.js new file mode 100644 index 00000000..0cd20769 --- /dev/null +++ b/public/build/stileigentum/error-reporting-BiGrjXpD.js @@ -0,0 +1 @@ +const y="modulepreload",A=function(e){return"https://b2in.test/build/"+e},h={},_=function(r,t,a){let u=Promise.resolve();if(t&&t.length>0){let o=function(s){return Promise.all(s.map(c=>Promise.resolve(c).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const n=document.querySelector("meta[property=csp-nonce]"),m=(n==null?void 0:n.nonce)||(n==null?void 0:n.getAttribute("nonce"));u=o(t.map(s=>{if(s=A(s),s in h)return;h[s]=!0;const c=s.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${f}`))return;const l=document.createElement("link");if(l.rel=c?"stylesheet":y,c||(l.as="script"),l.crossOrigin="",l.href=s,m&&l.setAttribute("nonce",m),document.head.appendChild(l),c)return new Promise((b,S)=>{l.addEventListener("load",b),l.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${s}`)))})}))}function d(o){const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=o,window.dispatchEvent(n),!n.defaultPrevented)throw o}return u.then(o=>{for(const n of o||[])n.status==="rejected"&&d(n.reason);return r().catch(d)})},i=(()=>{const e=document.querySelector('meta[name="pk-error-reporting"]');try{return e?JSON.parse(e.content):null}catch{return null}})(),v=["page","q","tab","sort"],P=new RegExp("(?<=\\/)[A-Za-z0-9_-]{32,}(?=\\/|$)","g"),w=/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi;function p(e){try{const r=new URL(e,window.location.origin);r.pathname=r.pathname.replace(P,"[Filtered]");for(const t of[...r.searchParams.keys()])!v.includes(t)&&!t.startsWith("utm_")&&r.searchParams.set(t,"[Filtered]");return r.hash="",r.toString().replace(w,"[email]")}catch{return"[Filtered]"}}let E=null;function R(){return E??(E=_(()=>import("./error-reporting-sdk-CLmutOST.js"),[]).then(e=>(e.init({dsn:i.dsn,release:i.release||void 0,environment:i.environment,sampleRate:i.sampleRate??1,sendDefaultPii:!1,integrations:r=>r.filter(t=>!["GlobalHandlers","Breadcrumbs","BrowserSession","BrowserApiErrors"].includes(t.name)),ignoreErrors:["ResizeObserver loop","Script error.","AbortError"],denyUrls:[/^chrome-extension:\/\//,/^moz-extension:\/\//,/^safari-(web-)?extension:\/\//],beforeSend(r){var t,a,u,d;(t=r.request)!=null&&t.url&&(r.request.url=p(r.request.url)),(u=(a=r.request)==null?void 0:a.headers)!=null&&u.Referer&&(r.request.headers.Referer=p(r.request.headers.Referer));for(const o of((d=r.exception)==null?void 0:d.values)??[])o.value&&(o.value=o.value.replace(w,"[email]"));return r}}),i.userId&&e.setUser({id:String(i.userId)}),e.setTag("area",i.area),e))),E}function k(e){var a;if(e instanceof Error)return e;const r=((a=e==null?void 0:e.constructor)==null?void 0:a.name)??typeof e;let t;try{t=typeof e=="string"?e:JSON.stringify(e)}catch{t=String(e)}return new Error(`Unbehandelte Ablehnung (${r}): ${String(t??"").slice(0,300)}`)}function g(e){R().then(r=>r.captureException(e)).catch(()=>{})}i!=null&&i.dsn&&(window.addEventListener("error",e=>{e.error&&g(e.error)}),window.addEventListener("unhandledrejection",e=>{g(k(e.reason))})); diff --git a/public/build/stileigentum/error-reporting-sdk-CLmutOST.js b/public/build/stileigentum/error-reporting-sdk-CLmutOST.js new file mode 100644 index 00000000..e5da0866 --- /dev/null +++ b/public/build/stileigentum/error-reporting-sdk-CLmutOST.js @@ -0,0 +1,15 @@ +const m=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,_=globalThis,W="11.6.0";function rt(){return gt(_),_}function gt(t){const e=t.__SENTRY__=t.__SENTRY__||{};return e.version=e.version||W,e[W]=e[W]||{}}function st(t,e,n=_){const r=n.__SENTRY__=n.__SENTRY__||{},s=r[W]=r[W]||{};return s[t]||(s[t]=e())}const Nn=["debug","info","warn","error","log","assert","trace"],Mr="Sentry Logger ",Ot={};function j(t){if(!("console"in _))return t();const e=_.console,n={},r=Object.keys(Ot);r.forEach(s=>{const o=Ot[s];n[s]=e[s],e[s]=o});try{return t()}finally{r.forEach(s=>{e[s]=n[s]})}}function $r(){me().enabled=!0}function Fr(){me().enabled=!1}function Cn(){return me().enabled}function jr(...t){he("log",...t)}function Br(...t){he("warn",...t)}function Ur(...t){he("error",...t)}function he(t,...e){m&&Cn()&&j(()=>{_.console[t](`${Mr}[${t}]:`,...e)})}function me(){return m?st("loggerSettings",()=>({enabled:!1})):{enabled:!1}}const h={enable:$r,disable:Fr,isEnabled:Cn,log:jr,warn:Br,error:Ur},An=50,q="?",Re=/\(error: (.*)\)/,Oe=/captureMessage|captureException/;function xn(...t){const e=t.sort((n,r)=>n[0]-r[0]).map(n=>n[1]);return(n,r=0,s=0)=>{const o=[],i=n.split(` +`);for(let a=r;a1024&&(c=c.slice(0,1024));const u=Re.test(c)?c.replace(Re,"$1"):c;if(!u.includes("Error: ")){for(const f of e){const l=f(u);if(l){o.push(l);break}}if(o.length>=An+s)break}}return Wr(o.slice(s))}}function Hr(t){return Array.isArray(t)?xn(...t):t}function Wr(t){if(!t.length)return[];const e=Array.from(t);return/sentryWrapped/.test(vt(e).function||"")&&e.pop(),e.reverse(),Oe.test(vt(e).function||"")&&(e.pop(),Oe.test(vt(e).function||"")&&e.pop()),e.slice(0,An).map(n=>({...n,filename:n.filename||vt(e).filename,function:n.function||q}))}function vt(t){return t[t.length-1]||{}}const jt="";function $(t){try{return!t||typeof t!="function"?jt:t.name||jt}catch{return jt}}function Ne(t){const e=t.exception;if(e){const n=[];try{return e.values.forEach(r=>{r.stacktrace.frames&&n.push(...r.stacktrace.frames)}),n}catch{return}}}const ft={},Ce={};function z(t,e){return ft[t]=ft[t]||[],ft[t].push(e),()=>{const n=ft[t];if(n){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}}}function Y(t,e){if(!Ce[t]){Ce[t]=!0;try{e()}catch(n){m&&h.error(`Error while instrumenting ${t}`,n)}}}function w(t,e){const n=t&&ft[t];if(n)for(const r of n)try{r(e)}catch(s){m&&h.error(`Error while triggering instrumentation handler. +Type: ${t} +Name: ${$(r)} +Error:`,s)}}let Bt=null;function qr(t){const e="error";z(e,t),Y(e,Gr)}function Gr(){Bt=_.onerror,_.onerror=function(t,e,n,r,s){return w("error",{column:r,error:s,line:n,msg:t,url:e}),Bt?Bt.apply(this,arguments):!1},_.onerror.__SENTRY_INSTRUMENTED__=!0}let Ut=null;function zr(t){const e="unhandledrejection";z(e,t),Y(e,Yr)}function Yr(){Ut=_.onunhandledrejection,_.onunhandledrejection=function(t){return w("unhandledrejection",t),Ut?Ut.apply(this,arguments):!0},_.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const Dn=Object.prototype.toString;function D(t){switch(Dn.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object WebAssembly.Exception]":return!0;default:return _e(t,Error)}}function ot(t,e){return Dn.call(t)===`[object ${e}]`}function Ln(t){return ot(t,"ErrorEvent")}function Ae(t){return ot(t,"DOMError")}function Kr(t){return ot(t,"DOMException")}function x(t){return ot(t,"String")}function ge(t){return typeof t=="object"&&t!==null&&"__sentry_template_string__"in t&&"__sentry_template_values__"in t}function it(t){return t===null||ge(t)||typeof t!="object"&&typeof t!="function"}function Nt(t){return ot(t,"Object")}function xt(t){return typeof t=="object"&&t!==null}function Dt(t){return typeof Event<"u"&&_e(t,Event)}function Vr(t){return ot(t,"RegExp")}function at(t){return!!(t!=null&&t.then&&typeof t.then=="function")}function _e(t,e){try{return t instanceof e}catch{return!1}}function Pn(t){return typeof Request<"u"&&_e(t,Request)}function T(t,e,n){if(!(e in t))return;const r=t[e];if(typeof r!="function")return;const s=n(r);typeof s=="function"&&Mn(s,r);try{t[e]=s}catch{m&&h.log(`Failed to replace method "${e}" in object`,t)}}function F(t,e,n){try{Object.defineProperty(t,e,{value:n,writable:!0,configurable:!0})}catch{m&&h.log(`Failed to add non-enumerable property "${String(e)}" to object`,t)}}function Mn(t,e){try{const n=e.prototype||{};t.prototype=e.prototype=n,F(t,"__sentry_original__",e)}catch{}}function ye(t){return t.__sentry_original__}function $n(t){if(D(t))return{message:t.message,name:t.name,stack:t.stack,...xe(t)};if(Dt(t)){const{type:e,target:n,currentTarget:r,detail:s}=t;return{type:e,target:n,currentTarget:r,...s?{detail:s}:{},...xe(t)}}return t}function xe(t){return xt(t)?Object.fromEntries(Object.entries(t)):{}}function Xr(t){const e=Object.keys($n(t));return e.sort(),e[0]?e.join(", "):"[object has no keys]"}let J;function pt(t){if(J!==void 0)return J?J(t):t();const e=Symbol.for("__SENTRY_SAFE_RANDOM_ID_WRAPPER__"),n=_;return e in n&&typeof n[e]=="function"?(J=n[e],J(t)):(J=null,t())}function Ee(){return pt(()=>Math.random())}function K(){return pt(()=>Date.now())}const Jr=Symbol.for("sentry.skipNormalization"),Qr=Symbol.for("sentry.overrideNormalizationDepth");function Zr(t){return!!t[Jr]}function ts(t){const e=t[Qr];return typeof e=="number"?e:void 0}let Kt;function es(t){Kt=t}function A(t,e=100,n=1/0){try{return Vt("",t,e,n)}catch(r){return{ERROR:`**non-serializable** (${r})`}}}function Fn(t,e=3,n=100*1024){const r=A(t,e);return ss(r)>n?Fn(t,e-1,n):r}function Vt(t,e,n=1/0,r=1/0,s=os()){const[o,i]=s;if(e==null||["boolean","string"].includes(typeof e)||typeof e=="number"&&Number.isFinite(e))return e;const a=jn(t,e);if(!a.startsWith("[object "))return a;if(Zr(e))return e;const c=ts(e),u=c!==void 0?c:n;if(u===0)return a.replace("object ","");if(o(e))return"[Circular ~]";const f=e;if(f&&typeof f.toJSON=="function")try{const p=f.toJSON();return Vt("",p,u-1,r,s)}catch{}const l=Array.isArray(e)?[]:{};let d=0;const g=$n(e);for(const p in g){if(!Object.prototype.hasOwnProperty.call(g,p))continue;if(d>=r){l[p]="[MaxProperties ~]";break}const I=g[p];l[p]=Vt(p,I,u-1,r,s),d++}return i(e),l}function jn(t,e){try{if(Kt){const r=Kt(e);if(r)return r}return typeof global<"u"&&e===global?"[Global]":typeof e=="number"&&!Number.isFinite(e)?`[${e}]`:typeof e=="function"?`[Function: ${$(e)}]`:typeof e=="symbol"?`[${String(e)}]`:typeof e=="bigint"?`[BigInt: ${String(e)}]`:`[object ${ns(e)}]`}catch(n){return`**non-serializable** (${n})`}}function ns(t){const e=Object.getPrototypeOf(t);return e!=null&&e.constructor?e.constructor.name:"null prototype"}function rs(t){return~-encodeURI(t).split(/%..|./).length}function ss(t){return rs(JSON.stringify(t))}function os(){const t=new WeakSet;function e(r){return t.has(r)?!0:(t.add(r),!1)}function n(r){t.delete(r)}return[e,n]}function Xt(t,e=0){return typeof t!="string"||e===0||t.length<=e?t:`${t.slice(0,e)}...`}function is(t,e){if(!Array.isArray(t))return"";const n=[];for(let r=0;rt.randomUUID()).replace(/-/g,"")}catch{}return Ht||(Ht="10000000100040008000"+1e11),Ht.replace(/[018]/g,e=>(e^(cs()&15)>>e/4).toString(16))}function Bn(t){var e,n;return(n=(e=t.exception)==null?void 0:e.values)==null?void 0:n[0]}function H(t){const{message:e,event_id:n}=t;if(e)return e;const r=Bn(t);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||n||"":n||""}function Jt(t,e,n){const r=t.exception=t.exception||{},s=r.values=r.values||[],o=s[0]=s[0]||{};o.value||(o.value=e||""),o.type||(o.type="Error")}function Z(t,e){const n=Bn(t);n&&Un(n,e)}function us(t,e){var s;const n=(s=t.exception)==null?void 0:s.values,r=(n==null?void 0:n.find(o=>{var i;return((i=o.mechanism)==null?void 0:i.exception_id)===0}))??(n==null?void 0:n[0]);r&&Un(r,e)}function Un(t,e){const n={type:"generic",handled:!0},r=t.mechanism;t.mechanism={...n,...r,...e},e&&"data"in e&&(t.mechanism.data={...r==null?void 0:r.data,...e.data})}function De(t){if(fs(t))return!0;try{F(t,"__sentry_captured__",!0)}catch{}return!1}function fs(t){try{return t.__sentry_captured__}catch{}}const Hn=1e3,ls=1e3,ds=100;function yt(){return K()/Hn}let Q=[];function ps(){const{performance:t}=_;if(!(t!=null&&t.now)||!t.timeOrigin)return t!=null&&t.now&&(Q=[{from:0,origin:K()-pt(()=>t.now())}]),yt;let e=t.timeOrigin;Q=[{from:0,origin:e}];let n=!0,r=0;return()=>pt(()=>{const s=t.now(),o=Date.now();return Math.abs(e+s-o)>ls&&(e=o-s,n?Q=[{from:0,origin:e}]:(Q.push({from:r,origin:e}),Q.length>ds&&Q.splice(1,1))),n=!1,r=s,(e+s)/Hn})}let Le;function R(){return(Le??(Le=ps()))()}function hs(t){const e=R(),n={sid:k(),init:!0,timestamp:e,started:e,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>gs(n)};return t&&tt(n,t),n}function tt(t,e={}){if(e.user&&(!t.ipAddress&&e.user.ip_address&&(t.ipAddress=e.user.ip_address),!t.did&&!e.did&&(t.did=e.user.id||e.user.email||e.user.username)),t.timestamp=e.timestamp||R(),e.abnormal_mechanism&&(t.abnormal_mechanism=e.abnormal_mechanism),e.ignoreDuration&&(t.ignoreDuration=e.ignoreDuration),e.sid&&(t.sid=e.sid.length===32?e.sid:k()),e.init!==void 0&&(t.init=e.init),!t.did&&e.did&&(t.did=`${e.did}`),typeof e.started=="number"&&(t.started=e.started),t.ignoreDuration)t.duration=void 0;else if(typeof e.duration=="number")t.duration=e.duration;else{const n=t.timestamp-t.started;t.duration=n>=0?n:0}e.release&&(t.release=e.release),e.environment&&(t.environment=e.environment),!t.ipAddress&&e.ipAddress&&(t.ipAddress=e.ipAddress),!t.userAgent&&e.userAgent&&(t.userAgent=e.userAgent),typeof e.errors=="number"&&(t.errors=e.errors),e.status&&(t.status=e.status)}function ms(t,e){let n={};t.status==="ok"&&(n={status:"exited"}),tt(t,n)}function gs(t){return{sid:`${t.sid}`,init:t.init,started:new Date(t.started*1e3).toISOString(),timestamp:new Date(t.timestamp*1e3).toISOString(),status:t.status,errors:t.errors,did:typeof t.did=="number"||typeof t.did=="string"?`${t.did}`:void 0,duration:t.duration,abnormal_mechanism:t.abnormal_mechanism,attrs:{release:t.release,environment:t.environment,ip_address:t.ipAddress,user_agent:t.userAgent}}}function Et(t,e,n=2){if(!e||typeof e!="object"||n<=0)return e;if(t&&Object.keys(e).length===0)return t;const r={...t};for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=Et(r[s],e[s],n-1));return r}function _s(){return k()}function Wn(){return k().substring(16)}const ys=100;class O{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._attributes={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},F(this,"refs",{}),this._propagationContext={traceId:_s(),sampleRand:Ee()}}clone(){const e=new O;return e._breadcrumbs=[...this._breadcrumbs],e._tags={...this._tags},e._attributes={...this._attributes},e._extra={...this._extra},e._contexts={...this._contexts},this._contexts.flags&&(e._contexts.flags={values:[...this._contexts.flags.values]}),e._user=this._user,e._level=this._level,e._session=this._session,e._transactionName=this._transactionName,e._fingerprint=this._fingerprint,e._eventProcessors=[...this._eventProcessors],e._attachments=[...this._attachments],e._sdkProcessingMetadata={...this._sdkProcessingMetadata},e._propagationContext={...this._propagationContext},e._client=this._client,e._lastEventId=this._lastEventId,e._conversationId=this._conversationId,e.refs={...this.refs},e}setClient(e){this._client=e}setLastEventId(e){this._lastEventId=e}getClient(){return this._client}lastEventId(){return this._lastEventId}addScopeListener(e){this._scopeListeners.push(e)}addEventProcessor(e){return this._eventProcessors.push(e),this}setUser(e){return this._user=e||{email:void 0,id:void 0,ip_address:void 0,username:void 0},this._session&&tt(this._session,{user:e}),this._notifyScopeListeners(),this}getUser(){return this._user}setConversationId(e){return this._conversationId=e||void 0,this._notifyScopeListeners(),this}setTags(e){return this._tags={...this._tags,...e},this._notifyScopeListeners(),this}setTag(e,n){return this.setTags({[e]:n})}setAttributes(e){return this._attributes={...this._attributes,...e},this._notifyScopeListeners(),this}setAttribute(e,n){return this.setAttributes({[e]:n})}removeAttribute(e){return e in this._attributes&&(delete this._attributes[e],this._notifyScopeListeners()),this}setExtras(e){return this._extra={...this._extra,...e},this._notifyScopeListeners(),this}setExtra(e,n){return this._extra={...this._extra,[e]:n},this._notifyScopeListeners(),this}setFingerprint(e){return this._fingerprint=e,this._notifyScopeListeners(),this}setLevel(e){return this._level=e,this._notifyScopeListeners(),this}setTransactionName(e){return this._transactionName=e,this._notifyScopeListeners(),this}setContext(e,n){return n===null?delete this._contexts[e]:this._contexts[e]=n,this._notifyScopeListeners(),this}setSession(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(e){if(!e)return this;const n=typeof e=="function"?e(this):e,r=n instanceof O?n.getScopeData():Nt(n)?e:void 0,{tags:s,attributes:o,extra:i,user:a,contexts:c,level:u,fingerprint:f=[],propagationContext:l,conversationId:d}=r||{};return this._tags={...this._tags,...s},this._attributes={...this._attributes,...o},this._extra={...this._extra,...i},this._contexts={...this._contexts,...c},a&&Object.keys(a).length&&(this._user=a),u&&(this._level=u),f.length&&(this._fingerprint=f),l&&(this._propagationContext=l),d&&(this._conversationId=d),this}addBreadcrumb(e,n){const r=typeof n=="number"?n:ys;if(r<=0)return this;const s={timestamp:yt(),...e,message:e.message?Xt(e.message,2048):e.message};return this._breadcrumbs.push(s),this._breadcrumbs.length>r&&(this._breadcrumbs=this._breadcrumbs.slice(-r)),this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(e){return this._attachments.push(e),this}clearAttachments(){return this._attachments=[],this}getScopeData(){return{breadcrumbs:this._breadcrumbs,attachments:this._attachments,contexts:this._contexts,tags:this._tags,attributes:this._attributes,extra:this._extra,user:this._user,level:this._level,fingerprint:this._fingerprint||[],eventProcessors:this._eventProcessors,propagationContext:this._propagationContext,sdkProcessingMetadata:this._sdkProcessingMetadata,transactionName:this._transactionName,conversationId:this._conversationId}}setSDKProcessingMetadata(e){return this._sdkProcessingMetadata=Et(this._sdkProcessingMetadata,e,2),this}setPropagationContext(e){return this._propagationContext=e,this}getPropagationContext(){return this._propagationContext}captureException(e,n){const r=(n==null?void 0:n.event_id)||k();if(!this._client)return m&&h.warn("No client configured on scope - will not capture exception!"),r;const s=new Error("Sentry syntheticException");return this._client.captureException(e,{originalException:e,syntheticException:s,...n,event_id:r},this),r}captureMessage(e,n,r){const s=(r==null?void 0:r.event_id)||k();if(!this._client)return m&&h.warn("No client configured on scope - will not capture message!"),s;const o=(r==null?void 0:r.syntheticException)??new Error(e);return this._client.captureMessage(e,n,{originalException:e,syntheticException:o,...r,event_id:s},this),s}captureEvent(e,n){const r=e.event_id||(n==null?void 0:n.event_id)||k();return this._client?(this._client.captureEvent(e,{...n,event_id:r},this),r):(m&&h.warn("No client configured on scope - will not capture event!"),r)}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(e=>{e(this)}),this._notifyingListeners=!1)}}function Es(){return st("defaultCurrentScope",()=>new O)}function Ss(){return st("defaultIsolationScope",()=>new O)}const Pe="__SENTRY_SUPPRESS_TRACING__",Me=t=>t instanceof Promise&&!t[qn],qn=Symbol("chained PromiseLike"),bs=(t,e,n)=>{const r=t.then(s=>(e(s),s),s=>{throw n(s),s});return Me(r)&&Me(t)?r:vs(t,r)},vs=(t,e)=>{if(!e)return t;let n=!1;for(const r in t){if(r in e)continue;n=!0;const s=t[r];typeof s=="function"?Object.defineProperty(e,r,{value:(...o)=>s.apply(t,o),enumerable:!0,configurable:!0,writable:!0}):e[r]=s}return n&&Object.assign(e,{[qn]:!0}),e};class Is{constructor(e,n){let r;e?r=e:r=new O;let s;n?s=n:s=new O,this._stack=[{scope:r}],this._isolationScope=s}withScope(e){const n=this._pushScope();let r;try{r=e(n)}catch(s){throw this._popScope(),s}return at(r)?bs(r,()=>this._popScope(),()=>this._popScope()):(this._popScope(),r)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStackTop(){return this._stack[this._stack.length-1]}_pushScope(){const e=this.getScope().clone();return this._stack.push({client:this.getClient(),scope:e}),e}_popScope(){return this._stack.length<=1?!1:!!this._stack.pop()}}function et(){const t=rt(),e=gt(t);return e.stack=e.stack||new Is(Es(),Ss())}function Gn(t){return et().withScope(t)}function Ts(t,e){const n=et();return n.withScope(()=>(n.getStackTop().scope=t,e(t)))}function $e(t){return et().withScope(()=>t(et().getIsolationScope()))}function ks(){return{suppressTracing:ws,withIsolationScope:$e,withScope:Gn,withSetScope:Ts,withSetIsolationScope:(t,e)=>$e(e),getCurrentScope:()=>et().getScope(),getIsolationScope:()=>et().getIsolationScope()}}function ws(t){return Gn(e=>{e.setSDKProcessingMetadata({[Pe]:!0});const n=t();return e.setSDKProcessingMetadata({[Pe]:void 0}),n})}function Lt(t){const e=gt(t);return e.acs?e.acs:ks()}function Rs(t){return typeof t=="object"&&t!=null&&!Array.isArray(t)&&Object.keys(t).includes("value")}function Os(t,e){const{value:n,unit:r}=Rs(t)?t:{value:t,unit:void 0},s=Ns(n),o=r&&typeof r=="string"?{unit:r}:{};if(s)return{...s,...o};if(!e||e==="skip-undefined"&&n===void 0)return;let i="";try{i=JSON.stringify(n)??""}catch{}return{value:i,type:"string",...o}}function Fe(t,e=!1){const n={};for(const[r,s]of Object.entries(t??{})){const o=Os(s,e);o&&(n[r]=o)}return n}function Ns(t){if(Array.isArray(t))return{value:t,type:"array"};const e=typeof t=="string"?"string":typeof t=="boolean"?"boolean":typeof t=="number"&&!Number.isNaN(t)?Number.isInteger(t)?"integer":"double":null;if(e)return{value:t,type:e}}function zn(){var t,e;return(e=(t=gt(rt())).externalPropagationContextProvider)==null?void 0:e.call(t)}function N(){const t=rt();return Lt(t).getCurrentScope()}function L(){const t=rt();return Lt(t).getIsolationScope()}function Cs(){return st("globalScope",()=>new O)}function As(...t){const e=rt(),n=Lt(e);if(t.length===2){const[r,s]=t;return r?n.withSetScope(r,s):n.withScope(s)}return n.withScope(t[0])}function S(){return N().getClient()}function Yn(t){const e=zn();if(e)return{trace_id:e.traceId,span_id:e.spanId};const n=t.getPropagationContext(),{traceId:r,parentSpanId:s,propagationSpanId:o}=n,i={trace_id:r,span_id:o||Wn()};return s&&(i.parent_span_id=s),i}const xs="gen_ai.conversation.id",Ds="http.request.header",Kn="sentry.exclusive_time",Ls="sentry.is_localhost",Vn="sentry.op",Ps="sentry.origin",Xn="sentry.profile_id",Ms="sentry.segment.name.source",$s="url.full",Fs="user_agent.original",js="sentry.sample_rate",Bs="sentry.previous_trace_sample_rate",Us=["ok","deadline_exceeded","unauthenticated","permission_denied","not_found","resource_exhausted","invalid_argument","unimplemented","unavailable","internal_error","unknown_error","cancelled","already_exists","failed_precondition","aborted","out_of_range","data_loss"],Hs=0,Ws=1;function qs(t){return t!=="ok"&&Us.includes(t)}function Jn(t){if(t){if(typeof t=="object"&&"deref"in t&&typeof t.deref=="function")try{return t.deref()}catch{return}return t}}const Gs="_sentryScope",zs="_sentryIsolationScope";function Qt(t){const e=t;return{scope:e[Gs],isolationScope:Jn(e[zs])}}const je="sentry-";function Ys(t){const e=Ks(t);if(!e)return;const n=Object.entries(e).reduce((r,[s,o])=>{if(s.startsWith(je)){const i=s.slice(je.length);r[i]=o}return r},{});if(Object.keys(n).length>0)return n}function Ks(t){if(!(!t||!x(t)&&!Array.isArray(t)))return Array.isArray(t)?t.reduce((e,n)=>{const r=Be(n);return Object.entries(r).forEach(([s,o])=>{e[s]=o}),e},{}):Be(t)}function Be(t){return t.split(",").map(e=>{const n=e.indexOf("=");if(n===-1)return[];const r=e.slice(0,n),s=e.slice(n+1);return[r,s].map(o=>{try{return decodeURIComponent(o.trim())}catch{return}})}).reduce((e,[n,r])=>(n&&r&&(e[n]=r),e),{})}const Vs=/^o(\d+)\./,Xs=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)((?:\[[:.%\w]+\]|[\w.-]+))(?::(\d+))?\/(.+)/;function Js(t){return t==="http"||t==="https"}function St(t,e=!1){const{host:n,path:r,pass:s,port:o,projectId:i,protocol:a,publicKey:c}=t;return`${a}://${c}${e&&s?`:${s}`:""}@${n}${o?`:${o}`:""}/${r&&`${r}/`}${i}`}function Qs(t){const e=Xs.exec(t);if(!e){j(()=>{console.error(`Invalid Sentry Dsn: ${t}`)});return}const[n,r,s="",o="",i="",a=""]=e.slice(1);let c="",u=a;const f=u.split("/");if(f.length>1&&(c=f.slice(0,-1).join("/"),u=f.pop()),u){const l=u.match(/^\d+/);l&&(u=l[0])}return Qn({host:o,pass:s,path:c,projectId:u,port:i,protocol:n,publicKey:r})}function Qn(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function Zs(t){if(!m)return!0;const{port:e,projectId:n,protocol:r}=t;return["protocol","publicKey","host","projectId"].find(i=>t[i]?!1:(h.error(`Invalid Sentry Dsn: ${i} missing`),!0))?!1:n.match(/^\d+$/)?Js(r)?e&&isNaN(parseInt(e,10))?(h.error(`Invalid Sentry Dsn: Invalid port ${e}`),!1):!0:(h.error(`Invalid Sentry Dsn: Invalid protocol ${r}`),!1):(h.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),!1)}function to(t){const e=t.match(Vs);return e==null?void 0:e[1]}function eo(t){const e=t.getOptions(),{host:n}=t.getDsn()||{};let r;return e.orgId?r=String(e.orgId):n&&(r=to(n)),r}function no(t){const e=typeof t=="string"?Qs(t):Qn(t);if(!(!e||!Zs(e)))return e}function ro(t){if(typeof t=="boolean")return Number(t);const e=typeof t=="string"?parseFloat(t):t;if(!(typeof e!="number"||isNaN(e)||e<0||e>1))return e}const so="span";function oo(t){return Jn(t.refs[so])}const Zn=1;function io(t){const{spanId:e,traceId:n,isRemote:r}=t.spanContext(),s=r?e:Pt(t).parent_span_id,o=Qt(t).scope,i=r?(o==null?void 0:o.getPropagationContext().propagationSpanId)||Wn():e;return{parent_span_id:s,span_id:i,trace_id:n}}function ao(t){if(t&&t.length>0)return t.map(({context:{spanId:e,traceId:n,traceFlags:r,...s},attributes:o})=>({span_id:e,trace_id:n,sampled:r===Zn,attributes:o,...s}))}function Ue(t){return typeof t=="number"?He(t):Array.isArray(t)?t[0]+t[1]/1e9:t instanceof Date?He(t.getTime()):R()}function He(t){return t>9999999999?t/1e3:t}function Pt(t){if(lo(t))return t.getStaticSpanJSON();const{spanId:e,traceId:n}=t.spanContext();if(fo(t)){const{attributes:r,startTime:s,name:o,endTime:i,status:a,links:c}=t;return{span_id:e,trace_id:n,data:r,description:o,parent_span_id:co(t),start_timestamp:Ue(s),timestamp:Ue(i)||void 0,status:ho(a),op:r[Vn],origin:r[Ps],links:ao(c)}}return{span_id:e,trace_id:n,start_timestamp:0,status:"ok",data:{}}}function co(t){var e;return"parentSpanId"in t?t.parentSpanId:"parentSpanContext"in t?(e=t.parentSpanContext)==null?void 0:e.spanId:void 0}function uo(t){var e;return{...t,end_timestamp:t.end_timestamp??t.start_timestamp,attributes:Fe(t.attributes),links:(e=t.links)==null?void 0:e.map(n=>({...n,attributes:Fe(n.attributes)}))}}function fo(t){const e=t;return!!e.attributes&&!!e.startTime&&!!e.name&&!!e.endTime&&!!e.status}function lo(t){return typeof t.getSpanJSON=="function"}function po(t){const{traceFlags:e}=t.spanContext();return e===Zn}function ho(t){return!t||t.code===Hs||t.code===Ws?"ok":t.message&&qs(t.message)?t.message:"internal_error"}const mo="_sentryRootSpan",tr=go;function go(t){return t[mo]||t}function _o(t){const e=rt(),n=Lt(e);return n.getActiveSpan?n.getActiveSpan(t):oo(t||N())}function We(t){var n;if(typeof __SENTRY_TRACING__=="boolean"&&!__SENTRY_TRACING__)return!1;const e=t||((n=S())==null?void 0:n.getOptions());return!!e&&(e.tracesSampleRate!=null||!!e.tracesSampler)}function qe(t){h.log(`Ignoring span ${t.op} - ${t.description} because it matches \`ignoreSpans\`.`)}function Ge(t,e){if(!(e!=null&&e.length))return!1;for(const n of e){if(So(n)){if(t.description&&dt(t.description,n))return m&&qe(t),!0;continue}const r=!!n.attributes&&Object.keys(n.attributes).length>0;if(!n.name&&!n.op&&!r)continue;const s=n.name?t.description&&dt(t.description,n.name):!0,o=n.op?t.op&&dt(t.op,n.op):!0,i=n.attributes?Object.entries(n.attributes).every(([a,c])=>{var u;return yo((u=t.attributes)==null?void 0:u[a],c)}):!0;if(s&&o&&i)return m&&qe(t),!0}return!1}function yo(t,e){return typeof t=="string"&&(typeof e=="string"||e instanceof RegExp)?dt(t,e):Array.isArray(t)&&Array.isArray(e)?t.length===e.length&&t.every((n,r)=>n===e[r]):t===e}function Eo(t,e){const n=e.parent_span_id,r=e.span_id;if(n)for(const s of t)s.parent_span_id===r&&(s.parent_span_id=n)}function So(t){return typeof t=="string"||t instanceof RegExp}const ze=[];function bo(t){const e={};return t.forEach(n=>{const{name:r}=n,s=e[r];s&&!s.isDefaultInstance&&n.isDefaultInstance||(e[r]=n)}),Object.values(e)}function vo(t){const e=t.defaultIntegrations||[],n=t.integrations;e.forEach(s=>{s.isDefaultInstance=!0});let r;if(Array.isArray(n))r=[...e,...n];else if(typeof n=="function"){const s=n(e);r=Array.isArray(s)?s:[s]}else r=e;return bo(r)}function Io(t,e){const n={};return e.forEach(r=>{r!=null&&r.beforeSetup&&r.beforeSetup(t)}),e.forEach(r=>{r&&er(t,r,n)}),n}function Ye(t,e){for(const n of e)n!=null&&n.afterAllSetup&&n.afterAllSetup(t)}function er(t,e,n){if(n[e.name]){m&&h.log(`Integration skipped because it was already installed: ${e.name}`);return}if(n[e.name]=e,!ze.includes(e.name)&&typeof e.setupOnce=="function"&&(e.setupOnce(),ze.push(e.name)),e.setup&&typeof e.setup=="function"&&e.setup(t),typeof e.preprocessEvent=="function"){const r=e.preprocessEvent.bind(e);t.on("preprocessEvent",(s,o)=>r(s,o,t))}if(typeof e.processEvent=="function"){const r=e.processEvent.bind(e),s=Object.assign((o,i)=>r(o,i,t),{id:e.name});t.addEventProcessor(s)}["processSpan","processSegmentSpan"].forEach(r=>{const s=e[r];typeof s=="function"&&t.on(r,o=>s.call(e,o,t))}),m&&h.log(`Integration installed: ${e.name}`)}const Se="production",To=Symbol.for("sentry.nonRecordingSpan");function ko(t){return!!t&&t[To]===!0}const wo="_frozenDsc";function nr(t,e){const n=e.getOptions(),{publicKey:r}=e.getDsn()||{},s={environment:n.environment||Se,release:n.release,public_key:r,trace_id:t,org_id:eo(e)};return e.emit("createDsc",s),s}function rr(t,e){if(zn())return;const n=e.getPropagationContext();return n.dsc||nr(n.traceId,t)}function Ro(t){var V;const e=S();if(!e)return{};const n=tr(t),r=Pt(n),s=r.data,o=n.spanContext().traceState,i=(o==null?void 0:o.get("sentry.sample_rate"))??s[js]??s[Bs];function a(b){return(typeof i=="number"||typeof i=="string")&&(b.sample_rate=`${i}`),b}const c=n[wo];if(c)return a(c);const u=ko(n),f=u&&n.dropReason==="ignored";if(u&&(!We(e.getOptions())||f)){const b=Qt(n).scope,B=b&&rr(e,b);if(B){const X={...B};return f&&(X.sampled="false"),a(X)}}const l=o==null?void 0:o.get("sentry.dsc"),d=l&&Ys(l);if(d)return a(d);const g=nr(t.spanContext().traceId,e),p=s[Ms],I=r.description;return p!=="url"&&I&&(g.transaction=I),We()&&(g.sampled=String(po(n)),g.sample_rand=(o==null?void 0:o.get("sentry.sample_rand"))??((V=Qt(n).scope)==null?void 0:V.getPropagationContext().sampleRand.toString())),a(g),e.emit("createDsc",g,n),g}function Oo(t,e){const{fingerprint:n,breadcrumbs:r,sdkProcessingMetadata:s}=e;No(t,e),Do(t,n),Co(t,r),Ao(t,s)}function Ke(t,e){const{extra:n,tags:r,attributes:s,user:o,contexts:i,level:a,sdkProcessingMetadata:c,breadcrumbs:u,fingerprint:f,eventProcessors:l,attachments:d,propagationContext:g,transactionName:p}=e;ut(t,"extra",n),ut(t,"tags",r),ut(t,"attributes",s),ut(t,"user",o),ut(t,"contexts",i),t.sdkProcessingMetadata=Et(t.sdkProcessingMetadata,c,2),a&&(t.level=a),p&&(t.transactionName=p),u.length&&(t.breadcrumbs=[...t.breadcrumbs,...u]),f.length&&(t.fingerprint=[...t.fingerprint,...f]),l.length&&(t.eventProcessors=[...t.eventProcessors,...l]),d.length&&(t.attachments=[...t.attachments,...d]),t.propagationContext={...t.propagationContext,...g}}function ut(t,e,n){t[e]=Et(t[e],n,1)}function sr(t,e){const n=Cs().getScopeData();return t&&Ke(n,t.getScopeData()),e&&Ke(n,e.getScopeData()),n}function No(t,e){const{extra:n,tags:r,user:s,contexts:o,level:i,transactionName:a}=e;Object.keys(n).length&&(t.extra={...n,...t.extra}),Object.keys(r).length&&(t.tags={...r,...t.tags}),Object.keys(s).length&&(t.user={...s,...t.user}),Object.keys(o).length&&(t.contexts={...o,...t.contexts}),i&&(t.level=i),a&&t.type!=="transaction"&&(t.transaction=a)}function Co(t,e){const n=[...t.breadcrumbs||[],...e];t.breadcrumbs=n.length?n:void 0}function Ao(t,e){t.sdkProcessingMetadata={...t.sdkProcessingMetadata,...e}}function xo(t,e){t.contexts={trace:io(e),...t.contexts},t.sdkProcessingMetadata={dynamicSamplingContext:Ro(e),...t.sdkProcessingMetadata};const n=tr(e),r=Pt(n).description;r&&!t.transaction&&t.type==="transaction"&&(t.transaction=r)}function Do(t,e){t.fingerprint=t.fingerprint?Array.isArray(t.fingerprint)?t.fingerprint:[t.fingerprint]:[],e&&(t.fingerprint=t.fingerprint.concat(e)),t.fingerprint.length||delete t.fingerprint}function ht(t,e,n){let r;try{r=e()}catch(s){return Ve(t,s,n)}return at(r)?r.then(void 0,s=>Ve(t,s,n)):r}function Ve(t,e,n){return m&&h.error(t,e),n(e)}function or(t){return!!t&&typeof t=="function"&&"_static"in t&&!!t._static}function Xe(t,e){return ht(m?"The `beforeSendSpan` callback threw an error, sending the span unmodified:":"",()=>e(t),()=>t)||t}function Lo(t){const e={trace_id:t.trace_id,span_id:t.span_id,parent_span_id:t.parent_span_id,name:t.description||"",start_timestamp:t.start_timestamp,end_timestamp:t.timestamp,status:!t.status||t.status==="ok"||t.status==="cancelled"?"ok":"error",is_segment:!1,attributes:{...t.data},links:t.links};return uo(e)}function ir(t,e){const n=t.attributes??(t.attributes={});Object.entries(e).forEach(([r,s])=>{s!=null&&!(r in n)&&(n[r]=s)})}function Po(t){return t.getOptions().traceLifecycle==="stream"}function ar(t){return typeof t=="object"&&typeof t.unref=="function"&&t.unref(),t}function ct(t,e=[]){return[t,e]}function Je(t,e){const[n,r]=t;return[n,[...r,e]]}function Zt(t,e){const n=t[1];for(const r of n){const s=r[0].type;if(e(r,s))return!0}return!1}function Mo(t,e){return Zt(t,(n,r)=>e.includes(r))}function te(t){const e=gt(_);return e.encodePolyfill?e.encodePolyfill(t):new TextEncoder().encode(t)}function $o(t){const[e,n]=t;let r=JSON.stringify(e);function s(o){typeof r=="string"?r=typeof o=="string"?r+o:[te(r),o]:r.push(typeof o=="string"?te(o):o)}for(const o of n){const[i,a]=o;if(s(` +${JSON.stringify(i)} +`),typeof a=="string"||a instanceof Uint8Array)s(a);else{let c;try{c=JSON.stringify(a)}catch{c=JSON.stringify(A(a))}s(c)}}return typeof r=="string"?r:Fo(r)}function Fo(t){const e=t.reduce((s,o)=>s+o.length,0),n=new Uint8Array(e);let r=0;for(const s of t)n.set(s,r),r+=s.length;return n}function jo(t){const e=typeof t.data=="string"?te(t.data):t.data;return[{type:"attachment",length:e.length,filename:t.filename,content_type:t.contentType,attachment_type:t.attachmentType},e]}const cr={sessions:"session",event:"error",client_report:"internal",user_report:"default",profile_chunk:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",raw_security:"security",log:"log_item",trace_metric:"metric"};function Bo(t){return t in cr}function Qe(t){return Bo(t)?cr[t]:t}function ur(t){if(!(t!=null&&t.sdk))return;const{name:e,version:n}=t.sdk;return{name:e,version:n}}function Uo(t,e,n,r){var o;const s=(o=t.sdkProcessingMetadata)==null?void 0:o.dynamicSamplingContext;return{event_id:t.event_id,sent_at:new Date(K()).toISOString(),...e&&{sdk:e},...!!n&&r&&{dsn:St(r)},...s&&{trace:s}}}function ee(t){return t==="replay_event"?"replay":t||"error"}function Ho(){return typeof __SENTRY_BROWSER_BUNDLE__<"u"&&!!__SENTRY_BROWSER_BUNDLE__}function Wo(){/*! __SENTRY_SDK_SOURCE__ */return"npm"}function qo(){return!Ho()&&Object.prototype.toString.call(typeof process<"u"?process:0)==="[object process]"}function Mt(){return typeof window<"u"&&(!qo()||Go())}function Go(){const t=_.process;return(t==null?void 0:t.type)==="renderer"}function zo(t,e){const n=e.getDataCollectionOptions().userInfo?"auto":"never";return[{type:"span",item_count:t.length,content_type:"application/vnd.sentry.items.span.v2+json"},{version:2,ingest_settings:Mt()?{infer_ip:n,infer_user_agent:n}:void 0,items:t}]}const Yo=new WeakMap;function Ko(t){return it(t)?void 0:t}function Vo(t,e,n){var a;const r=Ko(e.originalException),s=r&&Yo.get(r);if(!s)return;const o=(a=t.contexts)==null?void 0:a.trace;((o==null?void 0:o.trace_id)??(n&&Yn(n).trace_id))===s.trace_id&&(t.contexts={...t.contexts,trace:{...o,...s}})}function Xo(t,e){var r,s,o,i;if(!e)return t;const n=t.sdk||{};return t.sdk={...n,name:n.name||e.name,version:n.version||e.version,integrations:[...((r=t.sdk)==null?void 0:r.integrations)||[],...e.integrations||[]],packages:[...((s=t.sdk)==null?void 0:s.packages)||[],...e.packages||[]],settings:(o=t.sdk)!=null&&o.settings||e.settings?{...(i=t.sdk)==null?void 0:i.settings,...e.settings}:void 0},t}function Jo(t,e,n,r){const s=ur(n),o={sent_at:new Date(K()).toISOString(),...s&&{sdk:s},...!!r&&e&&{dsn:St(e)}},i="aggregates"in t?[{type:"sessions"},t]:[{type:"session"},t.toJSON()];return ct(o,[i])}function Qo(t,e,n,r){const s=ur(n),o=t.type&&t.type!=="replay_event"?t.type:"event";Xo(t,n==null?void 0:n.sdk);const i=Uo(t,s,r,e);return delete t.sdkProcessingMetadata,ct(i,[[{type:o},t]])}const Wt=0,Ze=1,tn=2;function bt(t){return new mt(e=>{e(t)})}function fr(t){return new mt((e,n)=>{n(t)})}class mt{constructor(e){this._state=Wt,this._handlers=[],this._runExecutor(e)}then(e,n){return new mt((r,s)=>{this._handlers.push([!1,o=>{if(!e)r(o);else try{r(e(o))}catch(i){s(i)}},o=>{if(!n)s(o);else try{r(n(o))}catch(i){s(i)}}]),this._executeHandlers()})}catch(e){return this.then(n=>n,e)}finally(e){return new mt((n,r)=>{let s,o;return this.then(i=>{o=!1,s=i,e&&e()},i=>{o=!0,s=i,e&&e()}).then(()=>{if(o){r(s);return}n(s)})})}_executeHandlers(){if(this._state===Wt)return;const e=this._handlers.slice();this._handlers=[],e.forEach(n=>{n[0]||(this._state===Ze&&n[1](this._value),this._state===tn&&n[2](this._value),n[0]=!0)})}_runExecutor(e){const n=(o,i)=>{if(this._state===Wt){if(at(i)){i.then(r,s);return}this._state=o,this._value=i,this._executeHandlers()}},r=o=>{n(Ze,o)},s=o=>{n(tn,o)};try{e(r,s)}catch(o){s(o)}}}function Zo(t,e,n,r=0,s){try{const o=ne(e,n,t,r,s);return at(o)?o:bt(o)}catch(o){return fr(o)}}function ne(t,e,n,r,s){const o=n[r];if(!t||!o)return t;const i=`Event processor "${o.id||"?"}"`;let a=!1;const c=ht(m?`${i} threw an error, dropping event:`:"",()=>o({...t},e),()=>(a=!0,null));return m&&c===null&&h.log(`${i} dropped event`),at(c)?c.then(u=>u?ne(u,e,n,r+1,s):(s==null||s(a?"callback_error":"event_processor"),null)):c?ne(c,e,n,r+1,s):(s==null||s(a?"callback_error":"event_processor"),null)}let C,en,nn,P;function ti(t){const e=_._sentryDebugIds,n=_._debugIds;if(!e&&!n)return{};const r=e?Object.keys(e):[],s=n?Object.keys(n):[];if(P&&r.length===en&&s.length===nn)return P;en=r.length,nn=s.length,P={},C||(C={});const o=(i,a)=>{for(const c of i){const u=a[c],f=C==null?void 0:C[c];if(f&&P&&u)P[f[0]]=u,C&&(C[c]=[f[0],u]);else if(u){const l=t(c);for(let d=l.length-1;d>=0;d--){const g=l[d],p=g==null?void 0:g.filename;if(p&&P&&C){P[p]=u,C[c]=[p,u];break}}}}};return e&&o(r,e),n&&o(s,n),P}function re(t){var e;return((e=t.data)==null?void 0:e.__sentry__)===!0}function lr(t){const e=[];t.message&&e.push(t.message);try{const n=t.exception.values[t.exception.values.length-1];n!=null&&n.value&&(e.push(n.value),n.type&&e.push(`${n.type}: ${n.value}`))}catch{}return e}function ei(t,e,n,r,s,o){const{normalizeDepth:i=3,normalizeMaxBreadth:a=1e3}=t,c={...e,event_id:e.event_id||n.event_id||k(),timestamp:e.timestamp||yt()},u=n.integrations||t.integrations.map(b=>b.name);ni(c,t),oi(c,u),s&&s.emit("applyFrameMetadata",e),e.type===void 0&&ri(c,t.stackParser);const f=ai(r,n.captureContext);n.mechanism&&us(c,n.mechanism);const l=s?s.getEventProcessors():[],d=sr(o,f),g=[...n.attachments||[],...d.attachments];g.length&&(n.attachments=g),Oo(c,d);const p=_o(f);p&&xo(c,p),Vo(c,n,f);const I=[...l,...d.eventProcessors];return(re(n)?bt(c):Zo(I,c,n,0,b=>{s&&(s.recordDroppedEvent(b,ee(e.type)),e.type==="transaction"&&s.recordDroppedEvent(b,"span",1+(e.spans||[]).length))})).then(b=>b?(si(b),typeof i=="number"&&i>0?ii(b,i,a):b):null)}function ni(t,e){var a,c;const{environment:n,release:r,dist:s,maxValueLength:o}=e;t.environment=t.environment||n||Se,!t.release&&r&&(t.release=r),!t.dist&&s&&(t.dist=s);const i=t.request;i!=null&&i.url&&o&&(i.url=Xt(i.url,o)),o&&((c=(a=t.exception)==null?void 0:a.values)==null||c.forEach(u=>{u.value&&(u.value=Xt(u.value,o))}))}function ri(t,e){var r,s;const n=ti(e);(s=(r=t.exception)==null?void 0:r.values)==null||s.forEach(o=>{var i,a;(a=(i=o.stacktrace)==null?void 0:i.frames)==null||a.forEach(c=>{c.filename&&(c.debug_id=n[c.filename])})})}function si(t){var r,s;const e={};if((s=(r=t.exception)==null?void 0:r.values)==null||s.forEach(o=>{var i,a;(a=(i=o.stacktrace)==null?void 0:i.frames)==null||a.forEach(c=>{c.debug_id&&(c.abs_path?e[c.abs_path]=c.debug_id:c.filename&&(e[c.filename]=c.debug_id),delete c.debug_id)})}),Object.keys(e).length===0)return;t.debug_meta=t.debug_meta||{},t.debug_meta.images=t.debug_meta.images||[];const n=t.debug_meta.images;Object.entries(e).forEach(([o,i])=>{n.push({type:"sourcemap",code_file:o,debug_id:i})})}function oi(t,e){e.length>0&&(t.sdk=t.sdk||{},t.sdk.integrations=[...t.sdk.integrations||[],...e])}function ii(t,e,n){var s,o;if(!t)return null;const r={...t,...t.breadcrumbs&&{breadcrumbs:t.breadcrumbs.map(i=>({...i,...i.data&&{data:A(i.data,e,n)}}))},...t.user&&{user:A(t.user,e,n)},...t.contexts&&{contexts:A(t.contexts,e,n)},...t.extra&&{extra:A(t.extra,e,n)}};return(s=t.contexts)!=null&&s.trace&&r.contexts&&(r.contexts.trace=t.contexts.trace,t.contexts.trace.data&&(r.contexts.trace.data=A(t.contexts.trace.data,e,n))),t.spans&&(r.spans=t.spans.map(i=>({...i,...i.data&&{data:A(i.data,e,n)}}))),(o=t.contexts)!=null&&o.flags&&r.contexts&&(r.contexts.flags=A(t.contexts.flags,3,n)),r}function ai(t,e){if(!e)return t;const n=t?t.clone():new O;return n.update(e),n}function ci(t){if(t)return ui(t)?{captureContext:t}:li(t)?{captureContext:t}:t}function ui(t){return t instanceof O||typeof t=="function"}const fi=["user","level","extra","contexts","tags","fingerprint","propagationContext"];function li(t){return Object.keys(t).some(e=>fi.includes(e))}function di(t,e){return N().captureException(t,ci(e))}function dr(t,e){return N().captureEvent(t,e)}function Du(t,e){L().setTag(t,e)}function Lu(t){L().setUser(t)}function rn(t){const e=L(),{user:n}=sr(e,N()),{userAgent:r}=_.navigator||{},s=hs({user:n,...r&&{userAgent:r},...t}),o=e.getSession();return(o==null?void 0:o.status)==="ok"&&tt(o,{status:"exited"}),pr(),e.setSession(s),s}function pr(){const t=L(),n=N().getSession()||t.getSession();n&&ms(n),hr(),t.setSession()}function hr(){const t=L(),e=S(),n=t.getSession();n&&e&&e.captureSession(n)}function qt(t=!1){if(t){pr();return}hr()}const pi="7";function hi(t){const e=t.protocol?`${t.protocol}:`:"",n=t.port?`:${t.port}`:"";return`${e}//${t.host}${n}${t.path?`/${t.path}`:""}/api/`}function mi(t){return`${hi(t)}${t.projectId}/envelope/`}function gi(t,e){const n={sentry_version:pi};return t.publicKey&&(n.sentry_key=t.publicKey),e&&(n.sentry_client=`${e.name}/${e.version}`),new URLSearchParams(n).toString()}function _i(t,e,n){return e||`${mi(t)}?${gi(t,n)}`}function yi(t,e){const n=e?"auto":"never";return[{type:"log",item_count:t.length,content_type:"application/vnd.sentry.items.log+json"},{version:2,...Mt()&&{ingest_settings:{infer_ip:n,infer_user_agent:n}},items:t}]}function Ei(t,e,n,r,s){const o={};return e!=null&&e.sdk&&(o.sdk={name:e.sdk.name,version:e.sdk.version}),n&&r&&(o.dsn=St(r)),ct(o,[yi(t,s)])}function Si(t,e){const n=e??bi(t)??[];if(n.length===0)return;const r=t.getOptions(),s=Ei(n,r._metadata,r.tunnel,t.getDsn(),t.getDataCollectionOptions().userInfo);mr().set(t,[]),t.emit("flushLogs"),t.sendEnvelope(s)}function bi(t){return mr().get(t)}function mr(){return st("clientToLogBufferMap",()=>new WeakMap)}function vi(t,e){const n=e?"auto":"never";return[{type:"trace_metric",item_count:t.length,content_type:"application/vnd.sentry.items.trace-metric+json"},{version:2,...Mt()&&{ingest_settings:{infer_ip:n,infer_user_agent:n}},items:t}]}function Ii(t,e,n,r,s){const o={};return e!=null&&e.sdk&&(o.sdk={name:e.sdk.name,version:e.sdk.version}),n&&r&&(o.dsn=St(r)),ct(o,[vi(t,s)])}function Ti(t,e){const n=e??ki(t)??[];if(n.length===0)return;const r=t.getOptions(),s=Ii(n,r._metadata,r.tunnel,t.getDsn(),t.getDataCollectionOptions().userInfo);gr().set(t,[]),t.emit("flushMetrics"),t.sendEnvelope(s)}function ki(t){return gr().get(t)}function gr(){return st("clientToMetricBufferMap",()=>new WeakMap)}function wi(t,e){var s,o,i;if(t.type!=="transaction"||!((s=t.spans)!=null&&s.length)||!((o=t.sdkProcessingMetadata)!=null&&o.hasGenAiSpans)||Po(e))return;const n=[],r=[];for(const a of t.spans)(i=a.op)!=null&&i.startsWith("gen_ai.")?n.push(Lo(a)):r.push(a);if(n.length!==0)return t.spans=r,zo(n,e)}const be=Symbol.for("SentryBufferFullError");function ve(t=100){const e=new Set;function n(){return e.sizer(a),()=>r(a)),a}function o(i){if(!e.size)return bt(!0);const a=Promise.allSettled(Array.from(e)).then(()=>!0);if(!i)return a;const c=[a,new Promise(u=>ar(setTimeout(()=>u(!1),i)))];return Promise.race(c)}return{get $(){return Array.from(e)},add:s,drain:o}}const Ri=60*1e3;function Oi(t,e=K()){const n=parseInt(`${t}`,10);if(!isNaN(n))return n*1e3;const r=Date.parse(`${t}`);return isNaN(r)?Ri:r-e}function Ni(t,e){return t[e]||t.all||0}function Ci(t,e,n=K()){return Ni(t,e)>n}function Ai(t,{statusCode:e,headers:n},r=K()){const s={...t},o=n==null?void 0:n["x-sentry-rate-limits"],i=n==null?void 0:n["retry-after"];if(o)for(const a of o.trim().split(",")){const[c,u,,,f]=a.split(":",5),l=parseInt(c,10),d=(isNaN(l)?60:l)*1e3;if(!u)s.all=r+d;else for(const g of u.split(";"))g==="metric_bucket"?(!f||f.split(";").includes("custom"))&&(s[g]=r+d):s[g]=r+d}else i?s.all=r+Oi(i,r):e===429&&(s.all=r+60*1e3);return s}const _r=64;function xi(t,e,n=ve(t.bufferSize||_r)){let r={};const s=i=>n.drain(i);function o(i){const a=[];if(Zt(i,(l,d)=>{const g=Qe(d);Ci(r,g)?t.recordDroppedEvent("ratelimit_backoff",g):a.push(l)}),a.length===0)return Promise.resolve({});const c=ct(i[0],a),u=l=>{if(Mo(c,["client_report"])){m&&h.warn(`Dropping client report. Will not send outcomes (reason: ${l}).`);return}Zt(c,(d,g)=>{t.recordDroppedEvent(l,Qe(g))})},f=()=>e({body:$o(c)}).then(l=>l.statusCode===413?(m&&h.error("Sentry responded with status code 413. Envelope was discarded due to exceeding size limits."),u("send_error"),l):(m&&l.statusCode!==void 0&&(l.statusCode<200||l.statusCode>=300)&&h.warn(`Sentry responded with status code ${l.statusCode} to sent event.`),r=Ai(r,l),l),l=>{throw u("network_error"),m&&h.error("Encountered error running transport request:",l),l});return n.add(f).then(l=>l,l=>{if(l===be)return m&&h.error("Skipped sending event because buffer is full."),u("queue_overflow"),Promise.resolve({});throw l})}return{send:o,flush:s}}function Di(t,e,n){const r=[{type:"client_report"},{timestamp:yt(),discarded_events:t}];return ct(e?{dsn:e}:{},[r])}function Li(t){var c;const{trace_id:e,parent_span_id:n,span_id:r,status:s,origin:o,data:i,op:a}=((c=t.contexts)==null?void 0:c.trace)??{};return{data:i??{},description:t.transaction,op:a,parent_span_id:n,span_id:r??"",start_timestamp:t.start_timestamp??0,status:s??"ok",timestamp:t.timestamp,trace_id:e??"",origin:o,profile_id:i==null?void 0:i[Xn],exclusive_time:i==null?void 0:i[Kn],measurements:t.measurements,is_segment:!0}}function Pi(t){return{type:"transaction",timestamp:t.timestamp,start_timestamp:t.start_timestamp,transaction:t.description,contexts:{trace:{trace_id:t.trace_id,span_id:t.span_id,parent_span_id:t.parent_span_id,op:t.op,status:t.status,origin:t.origin,data:{...t.data,...t.profile_id&&{[Xn]:t.profile_id},...t.exclusive_time&&{[Kn]:t.exclusive_time}}}},measurements:t.measurements}}function Mi(t){var e;t.traceLifecycle!=="stream"||!(t.beforeSendTransaction||(e=t.ignoreTransactions)!=null&&e.length)||j(()=>{console.warn("[Sentry] `beforeSendTransaction` and `ignoreTransactions` are ignored with `traceLifecycle: 'stream'` (enabled by default). Use `beforeSendSpan` and `ignoreSpans` instead, or set `traceLifecycle: 'static'`.")})}const v={userInfo:!0,cookies:!0,httpHeaders:{request:!0,response:!0},httpBodies:["incomingRequest","outgoingRequest","incomingResponse","outgoingResponse"],urlQueryParams:!0,graphQL:{document:!0,variables:!0},genAI:{inputs:!0,outputs:!0},databaseQueryData:!0,queues:!0,stackFrameVariables:!0,frameContextLines:5};function $i(t){return typeof t=="boolean"||"allow"in t||"deny"in t}function Fi(t){return t===void 0?{...v.httpHeaders}:$i(t)?{request:t,response:t}:{request:t.request??v.httpHeaders.request,response:t.response??v.httpHeaders.response}}function ji(t){var n,r,s,o;const e=t.dataCollection??{};return{userInfo:e.userInfo??v.userInfo,cookies:e.cookies??v.cookies,httpHeaders:Fi(e.httpHeaders),httpBodies:e.httpBodies??v.httpBodies,urlQueryParams:e.urlQueryParams??v.urlQueryParams,graphQL:{document:((n=e.graphQL)==null?void 0:n.document)??v.graphQL.document,variables:((r=e.graphQL)==null?void 0:r.variables)??v.graphQL.variables},genAI:{inputs:((s=e.genAI)==null?void 0:s.inputs)??v.genAI.inputs,outputs:((o=e.genAI)==null?void 0:o.outputs)??v.genAI.outputs},databaseQueryData:e.databaseQueryData??v.databaseQueryData,queues:e.queues??v.queues,stackFrameVariables:e.stackFrameVariables??v.stackFrameVariables,frameContextLines:e.frameContextLines??v.frameContextLines}}const sn="Not capturing exception because it's already been captured.",on="Discarded session because of missing or non-string release",yr=Symbol.for("SentryInternalError"),Er=Symbol.for("SentryDoNotSendEventError"),Bi=5e3,Sr=Symbol.for("SentryClosedClient");function Ui(t){return Sr in t}function kt(t){return{message:t,[yr]:!0}}function Gt(t){return{message:t,[Er]:!0}}function an(t){return xt(t)&&yr in t}function cn(t){return xt(t)&&Er in t}function un(t,e,n,r,s){let o=0,i,a=!1;t.on(n,()=>{o=0,clearTimeout(i),a=!1}),t.on(e,c=>{if(o+=r(c),o>=8e5)s(t);else if(!a){const u=t.getOptions()._flushInterval??Bi;u>0&&(a=!0,i=ar(setTimeout(()=>{s(t)},u)))}}),t.on("flush",()=>{s(t)})}class Hi{constructor(e){var s;this._options={attachStacktrace:!0,...e,traceLifecycle:e.traceLifecycle==="static"?"static":"stream"},this._integrations={},this._numProcessing=0,this._outcomes={},this._hooks={},this._eventProcessors=[],this._promiseBuffer=ve(((s=e.transportOptions)==null?void 0:s.bufferSize)??_r),this._dataCollection=ji(e),this._unhandledSessionStatus="crashed",e.dsn?this._dsn=no(e.dsn):m&&h.warn("No DSN provided, client will not send events.");const{beforeSendSpan:n,traceLifecycle:r}=this._options;if(m&&n&&or(n)!==(r==="static")&&j(()=>{console.warn(`Ignoring \`beforeSendSpan\`: ${r==="static"?"wrap it with":"remove"} \`Sentry.withStaticSpan\` to use it with \`traceLifecycle: "${r}"\`.`)}),this._dsn){const o=_i(this._dsn,e.tunnel,e._metadata?e._metadata.sdk:void 0);this._transport=e.transport({tunnel:this._options.tunnel,recordDroppedEvent:this.recordDroppedEvent.bind(this),...e.transportOptions,url:o})}un(this,"afterCaptureLog","flushLogs",zi,Si),un(this,"afterCaptureMetric","flushMetrics",Gi,Ti)}captureException(e,n,r){const s=k();if(De(e))return m&&h.log(sn),s;const o={event_id:s,...n};return this._process(()=>this.eventFromException(e,o).then(i=>this._captureEvent(i,o,r)).then(i=>i),"error"),o.event_id}captureMessage(e,n,r,s){const o={event_id:k(),...r},i=ge(e)?e:String(e),a=it(e),c=a?this.eventFromMessage(i,n,o):this.eventFromException(e,o);return this._process(()=>c.then(u=>this._captureEvent(u,o,s)),a?"unknown":"error"),o.event_id}captureEvent(e,n,r){const s=k();if(n!=null&&n.originalException&&De(n.originalException))return m&&h.log(sn),s;const o={event_id:s,...n},i=e.sdkProcessingMetadata||{},a=i.capturedSpanScope,c=i.capturedSpanIsolationScope,u=ee(e.type);return this._process(()=>this._captureEvent(e,o,a||r,c),u),o.event_id}captureSession(e){this.sendSession(e),tt(e,{init:!1})}getDsn(){return this._dsn}getOptions(){return this._options}getDataCollectionOptions(){return this._dataCollection}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}async flush(e){const n=this._transport;if(this.emit("flush"),!n)return!0;const r=await this._isClientDoneProcessing(e),s=await n.flush(e);return r&&s}async close(e){Object.defineProperty(this,Sr,{value:!0});const n=await this.flush(e);return this.getOptions().enabled=!1,this.emit("close"),n}getEventProcessors(){return this._eventProcessors}addEventProcessor(e){this._eventProcessors.push(e)}init(){(this._isEnabled()||this._options.integrations.some(({name:e})=>e.startsWith("Spotlight")))&&(this._setupIntegrations(),Mi(this._options))}getIntegrationByName(e){return this._integrations[e]}getIntegrationNames(){return Object.keys(this._integrations)}addIntegration(e){const n=this._integrations[e.name];!n&&e.beforeSetup&&e.beforeSetup(this),er(this,e,this._integrations),n||Ye(this,[e])}sendEvent(e,n={}){this.emit("beforeSendEvent",e,n);const r=wi(e,this);let s=Qo(e,this._dsn,this._options._metadata,this._options.tunnel);if(!re(n))for(const o of n.attachments||[])s=Je(s,jo(o));r&&(s=Je(s,r)),this.sendEnvelope(s).then(o=>this.emit("afterSendEvent",e,o))}sendSession(e){const{release:n,environment:r=Se}=this._options;if("aggregates"in e){const o=e.attrs||{};if(!o.release&&!n){m&&h.warn(on);return}o.release=o.release||n,o.environment=o.environment||r,e.attrs=o}else{if(!e.release&&!n){m&&h.warn(on);return}e.release=e.release||n,e.environment=e.environment||r}this.emit("beforeSendSession",e);const s=Jo(e,this._dsn,this._options._metadata,this._options.tunnel);this.sendEnvelope(s)}recordDroppedEvent(e,n,r=1){if(this._options.sendClientReports){const s=`${e}:${n}`;m&&h.log(`Recording outcome: "${s}"${r>1?` (${r} times)`:""}`),this._outcomes[s]=(this._outcomes[s]||0)+r}}on(e,n){const r=this._hooks[e]=this._hooks[e]||new Set,s=(...o)=>n(...o);return r.add(s),()=>{r.delete(s)}}emit(e,...n){const r=this._hooks[e];r&&r.forEach(s=>s(...n))}async sendEnvelope(e){if(this.emit("beforeEnvelope",e),this._isEnabled()&&this._transport)try{const n=await this._transport.send(e);return this.emit("afterEnvelope",e),n}catch(n){return m&&h.error("Error while sending envelope:",n),{}}return m&&h.error("Transport disabled"),{}}registerCleanup(e){}dispose(){}_setupIntegrations(){const{integrations:e}=this._options;this._integrations=Io(this,e),Ye(this,e)}_updateSessionFromEvent(e,n){var c,u;let r=n.level==="fatal",s=!1;const o=(c=n.exception)==null?void 0:c.values;if(o){s=!0,r=!1;for(const f of o)if(((u=f.mechanism)==null?void 0:u.handled)===!1){r=!0;break}}const i=e.status==="ok";(i&&e.errors===0||i&&r)&&(tt(e,{...r&&{status:this._unhandledSessionStatus},errors:e.errors||Number(s||r)}),this.captureSession(e))}async _isClientDoneProcessing(e){let n=0;for(;!e||nsetTimeout(r,1)),!this._numProcessing)return!0;n++}return!1}_isEnabled(){return this.getOptions().enabled!==!1&&this._transport!==void 0}_prepareEvent(e,n,r,s){const o=this.getOptions(),i=this.getIntegrationNames();return!n.integrations&&i.length&&(n.integrations=i),this.emit("preprocessEvent",e,n),e.type||s.setLastEventId(e.event_id||n.event_id),ei(o,e,n,r,this,s).then(a=>{var u;if(a===null)return a;this.emit("postprocessEvent",a,n),a.contexts={trace:{...(u=a.contexts)==null?void 0:u.trace,...Yn(r)},...a.contexts};const c=rr(this,r);return a.sdkProcessingMetadata={dynamicSamplingContext:c,...a.sdkProcessingMetadata},a})}_captureEvent(e,n={},r=N(),s=L()){return m&&se(e)&&h.log(`Captured error event \`${lr(e)[0]||""}\``),this._processEvent(e,n,r,s).then(o=>o.event_id,o=>{m&&(cn(o)?h.log(o.message):an(o)?h.warn(o.message):h.warn(o))})}_processEvent(e,n,r,s){const o=this.getOptions(),{sampleRate:i}=o,a=br(e),c=se(e),f=`before send for type \`${e.type||"error"}\``;let l="before_send";const d=typeof i>"u"?void 0:ro(i),g=ee(e.type);return this._prepareEvent(e,n,r,s).then(p=>{if(p===null)throw Gt("An event processor returned `null`, will not send event.");if(re(n))return p;const I=qi(this,o,p,n,()=>{l="callback_error"});return Wi(I,f)}).then(p=>{var b;if(p===null){if(this.recordDroppedEvent(l,g),a){const X=e.spans||[];this.recordDroppedEvent(l,"span",1+X.length)}throw Gt(`${f} ${l==="callback_error"?"threw an error":"returned `null`"}, will not send event.`)}const I=r.getSession()||s.getSession();if(c&&I&&this._updateSessionFromEvent(I,p),c&&typeof d=="number"&&Ee()>d)throw this.recordDroppedEvent("sample_rate","error"),Gt(`Discarding event because it's not included in the random sample (sampling rate = ${i})`);if(a){const B=((b=p.sdkProcessingMetadata)==null?void 0:b.spanCountBeforeProcessing)||0,X=p.spans?p.spans.length:0,we=B-X;we>0&&this.recordDroppedEvent("before_send","span",we)}const V=p.transaction_info;if(a&&V&&p.transaction!==e.transaction){const B="custom";p.transaction_info={...V,source:B}}return this.sendEvent(p,n),p}).then(null,p=>{throw cn(p)||an(p)?p:(this.captureException(p,{mechanism:{handled:!1,type:"internal"},data:{__sentry__:!0},originalException:p}),kt(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. +Reason: ${p}`))})}_process(e,n){this._numProcessing++,this._promiseBuffer.add(e).then(r=>(this._numProcessing--,r),r=>(this._numProcessing--,r===be&&this.recordDroppedEvent("queue_overflow",n),r))}_clearOutcomes(){const e=this._outcomes;return this._outcomes={},Object.entries(e).map(([n,r])=>{const[s,o]=n.split(":");return{reason:s,category:o,quantity:r}})}_flushOutcomes(){m&&h.log("Flushing outcomes...");const e=this._clearOutcomes();if(e.length===0){m&&h.log("No outcomes to send");return}if(!this._dsn){m&&h.log("No dsn provided, will not send outcomes");return}m&&h.log("Sending outcomes:",e);const n=Di(e,this._options.tunnel&&St(this._dsn));this.sendEnvelope(n)}}function Wi(t,e){const n=`${e} must return \`null\` or a valid event.`;if(at(t))return t.then(r=>{if(!Nt(r)&&r!==null)throw kt(n);return r},r=>{throw kt(`${e} rejected with ${r}`)});if(!Nt(t)&&t!==null)throw kt(n);return t}function qi(t,e,n,r,s){const{beforeSend:o,ignoreSpans:i,beforeSendTransaction:a}=e,c=or(e.beforeSendSpan)&&e.beforeSendSpan;let u=n;if(se(u)&&o){const f=u;return ht(m?"The `beforeSend` callback threw an error, dropping the event:":"",()=>o(f,r),()=>(s(),null))}if(br(u)){if(c||i){const f=Li(u);if(i!=null&&i.length&&Ge({description:f.description,op:f.op,attributes:f.data},i))return null;if(c){const l=Xe(f,c);u=Et(n,Pi(l))}if(u.spans){const l=[],d=u.spans;for(const p of d){if(i!=null&&i.length&&Ge({description:p.description,op:p.op,attributes:p.data},i)){Eo(d,p);continue}c?l.push(Xe(p,c)):l.push(p)}const g=u.spans.length-l.length;g&&t.recordDroppedEvent("before_send","span",g),u.spans=l}}if(a){if(u.spans){const f=u.spans.length;u.sdkProcessingMetadata={...n.sdkProcessingMetadata,spanCountBeforeProcessing:f}}return ht(m?"The `beforeSendTransaction` callback threw an error, dropping the event:":"",()=>a(u,r),()=>(s(),null))}}return u}function se(t){return t.type===void 0}function br(t){return t.type==="transaction"}function Gi(t){let e=0;return t.name&&(e+=t.name.length*2),e+=8,e+vr(t.attributes)}function zi(t){let e=0;return t.message&&(e+=t.message.length*2),e+vr(t.attributes)}function vr(t){if(!t)return 0;let e=0;return Object.values(t).forEach(n=>{Array.isArray(n)?e+=n.length*fn(n[0]):it(n)?e+=fn(n):e+=100}),e}function fn(t){return typeof t=="string"?t.length*2:typeof t=="number"?8:typeof t=="boolean"?4:0}function Yi(t,e){e.debug===!0&&(m?h.enable():j(()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),Vi(),N().update(e.initialScope);const r=new t(e);return Xi(r),r.init(),r}function Ki(){const t=S();return t&&!Ui(t)?t:void 0}function Vi(){Ki()&&j(()=>{console.warn("[Sentry] `Sentry.init()` was called more than once. The new client replaces the active client, but the active client is not closed, so state from both can mix. Call `Sentry.init()` only once, or call `await Sentry.close()` before you call it again.")})}function Xi(t){N().setClient(t)}const Ir="[Filtered]",Ji=["auth","token","secret","session","password","passwd","pwd","key","jwt","bearer","sso","saml","csrf","xsrf","credentials","sid","identity","set-cookie","cookie"];function Qi(t,e){return e.some(n=>t.includes(n))}function Tr(t,e,n){if(e===!1)return!0;const r=t.toLowerCase();if(Qi(r,Ji))return!0;if(e===!0)return!1;const i=("deny"in e?e.deny:e.allow).some(a=>r.includes(a.toLowerCase()));return"deny"in e?i:!i}function ln(t,e,n){if(e===!1)return{};const r={};for(const s of Object.keys(t))r[s]=Tr(s,e)?Ir:t[s];return r}function Zi(t,e){if(!(!t||e===!1))return t.split("&").map(n=>{const r=n.indexOf("="),s=r===-1?n:n.slice(0,r),o=new URLSearchParams(`${s}=`).keys().next().value;return o!==void 0&&Tr(o,e)?`${s}=${Ir}`:n}).join("&")}function ta(t,e){const n=t.indexOf("#"),r=n===-1?t.length:n,s=t.indexOf("?");if(s===-1||s>r)return t;const o=t.slice(0,s),i=t.slice(s+1,r),a=t.slice(r),c=Zi(i,e);return c?`${o}?${c}${a}`:`${o}${a}`}function ea(t){var e;return((e=t??S())==null?void 0:e.getDataCollectionOptions().urlQueryParams)??!0}function na(t,e){return t===void 0?void 0:ta(t,ea(e))}function zt(t){if(!t)return{};const e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};const n=e[6]||"",r=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],search:n,hash:r,relative:e[5]+n+r}}function ra(t,e=!0){if(t.startsWith("data:")){const n=t.match(/^data:([^;,]+)/),r=n?n[1]:"text/plain",s=t.includes(";base64,"),o=t.indexOf(",");let i="";if(e&&o!==-1){const a=t.slice(o+1);i=a.length>10?`${a.slice(0,10)}... [truncated]`:a}return`data:${r}${s?",base64":""}${i?`,${i}`:""}`}return t}function sa(t){var e;"aggregates"in t?((e=t.attrs)==null?void 0:e.ip_address)===void 0&&(t.attrs={...t.attrs,ip_address:"{{auto}}"}):t.ipAddress===void 0&&(t.ipAddress="{{auto}}")}function oa(t,e,n=[e],r="npm"){const s=(t._metadata=t._metadata||{}).sdk=t._metadata.sdk||{};s.name||(s.name=`sentry.javascript.${e}`,s.packages=n.map(o=>({name:`${r}:@sentry/${o}`,version:W})),s.version=W)}const ia=100;function G(t,e){const n=S(),r=L();if(!n)return;const{beforeBreadcrumb:s=null,maxBreadcrumbs:o=ia}=n.getOptions();if(o<=0)return;const a={timestamp:yt(),...t},c=s?ht(m?"The `beforeBreadcrumb` callback threw an error, dropping the breadcrumb:":"",()=>j(()=>s(a,e)),()=>null):a;c!==null&&(n.emit&&n.emit("beforeAddBreadcrumb",c,e),r.addBreadcrumb(c,o))}const aa="FunctionToString",dn=new WeakMap,ca=()=>({name:aa,setupOnce(){const t=Function.prototype.toString;try{Function.prototype.toString=function(...e){const n=ye(this);let r;try{dn.has(S())&&n!==void 0&&(r=n)}catch{}return t.apply(r??this,e)}}catch{}},setup(t){dn.set(t,!0)}}),ua=ca,fa=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/,/^ResizeObserver loop completed with undelivered notifications.$/,/^Cannot redefine property: googletag$/,/^Can't find variable: gmo$/,/^undefined is not an object \(evaluating 'a\.[A-Z]'\)$/,/can't redefine non-configurable property "solana"/,/vv\(\)\.getRestrictions is not a function/,/Can't find variable: _AutofillCallbackHandler/,/Object Not Found Matching Id:\d+, MethodName:simulateEvent/,/Java exception was raised during method invocation$/,/Java object is gone$/],la="EventFilters",da=(t={})=>{let e;return{name:la,setup(n){const r=n.getOptions();e=pn(t,r)},processEvent(n,r,s){if(!e){const o=s.getOptions();e=pn(t,o)}return pa(n,e)?null:n}}};function pn(t={},e={}){return{allowUrls:[...t.allowUrls||[],...e.allowUrls||[]],denyUrls:[...t.denyUrls||[],...e.denyUrls||[]],ignoreErrors:[...t.ignoreErrors||[],...e.ignoreErrors||[],...t.disableErrorDefaults?[]:fa],ignoreTransactions:[...t.ignoreTransactions||[],...e.ignoreTransactions||[]]}}function pa(t,e){if(t.type){if(t.type==="transaction"&&ma(t,e.ignoreTransactions))return m&&h.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. +Event: ${H(t)}`),!0}else{if(ha(t,e.ignoreErrors))return m&&h.warn(`Event dropped due to being matched by \`ignoreErrors\` option. +Event: ${H(t)}`),!0;if(Ea(t))return m&&h.warn(`Event dropped due to not having an error message, error type or stacktrace. +Event: ${H(t)}`),!0;if(ga(t,e.denyUrls))return m&&h.warn(`Event dropped due to being matched by \`denyUrls\` option. +Event: ${H(t)}. +Url: ${Ct(t)}`),!0;if(!_a(t,e.allowUrls))return m&&h.warn(`Event dropped due to not being matched by \`allowUrls\` option. +Event: ${H(t)}. +Url: ${Ct(t)}`),!0}return!1}function ha(t,e){return e!=null&&e.length?lr(t).some(n=>_t(n,e)):!1}function ma(t,e){if(!(e!=null&&e.length))return!1;const n=t.transaction;return n?_t(n,e):!1}function ga(t,e){if(!(e!=null&&e.length))return!1;const n=Ct(t);return n?_t(n,e):!1}function _a(t,e){if(!(e!=null&&e.length))return!0;const n=Ct(t);return n?_t(n,e):!0}function ya(t=[]){for(let e=t.length-1;e>=0;e--){const n=t[e];if(n&&n.filename!==""&&n.filename!=="[native code]")return n.filename||null}return null}function Ct(t){var e,n;try{const r=[...((e=t.exception)==null?void 0:e.values)??[]].reverse().find(o=>{var i,a,c;return((i=o.mechanism)==null?void 0:i.parent_id)===void 0&&((c=(a=o.stacktrace)==null?void 0:a.frames)==null?void 0:c.length)}),s=(n=r==null?void 0:r.stacktrace)==null?void 0:n.frames;return s?ya(s):null}catch{return m&&h.error(`Cannot extract url for event ${H(t)}`),null}}function Ea(t){var e,n;return(n=(e=t.exception)==null?void 0:e.values)!=null&&n.length?!t.message&&!t.exception.values.some(r=>r.stacktrace||r.type&&r.type!=="Error"||r.value):!1}function Sa(t,e,n,r,s,o){var a;if(!((a=s.exception)!=null&&a.values)||!o||!D(o.originalException))return;const i=s.exception.values.length>0?s.exception.values[s.exception.values.length-1]:void 0;i&&(s.exception.values=oe(t,e,r,o.originalException,n,s.exception.values,i,0))}function oe(t,e,n,r,s,o,i,a){if(o.length>=n+1)return o;let c=[...o];if(D(r[s])){hn(i,a,r);const u=t(e,r[s]),f=c.length;mn(u,s,f,a),c=oe(t,e,n,r[s],s,[u,...c],u,f)}return kr(r)&&r.errors.forEach((u,f)=>{if(D(u)){hn(i,a,r);const l=t(e,u),d=c.length;mn(l,`errors[${f}]`,d,a),c=oe(t,e,n,u,s,[l,...c],l,d)}}),c}function kr(t){return Array.isArray(t.errors)}function hn(t,e,n){t.mechanism={handled:!0,type:"auto.core.linked_errors",...kr(n)&&{is_exception_group:!0},...t.mechanism,exception_id:e}}function mn(t,e,n,r){t.mechanism={handled:!0,...t.mechanism,type:"chained",source:e,exception_id:n,parent_id:r}}function ba(t){return D(t)&&"__sentry_fetch_url_host__"in t&&typeof t.__sentry_fetch_url_host__=="string"}function gn(t){return ba(t)?`${t.message} (${t.__sentry_fetch_url_host__})`:t.message}const At=new Set([]);function va(t){const e="console",n=z(e,t);return Y(e,Ta),n}function Ia(t){for(const e of t)At.add(e);return()=>{for(const e of t)At.delete(e)}}const _n=new Set;function Ta(){"console"in _&&Nn.forEach(function(t){_n.has(t)||!(t in _.console)||(_n.add(t),T(_.console,t,function(e){return Ot[t]=e,function(...n){const r=n[0],s=Ot[t],o=At.size&&typeof r=="string"&&_t(r,At);o||w("console",{args:n,level:t}),(!o||m&&h.isEnabled())&&(s==null||s.apply(_.console,n))}}))})}function ka(t){return t==="warn"?"warning":["fatal","error","warning","log","info","debug"].includes(t)?t:"log"}const wa="Dedupe",Ra=()=>{let t;return{name:wa,processEvent(e){if(e.type)return e;try{if(Na(e,t))return m&&h.warn("Event dropped due to being a duplicate of previously captured event."),null}catch{}return t=e}}},Oa=Ra;function Na(t,e){return e?!!(Ca(t,e)||Aa(t,e)):!1}function Ca(t,e){const n=t.message,r=e.message;return!(!n&&!r||n&&!r||!n&&r||n!==r||!Rr(t,e)||!wr(t,e))}function Aa(t,e){const n=yn(e),r=yn(t);return!(!n||!r||n.type!==r.type||n.value!==r.value||!Rr(t,e)||!wr(t,e))}function wr(t,e){const n=Ne(t),r=Ne(e);if(!n||!r)return!n&&!r;if(r.length!==n.length)return!1;for(let s=0;s{const e=new Set(t.levels||Nn);return{name:xa,setup(n){const r=va(({args:s,level:o})=>{S()!==n||!e.has(o)||La(o,s)});if(n.registerCleanup(r),t.filter){const s=Ia(t.filter);n.registerCleanup(s)}}}};function La(t,e){const n={category:"console",data:{arguments:e,logger:"console"},level:ka(t),message:En(e)};if(t==="assert")if(e[0]===!1){const r=e.slice(1);n.message=r.length>0?`Assertion failed: ${En(r)}`:"Assertion failed",n.data.arguments=r}else return;G(n,{input:e,level:t})}function En(t){return"util"in _&&typeof _.util.format=="function"?_.util.format(...t):is(t," ")}const Pa="ConversationId",Ma=()=>({name:Pa,setup(t){t.on("spanStart",e=>{const n=N().getScopeData(),r=L().getScopeData(),s=n.conversationId||r.conversationId;if(s){const{op:o,data:i,description:a}=Pt(e);if(!(o!=null&&o.startsWith("gen_ai."))&&!i["ai.operationId"]&&!(a!=null&&a.startsWith("ai.")))return;e.setAttribute(xs,s)}})}}),$a=Ma,ie=_;function Fa(){if(!("fetch"in ie))return!1;try{return new Headers,new Request("data:,"),new Response,!0}catch{return!1}}function ae(t){return t&&/^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}function ja(){var n;if(typeof EdgeRuntime=="string")return!0;if(!Fa())return!1;if(ae(ie.fetch))return!0;let t=!1;const e=ie.document;if(e&&typeof e.createElement=="function")try{const r=e.createElement("iframe");r.hidden=!0,e.head.appendChild(r),(n=r.contentWindow)!=null&&n.fetch&&(t=ae(r.contentWindow.fetch)),e.head.removeChild(r)}catch(r){m&&h.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",r)}return t}function Ba(t){const e="fetch",n=z(e,t);return Y(e,()=>Ua()),n}function Ua(t){Mt()&&!ja()||T(_,"fetch",function(e){return new Proxy(e,{apply(n,r,s){const o=new Error,{method:i,url:a}=Ha(s),c={args:s,fetchData:{method:i,url:a},startTimestamp:R()*1e3,virtualError:o,headers:Wa(s)};return w("fetch",{...c}),Reflect.apply(n,_,s).then(async u=>(w("fetch",{...c,endTimestamp:R()*1e3,response:u}),u),u=>{w("fetch",{...c,endTimestamp:R()*1e3,error:u}),D(u)&&u.stack===void 0&&(u.stack=o.stack,F(u,"framesToPop",1));const f=S(),l=(f==null?void 0:f.getOptions().enhanceFetchErrorMessages)??"always";if(l!==!1&&D(u)&&u.name==="TypeError"&&(u.message==="Failed to fetch"||u.message==="Load failed"||u.message==="NetworkError when attempting to fetch resource."))try{const p=new URL(c.fetchData.url).host;l==="always"?u.message=`${u.message} (${p})`:F(u,"__sentry_fetch_url_host__",p)}catch{}throw u})}})})}function wt(t,e){return xt(t)&&!!t[e]}function Sn(t){return typeof t=="string"?t:t?wt(t,"url")?t.url:t.toString?t.toString():"":""}function Ha(t){if(t.length===0)return{method:"GET",url:""};if(t.length===2){const[n,r]=t;return{url:Sn(n),method:wt(r,"method")?String(r.method).toUpperCase():Pn(n)&&wt(n,"method")?String(n.method).toUpperCase():"GET"}}const e=t[0];return{url:Sn(e),method:wt(e,"method")?String(e.method).toUpperCase():"GET"}}function Wa(t){const[e,n]=t;try{if(typeof n=="object"&&n!==null&&"headers"in n&&n.headers)return new Headers(n.headers);if(Pn(e))return new Headers(e.headers)}catch{}}function Or(t){if(t!==void 0)return t>=400&&t<500?"warning":t>=500?"error":void 0}const ce=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,E=_,qa=80,U={};try{typeof Node<"u"&&(U.parentNode=Object.getOwnPropertyDescriptor(Node.prototype,"parentNode").get),typeof Element<"u"&&(U.tagName=Object.getOwnPropertyDescriptor(Element.prototype,"tagName").get,U.id=Object.getOwnPropertyDescriptor(Element.prototype,"id").get,U.className=Object.getOwnPropertyDescriptor(Element.prototype,"className").get,U.getAttribute=Element.prototype.getAttribute),typeof HTMLElement<"u"&&(U.dataset=Object.getOwnPropertyDescriptor(HTMLElement.prototype,"dataset").get)}catch{}function M(t,e,n){const r=U[e];if(r)try{return r.call(t,n)}catch{}const s=t[e];return typeof s=="function"?s.call(t,n):s}function Nr(t,e={}){if(!t)return"";try{let n=t;const r=5,s=[];let o=0,i=0;const a=" > ",c=a.length;let u;const f=Array.isArray(e)?e:e.keyAttrs,l=!Array.isArray(e)&&e.maxStringLength||qa;for(;n&&o++1&&i+s.length*c+u.length>=l));)s.push(u),i+=u.length,n=M(n,"parentNode");return s.reverse().join(a)}catch{return""}}function Ga(t,e){const n=[],r=M(t,"tagName");if(!r)return"";if(typeof HTMLElement<"u"&&t instanceof HTMLElement){const o=M(t,"dataset");if(o){if(o.sentryComponent)return o.sentryComponent;if(o.sentryElement)return o.sentryElement}}n.push(r.toLowerCase());const s=e!=null&&e.length?e.filter(o=>M(t,"getAttribute",o)).map(o=>[o,M(t,"getAttribute",o)]):null;if(s!=null&&s.length)s.forEach(o=>{n.push(`[${o[0]}="${o[1]}"]`)});else{const o=M(t,"id");o&&n.push(`#${o}`);const i=M(t,"className");if(i&&x(i)){const a=i.split(/\s+/);for(const c of a)n.push(`.${c}`)}}for(const o of["aria-label","type","name","title","alt"]){const i=M(t,"getAttribute",o);i&&n.push(`[${o}="${i}"]`)}return n.join("")}function za(t,e,n){E.document&&E.addEventListener(t,e,n)}function Ya(t,e,n){E.document&&E.removeEventListener(t,e,n)}const Ka=t=>{var n;const e=E.requestIdleCallback||E.setTimeout;if(((n=E.document)==null?void 0:n.visibilityState)==="hidden")t();else{let r=!1;const s=()=>{r||(t(),r=!0)};za("visibilitychange",s,{once:!0,capture:!0}),e(()=>{s(),Ya("visibilitychange",s,{capture:!0})})}};function Va(t,e=5){if(!_.HTMLElement)return null;let n=t;for(let r=0;r{var o,i;const s=(o=E[n])==null?void 0:o.prototype;(i=s==null?void 0:s.hasOwnProperty)!=null&&i.call(s,"addEventListener")&&(T(s,"addEventListener",function(a){return function(c,u,f){if((c==="click"||c=="keypress")&&u)try{const l=this.__sentry_instrumentation_handlers__=this.__sentry_instrumentation_handlers__||{},d=l[c]=l[c]||{captureListeners:new WeakSet,bubbleListeners:new WeakSet,listenerCount:0},g=vn(f);if(!d.handler){const I=In(t);d.handler=I,d.capture=g,a.call(this,c,I,d.capture)}const p=d[g?"captureListeners":"bubbleListeners"];p.has(u)||(typeof f=="object"&&(f!=null&&f.once||f!=null&&f.signal)?d.sticky=!0:(p.add(u),d.listenerCount++))}catch{}return a.call(this,c,u,f)}}),T(s,"removeEventListener",function(a){return function(c,u,f){if((c==="click"||c=="keypress")&&u)try{const l=this.__sentry_instrumentation_handlers__||{},d=l[c];d!=null&&d[vn(f)?"captureListeners":"bubbleListeners"].delete(u)&&(!--d.listenerCount&&!d.sticky&&(a.call(this,c,d.handler,d.capture),d.handler=void 0,delete l[c]),Object.keys(l).length===0&&delete this.__sentry_instrumentation_handlers__)}catch{}return a.call(this,c,u,f)}}))})}function ec(t){if(t.type!==ue)return!1;try{if(!t.target||t.target._sentryId!==fe)return!1}catch{}return!0}function nc(t,e){return t!=="keypress"?!1:e!=null&&e.tagName?!(e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.isContentEditable):!0}function In(t,e=!1){return n=>{if(!n||n._sentryCaptured)return;const r=rc(n);if(nc(n.type,r))return;F(n,"_sentryCaptured",!0),r&&!r._sentryId&&F(r,"_sentryId",k());const s=n.type==="keypress"?"input":n.type;ec(n)||(t({event:n,name:s,global:e}),ue=n.type,fe=r?r._sentryId:void 0),clearTimeout(bn),bn=E.setTimeout(()=>{fe=void 0,ue=void 0},Qa)}}function rc(t){try{return t.target}catch{return null}}let It;function sc(){return"history"in E&&!!E.history}function Ar(t){const e="history";z(e,t),Y(e,oc)}function oc(){if(E.addEventListener("popstate",()=>{const e=E.location.href,n=It;if(It=e,n===e)return;w("history",{from:n,to:e})}),!sc())return;function t(e){return function(...n){const r=n.length>2?n[2]:void 0;if(r){const s=It,o=ic(String(r));if(It=o,s===o)return e.apply(this,n);w("history",{from:s,to:o})}return e.apply(this,n)}}T(E.history,"pushState",t),T(E.history,"replaceState",t)}function ic(t){try{return new URL(t,E.location.origin).toString()}catch{return t}}const Rt={};function ac(t){const e=Rt[t];if(e)return e;let n=E[t];if(ae(n))return Rt[t]=n.bind(E);const r=E.document;if(r&&typeof r.createElement=="function")try{const s=r.createElement("iframe");s.hidden=!0,r.head.appendChild(s);const o=s.contentWindow;o!=null&&o[t]&&(n=o[t]),r.head.removeChild(s)}catch(s){ce&&h.warn(`Could not create sandbox iframe for ${t} check, bailing to window.${t}: `,s)}return n&&(Rt[t]=n.bind(E))}function cc(t){Rt[t]=void 0}const lt="__sentry_xhr_v3__";function uc(t){const e="xhr";z(e,t),Y(e,fc)}function fc(){if(!E.XMLHttpRequest)return;const t=XMLHttpRequest.prototype;t.open=new Proxy(t.open,{apply(e,n,r){let s=new Error;const o=R()*1e3,i=x(r[0])?r[0].toUpperCase():void 0,a=lc(r[1]);if(!i||!a)return e.apply(n,r);n[lt]={method:i,url:a,request_headers:{}},i==="POST"&&a.match(/sentry_key/)&&(n.__sentry_own_request__=!0);const c=()=>{const u=n[lt];if(u&&n.readyState===4){try{u.status_code=n.status}catch{}const f={endTimestamp:R()*1e3,startTimestamp:o,xhr:n,virtualError:s};w("xhr",f),s=void 0,n.removeEventListener("readystatechange",c)}};return"onreadystatechange"in n&&typeof n.onreadystatechange=="function"?n.onreadystatechange=new Proxy(n.onreadystatechange,{apply(u,f,l){return c(),u.apply(f,l)}}):n.addEventListener("readystatechange",c),n.setRequestHeader=new Proxy(n.setRequestHeader,{apply(u,f,l){const[d,g]=l,p=f[lt];return p&&x(d)&&x(g)&&(p.request_headers[d.toLowerCase()]=g),u.apply(f,l)}}),e.apply(n,r)}}),t.send=new Proxy(t.send,{apply(e,n,r){const s=n[lt];if(!s)return e.apply(n,r);r[0]!==void 0&&(s.body=r[0]);const o={startTimestamp:R()*1e3,xhr:n};return w("xhr",o),e.apply(n,r)}})}function lc(t){if(x(t))return t;try{return t.toString()}catch{}}function dc(t){if(typeof Element>"u")return!1;try{return t instanceof Element}catch{return!1}}const y=_;let le=0;const Tn=[];function xr(t){if(le>0)return!0;const e=t?Tn.findIndex(n=>pc(n,t)):-1;return e===-1?!1:(Tn.splice(e,1),!0)}function pc(t,e){return t.msg===e.msg&&t.url===e.url&&t.line===e.line&&t.column===e.column}function hc(){le++,setTimeout(()=>{le--})}function nt(t,e={}){function n(s){return typeof s=="function"}if(!n(t))return t;try{if(Object.prototype.hasOwnProperty.call(t,"__sentry_wrapped__")){const o=t.__sentry_wrapped__;return typeof o=="function"?o:t}if(ye(t))return t}catch{return t}const r=function(...s){_._sentryWrappedDepth=(_._sentryWrappedDepth||0)+1;try{const o=s.map(i=>nt(i,e));return t.apply(this,o)}catch(o){throw hc(),As(i=>{i.addEventProcessor(a=>(e.mechanism&&(Jt(a,void 0),Z(a,e.mechanism)),a.extra={...a.extra,arguments:s},a)),di(o)}),o}finally{_._sentryWrappedDepth=(_._sentryWrappedDepth||0)-1}};try{for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&(r[s]=t[s])}catch{}Mn(r,t),F(t,"__sentry_wrapped__",r);try{Object.getOwnPropertyDescriptor(r,"name").configurable&&Object.defineProperty(r,"name",{get(){return t.name}})}catch{}return r}function kn(){const t=Ie(),{referrer:e}=y.document||{},{userAgent:n}=y.navigator||{},r={...e&&{Referer:e},...n&&{"User-Agent":n}};return{url:t,headers:r}}function Te(t,e){const n=$t(t,e),r={type:Ec(e),value:Sc(e)};return n.length&&(r.stacktrace={frames:n}),r.type===void 0&&r.value===""&&(r.value="Unrecoverable error caught"),r}function mc(t,e,n,r){const s=S(),o=s==null?void 0:s.getOptions().normalizeDepth,i=kc(e),a={__serialized__:Fn(e,o)};if(i)return{exception:{values:[Te(t,i)]},extra:a};const u={exception:{values:[{type:Dt(e)?e.constructor.name:r?"UnhandledRejection":"Error",value:Ic(e,{isUnhandledRejection:r})}]},extra:a};if(n){const f=$t(t,n);f.length&&(u.exception.values[0].stacktrace={frames:f})}return u}function Yt(t,e){return{exception:{values:[Te(t,e)]}}}function $t(t,e){const n=e.stacktrace||e.stack||"",r=_c(e),s=yc(e);try{return t(n,r,s)}catch{}return[]}const gc=/Minified React error #\d+;/i;function _c(t){return t&&gc.test(t.message)?1:0}function yc(t){return typeof t.framesToPop=="number"?t.framesToPop:0}function Dr(t){return typeof WebAssembly<"u"&&typeof WebAssembly.Exception<"u"?t instanceof WebAssembly.Exception:!1}function Ec(t){const e=t==null?void 0:t.name;return!e&&Dr(t)?t.message&&Array.isArray(t.message)&&t.message.length==2?t.message[0]:"WebAssembly.Exception":e}function Sc(t){const e=t==null?void 0:t.message;return Dr(t)?Array.isArray(t.message)&&t.message.length==2?t.message[1]:"wasm exception":e?e.error&&typeof e.error.message=="string"?gn(e.error):gn(t):"No error message"}function bc(t,e,n,r){const s=(n==null?void 0:n.syntheticException)||void 0,o=ke(t,e,s,r);return Z(o),o.level="error",n!=null&&n.event_id&&(o.event_id=n.event_id),bt(o)}function vc(t,e,n="info",r,s){const o=(r==null?void 0:r.syntheticException)||void 0,i=de(t,e,o,s);return i.level=n,r!=null&&r.event_id&&(i.event_id=r.event_id),bt(i)}function ke(t,e,n,r,s){var a,c;let o;if(Ln(e)&&e.error)return Yt(t,e.error);if(Ae(e)||Kr(e)){const u=e;if("stack"in e){o=Yt(t,e);const f=(c=(a=o.exception)==null?void 0:a.values)==null?void 0:c[0];if(r&&n&&f&&!f.stacktrace){const l=$t(t,n);l.length&&(f.stacktrace={frames:l},Z(o,{synthetic:!0}))}}else{const f=u.name||(Ae(u)?"DOMError":"DOMException"),l=u.message?`${f}: ${u.message}`:f;o=de(t,l,n,r),Jt(o,l)}return o}if(D(e))return Yt(t,e);if(Nt(e)||Dt(e))return o=mc(t,e,n,s),Z(o,{synthetic:!0}),o;const i=String(e);return o=de(t,i,n,r),Jt(o,i),Z(o,{synthetic:!0}),o}function de(t,e,n,r){const s={};if(r&&n){const o=$t(t,n);o.length&&(s.exception={values:[{value:e,stacktrace:{frames:o}}]}),Z(s,{synthetic:!0})}if(ge(e)){const{__sentry_template_string__:o,__sentry_template_values__:i}=e;return s.logentry={message:o,params:i},s}return s.message=e,s}function Ic(t,{isUnhandledRejection:e}){const n=Xr(t),r=e?"promise rejection":"exception";return Ln(t)?`Event \`ErrorEvent\` captured as ${r} with message \`${t.message}\``:Dt(t)?`Event \`${Tc(t)}\` (type=${t.type}) captured as ${r}`:`Object captured as ${r} with keys: ${n}`}function Tc(t){try{const e=Object.getPrototypeOf(t);return e?e.constructor.name:void 0}catch{}}function kc(t){return Object.values(t).find(D)}class wc extends Hi{constructor(e){var c;const n=Rc(e),r=y.SENTRY_SDK_SOURCE||Wo();oa(n,"browser",["browser"],r),super(n),n.routeProvider&&Xa(n.routeProvider,this),this._unhandledSessionStatus="unhandled";const{userInfo:s}=this.getDataCollectionOptions();(c=n._metadata)!=null&&c.sdk&&(n._metadata.sdk.settings={infer_ip:s?"auto":"never",...n._metadata.sdk.settings});const{sendClientReports:o}=this._options,i=()=>{R()},a=[[y.document,"visibilitychange",()=>{i(),y.document.visibilityState==="hidden"&&(o&&this._flushOutcomes(),queueMicrotask(()=>{this.flush()}))}],[y.document,"freeze",i],[y.document,"resume",i],[y,"pagehide",i],[y,"pageshow",i]];a.forEach(([u,f,l])=>{var d;return(d=u==null?void 0:u.addEventListener)==null?void 0:d.call(u,f,l)}),this.on("close",()=>a.forEach(([u,f,l])=>{var d;return(d=u==null?void 0:u.removeEventListener)==null?void 0:d.call(u,f,l)})),s&&this.on("beforeSendSession",sa)}eventFromException(e,n){return bc(this._options.stackParser,e,n,this._options.attachStacktrace)}eventFromMessage(e,n="info",r){return vc(this._options.stackParser,e,n,r,this._options.attachStacktrace)}_prepareEvent(e,n,r,s){return e.platform=e.platform||"javascript",super._prepareEvent(e,n,r,s)}}function Rc(t){var e;return{release:typeof __SENTRY_RELEASE__=="string"?__SENTRY_RELEASE__:(e=y.SENTRY_RELEASE)==null?void 0:e.id,sendClientReports:!0,parentSpanIsAlwaysRootSpan:!0,...t}}const Oc=40;function Nc(t,e=ac("fetch")){let n=0,r=0;async function s(o){const i=o.body.length;n+=i,r++;const a={body:o.body,method:"POST",referrerPolicy:"strict-origin",headers:t.headers,keepalive:n<=6e4&&r<15,...t.fetchOptions};try{const c=await e(t.url,a);return{statusCode:c.status,headers:{"x-sentry-rate-limits":c.headers.get("X-Sentry-Rate-Limits"),"retry-after":c.headers.get("Retry-After")}}}catch(c){throw cc("fetch"),c}finally{n-=i,r--}}return xi(t,s,ve(t.bufferSize||Oc))}const Ft=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,Cc=30,Ac=50;function pe(t,e,n,r){const s={filename:t,function:e===""?q:e,in_app:!0};return n!==void 0&&(s.lineno=n),r!==void 0&&(s.colno=r),s}const xc=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Dc=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Lc=/\((\S*)(?::(\d+))(?::(\d+))\)/,Pc=/at (.+?) ?\(data:(.+?),/,Mc=t=>{var s;const e=t.match(Pc);if(e)return{filename:``,function:e[1]};const n=xc.exec(t);if(n){const[,o,i,a]=n;return pe(o,q,+i,+a)}const r=Dc.exec(t);if(r){if(((s=r[2])==null?void 0:s.indexOf("eval"))===0){const c=Lc.exec(r[2]);c&&(r[2]=c[1],r[3]=c[2],r[4]=c[3])}const[i,a]=Lr(r[1]||q,r[2]);return pe(a,i,r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},$c=[Cc,Mc],Fc=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,jc=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Bc=t=>{const e=Fc.exec(t);if(e){if(e[3]&&e[3].indexOf(" > eval")>-1){const o=jc.exec(e[3]);o&&(e[1]=e[1]||"eval",e[3]=o[1],e[4]=o[2],e[5]="")}let r=e[3],s=e[1]||q;return[s,r]=Lr(s,r),pe(r,s,e[4]?+e[4]:void 0,e[5]?+e[5]:void 0)}},Uc=[Ac,Bc],Hc=[$c,Uc],Wc=xn(...Hc),Lr=(t,e)=>{const n=t.indexOf("safari-extension")!==-1,r=t.indexOf("safari-web-extension")!==-1;return n||r?[t.indexOf("@")!==-1?t.split("@")[0]:q,n?`safari-extension:${e}`:`safari-web-extension:${e}`]:[t,e]},Tt=1024,qc="Breadcrumbs",Gc=(t={})=>{const e={dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...t};return{name:qc,setup(n){e.dom&&Za(Kc(n,e.dom)),e.xhr&&uc(Vc(n)),e.fetch&&Ba(Xc(n)),e.history&&Ar(Jc(n)),e.sentry&&n.on("beforeSendEvent",Yc(n))}}},zc=Gc;function Yc(t){return function(n){S()===t&&G({category:`sentry.${n.type==="transaction"?"transaction":"event"}`,event_id:n.event_id,level:n.level,message:H(n)},{event:n})}}function Kc(t,e){return function(r){if(S()!==t)return;let s,o,i=typeof e=="object"?e.serializeAttribute:void 0,a=typeof e=="object"&&typeof e.maxStringLength=="number"?e.maxStringLength:void 0;a&&a>Tt&&(Ft&&h.warn(`\`dom.maxStringLength\` cannot exceed ${Tt}, but a value of ${a} was configured. Sentry will use ${Tt} instead.`),a=Tt),typeof i=="string"&&(i=[i]);try{const u=r.event,f=Qc(u)?u.target:u;s=Nr(f,{keyAttrs:i,maxStringLength:a}),o=Va(f)}catch{s=""}if(s.length===0)return;const c={category:`ui.${r.name}`,message:s};o&&(c.data={"ui.component_name":o}),G(c,{event:r.event,name:r.name,global:r.global})}}function Vc(t){return function(n){if(S()!==t)return;const{startTimestamp:r,endTimestamp:s}=n,o=n.xhr[lt];if(!r||!s||!o)return;const{method:i,url:a,status_code:c,body:u}=o,f={method:i,url:a,status_code:c},l={xhr:n.xhr,input:u,startTimestamp:r,endTimestamp:s},d={category:"xhr",data:f,type:"http",level:Or(c)};t.emit("beforeOutgoingRequestBreadcrumb",d,l),G(d,l)}}function Xc(t){return function(n){if(S()!==t)return;const{startTimestamp:r,endTimestamp:s}=n;if(s&&!(n.fetchData.url.match(/sentry_key/)&&n.fetchData.method==="POST"))if(n.error){const o={data:n.error,input:n.args,startTimestamp:r,endTimestamp:s},i={category:"fetch",data:n.fetchData,level:"error",type:"http"};t.emit("beforeOutgoingRequestBreadcrumb",i,o),G(i,o)}else{const o=n.response,i={...n.fetchData,status_code:o==null?void 0:o.status},a={input:n.args,response:o,startTimestamp:r,endTimestamp:s},c={category:"fetch",data:i,type:"http",level:Or(i.status_code)};t.emit("beforeOutgoingRequestBreadcrumb",c,a),G(c,a)}}}function Jc(t){return function(n){if(S()!==t)return;let r=n.from,s=n.to;const o=zt(y.location.href);let i=r?zt(r):void 0;const a=zt(s);i!=null&&i.path||(i=o),o.protocol===a.protocol&&o.host===a.host&&(s=a.relative),o.protocol===i.protocol&&o.host===i.host&&(r=i.relative),G({category:"navigation",data:{from:r,to:s}})}}function Qc(t){return!!t&&!!t.target}const Zc="EventTarget,Window,Node,ApplicationCache,AudioTrackList,BroadcastChannel,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(","),tu="BrowserApiErrors",eu=(t={})=>{const e={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,unregisterOriginalCallbacks:!1,...t};return{name:tu,setupOnce(){e.setTimeout&&T(y,"setTimeout",wn),e.setInterval&&T(y,"setInterval",wn),e.requestAnimationFrame&&T(y,"requestAnimationFrame",ru),e.XMLHttpRequest&&"XMLHttpRequest"in y&&T(XMLHttpRequest.prototype,"send",su);const n=e.eventTarget;n&&(Array.isArray(n)?n:Zc).forEach(s=>ou(s,e))}}},nu=eu;function wn(t){return function(...e){const n=e[0];return e[0]=nt(n,{mechanism:{handled:!1,type:`auto.browser.browserapierrors.${$(t)}`}}),t.apply(this,e)}}function ru(t){return function(e){return t.apply(this,[nt(e,{mechanism:{data:{handler:$(t)},handled:!1,type:"auto.browser.browserapierrors.requestAnimationFrame"}})])}}function su(t){return function(...e){const n=this;return["onload","onerror","onprogress","onreadystatechange"].forEach(s=>{s in n&&typeof n[s]=="function"&&T(n,s,function(o){const i={mechanism:{data:{handler:$(o)},handled:!1,type:`auto.browser.browserapierrors.xhr.${s}`}},a=ye(o);return a&&(i.mechanism.data.handler=$(a)),nt(o,i)})}),t.apply(this,e)}}function ou(t,e){var s,o;const r=(s=y[t])==null?void 0:s.prototype;(o=r==null?void 0:r.hasOwnProperty)!=null&&o.call(r,"addEventListener")&&(T(r,"addEventListener",function(i){return function(a,c,u){try{iu(c)&&(c.handleEvent=nt(c.handleEvent,{mechanism:{data:{handler:$(c),target:t},handled:!1,type:"auto.browser.browserapierrors.handleEvent"}}))}catch{}return e.unregisterOriginalCallbacks&&au(this,a,c),i.apply(this,[a,nt(c,{mechanism:{data:{handler:$(c),target:t},handled:!1,type:"auto.browser.browserapierrors.addEventListener"}}),u])}}),T(r,"removeEventListener",function(i){return function(a,c,u){try{if(Object.prototype.hasOwnProperty.call(c,"__sentry_wrapped__")){const f=c.__sentry_wrapped__;f&&i.call(this,a,f,u)}}catch{}return i.call(this,a,c,u)}}))}function iu(t){return typeof t.handleEvent=="function"}function au(t,e,n){t&&typeof t=="object"&&"removeEventListener"in t&&typeof t.removeEventListener=="function"&&t.removeEventListener(e,n)}const cu=(t={})=>{const e=t.lifecycle??"page";return{name:"BrowserSession",setupOnce(){if(typeof y.document>"u"){Ft&&h.warn("Using the `browserSessionIntegration` in non-browser environments is not supported.");return}rn({ignoreDuration:!0});let n=!1;Ka(()=>{n||(qt(),n=!0)});const r=L();let s=r.getUser();r.addScopeListener(o=>{const i=o.getUser();((s==null?void 0:s.id)!==(i==null?void 0:i.id)||(s==null?void 0:s.ip_address)!==(i==null?void 0:i.ip_address))&&(s=i,n&&qt())}),e==="route"&&Ar(({from:o,to:i})=>{o!==i&&(rn({ignoreDuration:!0}),qt(),n=!0)})}}},uu="CultureContext",fu=()=>({name:uu,preprocessEvent(t){var n;const e=Rn();e&&(t.contexts={...t.contexts,culture:{...e,...(n=t.contexts)==null?void 0:n.culture}})},processSegmentSpan(t){const e=Rn();e&&ir(t,{"culture.locale":e.locale,"culture.timezone":e.timezone,"culture.calendar":e.calendar})}}),lu=fu;function Rn(){try{const t=y.Intl;if(!t)return;const e=t.DateTimeFormat().resolvedOptions();return{locale:e.locale,timezone:e.timeZone,calendar:e.calendar}}catch{return}}const du="GlobalHandlers",pu=(t={})=>{const e={onerror:!0,onunhandledrejection:!0,...t};return{name:du,setupOnce(){Error.stackTraceLimit=50},setup(n){e.onerror&&(mu(n),On("onerror")),e.onunhandledrejection&&(gu(n),On("onunhandledrejection"))}}},hu=pu;function mu(t){qr(e=>{const{stackParser:n,attachStacktrace:r}=Pr();if(S()!==t||xr(e))return;const{msg:s,url:o,line:i,column:a,error:c}=e,u=Eu(ke(n,c||s,void 0,r,!1),o,i,a);u.level="error",dr(u,{originalException:c,mechanism:{handled:!1,type:"auto.browser.global_handlers.onerror"}})})}function gu(t){zr(e=>{const{stackParser:n,attachStacktrace:r}=Pr();if(S()!==t||xr())return;const s=_u(e),o=it(s)?yu(s):ke(n,s,void 0,r,!0);o.level="error",dr(o,{originalException:s,mechanism:{handled:!1,type:"auto.browser.global_handlers.onunhandledrejection"}})})}function _u(t){if(it(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch{}return t}function yu(t){return{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(t)}`}]}}}function Eu(t,e,n,r){const s=t.exception=t.exception||{},o=s.values=s.values||[],i=o[0]=o[0]||{},a=i.stacktrace=i.stacktrace||{},c=a.frames=a.frames||[];return c.length===0&&c.push({colno:r,lineno:n,filename:Su(e)??Ie(),function:q,in_app:!0}),t}function On(t){Ft&&h.log(`Global Handler attached: ${t}`)}function Pr(){const t=S();return(t==null?void 0:t.getOptions())||{stackParser:()=>[],attachStacktrace:!1}}function Su(t){if(!(!x(t)||t.length===0))return t.startsWith("data:")?`<${ra(t,!1)}>`:t}const bu=()=>({name:"HttpContext",preprocessEvent(t,e,n){var c;if(!y.navigator&&!y.location&&!y.document)return;const{url:r,headers:s}=kn(),o=n.getDataCollectionOptions().httpHeaders.request,i=Object.entries(((c=t.request)==null?void 0:c.headers)??{}).filter(([u])=>!(u in s)),a={...ln(s,o),...Object.fromEntries(i)};t.request={url:r,...t.request,...Object.keys(a).length>0?{headers:a}:{headers:void 0}}},processSpan(t,e){var a;if(!y.navigator&&!y.location&&!y.document)return;const n=kn(),r=ln(n.headers,e.getDataCollectionOptions().httpHeaders.request),s=r.Referer,{hostname:o,protocol:i}=y.location||{};ir(t,{[Fs]:r["User-Agent"],[Ls]:i==="file:"||o==="localhost"||o==="127.0.0.1"||o==="[::1]"||!!(o!=null&&o.endsWith(".localhost")),...t.is_segment&&{[$s]:((a=t.attributes)==null?void 0:a[Vn])!=="http.client"?na(n.url):void 0,[`${Ds}.referer`]:s?[s]:void 0}})}}),vu="cause",Iu=5,Tu="LinkedErrors",ku=(t={})=>{const e=t.limit||Iu,n=t.key||vu;return{name:Tu,preprocessEvent(r,s,o){const i=o.getOptions();Sa(Te,i.stackParser,n,e,r,s)}}},wu=ku,Ru=/^HTML(\w*)Element$/;function Ou(t){if(typeof window<"u"&&t===window)return"[Window]";if(typeof document<"u"&&t===document)return"[Document]";if(dc(t)){const e=Nu(t);if(Ru.test(e))return`[HTMLElement: ${Nr(t)}]`}}function Nu(t){const e=Object.getPrototypeOf(t);return e!=null&&e.constructor?e.constructor.name:"null prototype"}function Cu(){return Au()?(Ft&&j(()=>{console.error("[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/")}),!0):!1}function Au(){var s;if(typeof y.window>"u")return!1;const t=y;if(t.nw)return!1;const e=t.chrome||t.browser;if(!((s=e==null?void 0:e.runtime)!=null&&s.id))return!1;const n=Ie();return!(y===y.top&&/^(?:chrome-extension|moz-extension|ms-browser-extension|safari-web-extension):\/\//.test(n))}function xu(t){return[da(),ua(),$a(),nu(),zc(),Da(),hu(),wu(),Oa(),bu(),lu(),cu()]}function Pu(t={}){const e=!t.skipBrowserExtensionCheck&&Cu();let n=t.defaultIntegrations==null?xu():t.defaultIntegrations;const r=vo({integrations:t.integrations,defaultIntegrations:n}),s={...t,enabled:e?!1:t.enabled,stackParser:Hr(t.stackParser||Wc),integrations:r,transport:t.transport||Nc};return es(Ou),Yi(wc,s)}export{di as captureException,Pu as init,Du as setTag,Lu as setUser}; diff --git a/public/build/stileigentum/manifest.json b/public/build/stileigentum/manifest.json new file mode 100644 index 00000000..d180cacd --- /dev/null +++ b/public/build/stileigentum/manifest.json @@ -0,0 +1,48 @@ +{ + "resources/css/web/shared-styles.css": { + "file": "shared-styles-BbGt7f_e.css", + "src": "resources/css/web/shared-styles.css", + "isEntry": true + }, + "resources/css/web/theme-b2a.css": { + "file": "theme-b2a-BCAFYDZJ.css", + "src": "resources/css/web/theme-b2a.css", + "isEntry": true + }, + "resources/css/web/theme-b2in.css": { + "file": "theme-b2in-DK_BFMo-.css", + "src": "resources/css/web/theme-b2in.css", + "isEntry": true + }, + "resources/css/web/theme-stileigentum.css": { + "file": "theme-stileigentum-skwGRiP0.css", + "src": "resources/css/web/theme-stileigentum.css", + "isEntry": true + }, + "resources/css/web/theme-style2own.css": { + "file": "theme-style2own-1F1Xts-B.css", + "src": "resources/css/web/theme-style2own.css", + "isEntry": true + }, + "resources/js/app.js": { + "file": "app-OG3MHWAj.js", + "name": "app", + "src": "resources/js/app.js", + "isEntry": true + }, + "resources/js/error-reporting-sdk.js": { + "file": "error-reporting-sdk-CLmutOST.js", + "name": "error-reporting-sdk", + "src": "resources/js/error-reporting-sdk.js", + "isDynamicEntry": true + }, + "resources/js/error-reporting.js": { + "file": "error-reporting-BiGrjXpD.js", + "name": "error-reporting", + "src": "resources/js/error-reporting.js", + "isEntry": true, + "dynamicImports": [ + "resources/js/error-reporting-sdk.js" + ] + } +} \ No newline at end of file diff --git a/public/build/stileigentum/shared-styles-BbGt7f_e.css b/public/build/stileigentum/shared-styles-BbGt7f_e.css new file mode 100644 index 00000000..08008ef5 --- /dev/null +++ b/public/build/stileigentum/shared-styles-BbGt7f_e.css @@ -0,0 +1 @@ +@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2) format("woff2")}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary{cursor:pointer}.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{font-weight:500;letter-spacing:-.025em;font-family:var(--font-secondary, "Inter"),var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif}.text-hero{font-size:clamp(2.6rem,3.5vw,3.6rem);line-height:1.1;font-weight:300;letter-spacing:-.025em}.text-hero-alt{font-size:clamp(2rem,3vw,3rem);line-height:1.1;font-weight:300;letter-spacing:-.025em}.text-section-title{font-size:clamp(1.6rem,3vw,3rem);line-height:1.3em;font-weight:300;letter-spacing:-.025em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important;color:hsl(var(--primary-foreground));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-primary:hover{background-color:hsl(var(--primary-dark));background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-primary-accent{background-color:hsl(var(--primary));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important;color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-primary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-secondary{background-color:hsl(var(--secondary));background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important;color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-secondary-accent{background-color:hsl(var(--secondary));background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important;color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;text-decoration:none;cursor:pointer}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important;color:hsl(var(--accent-foreground));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-accent:hover{background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important;color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow)}.form-field{display:block;width:100%;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:.6rem;box-shadow:inset 0 1px 2px hsl(var(--foreground) / .04);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease}.form-field::placeholder{color:hsl(var(--muted-foreground) / .7)}.form-field:hover{border-color:hsl(var(--primary) / .45)}.form-field:focus,.form-field:focus-visible{outline:none;border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary) / .22);background-color:hsl(var(--background))}.form-select{-moz-appearance:none;appearance:none;-webkit-appearance:none;padding-right:2.6rem;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-repeat:no-repeat;background-position:right .9rem center;background-size:1.1rem 1.1rem}.form-select optgroup{font-weight:600;font-style:normal;color:hsl(var(--primary))}.form-select option{font-weight:400;color:hsl(var(--foreground))}.card-elevated{background-color:hsl(var(--card));border-radius:1rem;box-shadow:var(--shadow-card);border:1px solid hsl(var(--border) / .5)}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (min-width: 1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient: linear-gradient( 100deg, hsl(var(--primary-dark)) 0%, hsl(var(--primary)) 42%, hsl(var(--cta-band-end, var(--secondary-dark))) 100% );position:relative;overflow:hidden;background:var(--cta-band-gradient)}.cta-band:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line, 0 0% 100%) / .6) 50%,transparent 100%)}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:linear-gradient(165deg,hsl(0 0% 100% / .07) 0%,transparent 48%)}.section-footer{background-color:hsl(var(--footer-bg, var(--dark-bg)));color:hsl(var(--footer-fg, var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted, var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line, var(--dark-muted)) / .3)}.text-clay{color:hsl(var(--clay, var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (min-width: 640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (min-width: 640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary) / .1)}.bg-secondary\/15{background-color:hsl(var(--secondary) / .15)}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-card\/95{background-color:hsl(var(--card) / .95)}.border-border\/50{border-color:hsl(var(--border) / .5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted) / .3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{position:fixed;top:0;left:0;right:0;z-index:50;background-color:hsl(var(--background) / .8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out}.header-normal{position:relative;transition:all .3s ease-in-out;border-bottom:1px solid hsl(var(--border)/.3)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.border-border\/30{border-color:hsl(var(--border) / .3)}.font-secondary{font-family:var(--font-secondary, "Inter"),var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;transform:translateY(30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;transform:translateY(-30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;transform:translate(-30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;transform:translate(30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;transform:scale(.97);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion: reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{transition:none!important;opacity:1!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary) / .2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary) / .3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary) / .15),0 0 20px hsl(var(--secondary) / .1),0 4px 10px -4px hsl(var(--secondary) / .2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary) / .25),0 0 30px hsl(var(--secondary) / .15),0 5px 10px -5px hsl(var(--secondary) / .3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary) / .35),0 0 60px hsl(var(--secondary) / .2),0 0 90px hsl(var(--secondary-dark) / .1),0 10px 10px -10px hsl(var(--secondary) / .4)}.icon-secondary-linear{background-color:hsl(var(--secondary) / .1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));color:hsl(var(--secondary-foreground))!important;position:relative}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent) /.5),hsl(var(--accent-dark) / .5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{border:1px solid rgba(255,255,255,.9);background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));box-shadow:#0000001a 0 10px 20px 5px;position:relative}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card)) 40%,hsl(var(--card) / .92));box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005;border:1px solid rgba(255,255,255,.9);transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s ease;position:relative}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008;transform:translateY(-2px) scale(1.005);filter:brightness(1.01)}.variante-glass-flow .btn,.variante-glass-flow button,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{position:relative;overflow:hidden;isolation:isolate;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s ease}.variante-glass-flow .btn:hover,.variante-glass-flow button:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary) / .3);transform:translateY(-2px);filter:brightness(1.08)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;transform:none;filter:none;overflow:visible;isolation:auto;transition:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary) / .06);stroke:hsl(var(--secondary) / .45);stroke-width:1.5;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep, var(--secondary)));font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary) / .18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));font-size:11px;text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke} diff --git a/public/build/stileigentum/theme-b2a-BCAFYDZJ.css b/public/build/stileigentum/theme-b2a-BCAFYDZJ.css new file mode 100644 index 00000000..9c564501 --- /dev/null +++ b/public/build/stileigentum/theme-b2a-BCAFYDZJ.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:0 25% 96%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:207 70% 26%;--primary-light:207 70% 36%;--primary-lighter:207 70% 86%;--primary-dark:207 70% 20%;--primary-foreground:30 25% 98%;--secondary:352 76% 48%;--secondary-light:352 76% 56%;--secondary-lighter:352 76% 75%;--secondary-dark:352 76% 42%;--secondary-foreground:0 25% 96%;--muted:0 0% 92%;--muted-foreground:199 50% 45%;--accent:210 20% 95%;--accent-foreground:20 14% 16%;--dark-bg:207 70% 26%;--dark-text:30 25% 98%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--ring:20 14% 16%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"Merriweather",Georgia,serif}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/stileigentum/theme-b2in-DK_BFMo-.css b/public/build/stileigentum/theme-b2in-DK_BFMo-.css new file mode 100644 index 00000000..e35ad105 --- /dev/null +++ b/public/build/stileigentum/theme-b2in-DK_BFMo-.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:38 33% 95%;--foreground:26 8% 16%;--card:40 43% 98%;--card-foreground:26 8% 16%;--popover:40 43% 98%;--popover-foreground:26 8% 16%;--primary:175 16% 15%;--primary-light:175 13% 22%;--primary-lighter:175 8% 82%;--primary-dark:175 18% 11%;--primary-foreground:38 33% 95%;--secondary:37 69% 39%;--secondary-light:37 62% 48%;--secondary-lighter:37 55% 78%;--secondary-dark:37 70% 32%;--secondary-deep:37 70% 30%;--cta-band-line:37 69% 39%;--secondary-foreground:38 33% 95%;--clay:24 15% 57%;--muted:30 24% 90%;--muted-foreground:24 12% 40%;--accent:28 25% 80%;--accent-dark:28 25% 74%;--accent-foreground:26 8% 16%;--dark-bg:175 16% 15%;--dark-text:38 33% 95%;--dark-muted:38 20% 76%;--footer-bg:28 25% 80%;--footer-fg:175 16% 15%;--footer-muted:24 12% 40%;--footer-line:175 16% 15%;--cta-band-end:175 12% 26%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:28 20% 84%;--input:40 40% 98%;--ring:175 16% 15%;--radius:.75rem;--hero-container:30 28% 89%;--hero-container-dark:28 25% 83%;--hero-container-light:36 32% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"EB Garamond","Georgia","Times New Roman",serif}.world-immobilien{--background:32 20% 97%;--foreground:20 14% 16%;--card:0 25% 96%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:209 32% 25%;--primary-light:209 32% 35%;--primary-lighter:209 32% 85%;--primary-dark:209 32% 20%;--primary-foreground:0 25% 96%;--secondary:199 74% 49%;--secondary-light:199 74% 56%;--secondary-lighter:199 74% 75%;--secondary-dark:199 74% 42%;--secondary-deep:199 74% 36%;--secondary-foreground:0 25% 96%;--clay:199 50% 35%;--muted:0 0% 92%;--muted-foreground:199 50% 35%;--accent:210 0% 90%;--accent-dark:210 0% 85%;--accent-foreground:20 14% 16%;--dark-bg:209 32% 25%;--dark-text:0 0% 100%;--dark-muted:0 0% 80%;--footer-bg:209 32% 25%;--footer-fg:0 0% 100%;--footer-muted:0 0% 80%;--footer-line:0 0% 80%;--cta-band-end:199 74% 42%;--border:0 0% 80%;--input:0 0% 92%;--ring:20 14% 16%;--hero-container:0 0% 93%;--hero-container-dark:0 0% 85%;--hero-container-light:0 0% 95%;--font-secondary:"IBM Plex Sans","Inter",system-ui,-apple-system,sans-serif}.world-interior{--background:40 25% 98%;--card:0 0% 100%;--popover:0 0% 100%;--muted:40 12% 94%;--muted-foreground:24 8% 38%;--accent:36 14% 93%;--accent-dark:36 14% 88%;--border:36 12% 88%;--input:0 0% 100%;--hero-container:40 14% 95%;--hero-container-dark:40 12% 90%;--hero-container-light:40 25% 98%;--footer-bg:175 16% 15%;--footer-fg:38 33% 95%;--footer-muted:38 20% 76%;--footer-line:38 20% 76%;--shadow-card:0 6px 24px -10px hsl(var(--foreground)/.14);--shadow-elevated:0 24px 48px -20px hsl(var(--foreground)/.2)}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.world-interior .btn-secondary-accent{color:hsl(var(--primary));border:1px solid hsl(var(--primary)/.55);box-shadow:none;background:0 0!important}.world-interior .btn-secondary-accent:hover{color:hsl(var(--primary-foreground));border-color:hsl(var(--primary));background:hsl(var(--primary))!important}.world-interior .section-footer .text-secondary{color:hsl(var(--secondary))}.world-interior .section-footer{border-top:1px solid hsl(var(--footer-muted)/.35)}.world-interior .appointment-toggle.btn-secondary-accent{background:hsl(var(--card))!important}.world-interior .appointment-toggle.btn-secondary-accent:hover{background:hsl(var(--primary))!important}.world-interior .cookie-consent-wrapper{--cc-primary:hsl(var(--secondary));--cc-primary-hover:hsl(var(--secondary-dark));--cc-save:hsl(var(--primary));--cc-save-hover:hsl(var(--primary-light));--cc-button-bg:hsl(var(--primary));--cc-button-hover:hsl(var(--primary-light))}.world-interior .cookie-consent-wrapper .cc-floating-btn{color:hsl(var(--primary-foreground));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)));--tw-ring-color:hsl(var(--secondary))!important}.world-interior .cookie-consent-wrapper .cc-floating-btn:hover{background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))}.footer-logo-dark,.world-interior .footer-logo-light{display:none}.world-interior .footer-logo-dark{display:block}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}.world-interior :is(h2,h3).text-xl{font-size:1.5rem;line-height:1.25}.world-interior h4{font-size:1.25rem;line-height:1.3}.variante-glass-flow button[data-hero-dot],.variante-glass-flow button[data-hero-dot]:hover{box-shadow:none;filter:none;overflow:visible;transform:none}section.bg-secondary [data-vision-box] .text-secondary{color:hsl(var(--secondary))}.world-interior .variante-glass-flow div.hero-frame,.world-interior div.hero-frame{background:linear-gradient(to bottom right,#f5f4f3,#f2f0ed)padding-box,linear-gradient(125deg,hsl(var(--secondary-lighter)/.9),hsl(var(--secondary-light)/.75)22%,hsl(var(--secondary-lighter)/.45)55%,hsl(var(--secondary-light)/.75)82%,hsl(var(--secondary-lighter)/.9))border-box;border:1.5px solid #0000}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/stileigentum/theme-stileigentum-skwGRiP0.css b/public/build/stileigentum/theme-stileigentum-skwGRiP0.css new file mode 100644 index 00000000..ae385070 --- /dev/null +++ b/public/build/stileigentum/theme-stileigentum-skwGRiP0.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:38 40% 97%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:209 65% 20%;--primary-light:209 65% 30%;--primary-lighter:209 65% 80%;--primary-dark:209 65% 15%;--primary-foreground:0 25% 96%;--secondary:38 40% 66%;--secondary-light:38 40% 76%;--secondary-lighter:38 40% 85%;--secondary-dark:38 40% 55%;--secondary-foreground:20 14% 16%;--muted:209 35% 94%;--muted-foreground:209 10% 40%;--accent:38 40% 88%;--accent-foreground:209 10% 40%;--dark-bg:209 65% 20%;--dark-text:0 0% 100%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"EB Garamond",Georgia,serif}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.text-section-title{line-height:.95em}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/stileigentum/theme-style2own-1F1Xts-B.css b/public/build/stileigentum/theme-style2own-1F1Xts-B.css new file mode 100644 index 00000000..c6487a9a --- /dev/null +++ b/public/build/stileigentum/theme-style2own-1F1Xts-B.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:30 25% 98%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:195 100% 34%;--primary-light:195 100% 44%;--primary-lighter:195 100% 84%;--primary-dark:195 100% 24%;--primary-foreground:30 25% 98%;--secondary:46 95% 56%;--secondary-light:46 95% 66%;--secondary-lighter:46 95% 86%;--secondary-dark:46 95% 46%;--secondary-foreground:20 14% 16%;--muted:0 0% 92%;--muted-foreground:199 50% 45%;--accent:210 20% 95%;--accent-foreground:20 14% 16%;--dark-bg:195 100% 34%;--dark-text:30 25% 98%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"Ephesis",cursive}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.text-hero{font-size:clamp(3.6rem,4.2vw,7.8rem)!important}.text-section-title{line-height:.85em;font-size:clamp(2.1rem,3.9vw,3.9rem)!important}.text-xl{font-size:clamp(1.3rem,2.2vw,2.2rem)!important}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/style2own/app-OG3MHWAj.js b/public/build/style2own/app-OG3MHWAj.js new file mode 100644 index 00000000..a71b089a --- /dev/null +++ b/public/build/style2own/app-OG3MHWAj.js @@ -0,0 +1 @@ +(function(){let o=null;document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r):r();function r(){s(),u(),c(),document.addEventListener("livewire:navigated",function(){s()}),document.addEventListener("livewire:load",function(){s()}),window.addEventListener("livewire:update",function(){setTimeout(()=>{s()},100)})}function s(){const n={threshold:.15,rootMargin:"0px 0px -80px 0px"};o||(o=new IntersectionObserver(e=>{e.forEach(t=>{t.isIntersecting&&(setTimeout(()=>{t.target.classList.add("is-visible")},50),o.unobserve(t.target))})},n)),document.querySelectorAll(".scroll-animate:not(.is-visible):not(.observed), .fade-in:not(.is-visible):not(.observed), .slide-up:not(.is-visible):not(.observed), .slide-right:not(.is-visible):not(.observed), .slide-left:not(.is-visible):not(.observed), .scale-in:not(.is-visible):not(.observed), .slide-down:not(.is-visible):not(.observed)").forEach(e=>{e.classList.add("observed"),o.observe(e)}),window.appointmentLinksInitialized||(document.addEventListener("click",function(e){const t=e.target.closest("a[data-open-appointment]");t&&(e.preventDefault(),window.dispatchEvent(new CustomEvent("open-appointment",{detail:{topic:t.dataset.appointmentTopic||null}})))}),window.appointmentLinksInitialized=!0),window.smoothScrollInitialized||(document.addEventListener("click",function(e){const t=e.target.closest('a[href^="#"]');if(t&&t.hash){const l=document.querySelector(t.hash);if(l){e.preventDefault();const f=l.getBoundingClientRect().top+window.pageYOffset-80;window.scrollTo({top:f,behavior:"smooth"})}}}),window.smoothScrollInitialized=!0)}function c(){const n=document.getElementById("main-header");if(!n)return;function i(){(window.pageYOffset||document.documentElement.scrollTop)>50?n.classList.add("scrolled"):n.classList.remove("scrolled")}let e=!1;window.addEventListener("scroll",function(){e||(window.requestAnimationFrame(function(){i(),e=!1}),e=!0)}),i()}function u(){const n=document.createElement("div");n.className="scroll-progress-bar",document.body.appendChild(n);function i(){const t=window.innerHeight,l=document.documentElement.scrollHeight,d=window.pageYOffset||document.documentElement.scrollTop,a=d/(l-t)*100;n.style.width=`${Math.min(a,100)}%`,d>100?n.classList.add("visible"):n.classList.remove("visible")}let e=!1;window.addEventListener("scroll",function(){e||(window.requestAnimationFrame(function(){i(),e=!1}),e=!0)}),i()}})(); diff --git a/public/build/style2own/error-reporting-BiGrjXpD.js b/public/build/style2own/error-reporting-BiGrjXpD.js new file mode 100644 index 00000000..0cd20769 --- /dev/null +++ b/public/build/style2own/error-reporting-BiGrjXpD.js @@ -0,0 +1 @@ +const y="modulepreload",A=function(e){return"https://b2in.test/build/"+e},h={},_=function(r,t,a){let u=Promise.resolve();if(t&&t.length>0){let o=function(s){return Promise.all(s.map(c=>Promise.resolve(c).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const n=document.querySelector("meta[property=csp-nonce]"),m=(n==null?void 0:n.nonce)||(n==null?void 0:n.getAttribute("nonce"));u=o(t.map(s=>{if(s=A(s),s in h)return;h[s]=!0;const c=s.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${f}`))return;const l=document.createElement("link");if(l.rel=c?"stylesheet":y,c||(l.as="script"),l.crossOrigin="",l.href=s,m&&l.setAttribute("nonce",m),document.head.appendChild(l),c)return new Promise((b,S)=>{l.addEventListener("load",b),l.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${s}`)))})}))}function d(o){const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=o,window.dispatchEvent(n),!n.defaultPrevented)throw o}return u.then(o=>{for(const n of o||[])n.status==="rejected"&&d(n.reason);return r().catch(d)})},i=(()=>{const e=document.querySelector('meta[name="pk-error-reporting"]');try{return e?JSON.parse(e.content):null}catch{return null}})(),v=["page","q","tab","sort"],P=new RegExp("(?<=\\/)[A-Za-z0-9_-]{32,}(?=\\/|$)","g"),w=/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi;function p(e){try{const r=new URL(e,window.location.origin);r.pathname=r.pathname.replace(P,"[Filtered]");for(const t of[...r.searchParams.keys()])!v.includes(t)&&!t.startsWith("utm_")&&r.searchParams.set(t,"[Filtered]");return r.hash="",r.toString().replace(w,"[email]")}catch{return"[Filtered]"}}let E=null;function R(){return E??(E=_(()=>import("./error-reporting-sdk-CLmutOST.js"),[]).then(e=>(e.init({dsn:i.dsn,release:i.release||void 0,environment:i.environment,sampleRate:i.sampleRate??1,sendDefaultPii:!1,integrations:r=>r.filter(t=>!["GlobalHandlers","Breadcrumbs","BrowserSession","BrowserApiErrors"].includes(t.name)),ignoreErrors:["ResizeObserver loop","Script error.","AbortError"],denyUrls:[/^chrome-extension:\/\//,/^moz-extension:\/\//,/^safari-(web-)?extension:\/\//],beforeSend(r){var t,a,u,d;(t=r.request)!=null&&t.url&&(r.request.url=p(r.request.url)),(u=(a=r.request)==null?void 0:a.headers)!=null&&u.Referer&&(r.request.headers.Referer=p(r.request.headers.Referer));for(const o of((d=r.exception)==null?void 0:d.values)??[])o.value&&(o.value=o.value.replace(w,"[email]"));return r}}),i.userId&&e.setUser({id:String(i.userId)}),e.setTag("area",i.area),e))),E}function k(e){var a;if(e instanceof Error)return e;const r=((a=e==null?void 0:e.constructor)==null?void 0:a.name)??typeof e;let t;try{t=typeof e=="string"?e:JSON.stringify(e)}catch{t=String(e)}return new Error(`Unbehandelte Ablehnung (${r}): ${String(t??"").slice(0,300)}`)}function g(e){R().then(r=>r.captureException(e)).catch(()=>{})}i!=null&&i.dsn&&(window.addEventListener("error",e=>{e.error&&g(e.error)}),window.addEventListener("unhandledrejection",e=>{g(k(e.reason))})); diff --git a/public/build/style2own/error-reporting-sdk-CLmutOST.js b/public/build/style2own/error-reporting-sdk-CLmutOST.js new file mode 100644 index 00000000..e5da0866 --- /dev/null +++ b/public/build/style2own/error-reporting-sdk-CLmutOST.js @@ -0,0 +1,15 @@ +const m=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,_=globalThis,W="11.6.0";function rt(){return gt(_),_}function gt(t){const e=t.__SENTRY__=t.__SENTRY__||{};return e.version=e.version||W,e[W]=e[W]||{}}function st(t,e,n=_){const r=n.__SENTRY__=n.__SENTRY__||{},s=r[W]=r[W]||{};return s[t]||(s[t]=e())}const Nn=["debug","info","warn","error","log","assert","trace"],Mr="Sentry Logger ",Ot={};function j(t){if(!("console"in _))return t();const e=_.console,n={},r=Object.keys(Ot);r.forEach(s=>{const o=Ot[s];n[s]=e[s],e[s]=o});try{return t()}finally{r.forEach(s=>{e[s]=n[s]})}}function $r(){me().enabled=!0}function Fr(){me().enabled=!1}function Cn(){return me().enabled}function jr(...t){he("log",...t)}function Br(...t){he("warn",...t)}function Ur(...t){he("error",...t)}function he(t,...e){m&&Cn()&&j(()=>{_.console[t](`${Mr}[${t}]:`,...e)})}function me(){return m?st("loggerSettings",()=>({enabled:!1})):{enabled:!1}}const h={enable:$r,disable:Fr,isEnabled:Cn,log:jr,warn:Br,error:Ur},An=50,q="?",Re=/\(error: (.*)\)/,Oe=/captureMessage|captureException/;function xn(...t){const e=t.sort((n,r)=>n[0]-r[0]).map(n=>n[1]);return(n,r=0,s=0)=>{const o=[],i=n.split(` +`);for(let a=r;a1024&&(c=c.slice(0,1024));const u=Re.test(c)?c.replace(Re,"$1"):c;if(!u.includes("Error: ")){for(const f of e){const l=f(u);if(l){o.push(l);break}}if(o.length>=An+s)break}}return Wr(o.slice(s))}}function Hr(t){return Array.isArray(t)?xn(...t):t}function Wr(t){if(!t.length)return[];const e=Array.from(t);return/sentryWrapped/.test(vt(e).function||"")&&e.pop(),e.reverse(),Oe.test(vt(e).function||"")&&(e.pop(),Oe.test(vt(e).function||"")&&e.pop()),e.slice(0,An).map(n=>({...n,filename:n.filename||vt(e).filename,function:n.function||q}))}function vt(t){return t[t.length-1]||{}}const jt="";function $(t){try{return!t||typeof t!="function"?jt:t.name||jt}catch{return jt}}function Ne(t){const e=t.exception;if(e){const n=[];try{return e.values.forEach(r=>{r.stacktrace.frames&&n.push(...r.stacktrace.frames)}),n}catch{return}}}const ft={},Ce={};function z(t,e){return ft[t]=ft[t]||[],ft[t].push(e),()=>{const n=ft[t];if(n){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}}}function Y(t,e){if(!Ce[t]){Ce[t]=!0;try{e()}catch(n){m&&h.error(`Error while instrumenting ${t}`,n)}}}function w(t,e){const n=t&&ft[t];if(n)for(const r of n)try{r(e)}catch(s){m&&h.error(`Error while triggering instrumentation handler. +Type: ${t} +Name: ${$(r)} +Error:`,s)}}let Bt=null;function qr(t){const e="error";z(e,t),Y(e,Gr)}function Gr(){Bt=_.onerror,_.onerror=function(t,e,n,r,s){return w("error",{column:r,error:s,line:n,msg:t,url:e}),Bt?Bt.apply(this,arguments):!1},_.onerror.__SENTRY_INSTRUMENTED__=!0}let Ut=null;function zr(t){const e="unhandledrejection";z(e,t),Y(e,Yr)}function Yr(){Ut=_.onunhandledrejection,_.onunhandledrejection=function(t){return w("unhandledrejection",t),Ut?Ut.apply(this,arguments):!0},_.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const Dn=Object.prototype.toString;function D(t){switch(Dn.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object WebAssembly.Exception]":return!0;default:return _e(t,Error)}}function ot(t,e){return Dn.call(t)===`[object ${e}]`}function Ln(t){return ot(t,"ErrorEvent")}function Ae(t){return ot(t,"DOMError")}function Kr(t){return ot(t,"DOMException")}function x(t){return ot(t,"String")}function ge(t){return typeof t=="object"&&t!==null&&"__sentry_template_string__"in t&&"__sentry_template_values__"in t}function it(t){return t===null||ge(t)||typeof t!="object"&&typeof t!="function"}function Nt(t){return ot(t,"Object")}function xt(t){return typeof t=="object"&&t!==null}function Dt(t){return typeof Event<"u"&&_e(t,Event)}function Vr(t){return ot(t,"RegExp")}function at(t){return!!(t!=null&&t.then&&typeof t.then=="function")}function _e(t,e){try{return t instanceof e}catch{return!1}}function Pn(t){return typeof Request<"u"&&_e(t,Request)}function T(t,e,n){if(!(e in t))return;const r=t[e];if(typeof r!="function")return;const s=n(r);typeof s=="function"&&Mn(s,r);try{t[e]=s}catch{m&&h.log(`Failed to replace method "${e}" in object`,t)}}function F(t,e,n){try{Object.defineProperty(t,e,{value:n,writable:!0,configurable:!0})}catch{m&&h.log(`Failed to add non-enumerable property "${String(e)}" to object`,t)}}function Mn(t,e){try{const n=e.prototype||{};t.prototype=e.prototype=n,F(t,"__sentry_original__",e)}catch{}}function ye(t){return t.__sentry_original__}function $n(t){if(D(t))return{message:t.message,name:t.name,stack:t.stack,...xe(t)};if(Dt(t)){const{type:e,target:n,currentTarget:r,detail:s}=t;return{type:e,target:n,currentTarget:r,...s?{detail:s}:{},...xe(t)}}return t}function xe(t){return xt(t)?Object.fromEntries(Object.entries(t)):{}}function Xr(t){const e=Object.keys($n(t));return e.sort(),e[0]?e.join(", "):"[object has no keys]"}let J;function pt(t){if(J!==void 0)return J?J(t):t();const e=Symbol.for("__SENTRY_SAFE_RANDOM_ID_WRAPPER__"),n=_;return e in n&&typeof n[e]=="function"?(J=n[e],J(t)):(J=null,t())}function Ee(){return pt(()=>Math.random())}function K(){return pt(()=>Date.now())}const Jr=Symbol.for("sentry.skipNormalization"),Qr=Symbol.for("sentry.overrideNormalizationDepth");function Zr(t){return!!t[Jr]}function ts(t){const e=t[Qr];return typeof e=="number"?e:void 0}let Kt;function es(t){Kt=t}function A(t,e=100,n=1/0){try{return Vt("",t,e,n)}catch(r){return{ERROR:`**non-serializable** (${r})`}}}function Fn(t,e=3,n=100*1024){const r=A(t,e);return ss(r)>n?Fn(t,e-1,n):r}function Vt(t,e,n=1/0,r=1/0,s=os()){const[o,i]=s;if(e==null||["boolean","string"].includes(typeof e)||typeof e=="number"&&Number.isFinite(e))return e;const a=jn(t,e);if(!a.startsWith("[object "))return a;if(Zr(e))return e;const c=ts(e),u=c!==void 0?c:n;if(u===0)return a.replace("object ","");if(o(e))return"[Circular ~]";const f=e;if(f&&typeof f.toJSON=="function")try{const p=f.toJSON();return Vt("",p,u-1,r,s)}catch{}const l=Array.isArray(e)?[]:{};let d=0;const g=$n(e);for(const p in g){if(!Object.prototype.hasOwnProperty.call(g,p))continue;if(d>=r){l[p]="[MaxProperties ~]";break}const I=g[p];l[p]=Vt(p,I,u-1,r,s),d++}return i(e),l}function jn(t,e){try{if(Kt){const r=Kt(e);if(r)return r}return typeof global<"u"&&e===global?"[Global]":typeof e=="number"&&!Number.isFinite(e)?`[${e}]`:typeof e=="function"?`[Function: ${$(e)}]`:typeof e=="symbol"?`[${String(e)}]`:typeof e=="bigint"?`[BigInt: ${String(e)}]`:`[object ${ns(e)}]`}catch(n){return`**non-serializable** (${n})`}}function ns(t){const e=Object.getPrototypeOf(t);return e!=null&&e.constructor?e.constructor.name:"null prototype"}function rs(t){return~-encodeURI(t).split(/%..|./).length}function ss(t){return rs(JSON.stringify(t))}function os(){const t=new WeakSet;function e(r){return t.has(r)?!0:(t.add(r),!1)}function n(r){t.delete(r)}return[e,n]}function Xt(t,e=0){return typeof t!="string"||e===0||t.length<=e?t:`${t.slice(0,e)}...`}function is(t,e){if(!Array.isArray(t))return"";const n=[];for(let r=0;rt.randomUUID()).replace(/-/g,"")}catch{}return Ht||(Ht="10000000100040008000"+1e11),Ht.replace(/[018]/g,e=>(e^(cs()&15)>>e/4).toString(16))}function Bn(t){var e,n;return(n=(e=t.exception)==null?void 0:e.values)==null?void 0:n[0]}function H(t){const{message:e,event_id:n}=t;if(e)return e;const r=Bn(t);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||n||"":n||""}function Jt(t,e,n){const r=t.exception=t.exception||{},s=r.values=r.values||[],o=s[0]=s[0]||{};o.value||(o.value=e||""),o.type||(o.type="Error")}function Z(t,e){const n=Bn(t);n&&Un(n,e)}function us(t,e){var s;const n=(s=t.exception)==null?void 0:s.values,r=(n==null?void 0:n.find(o=>{var i;return((i=o.mechanism)==null?void 0:i.exception_id)===0}))??(n==null?void 0:n[0]);r&&Un(r,e)}function Un(t,e){const n={type:"generic",handled:!0},r=t.mechanism;t.mechanism={...n,...r,...e},e&&"data"in e&&(t.mechanism.data={...r==null?void 0:r.data,...e.data})}function De(t){if(fs(t))return!0;try{F(t,"__sentry_captured__",!0)}catch{}return!1}function fs(t){try{return t.__sentry_captured__}catch{}}const Hn=1e3,ls=1e3,ds=100;function yt(){return K()/Hn}let Q=[];function ps(){const{performance:t}=_;if(!(t!=null&&t.now)||!t.timeOrigin)return t!=null&&t.now&&(Q=[{from:0,origin:K()-pt(()=>t.now())}]),yt;let e=t.timeOrigin;Q=[{from:0,origin:e}];let n=!0,r=0;return()=>pt(()=>{const s=t.now(),o=Date.now();return Math.abs(e+s-o)>ls&&(e=o-s,n?Q=[{from:0,origin:e}]:(Q.push({from:r,origin:e}),Q.length>ds&&Q.splice(1,1))),n=!1,r=s,(e+s)/Hn})}let Le;function R(){return(Le??(Le=ps()))()}function hs(t){const e=R(),n={sid:k(),init:!0,timestamp:e,started:e,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>gs(n)};return t&&tt(n,t),n}function tt(t,e={}){if(e.user&&(!t.ipAddress&&e.user.ip_address&&(t.ipAddress=e.user.ip_address),!t.did&&!e.did&&(t.did=e.user.id||e.user.email||e.user.username)),t.timestamp=e.timestamp||R(),e.abnormal_mechanism&&(t.abnormal_mechanism=e.abnormal_mechanism),e.ignoreDuration&&(t.ignoreDuration=e.ignoreDuration),e.sid&&(t.sid=e.sid.length===32?e.sid:k()),e.init!==void 0&&(t.init=e.init),!t.did&&e.did&&(t.did=`${e.did}`),typeof e.started=="number"&&(t.started=e.started),t.ignoreDuration)t.duration=void 0;else if(typeof e.duration=="number")t.duration=e.duration;else{const n=t.timestamp-t.started;t.duration=n>=0?n:0}e.release&&(t.release=e.release),e.environment&&(t.environment=e.environment),!t.ipAddress&&e.ipAddress&&(t.ipAddress=e.ipAddress),!t.userAgent&&e.userAgent&&(t.userAgent=e.userAgent),typeof e.errors=="number"&&(t.errors=e.errors),e.status&&(t.status=e.status)}function ms(t,e){let n={};t.status==="ok"&&(n={status:"exited"}),tt(t,n)}function gs(t){return{sid:`${t.sid}`,init:t.init,started:new Date(t.started*1e3).toISOString(),timestamp:new Date(t.timestamp*1e3).toISOString(),status:t.status,errors:t.errors,did:typeof t.did=="number"||typeof t.did=="string"?`${t.did}`:void 0,duration:t.duration,abnormal_mechanism:t.abnormal_mechanism,attrs:{release:t.release,environment:t.environment,ip_address:t.ipAddress,user_agent:t.userAgent}}}function Et(t,e,n=2){if(!e||typeof e!="object"||n<=0)return e;if(t&&Object.keys(e).length===0)return t;const r={...t};for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=Et(r[s],e[s],n-1));return r}function _s(){return k()}function Wn(){return k().substring(16)}const ys=100;class O{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._attributes={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},F(this,"refs",{}),this._propagationContext={traceId:_s(),sampleRand:Ee()}}clone(){const e=new O;return e._breadcrumbs=[...this._breadcrumbs],e._tags={...this._tags},e._attributes={...this._attributes},e._extra={...this._extra},e._contexts={...this._contexts},this._contexts.flags&&(e._contexts.flags={values:[...this._contexts.flags.values]}),e._user=this._user,e._level=this._level,e._session=this._session,e._transactionName=this._transactionName,e._fingerprint=this._fingerprint,e._eventProcessors=[...this._eventProcessors],e._attachments=[...this._attachments],e._sdkProcessingMetadata={...this._sdkProcessingMetadata},e._propagationContext={...this._propagationContext},e._client=this._client,e._lastEventId=this._lastEventId,e._conversationId=this._conversationId,e.refs={...this.refs},e}setClient(e){this._client=e}setLastEventId(e){this._lastEventId=e}getClient(){return this._client}lastEventId(){return this._lastEventId}addScopeListener(e){this._scopeListeners.push(e)}addEventProcessor(e){return this._eventProcessors.push(e),this}setUser(e){return this._user=e||{email:void 0,id:void 0,ip_address:void 0,username:void 0},this._session&&tt(this._session,{user:e}),this._notifyScopeListeners(),this}getUser(){return this._user}setConversationId(e){return this._conversationId=e||void 0,this._notifyScopeListeners(),this}setTags(e){return this._tags={...this._tags,...e},this._notifyScopeListeners(),this}setTag(e,n){return this.setTags({[e]:n})}setAttributes(e){return this._attributes={...this._attributes,...e},this._notifyScopeListeners(),this}setAttribute(e,n){return this.setAttributes({[e]:n})}removeAttribute(e){return e in this._attributes&&(delete this._attributes[e],this._notifyScopeListeners()),this}setExtras(e){return this._extra={...this._extra,...e},this._notifyScopeListeners(),this}setExtra(e,n){return this._extra={...this._extra,[e]:n},this._notifyScopeListeners(),this}setFingerprint(e){return this._fingerprint=e,this._notifyScopeListeners(),this}setLevel(e){return this._level=e,this._notifyScopeListeners(),this}setTransactionName(e){return this._transactionName=e,this._notifyScopeListeners(),this}setContext(e,n){return n===null?delete this._contexts[e]:this._contexts[e]=n,this._notifyScopeListeners(),this}setSession(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(e){if(!e)return this;const n=typeof e=="function"?e(this):e,r=n instanceof O?n.getScopeData():Nt(n)?e:void 0,{tags:s,attributes:o,extra:i,user:a,contexts:c,level:u,fingerprint:f=[],propagationContext:l,conversationId:d}=r||{};return this._tags={...this._tags,...s},this._attributes={...this._attributes,...o},this._extra={...this._extra,...i},this._contexts={...this._contexts,...c},a&&Object.keys(a).length&&(this._user=a),u&&(this._level=u),f.length&&(this._fingerprint=f),l&&(this._propagationContext=l),d&&(this._conversationId=d),this}addBreadcrumb(e,n){const r=typeof n=="number"?n:ys;if(r<=0)return this;const s={timestamp:yt(),...e,message:e.message?Xt(e.message,2048):e.message};return this._breadcrumbs.push(s),this._breadcrumbs.length>r&&(this._breadcrumbs=this._breadcrumbs.slice(-r)),this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(e){return this._attachments.push(e),this}clearAttachments(){return this._attachments=[],this}getScopeData(){return{breadcrumbs:this._breadcrumbs,attachments:this._attachments,contexts:this._contexts,tags:this._tags,attributes:this._attributes,extra:this._extra,user:this._user,level:this._level,fingerprint:this._fingerprint||[],eventProcessors:this._eventProcessors,propagationContext:this._propagationContext,sdkProcessingMetadata:this._sdkProcessingMetadata,transactionName:this._transactionName,conversationId:this._conversationId}}setSDKProcessingMetadata(e){return this._sdkProcessingMetadata=Et(this._sdkProcessingMetadata,e,2),this}setPropagationContext(e){return this._propagationContext=e,this}getPropagationContext(){return this._propagationContext}captureException(e,n){const r=(n==null?void 0:n.event_id)||k();if(!this._client)return m&&h.warn("No client configured on scope - will not capture exception!"),r;const s=new Error("Sentry syntheticException");return this._client.captureException(e,{originalException:e,syntheticException:s,...n,event_id:r},this),r}captureMessage(e,n,r){const s=(r==null?void 0:r.event_id)||k();if(!this._client)return m&&h.warn("No client configured on scope - will not capture message!"),s;const o=(r==null?void 0:r.syntheticException)??new Error(e);return this._client.captureMessage(e,n,{originalException:e,syntheticException:o,...r,event_id:s},this),s}captureEvent(e,n){const r=e.event_id||(n==null?void 0:n.event_id)||k();return this._client?(this._client.captureEvent(e,{...n,event_id:r},this),r):(m&&h.warn("No client configured on scope - will not capture event!"),r)}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(e=>{e(this)}),this._notifyingListeners=!1)}}function Es(){return st("defaultCurrentScope",()=>new O)}function Ss(){return st("defaultIsolationScope",()=>new O)}const Pe="__SENTRY_SUPPRESS_TRACING__",Me=t=>t instanceof Promise&&!t[qn],qn=Symbol("chained PromiseLike"),bs=(t,e,n)=>{const r=t.then(s=>(e(s),s),s=>{throw n(s),s});return Me(r)&&Me(t)?r:vs(t,r)},vs=(t,e)=>{if(!e)return t;let n=!1;for(const r in t){if(r in e)continue;n=!0;const s=t[r];typeof s=="function"?Object.defineProperty(e,r,{value:(...o)=>s.apply(t,o),enumerable:!0,configurable:!0,writable:!0}):e[r]=s}return n&&Object.assign(e,{[qn]:!0}),e};class Is{constructor(e,n){let r;e?r=e:r=new O;let s;n?s=n:s=new O,this._stack=[{scope:r}],this._isolationScope=s}withScope(e){const n=this._pushScope();let r;try{r=e(n)}catch(s){throw this._popScope(),s}return at(r)?bs(r,()=>this._popScope(),()=>this._popScope()):(this._popScope(),r)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStackTop(){return this._stack[this._stack.length-1]}_pushScope(){const e=this.getScope().clone();return this._stack.push({client:this.getClient(),scope:e}),e}_popScope(){return this._stack.length<=1?!1:!!this._stack.pop()}}function et(){const t=rt(),e=gt(t);return e.stack=e.stack||new Is(Es(),Ss())}function Gn(t){return et().withScope(t)}function Ts(t,e){const n=et();return n.withScope(()=>(n.getStackTop().scope=t,e(t)))}function $e(t){return et().withScope(()=>t(et().getIsolationScope()))}function ks(){return{suppressTracing:ws,withIsolationScope:$e,withScope:Gn,withSetScope:Ts,withSetIsolationScope:(t,e)=>$e(e),getCurrentScope:()=>et().getScope(),getIsolationScope:()=>et().getIsolationScope()}}function ws(t){return Gn(e=>{e.setSDKProcessingMetadata({[Pe]:!0});const n=t();return e.setSDKProcessingMetadata({[Pe]:void 0}),n})}function Lt(t){const e=gt(t);return e.acs?e.acs:ks()}function Rs(t){return typeof t=="object"&&t!=null&&!Array.isArray(t)&&Object.keys(t).includes("value")}function Os(t,e){const{value:n,unit:r}=Rs(t)?t:{value:t,unit:void 0},s=Ns(n),o=r&&typeof r=="string"?{unit:r}:{};if(s)return{...s,...o};if(!e||e==="skip-undefined"&&n===void 0)return;let i="";try{i=JSON.stringify(n)??""}catch{}return{value:i,type:"string",...o}}function Fe(t,e=!1){const n={};for(const[r,s]of Object.entries(t??{})){const o=Os(s,e);o&&(n[r]=o)}return n}function Ns(t){if(Array.isArray(t))return{value:t,type:"array"};const e=typeof t=="string"?"string":typeof t=="boolean"?"boolean":typeof t=="number"&&!Number.isNaN(t)?Number.isInteger(t)?"integer":"double":null;if(e)return{value:t,type:e}}function zn(){var t,e;return(e=(t=gt(rt())).externalPropagationContextProvider)==null?void 0:e.call(t)}function N(){const t=rt();return Lt(t).getCurrentScope()}function L(){const t=rt();return Lt(t).getIsolationScope()}function Cs(){return st("globalScope",()=>new O)}function As(...t){const e=rt(),n=Lt(e);if(t.length===2){const[r,s]=t;return r?n.withSetScope(r,s):n.withScope(s)}return n.withScope(t[0])}function S(){return N().getClient()}function Yn(t){const e=zn();if(e)return{trace_id:e.traceId,span_id:e.spanId};const n=t.getPropagationContext(),{traceId:r,parentSpanId:s,propagationSpanId:o}=n,i={trace_id:r,span_id:o||Wn()};return s&&(i.parent_span_id=s),i}const xs="gen_ai.conversation.id",Ds="http.request.header",Kn="sentry.exclusive_time",Ls="sentry.is_localhost",Vn="sentry.op",Ps="sentry.origin",Xn="sentry.profile_id",Ms="sentry.segment.name.source",$s="url.full",Fs="user_agent.original",js="sentry.sample_rate",Bs="sentry.previous_trace_sample_rate",Us=["ok","deadline_exceeded","unauthenticated","permission_denied","not_found","resource_exhausted","invalid_argument","unimplemented","unavailable","internal_error","unknown_error","cancelled","already_exists","failed_precondition","aborted","out_of_range","data_loss"],Hs=0,Ws=1;function qs(t){return t!=="ok"&&Us.includes(t)}function Jn(t){if(t){if(typeof t=="object"&&"deref"in t&&typeof t.deref=="function")try{return t.deref()}catch{return}return t}}const Gs="_sentryScope",zs="_sentryIsolationScope";function Qt(t){const e=t;return{scope:e[Gs],isolationScope:Jn(e[zs])}}const je="sentry-";function Ys(t){const e=Ks(t);if(!e)return;const n=Object.entries(e).reduce((r,[s,o])=>{if(s.startsWith(je)){const i=s.slice(je.length);r[i]=o}return r},{});if(Object.keys(n).length>0)return n}function Ks(t){if(!(!t||!x(t)&&!Array.isArray(t)))return Array.isArray(t)?t.reduce((e,n)=>{const r=Be(n);return Object.entries(r).forEach(([s,o])=>{e[s]=o}),e},{}):Be(t)}function Be(t){return t.split(",").map(e=>{const n=e.indexOf("=");if(n===-1)return[];const r=e.slice(0,n),s=e.slice(n+1);return[r,s].map(o=>{try{return decodeURIComponent(o.trim())}catch{return}})}).reduce((e,[n,r])=>(n&&r&&(e[n]=r),e),{})}const Vs=/^o(\d+)\./,Xs=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)((?:\[[:.%\w]+\]|[\w.-]+))(?::(\d+))?\/(.+)/;function Js(t){return t==="http"||t==="https"}function St(t,e=!1){const{host:n,path:r,pass:s,port:o,projectId:i,protocol:a,publicKey:c}=t;return`${a}://${c}${e&&s?`:${s}`:""}@${n}${o?`:${o}`:""}/${r&&`${r}/`}${i}`}function Qs(t){const e=Xs.exec(t);if(!e){j(()=>{console.error(`Invalid Sentry Dsn: ${t}`)});return}const[n,r,s="",o="",i="",a=""]=e.slice(1);let c="",u=a;const f=u.split("/");if(f.length>1&&(c=f.slice(0,-1).join("/"),u=f.pop()),u){const l=u.match(/^\d+/);l&&(u=l[0])}return Qn({host:o,pass:s,path:c,projectId:u,port:i,protocol:n,publicKey:r})}function Qn(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function Zs(t){if(!m)return!0;const{port:e,projectId:n,protocol:r}=t;return["protocol","publicKey","host","projectId"].find(i=>t[i]?!1:(h.error(`Invalid Sentry Dsn: ${i} missing`),!0))?!1:n.match(/^\d+$/)?Js(r)?e&&isNaN(parseInt(e,10))?(h.error(`Invalid Sentry Dsn: Invalid port ${e}`),!1):!0:(h.error(`Invalid Sentry Dsn: Invalid protocol ${r}`),!1):(h.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),!1)}function to(t){const e=t.match(Vs);return e==null?void 0:e[1]}function eo(t){const e=t.getOptions(),{host:n}=t.getDsn()||{};let r;return e.orgId?r=String(e.orgId):n&&(r=to(n)),r}function no(t){const e=typeof t=="string"?Qs(t):Qn(t);if(!(!e||!Zs(e)))return e}function ro(t){if(typeof t=="boolean")return Number(t);const e=typeof t=="string"?parseFloat(t):t;if(!(typeof e!="number"||isNaN(e)||e<0||e>1))return e}const so="span";function oo(t){return Jn(t.refs[so])}const Zn=1;function io(t){const{spanId:e,traceId:n,isRemote:r}=t.spanContext(),s=r?e:Pt(t).parent_span_id,o=Qt(t).scope,i=r?(o==null?void 0:o.getPropagationContext().propagationSpanId)||Wn():e;return{parent_span_id:s,span_id:i,trace_id:n}}function ao(t){if(t&&t.length>0)return t.map(({context:{spanId:e,traceId:n,traceFlags:r,...s},attributes:o})=>({span_id:e,trace_id:n,sampled:r===Zn,attributes:o,...s}))}function Ue(t){return typeof t=="number"?He(t):Array.isArray(t)?t[0]+t[1]/1e9:t instanceof Date?He(t.getTime()):R()}function He(t){return t>9999999999?t/1e3:t}function Pt(t){if(lo(t))return t.getStaticSpanJSON();const{spanId:e,traceId:n}=t.spanContext();if(fo(t)){const{attributes:r,startTime:s,name:o,endTime:i,status:a,links:c}=t;return{span_id:e,trace_id:n,data:r,description:o,parent_span_id:co(t),start_timestamp:Ue(s),timestamp:Ue(i)||void 0,status:ho(a),op:r[Vn],origin:r[Ps],links:ao(c)}}return{span_id:e,trace_id:n,start_timestamp:0,status:"ok",data:{}}}function co(t){var e;return"parentSpanId"in t?t.parentSpanId:"parentSpanContext"in t?(e=t.parentSpanContext)==null?void 0:e.spanId:void 0}function uo(t){var e;return{...t,end_timestamp:t.end_timestamp??t.start_timestamp,attributes:Fe(t.attributes),links:(e=t.links)==null?void 0:e.map(n=>({...n,attributes:Fe(n.attributes)}))}}function fo(t){const e=t;return!!e.attributes&&!!e.startTime&&!!e.name&&!!e.endTime&&!!e.status}function lo(t){return typeof t.getSpanJSON=="function"}function po(t){const{traceFlags:e}=t.spanContext();return e===Zn}function ho(t){return!t||t.code===Hs||t.code===Ws?"ok":t.message&&qs(t.message)?t.message:"internal_error"}const mo="_sentryRootSpan",tr=go;function go(t){return t[mo]||t}function _o(t){const e=rt(),n=Lt(e);return n.getActiveSpan?n.getActiveSpan(t):oo(t||N())}function We(t){var n;if(typeof __SENTRY_TRACING__=="boolean"&&!__SENTRY_TRACING__)return!1;const e=t||((n=S())==null?void 0:n.getOptions());return!!e&&(e.tracesSampleRate!=null||!!e.tracesSampler)}function qe(t){h.log(`Ignoring span ${t.op} - ${t.description} because it matches \`ignoreSpans\`.`)}function Ge(t,e){if(!(e!=null&&e.length))return!1;for(const n of e){if(So(n)){if(t.description&&dt(t.description,n))return m&&qe(t),!0;continue}const r=!!n.attributes&&Object.keys(n.attributes).length>0;if(!n.name&&!n.op&&!r)continue;const s=n.name?t.description&&dt(t.description,n.name):!0,o=n.op?t.op&&dt(t.op,n.op):!0,i=n.attributes?Object.entries(n.attributes).every(([a,c])=>{var u;return yo((u=t.attributes)==null?void 0:u[a],c)}):!0;if(s&&o&&i)return m&&qe(t),!0}return!1}function yo(t,e){return typeof t=="string"&&(typeof e=="string"||e instanceof RegExp)?dt(t,e):Array.isArray(t)&&Array.isArray(e)?t.length===e.length&&t.every((n,r)=>n===e[r]):t===e}function Eo(t,e){const n=e.parent_span_id,r=e.span_id;if(n)for(const s of t)s.parent_span_id===r&&(s.parent_span_id=n)}function So(t){return typeof t=="string"||t instanceof RegExp}const ze=[];function bo(t){const e={};return t.forEach(n=>{const{name:r}=n,s=e[r];s&&!s.isDefaultInstance&&n.isDefaultInstance||(e[r]=n)}),Object.values(e)}function vo(t){const e=t.defaultIntegrations||[],n=t.integrations;e.forEach(s=>{s.isDefaultInstance=!0});let r;if(Array.isArray(n))r=[...e,...n];else if(typeof n=="function"){const s=n(e);r=Array.isArray(s)?s:[s]}else r=e;return bo(r)}function Io(t,e){const n={};return e.forEach(r=>{r!=null&&r.beforeSetup&&r.beforeSetup(t)}),e.forEach(r=>{r&&er(t,r,n)}),n}function Ye(t,e){for(const n of e)n!=null&&n.afterAllSetup&&n.afterAllSetup(t)}function er(t,e,n){if(n[e.name]){m&&h.log(`Integration skipped because it was already installed: ${e.name}`);return}if(n[e.name]=e,!ze.includes(e.name)&&typeof e.setupOnce=="function"&&(e.setupOnce(),ze.push(e.name)),e.setup&&typeof e.setup=="function"&&e.setup(t),typeof e.preprocessEvent=="function"){const r=e.preprocessEvent.bind(e);t.on("preprocessEvent",(s,o)=>r(s,o,t))}if(typeof e.processEvent=="function"){const r=e.processEvent.bind(e),s=Object.assign((o,i)=>r(o,i,t),{id:e.name});t.addEventProcessor(s)}["processSpan","processSegmentSpan"].forEach(r=>{const s=e[r];typeof s=="function"&&t.on(r,o=>s.call(e,o,t))}),m&&h.log(`Integration installed: ${e.name}`)}const Se="production",To=Symbol.for("sentry.nonRecordingSpan");function ko(t){return!!t&&t[To]===!0}const wo="_frozenDsc";function nr(t,e){const n=e.getOptions(),{publicKey:r}=e.getDsn()||{},s={environment:n.environment||Se,release:n.release,public_key:r,trace_id:t,org_id:eo(e)};return e.emit("createDsc",s),s}function rr(t,e){if(zn())return;const n=e.getPropagationContext();return n.dsc||nr(n.traceId,t)}function Ro(t){var V;const e=S();if(!e)return{};const n=tr(t),r=Pt(n),s=r.data,o=n.spanContext().traceState,i=(o==null?void 0:o.get("sentry.sample_rate"))??s[js]??s[Bs];function a(b){return(typeof i=="number"||typeof i=="string")&&(b.sample_rate=`${i}`),b}const c=n[wo];if(c)return a(c);const u=ko(n),f=u&&n.dropReason==="ignored";if(u&&(!We(e.getOptions())||f)){const b=Qt(n).scope,B=b&&rr(e,b);if(B){const X={...B};return f&&(X.sampled="false"),a(X)}}const l=o==null?void 0:o.get("sentry.dsc"),d=l&&Ys(l);if(d)return a(d);const g=nr(t.spanContext().traceId,e),p=s[Ms],I=r.description;return p!=="url"&&I&&(g.transaction=I),We()&&(g.sampled=String(po(n)),g.sample_rand=(o==null?void 0:o.get("sentry.sample_rand"))??((V=Qt(n).scope)==null?void 0:V.getPropagationContext().sampleRand.toString())),a(g),e.emit("createDsc",g,n),g}function Oo(t,e){const{fingerprint:n,breadcrumbs:r,sdkProcessingMetadata:s}=e;No(t,e),Do(t,n),Co(t,r),Ao(t,s)}function Ke(t,e){const{extra:n,tags:r,attributes:s,user:o,contexts:i,level:a,sdkProcessingMetadata:c,breadcrumbs:u,fingerprint:f,eventProcessors:l,attachments:d,propagationContext:g,transactionName:p}=e;ut(t,"extra",n),ut(t,"tags",r),ut(t,"attributes",s),ut(t,"user",o),ut(t,"contexts",i),t.sdkProcessingMetadata=Et(t.sdkProcessingMetadata,c,2),a&&(t.level=a),p&&(t.transactionName=p),u.length&&(t.breadcrumbs=[...t.breadcrumbs,...u]),f.length&&(t.fingerprint=[...t.fingerprint,...f]),l.length&&(t.eventProcessors=[...t.eventProcessors,...l]),d.length&&(t.attachments=[...t.attachments,...d]),t.propagationContext={...t.propagationContext,...g}}function ut(t,e,n){t[e]=Et(t[e],n,1)}function sr(t,e){const n=Cs().getScopeData();return t&&Ke(n,t.getScopeData()),e&&Ke(n,e.getScopeData()),n}function No(t,e){const{extra:n,tags:r,user:s,contexts:o,level:i,transactionName:a}=e;Object.keys(n).length&&(t.extra={...n,...t.extra}),Object.keys(r).length&&(t.tags={...r,...t.tags}),Object.keys(s).length&&(t.user={...s,...t.user}),Object.keys(o).length&&(t.contexts={...o,...t.contexts}),i&&(t.level=i),a&&t.type!=="transaction"&&(t.transaction=a)}function Co(t,e){const n=[...t.breadcrumbs||[],...e];t.breadcrumbs=n.length?n:void 0}function Ao(t,e){t.sdkProcessingMetadata={...t.sdkProcessingMetadata,...e}}function xo(t,e){t.contexts={trace:io(e),...t.contexts},t.sdkProcessingMetadata={dynamicSamplingContext:Ro(e),...t.sdkProcessingMetadata};const n=tr(e),r=Pt(n).description;r&&!t.transaction&&t.type==="transaction"&&(t.transaction=r)}function Do(t,e){t.fingerprint=t.fingerprint?Array.isArray(t.fingerprint)?t.fingerprint:[t.fingerprint]:[],e&&(t.fingerprint=t.fingerprint.concat(e)),t.fingerprint.length||delete t.fingerprint}function ht(t,e,n){let r;try{r=e()}catch(s){return Ve(t,s,n)}return at(r)?r.then(void 0,s=>Ve(t,s,n)):r}function Ve(t,e,n){return m&&h.error(t,e),n(e)}function or(t){return!!t&&typeof t=="function"&&"_static"in t&&!!t._static}function Xe(t,e){return ht(m?"The `beforeSendSpan` callback threw an error, sending the span unmodified:":"",()=>e(t),()=>t)||t}function Lo(t){const e={trace_id:t.trace_id,span_id:t.span_id,parent_span_id:t.parent_span_id,name:t.description||"",start_timestamp:t.start_timestamp,end_timestamp:t.timestamp,status:!t.status||t.status==="ok"||t.status==="cancelled"?"ok":"error",is_segment:!1,attributes:{...t.data},links:t.links};return uo(e)}function ir(t,e){const n=t.attributes??(t.attributes={});Object.entries(e).forEach(([r,s])=>{s!=null&&!(r in n)&&(n[r]=s)})}function Po(t){return t.getOptions().traceLifecycle==="stream"}function ar(t){return typeof t=="object"&&typeof t.unref=="function"&&t.unref(),t}function ct(t,e=[]){return[t,e]}function Je(t,e){const[n,r]=t;return[n,[...r,e]]}function Zt(t,e){const n=t[1];for(const r of n){const s=r[0].type;if(e(r,s))return!0}return!1}function Mo(t,e){return Zt(t,(n,r)=>e.includes(r))}function te(t){const e=gt(_);return e.encodePolyfill?e.encodePolyfill(t):new TextEncoder().encode(t)}function $o(t){const[e,n]=t;let r=JSON.stringify(e);function s(o){typeof r=="string"?r=typeof o=="string"?r+o:[te(r),o]:r.push(typeof o=="string"?te(o):o)}for(const o of n){const[i,a]=o;if(s(` +${JSON.stringify(i)} +`),typeof a=="string"||a instanceof Uint8Array)s(a);else{let c;try{c=JSON.stringify(a)}catch{c=JSON.stringify(A(a))}s(c)}}return typeof r=="string"?r:Fo(r)}function Fo(t){const e=t.reduce((s,o)=>s+o.length,0),n=new Uint8Array(e);let r=0;for(const s of t)n.set(s,r),r+=s.length;return n}function jo(t){const e=typeof t.data=="string"?te(t.data):t.data;return[{type:"attachment",length:e.length,filename:t.filename,content_type:t.contentType,attachment_type:t.attachmentType},e]}const cr={sessions:"session",event:"error",client_report:"internal",user_report:"default",profile_chunk:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",raw_security:"security",log:"log_item",trace_metric:"metric"};function Bo(t){return t in cr}function Qe(t){return Bo(t)?cr[t]:t}function ur(t){if(!(t!=null&&t.sdk))return;const{name:e,version:n}=t.sdk;return{name:e,version:n}}function Uo(t,e,n,r){var o;const s=(o=t.sdkProcessingMetadata)==null?void 0:o.dynamicSamplingContext;return{event_id:t.event_id,sent_at:new Date(K()).toISOString(),...e&&{sdk:e},...!!n&&r&&{dsn:St(r)},...s&&{trace:s}}}function ee(t){return t==="replay_event"?"replay":t||"error"}function Ho(){return typeof __SENTRY_BROWSER_BUNDLE__<"u"&&!!__SENTRY_BROWSER_BUNDLE__}function Wo(){/*! __SENTRY_SDK_SOURCE__ */return"npm"}function qo(){return!Ho()&&Object.prototype.toString.call(typeof process<"u"?process:0)==="[object process]"}function Mt(){return typeof window<"u"&&(!qo()||Go())}function Go(){const t=_.process;return(t==null?void 0:t.type)==="renderer"}function zo(t,e){const n=e.getDataCollectionOptions().userInfo?"auto":"never";return[{type:"span",item_count:t.length,content_type:"application/vnd.sentry.items.span.v2+json"},{version:2,ingest_settings:Mt()?{infer_ip:n,infer_user_agent:n}:void 0,items:t}]}const Yo=new WeakMap;function Ko(t){return it(t)?void 0:t}function Vo(t,e,n){var a;const r=Ko(e.originalException),s=r&&Yo.get(r);if(!s)return;const o=(a=t.contexts)==null?void 0:a.trace;((o==null?void 0:o.trace_id)??(n&&Yn(n).trace_id))===s.trace_id&&(t.contexts={...t.contexts,trace:{...o,...s}})}function Xo(t,e){var r,s,o,i;if(!e)return t;const n=t.sdk||{};return t.sdk={...n,name:n.name||e.name,version:n.version||e.version,integrations:[...((r=t.sdk)==null?void 0:r.integrations)||[],...e.integrations||[]],packages:[...((s=t.sdk)==null?void 0:s.packages)||[],...e.packages||[]],settings:(o=t.sdk)!=null&&o.settings||e.settings?{...(i=t.sdk)==null?void 0:i.settings,...e.settings}:void 0},t}function Jo(t,e,n,r){const s=ur(n),o={sent_at:new Date(K()).toISOString(),...s&&{sdk:s},...!!r&&e&&{dsn:St(e)}},i="aggregates"in t?[{type:"sessions"},t]:[{type:"session"},t.toJSON()];return ct(o,[i])}function Qo(t,e,n,r){const s=ur(n),o=t.type&&t.type!=="replay_event"?t.type:"event";Xo(t,n==null?void 0:n.sdk);const i=Uo(t,s,r,e);return delete t.sdkProcessingMetadata,ct(i,[[{type:o},t]])}const Wt=0,Ze=1,tn=2;function bt(t){return new mt(e=>{e(t)})}function fr(t){return new mt((e,n)=>{n(t)})}class mt{constructor(e){this._state=Wt,this._handlers=[],this._runExecutor(e)}then(e,n){return new mt((r,s)=>{this._handlers.push([!1,o=>{if(!e)r(o);else try{r(e(o))}catch(i){s(i)}},o=>{if(!n)s(o);else try{r(n(o))}catch(i){s(i)}}]),this._executeHandlers()})}catch(e){return this.then(n=>n,e)}finally(e){return new mt((n,r)=>{let s,o;return this.then(i=>{o=!1,s=i,e&&e()},i=>{o=!0,s=i,e&&e()}).then(()=>{if(o){r(s);return}n(s)})})}_executeHandlers(){if(this._state===Wt)return;const e=this._handlers.slice();this._handlers=[],e.forEach(n=>{n[0]||(this._state===Ze&&n[1](this._value),this._state===tn&&n[2](this._value),n[0]=!0)})}_runExecutor(e){const n=(o,i)=>{if(this._state===Wt){if(at(i)){i.then(r,s);return}this._state=o,this._value=i,this._executeHandlers()}},r=o=>{n(Ze,o)},s=o=>{n(tn,o)};try{e(r,s)}catch(o){s(o)}}}function Zo(t,e,n,r=0,s){try{const o=ne(e,n,t,r,s);return at(o)?o:bt(o)}catch(o){return fr(o)}}function ne(t,e,n,r,s){const o=n[r];if(!t||!o)return t;const i=`Event processor "${o.id||"?"}"`;let a=!1;const c=ht(m?`${i} threw an error, dropping event:`:"",()=>o({...t},e),()=>(a=!0,null));return m&&c===null&&h.log(`${i} dropped event`),at(c)?c.then(u=>u?ne(u,e,n,r+1,s):(s==null||s(a?"callback_error":"event_processor"),null)):c?ne(c,e,n,r+1,s):(s==null||s(a?"callback_error":"event_processor"),null)}let C,en,nn,P;function ti(t){const e=_._sentryDebugIds,n=_._debugIds;if(!e&&!n)return{};const r=e?Object.keys(e):[],s=n?Object.keys(n):[];if(P&&r.length===en&&s.length===nn)return P;en=r.length,nn=s.length,P={},C||(C={});const o=(i,a)=>{for(const c of i){const u=a[c],f=C==null?void 0:C[c];if(f&&P&&u)P[f[0]]=u,C&&(C[c]=[f[0],u]);else if(u){const l=t(c);for(let d=l.length-1;d>=0;d--){const g=l[d],p=g==null?void 0:g.filename;if(p&&P&&C){P[p]=u,C[c]=[p,u];break}}}}};return e&&o(r,e),n&&o(s,n),P}function re(t){var e;return((e=t.data)==null?void 0:e.__sentry__)===!0}function lr(t){const e=[];t.message&&e.push(t.message);try{const n=t.exception.values[t.exception.values.length-1];n!=null&&n.value&&(e.push(n.value),n.type&&e.push(`${n.type}: ${n.value}`))}catch{}return e}function ei(t,e,n,r,s,o){const{normalizeDepth:i=3,normalizeMaxBreadth:a=1e3}=t,c={...e,event_id:e.event_id||n.event_id||k(),timestamp:e.timestamp||yt()},u=n.integrations||t.integrations.map(b=>b.name);ni(c,t),oi(c,u),s&&s.emit("applyFrameMetadata",e),e.type===void 0&&ri(c,t.stackParser);const f=ai(r,n.captureContext);n.mechanism&&us(c,n.mechanism);const l=s?s.getEventProcessors():[],d=sr(o,f),g=[...n.attachments||[],...d.attachments];g.length&&(n.attachments=g),Oo(c,d);const p=_o(f);p&&xo(c,p),Vo(c,n,f);const I=[...l,...d.eventProcessors];return(re(n)?bt(c):Zo(I,c,n,0,b=>{s&&(s.recordDroppedEvent(b,ee(e.type)),e.type==="transaction"&&s.recordDroppedEvent(b,"span",1+(e.spans||[]).length))})).then(b=>b?(si(b),typeof i=="number"&&i>0?ii(b,i,a):b):null)}function ni(t,e){var a,c;const{environment:n,release:r,dist:s,maxValueLength:o}=e;t.environment=t.environment||n||Se,!t.release&&r&&(t.release=r),!t.dist&&s&&(t.dist=s);const i=t.request;i!=null&&i.url&&o&&(i.url=Xt(i.url,o)),o&&((c=(a=t.exception)==null?void 0:a.values)==null||c.forEach(u=>{u.value&&(u.value=Xt(u.value,o))}))}function ri(t,e){var r,s;const n=ti(e);(s=(r=t.exception)==null?void 0:r.values)==null||s.forEach(o=>{var i,a;(a=(i=o.stacktrace)==null?void 0:i.frames)==null||a.forEach(c=>{c.filename&&(c.debug_id=n[c.filename])})})}function si(t){var r,s;const e={};if((s=(r=t.exception)==null?void 0:r.values)==null||s.forEach(o=>{var i,a;(a=(i=o.stacktrace)==null?void 0:i.frames)==null||a.forEach(c=>{c.debug_id&&(c.abs_path?e[c.abs_path]=c.debug_id:c.filename&&(e[c.filename]=c.debug_id),delete c.debug_id)})}),Object.keys(e).length===0)return;t.debug_meta=t.debug_meta||{},t.debug_meta.images=t.debug_meta.images||[];const n=t.debug_meta.images;Object.entries(e).forEach(([o,i])=>{n.push({type:"sourcemap",code_file:o,debug_id:i})})}function oi(t,e){e.length>0&&(t.sdk=t.sdk||{},t.sdk.integrations=[...t.sdk.integrations||[],...e])}function ii(t,e,n){var s,o;if(!t)return null;const r={...t,...t.breadcrumbs&&{breadcrumbs:t.breadcrumbs.map(i=>({...i,...i.data&&{data:A(i.data,e,n)}}))},...t.user&&{user:A(t.user,e,n)},...t.contexts&&{contexts:A(t.contexts,e,n)},...t.extra&&{extra:A(t.extra,e,n)}};return(s=t.contexts)!=null&&s.trace&&r.contexts&&(r.contexts.trace=t.contexts.trace,t.contexts.trace.data&&(r.contexts.trace.data=A(t.contexts.trace.data,e,n))),t.spans&&(r.spans=t.spans.map(i=>({...i,...i.data&&{data:A(i.data,e,n)}}))),(o=t.contexts)!=null&&o.flags&&r.contexts&&(r.contexts.flags=A(t.contexts.flags,3,n)),r}function ai(t,e){if(!e)return t;const n=t?t.clone():new O;return n.update(e),n}function ci(t){if(t)return ui(t)?{captureContext:t}:li(t)?{captureContext:t}:t}function ui(t){return t instanceof O||typeof t=="function"}const fi=["user","level","extra","contexts","tags","fingerprint","propagationContext"];function li(t){return Object.keys(t).some(e=>fi.includes(e))}function di(t,e){return N().captureException(t,ci(e))}function dr(t,e){return N().captureEvent(t,e)}function Du(t,e){L().setTag(t,e)}function Lu(t){L().setUser(t)}function rn(t){const e=L(),{user:n}=sr(e,N()),{userAgent:r}=_.navigator||{},s=hs({user:n,...r&&{userAgent:r},...t}),o=e.getSession();return(o==null?void 0:o.status)==="ok"&&tt(o,{status:"exited"}),pr(),e.setSession(s),s}function pr(){const t=L(),n=N().getSession()||t.getSession();n&&ms(n),hr(),t.setSession()}function hr(){const t=L(),e=S(),n=t.getSession();n&&e&&e.captureSession(n)}function qt(t=!1){if(t){pr();return}hr()}const pi="7";function hi(t){const e=t.protocol?`${t.protocol}:`:"",n=t.port?`:${t.port}`:"";return`${e}//${t.host}${n}${t.path?`/${t.path}`:""}/api/`}function mi(t){return`${hi(t)}${t.projectId}/envelope/`}function gi(t,e){const n={sentry_version:pi};return t.publicKey&&(n.sentry_key=t.publicKey),e&&(n.sentry_client=`${e.name}/${e.version}`),new URLSearchParams(n).toString()}function _i(t,e,n){return e||`${mi(t)}?${gi(t,n)}`}function yi(t,e){const n=e?"auto":"never";return[{type:"log",item_count:t.length,content_type:"application/vnd.sentry.items.log+json"},{version:2,...Mt()&&{ingest_settings:{infer_ip:n,infer_user_agent:n}},items:t}]}function Ei(t,e,n,r,s){const o={};return e!=null&&e.sdk&&(o.sdk={name:e.sdk.name,version:e.sdk.version}),n&&r&&(o.dsn=St(r)),ct(o,[yi(t,s)])}function Si(t,e){const n=e??bi(t)??[];if(n.length===0)return;const r=t.getOptions(),s=Ei(n,r._metadata,r.tunnel,t.getDsn(),t.getDataCollectionOptions().userInfo);mr().set(t,[]),t.emit("flushLogs"),t.sendEnvelope(s)}function bi(t){return mr().get(t)}function mr(){return st("clientToLogBufferMap",()=>new WeakMap)}function vi(t,e){const n=e?"auto":"never";return[{type:"trace_metric",item_count:t.length,content_type:"application/vnd.sentry.items.trace-metric+json"},{version:2,...Mt()&&{ingest_settings:{infer_ip:n,infer_user_agent:n}},items:t}]}function Ii(t,e,n,r,s){const o={};return e!=null&&e.sdk&&(o.sdk={name:e.sdk.name,version:e.sdk.version}),n&&r&&(o.dsn=St(r)),ct(o,[vi(t,s)])}function Ti(t,e){const n=e??ki(t)??[];if(n.length===0)return;const r=t.getOptions(),s=Ii(n,r._metadata,r.tunnel,t.getDsn(),t.getDataCollectionOptions().userInfo);gr().set(t,[]),t.emit("flushMetrics"),t.sendEnvelope(s)}function ki(t){return gr().get(t)}function gr(){return st("clientToMetricBufferMap",()=>new WeakMap)}function wi(t,e){var s,o,i;if(t.type!=="transaction"||!((s=t.spans)!=null&&s.length)||!((o=t.sdkProcessingMetadata)!=null&&o.hasGenAiSpans)||Po(e))return;const n=[],r=[];for(const a of t.spans)(i=a.op)!=null&&i.startsWith("gen_ai.")?n.push(Lo(a)):r.push(a);if(n.length!==0)return t.spans=r,zo(n,e)}const be=Symbol.for("SentryBufferFullError");function ve(t=100){const e=new Set;function n(){return e.sizer(a),()=>r(a)),a}function o(i){if(!e.size)return bt(!0);const a=Promise.allSettled(Array.from(e)).then(()=>!0);if(!i)return a;const c=[a,new Promise(u=>ar(setTimeout(()=>u(!1),i)))];return Promise.race(c)}return{get $(){return Array.from(e)},add:s,drain:o}}const Ri=60*1e3;function Oi(t,e=K()){const n=parseInt(`${t}`,10);if(!isNaN(n))return n*1e3;const r=Date.parse(`${t}`);return isNaN(r)?Ri:r-e}function Ni(t,e){return t[e]||t.all||0}function Ci(t,e,n=K()){return Ni(t,e)>n}function Ai(t,{statusCode:e,headers:n},r=K()){const s={...t},o=n==null?void 0:n["x-sentry-rate-limits"],i=n==null?void 0:n["retry-after"];if(o)for(const a of o.trim().split(",")){const[c,u,,,f]=a.split(":",5),l=parseInt(c,10),d=(isNaN(l)?60:l)*1e3;if(!u)s.all=r+d;else for(const g of u.split(";"))g==="metric_bucket"?(!f||f.split(";").includes("custom"))&&(s[g]=r+d):s[g]=r+d}else i?s.all=r+Oi(i,r):e===429&&(s.all=r+60*1e3);return s}const _r=64;function xi(t,e,n=ve(t.bufferSize||_r)){let r={};const s=i=>n.drain(i);function o(i){const a=[];if(Zt(i,(l,d)=>{const g=Qe(d);Ci(r,g)?t.recordDroppedEvent("ratelimit_backoff",g):a.push(l)}),a.length===0)return Promise.resolve({});const c=ct(i[0],a),u=l=>{if(Mo(c,["client_report"])){m&&h.warn(`Dropping client report. Will not send outcomes (reason: ${l}).`);return}Zt(c,(d,g)=>{t.recordDroppedEvent(l,Qe(g))})},f=()=>e({body:$o(c)}).then(l=>l.statusCode===413?(m&&h.error("Sentry responded with status code 413. Envelope was discarded due to exceeding size limits."),u("send_error"),l):(m&&l.statusCode!==void 0&&(l.statusCode<200||l.statusCode>=300)&&h.warn(`Sentry responded with status code ${l.statusCode} to sent event.`),r=Ai(r,l),l),l=>{throw u("network_error"),m&&h.error("Encountered error running transport request:",l),l});return n.add(f).then(l=>l,l=>{if(l===be)return m&&h.error("Skipped sending event because buffer is full."),u("queue_overflow"),Promise.resolve({});throw l})}return{send:o,flush:s}}function Di(t,e,n){const r=[{type:"client_report"},{timestamp:yt(),discarded_events:t}];return ct(e?{dsn:e}:{},[r])}function Li(t){var c;const{trace_id:e,parent_span_id:n,span_id:r,status:s,origin:o,data:i,op:a}=((c=t.contexts)==null?void 0:c.trace)??{};return{data:i??{},description:t.transaction,op:a,parent_span_id:n,span_id:r??"",start_timestamp:t.start_timestamp??0,status:s??"ok",timestamp:t.timestamp,trace_id:e??"",origin:o,profile_id:i==null?void 0:i[Xn],exclusive_time:i==null?void 0:i[Kn],measurements:t.measurements,is_segment:!0}}function Pi(t){return{type:"transaction",timestamp:t.timestamp,start_timestamp:t.start_timestamp,transaction:t.description,contexts:{trace:{trace_id:t.trace_id,span_id:t.span_id,parent_span_id:t.parent_span_id,op:t.op,status:t.status,origin:t.origin,data:{...t.data,...t.profile_id&&{[Xn]:t.profile_id},...t.exclusive_time&&{[Kn]:t.exclusive_time}}}},measurements:t.measurements}}function Mi(t){var e;t.traceLifecycle!=="stream"||!(t.beforeSendTransaction||(e=t.ignoreTransactions)!=null&&e.length)||j(()=>{console.warn("[Sentry] `beforeSendTransaction` and `ignoreTransactions` are ignored with `traceLifecycle: 'stream'` (enabled by default). Use `beforeSendSpan` and `ignoreSpans` instead, or set `traceLifecycle: 'static'`.")})}const v={userInfo:!0,cookies:!0,httpHeaders:{request:!0,response:!0},httpBodies:["incomingRequest","outgoingRequest","incomingResponse","outgoingResponse"],urlQueryParams:!0,graphQL:{document:!0,variables:!0},genAI:{inputs:!0,outputs:!0},databaseQueryData:!0,queues:!0,stackFrameVariables:!0,frameContextLines:5};function $i(t){return typeof t=="boolean"||"allow"in t||"deny"in t}function Fi(t){return t===void 0?{...v.httpHeaders}:$i(t)?{request:t,response:t}:{request:t.request??v.httpHeaders.request,response:t.response??v.httpHeaders.response}}function ji(t){var n,r,s,o;const e=t.dataCollection??{};return{userInfo:e.userInfo??v.userInfo,cookies:e.cookies??v.cookies,httpHeaders:Fi(e.httpHeaders),httpBodies:e.httpBodies??v.httpBodies,urlQueryParams:e.urlQueryParams??v.urlQueryParams,graphQL:{document:((n=e.graphQL)==null?void 0:n.document)??v.graphQL.document,variables:((r=e.graphQL)==null?void 0:r.variables)??v.graphQL.variables},genAI:{inputs:((s=e.genAI)==null?void 0:s.inputs)??v.genAI.inputs,outputs:((o=e.genAI)==null?void 0:o.outputs)??v.genAI.outputs},databaseQueryData:e.databaseQueryData??v.databaseQueryData,queues:e.queues??v.queues,stackFrameVariables:e.stackFrameVariables??v.stackFrameVariables,frameContextLines:e.frameContextLines??v.frameContextLines}}const sn="Not capturing exception because it's already been captured.",on="Discarded session because of missing or non-string release",yr=Symbol.for("SentryInternalError"),Er=Symbol.for("SentryDoNotSendEventError"),Bi=5e3,Sr=Symbol.for("SentryClosedClient");function Ui(t){return Sr in t}function kt(t){return{message:t,[yr]:!0}}function Gt(t){return{message:t,[Er]:!0}}function an(t){return xt(t)&&yr in t}function cn(t){return xt(t)&&Er in t}function un(t,e,n,r,s){let o=0,i,a=!1;t.on(n,()=>{o=0,clearTimeout(i),a=!1}),t.on(e,c=>{if(o+=r(c),o>=8e5)s(t);else if(!a){const u=t.getOptions()._flushInterval??Bi;u>0&&(a=!0,i=ar(setTimeout(()=>{s(t)},u)))}}),t.on("flush",()=>{s(t)})}class Hi{constructor(e){var s;this._options={attachStacktrace:!0,...e,traceLifecycle:e.traceLifecycle==="static"?"static":"stream"},this._integrations={},this._numProcessing=0,this._outcomes={},this._hooks={},this._eventProcessors=[],this._promiseBuffer=ve(((s=e.transportOptions)==null?void 0:s.bufferSize)??_r),this._dataCollection=ji(e),this._unhandledSessionStatus="crashed",e.dsn?this._dsn=no(e.dsn):m&&h.warn("No DSN provided, client will not send events.");const{beforeSendSpan:n,traceLifecycle:r}=this._options;if(m&&n&&or(n)!==(r==="static")&&j(()=>{console.warn(`Ignoring \`beforeSendSpan\`: ${r==="static"?"wrap it with":"remove"} \`Sentry.withStaticSpan\` to use it with \`traceLifecycle: "${r}"\`.`)}),this._dsn){const o=_i(this._dsn,e.tunnel,e._metadata?e._metadata.sdk:void 0);this._transport=e.transport({tunnel:this._options.tunnel,recordDroppedEvent:this.recordDroppedEvent.bind(this),...e.transportOptions,url:o})}un(this,"afterCaptureLog","flushLogs",zi,Si),un(this,"afterCaptureMetric","flushMetrics",Gi,Ti)}captureException(e,n,r){const s=k();if(De(e))return m&&h.log(sn),s;const o={event_id:s,...n};return this._process(()=>this.eventFromException(e,o).then(i=>this._captureEvent(i,o,r)).then(i=>i),"error"),o.event_id}captureMessage(e,n,r,s){const o={event_id:k(),...r},i=ge(e)?e:String(e),a=it(e),c=a?this.eventFromMessage(i,n,o):this.eventFromException(e,o);return this._process(()=>c.then(u=>this._captureEvent(u,o,s)),a?"unknown":"error"),o.event_id}captureEvent(e,n,r){const s=k();if(n!=null&&n.originalException&&De(n.originalException))return m&&h.log(sn),s;const o={event_id:s,...n},i=e.sdkProcessingMetadata||{},a=i.capturedSpanScope,c=i.capturedSpanIsolationScope,u=ee(e.type);return this._process(()=>this._captureEvent(e,o,a||r,c),u),o.event_id}captureSession(e){this.sendSession(e),tt(e,{init:!1})}getDsn(){return this._dsn}getOptions(){return this._options}getDataCollectionOptions(){return this._dataCollection}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}async flush(e){const n=this._transport;if(this.emit("flush"),!n)return!0;const r=await this._isClientDoneProcessing(e),s=await n.flush(e);return r&&s}async close(e){Object.defineProperty(this,Sr,{value:!0});const n=await this.flush(e);return this.getOptions().enabled=!1,this.emit("close"),n}getEventProcessors(){return this._eventProcessors}addEventProcessor(e){this._eventProcessors.push(e)}init(){(this._isEnabled()||this._options.integrations.some(({name:e})=>e.startsWith("Spotlight")))&&(this._setupIntegrations(),Mi(this._options))}getIntegrationByName(e){return this._integrations[e]}getIntegrationNames(){return Object.keys(this._integrations)}addIntegration(e){const n=this._integrations[e.name];!n&&e.beforeSetup&&e.beforeSetup(this),er(this,e,this._integrations),n||Ye(this,[e])}sendEvent(e,n={}){this.emit("beforeSendEvent",e,n);const r=wi(e,this);let s=Qo(e,this._dsn,this._options._metadata,this._options.tunnel);if(!re(n))for(const o of n.attachments||[])s=Je(s,jo(o));r&&(s=Je(s,r)),this.sendEnvelope(s).then(o=>this.emit("afterSendEvent",e,o))}sendSession(e){const{release:n,environment:r=Se}=this._options;if("aggregates"in e){const o=e.attrs||{};if(!o.release&&!n){m&&h.warn(on);return}o.release=o.release||n,o.environment=o.environment||r,e.attrs=o}else{if(!e.release&&!n){m&&h.warn(on);return}e.release=e.release||n,e.environment=e.environment||r}this.emit("beforeSendSession",e);const s=Jo(e,this._dsn,this._options._metadata,this._options.tunnel);this.sendEnvelope(s)}recordDroppedEvent(e,n,r=1){if(this._options.sendClientReports){const s=`${e}:${n}`;m&&h.log(`Recording outcome: "${s}"${r>1?` (${r} times)`:""}`),this._outcomes[s]=(this._outcomes[s]||0)+r}}on(e,n){const r=this._hooks[e]=this._hooks[e]||new Set,s=(...o)=>n(...o);return r.add(s),()=>{r.delete(s)}}emit(e,...n){const r=this._hooks[e];r&&r.forEach(s=>s(...n))}async sendEnvelope(e){if(this.emit("beforeEnvelope",e),this._isEnabled()&&this._transport)try{const n=await this._transport.send(e);return this.emit("afterEnvelope",e),n}catch(n){return m&&h.error("Error while sending envelope:",n),{}}return m&&h.error("Transport disabled"),{}}registerCleanup(e){}dispose(){}_setupIntegrations(){const{integrations:e}=this._options;this._integrations=Io(this,e),Ye(this,e)}_updateSessionFromEvent(e,n){var c,u;let r=n.level==="fatal",s=!1;const o=(c=n.exception)==null?void 0:c.values;if(o){s=!0,r=!1;for(const f of o)if(((u=f.mechanism)==null?void 0:u.handled)===!1){r=!0;break}}const i=e.status==="ok";(i&&e.errors===0||i&&r)&&(tt(e,{...r&&{status:this._unhandledSessionStatus},errors:e.errors||Number(s||r)}),this.captureSession(e))}async _isClientDoneProcessing(e){let n=0;for(;!e||nsetTimeout(r,1)),!this._numProcessing)return!0;n++}return!1}_isEnabled(){return this.getOptions().enabled!==!1&&this._transport!==void 0}_prepareEvent(e,n,r,s){const o=this.getOptions(),i=this.getIntegrationNames();return!n.integrations&&i.length&&(n.integrations=i),this.emit("preprocessEvent",e,n),e.type||s.setLastEventId(e.event_id||n.event_id),ei(o,e,n,r,this,s).then(a=>{var u;if(a===null)return a;this.emit("postprocessEvent",a,n),a.contexts={trace:{...(u=a.contexts)==null?void 0:u.trace,...Yn(r)},...a.contexts};const c=rr(this,r);return a.sdkProcessingMetadata={dynamicSamplingContext:c,...a.sdkProcessingMetadata},a})}_captureEvent(e,n={},r=N(),s=L()){return m&&se(e)&&h.log(`Captured error event \`${lr(e)[0]||""}\``),this._processEvent(e,n,r,s).then(o=>o.event_id,o=>{m&&(cn(o)?h.log(o.message):an(o)?h.warn(o.message):h.warn(o))})}_processEvent(e,n,r,s){const o=this.getOptions(),{sampleRate:i}=o,a=br(e),c=se(e),f=`before send for type \`${e.type||"error"}\``;let l="before_send";const d=typeof i>"u"?void 0:ro(i),g=ee(e.type);return this._prepareEvent(e,n,r,s).then(p=>{if(p===null)throw Gt("An event processor returned `null`, will not send event.");if(re(n))return p;const I=qi(this,o,p,n,()=>{l="callback_error"});return Wi(I,f)}).then(p=>{var b;if(p===null){if(this.recordDroppedEvent(l,g),a){const X=e.spans||[];this.recordDroppedEvent(l,"span",1+X.length)}throw Gt(`${f} ${l==="callback_error"?"threw an error":"returned `null`"}, will not send event.`)}const I=r.getSession()||s.getSession();if(c&&I&&this._updateSessionFromEvent(I,p),c&&typeof d=="number"&&Ee()>d)throw this.recordDroppedEvent("sample_rate","error"),Gt(`Discarding event because it's not included in the random sample (sampling rate = ${i})`);if(a){const B=((b=p.sdkProcessingMetadata)==null?void 0:b.spanCountBeforeProcessing)||0,X=p.spans?p.spans.length:0,we=B-X;we>0&&this.recordDroppedEvent("before_send","span",we)}const V=p.transaction_info;if(a&&V&&p.transaction!==e.transaction){const B="custom";p.transaction_info={...V,source:B}}return this.sendEvent(p,n),p}).then(null,p=>{throw cn(p)||an(p)?p:(this.captureException(p,{mechanism:{handled:!1,type:"internal"},data:{__sentry__:!0},originalException:p}),kt(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. +Reason: ${p}`))})}_process(e,n){this._numProcessing++,this._promiseBuffer.add(e).then(r=>(this._numProcessing--,r),r=>(this._numProcessing--,r===be&&this.recordDroppedEvent("queue_overflow",n),r))}_clearOutcomes(){const e=this._outcomes;return this._outcomes={},Object.entries(e).map(([n,r])=>{const[s,o]=n.split(":");return{reason:s,category:o,quantity:r}})}_flushOutcomes(){m&&h.log("Flushing outcomes...");const e=this._clearOutcomes();if(e.length===0){m&&h.log("No outcomes to send");return}if(!this._dsn){m&&h.log("No dsn provided, will not send outcomes");return}m&&h.log("Sending outcomes:",e);const n=Di(e,this._options.tunnel&&St(this._dsn));this.sendEnvelope(n)}}function Wi(t,e){const n=`${e} must return \`null\` or a valid event.`;if(at(t))return t.then(r=>{if(!Nt(r)&&r!==null)throw kt(n);return r},r=>{throw kt(`${e} rejected with ${r}`)});if(!Nt(t)&&t!==null)throw kt(n);return t}function qi(t,e,n,r,s){const{beforeSend:o,ignoreSpans:i,beforeSendTransaction:a}=e,c=or(e.beforeSendSpan)&&e.beforeSendSpan;let u=n;if(se(u)&&o){const f=u;return ht(m?"The `beforeSend` callback threw an error, dropping the event:":"",()=>o(f,r),()=>(s(),null))}if(br(u)){if(c||i){const f=Li(u);if(i!=null&&i.length&&Ge({description:f.description,op:f.op,attributes:f.data},i))return null;if(c){const l=Xe(f,c);u=Et(n,Pi(l))}if(u.spans){const l=[],d=u.spans;for(const p of d){if(i!=null&&i.length&&Ge({description:p.description,op:p.op,attributes:p.data},i)){Eo(d,p);continue}c?l.push(Xe(p,c)):l.push(p)}const g=u.spans.length-l.length;g&&t.recordDroppedEvent("before_send","span",g),u.spans=l}}if(a){if(u.spans){const f=u.spans.length;u.sdkProcessingMetadata={...n.sdkProcessingMetadata,spanCountBeforeProcessing:f}}return ht(m?"The `beforeSendTransaction` callback threw an error, dropping the event:":"",()=>a(u,r),()=>(s(),null))}}return u}function se(t){return t.type===void 0}function br(t){return t.type==="transaction"}function Gi(t){let e=0;return t.name&&(e+=t.name.length*2),e+=8,e+vr(t.attributes)}function zi(t){let e=0;return t.message&&(e+=t.message.length*2),e+vr(t.attributes)}function vr(t){if(!t)return 0;let e=0;return Object.values(t).forEach(n=>{Array.isArray(n)?e+=n.length*fn(n[0]):it(n)?e+=fn(n):e+=100}),e}function fn(t){return typeof t=="string"?t.length*2:typeof t=="number"?8:typeof t=="boolean"?4:0}function Yi(t,e){e.debug===!0&&(m?h.enable():j(()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),Vi(),N().update(e.initialScope);const r=new t(e);return Xi(r),r.init(),r}function Ki(){const t=S();return t&&!Ui(t)?t:void 0}function Vi(){Ki()&&j(()=>{console.warn("[Sentry] `Sentry.init()` was called more than once. The new client replaces the active client, but the active client is not closed, so state from both can mix. Call `Sentry.init()` only once, or call `await Sentry.close()` before you call it again.")})}function Xi(t){N().setClient(t)}const Ir="[Filtered]",Ji=["auth","token","secret","session","password","passwd","pwd","key","jwt","bearer","sso","saml","csrf","xsrf","credentials","sid","identity","set-cookie","cookie"];function Qi(t,e){return e.some(n=>t.includes(n))}function Tr(t,e,n){if(e===!1)return!0;const r=t.toLowerCase();if(Qi(r,Ji))return!0;if(e===!0)return!1;const i=("deny"in e?e.deny:e.allow).some(a=>r.includes(a.toLowerCase()));return"deny"in e?i:!i}function ln(t,e,n){if(e===!1)return{};const r={};for(const s of Object.keys(t))r[s]=Tr(s,e)?Ir:t[s];return r}function Zi(t,e){if(!(!t||e===!1))return t.split("&").map(n=>{const r=n.indexOf("="),s=r===-1?n:n.slice(0,r),o=new URLSearchParams(`${s}=`).keys().next().value;return o!==void 0&&Tr(o,e)?`${s}=${Ir}`:n}).join("&")}function ta(t,e){const n=t.indexOf("#"),r=n===-1?t.length:n,s=t.indexOf("?");if(s===-1||s>r)return t;const o=t.slice(0,s),i=t.slice(s+1,r),a=t.slice(r),c=Zi(i,e);return c?`${o}?${c}${a}`:`${o}${a}`}function ea(t){var e;return((e=t??S())==null?void 0:e.getDataCollectionOptions().urlQueryParams)??!0}function na(t,e){return t===void 0?void 0:ta(t,ea(e))}function zt(t){if(!t)return{};const e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};const n=e[6]||"",r=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],search:n,hash:r,relative:e[5]+n+r}}function ra(t,e=!0){if(t.startsWith("data:")){const n=t.match(/^data:([^;,]+)/),r=n?n[1]:"text/plain",s=t.includes(";base64,"),o=t.indexOf(",");let i="";if(e&&o!==-1){const a=t.slice(o+1);i=a.length>10?`${a.slice(0,10)}... [truncated]`:a}return`data:${r}${s?",base64":""}${i?`,${i}`:""}`}return t}function sa(t){var e;"aggregates"in t?((e=t.attrs)==null?void 0:e.ip_address)===void 0&&(t.attrs={...t.attrs,ip_address:"{{auto}}"}):t.ipAddress===void 0&&(t.ipAddress="{{auto}}")}function oa(t,e,n=[e],r="npm"){const s=(t._metadata=t._metadata||{}).sdk=t._metadata.sdk||{};s.name||(s.name=`sentry.javascript.${e}`,s.packages=n.map(o=>({name:`${r}:@sentry/${o}`,version:W})),s.version=W)}const ia=100;function G(t,e){const n=S(),r=L();if(!n)return;const{beforeBreadcrumb:s=null,maxBreadcrumbs:o=ia}=n.getOptions();if(o<=0)return;const a={timestamp:yt(),...t},c=s?ht(m?"The `beforeBreadcrumb` callback threw an error, dropping the breadcrumb:":"",()=>j(()=>s(a,e)),()=>null):a;c!==null&&(n.emit&&n.emit("beforeAddBreadcrumb",c,e),r.addBreadcrumb(c,o))}const aa="FunctionToString",dn=new WeakMap,ca=()=>({name:aa,setupOnce(){const t=Function.prototype.toString;try{Function.prototype.toString=function(...e){const n=ye(this);let r;try{dn.has(S())&&n!==void 0&&(r=n)}catch{}return t.apply(r??this,e)}}catch{}},setup(t){dn.set(t,!0)}}),ua=ca,fa=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/,/^ResizeObserver loop completed with undelivered notifications.$/,/^Cannot redefine property: googletag$/,/^Can't find variable: gmo$/,/^undefined is not an object \(evaluating 'a\.[A-Z]'\)$/,/can't redefine non-configurable property "solana"/,/vv\(\)\.getRestrictions is not a function/,/Can't find variable: _AutofillCallbackHandler/,/Object Not Found Matching Id:\d+, MethodName:simulateEvent/,/Java exception was raised during method invocation$/,/Java object is gone$/],la="EventFilters",da=(t={})=>{let e;return{name:la,setup(n){const r=n.getOptions();e=pn(t,r)},processEvent(n,r,s){if(!e){const o=s.getOptions();e=pn(t,o)}return pa(n,e)?null:n}}};function pn(t={},e={}){return{allowUrls:[...t.allowUrls||[],...e.allowUrls||[]],denyUrls:[...t.denyUrls||[],...e.denyUrls||[]],ignoreErrors:[...t.ignoreErrors||[],...e.ignoreErrors||[],...t.disableErrorDefaults?[]:fa],ignoreTransactions:[...t.ignoreTransactions||[],...e.ignoreTransactions||[]]}}function pa(t,e){if(t.type){if(t.type==="transaction"&&ma(t,e.ignoreTransactions))return m&&h.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. +Event: ${H(t)}`),!0}else{if(ha(t,e.ignoreErrors))return m&&h.warn(`Event dropped due to being matched by \`ignoreErrors\` option. +Event: ${H(t)}`),!0;if(Ea(t))return m&&h.warn(`Event dropped due to not having an error message, error type or stacktrace. +Event: ${H(t)}`),!0;if(ga(t,e.denyUrls))return m&&h.warn(`Event dropped due to being matched by \`denyUrls\` option. +Event: ${H(t)}. +Url: ${Ct(t)}`),!0;if(!_a(t,e.allowUrls))return m&&h.warn(`Event dropped due to not being matched by \`allowUrls\` option. +Event: ${H(t)}. +Url: ${Ct(t)}`),!0}return!1}function ha(t,e){return e!=null&&e.length?lr(t).some(n=>_t(n,e)):!1}function ma(t,e){if(!(e!=null&&e.length))return!1;const n=t.transaction;return n?_t(n,e):!1}function ga(t,e){if(!(e!=null&&e.length))return!1;const n=Ct(t);return n?_t(n,e):!1}function _a(t,e){if(!(e!=null&&e.length))return!0;const n=Ct(t);return n?_t(n,e):!0}function ya(t=[]){for(let e=t.length-1;e>=0;e--){const n=t[e];if(n&&n.filename!==""&&n.filename!=="[native code]")return n.filename||null}return null}function Ct(t){var e,n;try{const r=[...((e=t.exception)==null?void 0:e.values)??[]].reverse().find(o=>{var i,a,c;return((i=o.mechanism)==null?void 0:i.parent_id)===void 0&&((c=(a=o.stacktrace)==null?void 0:a.frames)==null?void 0:c.length)}),s=(n=r==null?void 0:r.stacktrace)==null?void 0:n.frames;return s?ya(s):null}catch{return m&&h.error(`Cannot extract url for event ${H(t)}`),null}}function Ea(t){var e,n;return(n=(e=t.exception)==null?void 0:e.values)!=null&&n.length?!t.message&&!t.exception.values.some(r=>r.stacktrace||r.type&&r.type!=="Error"||r.value):!1}function Sa(t,e,n,r,s,o){var a;if(!((a=s.exception)!=null&&a.values)||!o||!D(o.originalException))return;const i=s.exception.values.length>0?s.exception.values[s.exception.values.length-1]:void 0;i&&(s.exception.values=oe(t,e,r,o.originalException,n,s.exception.values,i,0))}function oe(t,e,n,r,s,o,i,a){if(o.length>=n+1)return o;let c=[...o];if(D(r[s])){hn(i,a,r);const u=t(e,r[s]),f=c.length;mn(u,s,f,a),c=oe(t,e,n,r[s],s,[u,...c],u,f)}return kr(r)&&r.errors.forEach((u,f)=>{if(D(u)){hn(i,a,r);const l=t(e,u),d=c.length;mn(l,`errors[${f}]`,d,a),c=oe(t,e,n,u,s,[l,...c],l,d)}}),c}function kr(t){return Array.isArray(t.errors)}function hn(t,e,n){t.mechanism={handled:!0,type:"auto.core.linked_errors",...kr(n)&&{is_exception_group:!0},...t.mechanism,exception_id:e}}function mn(t,e,n,r){t.mechanism={handled:!0,...t.mechanism,type:"chained",source:e,exception_id:n,parent_id:r}}function ba(t){return D(t)&&"__sentry_fetch_url_host__"in t&&typeof t.__sentry_fetch_url_host__=="string"}function gn(t){return ba(t)?`${t.message} (${t.__sentry_fetch_url_host__})`:t.message}const At=new Set([]);function va(t){const e="console",n=z(e,t);return Y(e,Ta),n}function Ia(t){for(const e of t)At.add(e);return()=>{for(const e of t)At.delete(e)}}const _n=new Set;function Ta(){"console"in _&&Nn.forEach(function(t){_n.has(t)||!(t in _.console)||(_n.add(t),T(_.console,t,function(e){return Ot[t]=e,function(...n){const r=n[0],s=Ot[t],o=At.size&&typeof r=="string"&&_t(r,At);o||w("console",{args:n,level:t}),(!o||m&&h.isEnabled())&&(s==null||s.apply(_.console,n))}}))})}function ka(t){return t==="warn"?"warning":["fatal","error","warning","log","info","debug"].includes(t)?t:"log"}const wa="Dedupe",Ra=()=>{let t;return{name:wa,processEvent(e){if(e.type)return e;try{if(Na(e,t))return m&&h.warn("Event dropped due to being a duplicate of previously captured event."),null}catch{}return t=e}}},Oa=Ra;function Na(t,e){return e?!!(Ca(t,e)||Aa(t,e)):!1}function Ca(t,e){const n=t.message,r=e.message;return!(!n&&!r||n&&!r||!n&&r||n!==r||!Rr(t,e)||!wr(t,e))}function Aa(t,e){const n=yn(e),r=yn(t);return!(!n||!r||n.type!==r.type||n.value!==r.value||!Rr(t,e)||!wr(t,e))}function wr(t,e){const n=Ne(t),r=Ne(e);if(!n||!r)return!n&&!r;if(r.length!==n.length)return!1;for(let s=0;s{const e=new Set(t.levels||Nn);return{name:xa,setup(n){const r=va(({args:s,level:o})=>{S()!==n||!e.has(o)||La(o,s)});if(n.registerCleanup(r),t.filter){const s=Ia(t.filter);n.registerCleanup(s)}}}};function La(t,e){const n={category:"console",data:{arguments:e,logger:"console"},level:ka(t),message:En(e)};if(t==="assert")if(e[0]===!1){const r=e.slice(1);n.message=r.length>0?`Assertion failed: ${En(r)}`:"Assertion failed",n.data.arguments=r}else return;G(n,{input:e,level:t})}function En(t){return"util"in _&&typeof _.util.format=="function"?_.util.format(...t):is(t," ")}const Pa="ConversationId",Ma=()=>({name:Pa,setup(t){t.on("spanStart",e=>{const n=N().getScopeData(),r=L().getScopeData(),s=n.conversationId||r.conversationId;if(s){const{op:o,data:i,description:a}=Pt(e);if(!(o!=null&&o.startsWith("gen_ai."))&&!i["ai.operationId"]&&!(a!=null&&a.startsWith("ai.")))return;e.setAttribute(xs,s)}})}}),$a=Ma,ie=_;function Fa(){if(!("fetch"in ie))return!1;try{return new Headers,new Request("data:,"),new Response,!0}catch{return!1}}function ae(t){return t&&/^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}function ja(){var n;if(typeof EdgeRuntime=="string")return!0;if(!Fa())return!1;if(ae(ie.fetch))return!0;let t=!1;const e=ie.document;if(e&&typeof e.createElement=="function")try{const r=e.createElement("iframe");r.hidden=!0,e.head.appendChild(r),(n=r.contentWindow)!=null&&n.fetch&&(t=ae(r.contentWindow.fetch)),e.head.removeChild(r)}catch(r){m&&h.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",r)}return t}function Ba(t){const e="fetch",n=z(e,t);return Y(e,()=>Ua()),n}function Ua(t){Mt()&&!ja()||T(_,"fetch",function(e){return new Proxy(e,{apply(n,r,s){const o=new Error,{method:i,url:a}=Ha(s),c={args:s,fetchData:{method:i,url:a},startTimestamp:R()*1e3,virtualError:o,headers:Wa(s)};return w("fetch",{...c}),Reflect.apply(n,_,s).then(async u=>(w("fetch",{...c,endTimestamp:R()*1e3,response:u}),u),u=>{w("fetch",{...c,endTimestamp:R()*1e3,error:u}),D(u)&&u.stack===void 0&&(u.stack=o.stack,F(u,"framesToPop",1));const f=S(),l=(f==null?void 0:f.getOptions().enhanceFetchErrorMessages)??"always";if(l!==!1&&D(u)&&u.name==="TypeError"&&(u.message==="Failed to fetch"||u.message==="Load failed"||u.message==="NetworkError when attempting to fetch resource."))try{const p=new URL(c.fetchData.url).host;l==="always"?u.message=`${u.message} (${p})`:F(u,"__sentry_fetch_url_host__",p)}catch{}throw u})}})})}function wt(t,e){return xt(t)&&!!t[e]}function Sn(t){return typeof t=="string"?t:t?wt(t,"url")?t.url:t.toString?t.toString():"":""}function Ha(t){if(t.length===0)return{method:"GET",url:""};if(t.length===2){const[n,r]=t;return{url:Sn(n),method:wt(r,"method")?String(r.method).toUpperCase():Pn(n)&&wt(n,"method")?String(n.method).toUpperCase():"GET"}}const e=t[0];return{url:Sn(e),method:wt(e,"method")?String(e.method).toUpperCase():"GET"}}function Wa(t){const[e,n]=t;try{if(typeof n=="object"&&n!==null&&"headers"in n&&n.headers)return new Headers(n.headers);if(Pn(e))return new Headers(e.headers)}catch{}}function Or(t){if(t!==void 0)return t>=400&&t<500?"warning":t>=500?"error":void 0}const ce=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,E=_,qa=80,U={};try{typeof Node<"u"&&(U.parentNode=Object.getOwnPropertyDescriptor(Node.prototype,"parentNode").get),typeof Element<"u"&&(U.tagName=Object.getOwnPropertyDescriptor(Element.prototype,"tagName").get,U.id=Object.getOwnPropertyDescriptor(Element.prototype,"id").get,U.className=Object.getOwnPropertyDescriptor(Element.prototype,"className").get,U.getAttribute=Element.prototype.getAttribute),typeof HTMLElement<"u"&&(U.dataset=Object.getOwnPropertyDescriptor(HTMLElement.prototype,"dataset").get)}catch{}function M(t,e,n){const r=U[e];if(r)try{return r.call(t,n)}catch{}const s=t[e];return typeof s=="function"?s.call(t,n):s}function Nr(t,e={}){if(!t)return"";try{let n=t;const r=5,s=[];let o=0,i=0;const a=" > ",c=a.length;let u;const f=Array.isArray(e)?e:e.keyAttrs,l=!Array.isArray(e)&&e.maxStringLength||qa;for(;n&&o++1&&i+s.length*c+u.length>=l));)s.push(u),i+=u.length,n=M(n,"parentNode");return s.reverse().join(a)}catch{return""}}function Ga(t,e){const n=[],r=M(t,"tagName");if(!r)return"";if(typeof HTMLElement<"u"&&t instanceof HTMLElement){const o=M(t,"dataset");if(o){if(o.sentryComponent)return o.sentryComponent;if(o.sentryElement)return o.sentryElement}}n.push(r.toLowerCase());const s=e!=null&&e.length?e.filter(o=>M(t,"getAttribute",o)).map(o=>[o,M(t,"getAttribute",o)]):null;if(s!=null&&s.length)s.forEach(o=>{n.push(`[${o[0]}="${o[1]}"]`)});else{const o=M(t,"id");o&&n.push(`#${o}`);const i=M(t,"className");if(i&&x(i)){const a=i.split(/\s+/);for(const c of a)n.push(`.${c}`)}}for(const o of["aria-label","type","name","title","alt"]){const i=M(t,"getAttribute",o);i&&n.push(`[${o}="${i}"]`)}return n.join("")}function za(t,e,n){E.document&&E.addEventListener(t,e,n)}function Ya(t,e,n){E.document&&E.removeEventListener(t,e,n)}const Ka=t=>{var n;const e=E.requestIdleCallback||E.setTimeout;if(((n=E.document)==null?void 0:n.visibilityState)==="hidden")t();else{let r=!1;const s=()=>{r||(t(),r=!0)};za("visibilitychange",s,{once:!0,capture:!0}),e(()=>{s(),Ya("visibilitychange",s,{capture:!0})})}};function Va(t,e=5){if(!_.HTMLElement)return null;let n=t;for(let r=0;r{var o,i;const s=(o=E[n])==null?void 0:o.prototype;(i=s==null?void 0:s.hasOwnProperty)!=null&&i.call(s,"addEventListener")&&(T(s,"addEventListener",function(a){return function(c,u,f){if((c==="click"||c=="keypress")&&u)try{const l=this.__sentry_instrumentation_handlers__=this.__sentry_instrumentation_handlers__||{},d=l[c]=l[c]||{captureListeners:new WeakSet,bubbleListeners:new WeakSet,listenerCount:0},g=vn(f);if(!d.handler){const I=In(t);d.handler=I,d.capture=g,a.call(this,c,I,d.capture)}const p=d[g?"captureListeners":"bubbleListeners"];p.has(u)||(typeof f=="object"&&(f!=null&&f.once||f!=null&&f.signal)?d.sticky=!0:(p.add(u),d.listenerCount++))}catch{}return a.call(this,c,u,f)}}),T(s,"removeEventListener",function(a){return function(c,u,f){if((c==="click"||c=="keypress")&&u)try{const l=this.__sentry_instrumentation_handlers__||{},d=l[c];d!=null&&d[vn(f)?"captureListeners":"bubbleListeners"].delete(u)&&(!--d.listenerCount&&!d.sticky&&(a.call(this,c,d.handler,d.capture),d.handler=void 0,delete l[c]),Object.keys(l).length===0&&delete this.__sentry_instrumentation_handlers__)}catch{}return a.call(this,c,u,f)}}))})}function ec(t){if(t.type!==ue)return!1;try{if(!t.target||t.target._sentryId!==fe)return!1}catch{}return!0}function nc(t,e){return t!=="keypress"?!1:e!=null&&e.tagName?!(e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.isContentEditable):!0}function In(t,e=!1){return n=>{if(!n||n._sentryCaptured)return;const r=rc(n);if(nc(n.type,r))return;F(n,"_sentryCaptured",!0),r&&!r._sentryId&&F(r,"_sentryId",k());const s=n.type==="keypress"?"input":n.type;ec(n)||(t({event:n,name:s,global:e}),ue=n.type,fe=r?r._sentryId:void 0),clearTimeout(bn),bn=E.setTimeout(()=>{fe=void 0,ue=void 0},Qa)}}function rc(t){try{return t.target}catch{return null}}let It;function sc(){return"history"in E&&!!E.history}function Ar(t){const e="history";z(e,t),Y(e,oc)}function oc(){if(E.addEventListener("popstate",()=>{const e=E.location.href,n=It;if(It=e,n===e)return;w("history",{from:n,to:e})}),!sc())return;function t(e){return function(...n){const r=n.length>2?n[2]:void 0;if(r){const s=It,o=ic(String(r));if(It=o,s===o)return e.apply(this,n);w("history",{from:s,to:o})}return e.apply(this,n)}}T(E.history,"pushState",t),T(E.history,"replaceState",t)}function ic(t){try{return new URL(t,E.location.origin).toString()}catch{return t}}const Rt={};function ac(t){const e=Rt[t];if(e)return e;let n=E[t];if(ae(n))return Rt[t]=n.bind(E);const r=E.document;if(r&&typeof r.createElement=="function")try{const s=r.createElement("iframe");s.hidden=!0,r.head.appendChild(s);const o=s.contentWindow;o!=null&&o[t]&&(n=o[t]),r.head.removeChild(s)}catch(s){ce&&h.warn(`Could not create sandbox iframe for ${t} check, bailing to window.${t}: `,s)}return n&&(Rt[t]=n.bind(E))}function cc(t){Rt[t]=void 0}const lt="__sentry_xhr_v3__";function uc(t){const e="xhr";z(e,t),Y(e,fc)}function fc(){if(!E.XMLHttpRequest)return;const t=XMLHttpRequest.prototype;t.open=new Proxy(t.open,{apply(e,n,r){let s=new Error;const o=R()*1e3,i=x(r[0])?r[0].toUpperCase():void 0,a=lc(r[1]);if(!i||!a)return e.apply(n,r);n[lt]={method:i,url:a,request_headers:{}},i==="POST"&&a.match(/sentry_key/)&&(n.__sentry_own_request__=!0);const c=()=>{const u=n[lt];if(u&&n.readyState===4){try{u.status_code=n.status}catch{}const f={endTimestamp:R()*1e3,startTimestamp:o,xhr:n,virtualError:s};w("xhr",f),s=void 0,n.removeEventListener("readystatechange",c)}};return"onreadystatechange"in n&&typeof n.onreadystatechange=="function"?n.onreadystatechange=new Proxy(n.onreadystatechange,{apply(u,f,l){return c(),u.apply(f,l)}}):n.addEventListener("readystatechange",c),n.setRequestHeader=new Proxy(n.setRequestHeader,{apply(u,f,l){const[d,g]=l,p=f[lt];return p&&x(d)&&x(g)&&(p.request_headers[d.toLowerCase()]=g),u.apply(f,l)}}),e.apply(n,r)}}),t.send=new Proxy(t.send,{apply(e,n,r){const s=n[lt];if(!s)return e.apply(n,r);r[0]!==void 0&&(s.body=r[0]);const o={startTimestamp:R()*1e3,xhr:n};return w("xhr",o),e.apply(n,r)}})}function lc(t){if(x(t))return t;try{return t.toString()}catch{}}function dc(t){if(typeof Element>"u")return!1;try{return t instanceof Element}catch{return!1}}const y=_;let le=0;const Tn=[];function xr(t){if(le>0)return!0;const e=t?Tn.findIndex(n=>pc(n,t)):-1;return e===-1?!1:(Tn.splice(e,1),!0)}function pc(t,e){return t.msg===e.msg&&t.url===e.url&&t.line===e.line&&t.column===e.column}function hc(){le++,setTimeout(()=>{le--})}function nt(t,e={}){function n(s){return typeof s=="function"}if(!n(t))return t;try{if(Object.prototype.hasOwnProperty.call(t,"__sentry_wrapped__")){const o=t.__sentry_wrapped__;return typeof o=="function"?o:t}if(ye(t))return t}catch{return t}const r=function(...s){_._sentryWrappedDepth=(_._sentryWrappedDepth||0)+1;try{const o=s.map(i=>nt(i,e));return t.apply(this,o)}catch(o){throw hc(),As(i=>{i.addEventProcessor(a=>(e.mechanism&&(Jt(a,void 0),Z(a,e.mechanism)),a.extra={...a.extra,arguments:s},a)),di(o)}),o}finally{_._sentryWrappedDepth=(_._sentryWrappedDepth||0)-1}};try{for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&(r[s]=t[s])}catch{}Mn(r,t),F(t,"__sentry_wrapped__",r);try{Object.getOwnPropertyDescriptor(r,"name").configurable&&Object.defineProperty(r,"name",{get(){return t.name}})}catch{}return r}function kn(){const t=Ie(),{referrer:e}=y.document||{},{userAgent:n}=y.navigator||{},r={...e&&{Referer:e},...n&&{"User-Agent":n}};return{url:t,headers:r}}function Te(t,e){const n=$t(t,e),r={type:Ec(e),value:Sc(e)};return n.length&&(r.stacktrace={frames:n}),r.type===void 0&&r.value===""&&(r.value="Unrecoverable error caught"),r}function mc(t,e,n,r){const s=S(),o=s==null?void 0:s.getOptions().normalizeDepth,i=kc(e),a={__serialized__:Fn(e,o)};if(i)return{exception:{values:[Te(t,i)]},extra:a};const u={exception:{values:[{type:Dt(e)?e.constructor.name:r?"UnhandledRejection":"Error",value:Ic(e,{isUnhandledRejection:r})}]},extra:a};if(n){const f=$t(t,n);f.length&&(u.exception.values[0].stacktrace={frames:f})}return u}function Yt(t,e){return{exception:{values:[Te(t,e)]}}}function $t(t,e){const n=e.stacktrace||e.stack||"",r=_c(e),s=yc(e);try{return t(n,r,s)}catch{}return[]}const gc=/Minified React error #\d+;/i;function _c(t){return t&&gc.test(t.message)?1:0}function yc(t){return typeof t.framesToPop=="number"?t.framesToPop:0}function Dr(t){return typeof WebAssembly<"u"&&typeof WebAssembly.Exception<"u"?t instanceof WebAssembly.Exception:!1}function Ec(t){const e=t==null?void 0:t.name;return!e&&Dr(t)?t.message&&Array.isArray(t.message)&&t.message.length==2?t.message[0]:"WebAssembly.Exception":e}function Sc(t){const e=t==null?void 0:t.message;return Dr(t)?Array.isArray(t.message)&&t.message.length==2?t.message[1]:"wasm exception":e?e.error&&typeof e.error.message=="string"?gn(e.error):gn(t):"No error message"}function bc(t,e,n,r){const s=(n==null?void 0:n.syntheticException)||void 0,o=ke(t,e,s,r);return Z(o),o.level="error",n!=null&&n.event_id&&(o.event_id=n.event_id),bt(o)}function vc(t,e,n="info",r,s){const o=(r==null?void 0:r.syntheticException)||void 0,i=de(t,e,o,s);return i.level=n,r!=null&&r.event_id&&(i.event_id=r.event_id),bt(i)}function ke(t,e,n,r,s){var a,c;let o;if(Ln(e)&&e.error)return Yt(t,e.error);if(Ae(e)||Kr(e)){const u=e;if("stack"in e){o=Yt(t,e);const f=(c=(a=o.exception)==null?void 0:a.values)==null?void 0:c[0];if(r&&n&&f&&!f.stacktrace){const l=$t(t,n);l.length&&(f.stacktrace={frames:l},Z(o,{synthetic:!0}))}}else{const f=u.name||(Ae(u)?"DOMError":"DOMException"),l=u.message?`${f}: ${u.message}`:f;o=de(t,l,n,r),Jt(o,l)}return o}if(D(e))return Yt(t,e);if(Nt(e)||Dt(e))return o=mc(t,e,n,s),Z(o,{synthetic:!0}),o;const i=String(e);return o=de(t,i,n,r),Jt(o,i),Z(o,{synthetic:!0}),o}function de(t,e,n,r){const s={};if(r&&n){const o=$t(t,n);o.length&&(s.exception={values:[{value:e,stacktrace:{frames:o}}]}),Z(s,{synthetic:!0})}if(ge(e)){const{__sentry_template_string__:o,__sentry_template_values__:i}=e;return s.logentry={message:o,params:i},s}return s.message=e,s}function Ic(t,{isUnhandledRejection:e}){const n=Xr(t),r=e?"promise rejection":"exception";return Ln(t)?`Event \`ErrorEvent\` captured as ${r} with message \`${t.message}\``:Dt(t)?`Event \`${Tc(t)}\` (type=${t.type}) captured as ${r}`:`Object captured as ${r} with keys: ${n}`}function Tc(t){try{const e=Object.getPrototypeOf(t);return e?e.constructor.name:void 0}catch{}}function kc(t){return Object.values(t).find(D)}class wc extends Hi{constructor(e){var c;const n=Rc(e),r=y.SENTRY_SDK_SOURCE||Wo();oa(n,"browser",["browser"],r),super(n),n.routeProvider&&Xa(n.routeProvider,this),this._unhandledSessionStatus="unhandled";const{userInfo:s}=this.getDataCollectionOptions();(c=n._metadata)!=null&&c.sdk&&(n._metadata.sdk.settings={infer_ip:s?"auto":"never",...n._metadata.sdk.settings});const{sendClientReports:o}=this._options,i=()=>{R()},a=[[y.document,"visibilitychange",()=>{i(),y.document.visibilityState==="hidden"&&(o&&this._flushOutcomes(),queueMicrotask(()=>{this.flush()}))}],[y.document,"freeze",i],[y.document,"resume",i],[y,"pagehide",i],[y,"pageshow",i]];a.forEach(([u,f,l])=>{var d;return(d=u==null?void 0:u.addEventListener)==null?void 0:d.call(u,f,l)}),this.on("close",()=>a.forEach(([u,f,l])=>{var d;return(d=u==null?void 0:u.removeEventListener)==null?void 0:d.call(u,f,l)})),s&&this.on("beforeSendSession",sa)}eventFromException(e,n){return bc(this._options.stackParser,e,n,this._options.attachStacktrace)}eventFromMessage(e,n="info",r){return vc(this._options.stackParser,e,n,r,this._options.attachStacktrace)}_prepareEvent(e,n,r,s){return e.platform=e.platform||"javascript",super._prepareEvent(e,n,r,s)}}function Rc(t){var e;return{release:typeof __SENTRY_RELEASE__=="string"?__SENTRY_RELEASE__:(e=y.SENTRY_RELEASE)==null?void 0:e.id,sendClientReports:!0,parentSpanIsAlwaysRootSpan:!0,...t}}const Oc=40;function Nc(t,e=ac("fetch")){let n=0,r=0;async function s(o){const i=o.body.length;n+=i,r++;const a={body:o.body,method:"POST",referrerPolicy:"strict-origin",headers:t.headers,keepalive:n<=6e4&&r<15,...t.fetchOptions};try{const c=await e(t.url,a);return{statusCode:c.status,headers:{"x-sentry-rate-limits":c.headers.get("X-Sentry-Rate-Limits"),"retry-after":c.headers.get("Retry-After")}}}catch(c){throw cc("fetch"),c}finally{n-=i,r--}}return xi(t,s,ve(t.bufferSize||Oc))}const Ft=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,Cc=30,Ac=50;function pe(t,e,n,r){const s={filename:t,function:e===""?q:e,in_app:!0};return n!==void 0&&(s.lineno=n),r!==void 0&&(s.colno=r),s}const xc=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Dc=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Lc=/\((\S*)(?::(\d+))(?::(\d+))\)/,Pc=/at (.+?) ?\(data:(.+?),/,Mc=t=>{var s;const e=t.match(Pc);if(e)return{filename:``,function:e[1]};const n=xc.exec(t);if(n){const[,o,i,a]=n;return pe(o,q,+i,+a)}const r=Dc.exec(t);if(r){if(((s=r[2])==null?void 0:s.indexOf("eval"))===0){const c=Lc.exec(r[2]);c&&(r[2]=c[1],r[3]=c[2],r[4]=c[3])}const[i,a]=Lr(r[1]||q,r[2]);return pe(a,i,r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},$c=[Cc,Mc],Fc=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,jc=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Bc=t=>{const e=Fc.exec(t);if(e){if(e[3]&&e[3].indexOf(" > eval")>-1){const o=jc.exec(e[3]);o&&(e[1]=e[1]||"eval",e[3]=o[1],e[4]=o[2],e[5]="")}let r=e[3],s=e[1]||q;return[s,r]=Lr(s,r),pe(r,s,e[4]?+e[4]:void 0,e[5]?+e[5]:void 0)}},Uc=[Ac,Bc],Hc=[$c,Uc],Wc=xn(...Hc),Lr=(t,e)=>{const n=t.indexOf("safari-extension")!==-1,r=t.indexOf("safari-web-extension")!==-1;return n||r?[t.indexOf("@")!==-1?t.split("@")[0]:q,n?`safari-extension:${e}`:`safari-web-extension:${e}`]:[t,e]},Tt=1024,qc="Breadcrumbs",Gc=(t={})=>{const e={dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...t};return{name:qc,setup(n){e.dom&&Za(Kc(n,e.dom)),e.xhr&&uc(Vc(n)),e.fetch&&Ba(Xc(n)),e.history&&Ar(Jc(n)),e.sentry&&n.on("beforeSendEvent",Yc(n))}}},zc=Gc;function Yc(t){return function(n){S()===t&&G({category:`sentry.${n.type==="transaction"?"transaction":"event"}`,event_id:n.event_id,level:n.level,message:H(n)},{event:n})}}function Kc(t,e){return function(r){if(S()!==t)return;let s,o,i=typeof e=="object"?e.serializeAttribute:void 0,a=typeof e=="object"&&typeof e.maxStringLength=="number"?e.maxStringLength:void 0;a&&a>Tt&&(Ft&&h.warn(`\`dom.maxStringLength\` cannot exceed ${Tt}, but a value of ${a} was configured. Sentry will use ${Tt} instead.`),a=Tt),typeof i=="string"&&(i=[i]);try{const u=r.event,f=Qc(u)?u.target:u;s=Nr(f,{keyAttrs:i,maxStringLength:a}),o=Va(f)}catch{s=""}if(s.length===0)return;const c={category:`ui.${r.name}`,message:s};o&&(c.data={"ui.component_name":o}),G(c,{event:r.event,name:r.name,global:r.global})}}function Vc(t){return function(n){if(S()!==t)return;const{startTimestamp:r,endTimestamp:s}=n,o=n.xhr[lt];if(!r||!s||!o)return;const{method:i,url:a,status_code:c,body:u}=o,f={method:i,url:a,status_code:c},l={xhr:n.xhr,input:u,startTimestamp:r,endTimestamp:s},d={category:"xhr",data:f,type:"http",level:Or(c)};t.emit("beforeOutgoingRequestBreadcrumb",d,l),G(d,l)}}function Xc(t){return function(n){if(S()!==t)return;const{startTimestamp:r,endTimestamp:s}=n;if(s&&!(n.fetchData.url.match(/sentry_key/)&&n.fetchData.method==="POST"))if(n.error){const o={data:n.error,input:n.args,startTimestamp:r,endTimestamp:s},i={category:"fetch",data:n.fetchData,level:"error",type:"http"};t.emit("beforeOutgoingRequestBreadcrumb",i,o),G(i,o)}else{const o=n.response,i={...n.fetchData,status_code:o==null?void 0:o.status},a={input:n.args,response:o,startTimestamp:r,endTimestamp:s},c={category:"fetch",data:i,type:"http",level:Or(i.status_code)};t.emit("beforeOutgoingRequestBreadcrumb",c,a),G(c,a)}}}function Jc(t){return function(n){if(S()!==t)return;let r=n.from,s=n.to;const o=zt(y.location.href);let i=r?zt(r):void 0;const a=zt(s);i!=null&&i.path||(i=o),o.protocol===a.protocol&&o.host===a.host&&(s=a.relative),o.protocol===i.protocol&&o.host===i.host&&(r=i.relative),G({category:"navigation",data:{from:r,to:s}})}}function Qc(t){return!!t&&!!t.target}const Zc="EventTarget,Window,Node,ApplicationCache,AudioTrackList,BroadcastChannel,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(","),tu="BrowserApiErrors",eu=(t={})=>{const e={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,unregisterOriginalCallbacks:!1,...t};return{name:tu,setupOnce(){e.setTimeout&&T(y,"setTimeout",wn),e.setInterval&&T(y,"setInterval",wn),e.requestAnimationFrame&&T(y,"requestAnimationFrame",ru),e.XMLHttpRequest&&"XMLHttpRequest"in y&&T(XMLHttpRequest.prototype,"send",su);const n=e.eventTarget;n&&(Array.isArray(n)?n:Zc).forEach(s=>ou(s,e))}}},nu=eu;function wn(t){return function(...e){const n=e[0];return e[0]=nt(n,{mechanism:{handled:!1,type:`auto.browser.browserapierrors.${$(t)}`}}),t.apply(this,e)}}function ru(t){return function(e){return t.apply(this,[nt(e,{mechanism:{data:{handler:$(t)},handled:!1,type:"auto.browser.browserapierrors.requestAnimationFrame"}})])}}function su(t){return function(...e){const n=this;return["onload","onerror","onprogress","onreadystatechange"].forEach(s=>{s in n&&typeof n[s]=="function"&&T(n,s,function(o){const i={mechanism:{data:{handler:$(o)},handled:!1,type:`auto.browser.browserapierrors.xhr.${s}`}},a=ye(o);return a&&(i.mechanism.data.handler=$(a)),nt(o,i)})}),t.apply(this,e)}}function ou(t,e){var s,o;const r=(s=y[t])==null?void 0:s.prototype;(o=r==null?void 0:r.hasOwnProperty)!=null&&o.call(r,"addEventListener")&&(T(r,"addEventListener",function(i){return function(a,c,u){try{iu(c)&&(c.handleEvent=nt(c.handleEvent,{mechanism:{data:{handler:$(c),target:t},handled:!1,type:"auto.browser.browserapierrors.handleEvent"}}))}catch{}return e.unregisterOriginalCallbacks&&au(this,a,c),i.apply(this,[a,nt(c,{mechanism:{data:{handler:$(c),target:t},handled:!1,type:"auto.browser.browserapierrors.addEventListener"}}),u])}}),T(r,"removeEventListener",function(i){return function(a,c,u){try{if(Object.prototype.hasOwnProperty.call(c,"__sentry_wrapped__")){const f=c.__sentry_wrapped__;f&&i.call(this,a,f,u)}}catch{}return i.call(this,a,c,u)}}))}function iu(t){return typeof t.handleEvent=="function"}function au(t,e,n){t&&typeof t=="object"&&"removeEventListener"in t&&typeof t.removeEventListener=="function"&&t.removeEventListener(e,n)}const cu=(t={})=>{const e=t.lifecycle??"page";return{name:"BrowserSession",setupOnce(){if(typeof y.document>"u"){Ft&&h.warn("Using the `browserSessionIntegration` in non-browser environments is not supported.");return}rn({ignoreDuration:!0});let n=!1;Ka(()=>{n||(qt(),n=!0)});const r=L();let s=r.getUser();r.addScopeListener(o=>{const i=o.getUser();((s==null?void 0:s.id)!==(i==null?void 0:i.id)||(s==null?void 0:s.ip_address)!==(i==null?void 0:i.ip_address))&&(s=i,n&&qt())}),e==="route"&&Ar(({from:o,to:i})=>{o!==i&&(rn({ignoreDuration:!0}),qt(),n=!0)})}}},uu="CultureContext",fu=()=>({name:uu,preprocessEvent(t){var n;const e=Rn();e&&(t.contexts={...t.contexts,culture:{...e,...(n=t.contexts)==null?void 0:n.culture}})},processSegmentSpan(t){const e=Rn();e&&ir(t,{"culture.locale":e.locale,"culture.timezone":e.timezone,"culture.calendar":e.calendar})}}),lu=fu;function Rn(){try{const t=y.Intl;if(!t)return;const e=t.DateTimeFormat().resolvedOptions();return{locale:e.locale,timezone:e.timeZone,calendar:e.calendar}}catch{return}}const du="GlobalHandlers",pu=(t={})=>{const e={onerror:!0,onunhandledrejection:!0,...t};return{name:du,setupOnce(){Error.stackTraceLimit=50},setup(n){e.onerror&&(mu(n),On("onerror")),e.onunhandledrejection&&(gu(n),On("onunhandledrejection"))}}},hu=pu;function mu(t){qr(e=>{const{stackParser:n,attachStacktrace:r}=Pr();if(S()!==t||xr(e))return;const{msg:s,url:o,line:i,column:a,error:c}=e,u=Eu(ke(n,c||s,void 0,r,!1),o,i,a);u.level="error",dr(u,{originalException:c,mechanism:{handled:!1,type:"auto.browser.global_handlers.onerror"}})})}function gu(t){zr(e=>{const{stackParser:n,attachStacktrace:r}=Pr();if(S()!==t||xr())return;const s=_u(e),o=it(s)?yu(s):ke(n,s,void 0,r,!0);o.level="error",dr(o,{originalException:s,mechanism:{handled:!1,type:"auto.browser.global_handlers.onunhandledrejection"}})})}function _u(t){if(it(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch{}return t}function yu(t){return{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(t)}`}]}}}function Eu(t,e,n,r){const s=t.exception=t.exception||{},o=s.values=s.values||[],i=o[0]=o[0]||{},a=i.stacktrace=i.stacktrace||{},c=a.frames=a.frames||[];return c.length===0&&c.push({colno:r,lineno:n,filename:Su(e)??Ie(),function:q,in_app:!0}),t}function On(t){Ft&&h.log(`Global Handler attached: ${t}`)}function Pr(){const t=S();return(t==null?void 0:t.getOptions())||{stackParser:()=>[],attachStacktrace:!1}}function Su(t){if(!(!x(t)||t.length===0))return t.startsWith("data:")?`<${ra(t,!1)}>`:t}const bu=()=>({name:"HttpContext",preprocessEvent(t,e,n){var c;if(!y.navigator&&!y.location&&!y.document)return;const{url:r,headers:s}=kn(),o=n.getDataCollectionOptions().httpHeaders.request,i=Object.entries(((c=t.request)==null?void 0:c.headers)??{}).filter(([u])=>!(u in s)),a={...ln(s,o),...Object.fromEntries(i)};t.request={url:r,...t.request,...Object.keys(a).length>0?{headers:a}:{headers:void 0}}},processSpan(t,e){var a;if(!y.navigator&&!y.location&&!y.document)return;const n=kn(),r=ln(n.headers,e.getDataCollectionOptions().httpHeaders.request),s=r.Referer,{hostname:o,protocol:i}=y.location||{};ir(t,{[Fs]:r["User-Agent"],[Ls]:i==="file:"||o==="localhost"||o==="127.0.0.1"||o==="[::1]"||!!(o!=null&&o.endsWith(".localhost")),...t.is_segment&&{[$s]:((a=t.attributes)==null?void 0:a[Vn])!=="http.client"?na(n.url):void 0,[`${Ds}.referer`]:s?[s]:void 0}})}}),vu="cause",Iu=5,Tu="LinkedErrors",ku=(t={})=>{const e=t.limit||Iu,n=t.key||vu;return{name:Tu,preprocessEvent(r,s,o){const i=o.getOptions();Sa(Te,i.stackParser,n,e,r,s)}}},wu=ku,Ru=/^HTML(\w*)Element$/;function Ou(t){if(typeof window<"u"&&t===window)return"[Window]";if(typeof document<"u"&&t===document)return"[Document]";if(dc(t)){const e=Nu(t);if(Ru.test(e))return`[HTMLElement: ${Nr(t)}]`}}function Nu(t){const e=Object.getPrototypeOf(t);return e!=null&&e.constructor?e.constructor.name:"null prototype"}function Cu(){return Au()?(Ft&&j(()=>{console.error("[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/")}),!0):!1}function Au(){var s;if(typeof y.window>"u")return!1;const t=y;if(t.nw)return!1;const e=t.chrome||t.browser;if(!((s=e==null?void 0:e.runtime)!=null&&s.id))return!1;const n=Ie();return!(y===y.top&&/^(?:chrome-extension|moz-extension|ms-browser-extension|safari-web-extension):\/\//.test(n))}function xu(t){return[da(),ua(),$a(),nu(),zc(),Da(),hu(),wu(),Oa(),bu(),lu(),cu()]}function Pu(t={}){const e=!t.skipBrowserExtensionCheck&&Cu();let n=t.defaultIntegrations==null?xu():t.defaultIntegrations;const r=vo({integrations:t.integrations,defaultIntegrations:n}),s={...t,enabled:e?!1:t.enabled,stackParser:Hr(t.stackParser||Wc),integrations:r,transport:t.transport||Nc};return es(Ou),Yi(wc,s)}export{di as captureException,Pu as init,Du as setTag,Lu as setUser}; diff --git a/public/build/style2own/manifest.json b/public/build/style2own/manifest.json new file mode 100644 index 00000000..d180cacd --- /dev/null +++ b/public/build/style2own/manifest.json @@ -0,0 +1,48 @@ +{ + "resources/css/web/shared-styles.css": { + "file": "shared-styles-BbGt7f_e.css", + "src": "resources/css/web/shared-styles.css", + "isEntry": true + }, + "resources/css/web/theme-b2a.css": { + "file": "theme-b2a-BCAFYDZJ.css", + "src": "resources/css/web/theme-b2a.css", + "isEntry": true + }, + "resources/css/web/theme-b2in.css": { + "file": "theme-b2in-DK_BFMo-.css", + "src": "resources/css/web/theme-b2in.css", + "isEntry": true + }, + "resources/css/web/theme-stileigentum.css": { + "file": "theme-stileigentum-skwGRiP0.css", + "src": "resources/css/web/theme-stileigentum.css", + "isEntry": true + }, + "resources/css/web/theme-style2own.css": { + "file": "theme-style2own-1F1Xts-B.css", + "src": "resources/css/web/theme-style2own.css", + "isEntry": true + }, + "resources/js/app.js": { + "file": "app-OG3MHWAj.js", + "name": "app", + "src": "resources/js/app.js", + "isEntry": true + }, + "resources/js/error-reporting-sdk.js": { + "file": "error-reporting-sdk-CLmutOST.js", + "name": "error-reporting-sdk", + "src": "resources/js/error-reporting-sdk.js", + "isDynamicEntry": true + }, + "resources/js/error-reporting.js": { + "file": "error-reporting-BiGrjXpD.js", + "name": "error-reporting", + "src": "resources/js/error-reporting.js", + "isEntry": true, + "dynamicImports": [ + "resources/js/error-reporting-sdk.js" + ] + } +} \ No newline at end of file diff --git a/public/build/style2own/shared-styles-BbGt7f_e.css b/public/build/style2own/shared-styles-BbGt7f_e.css new file mode 100644 index 00000000..08008ef5 --- /dev/null +++ b/public/build/style2own/shared-styles-BbGt7f_e.css @@ -0,0 +1 @@ +@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2) format("woff2")}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary{cursor:pointer}.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{font-weight:500;letter-spacing:-.025em;font-family:var(--font-secondary, "Inter"),var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif}.text-hero{font-size:clamp(2.6rem,3.5vw,3.6rem);line-height:1.1;font-weight:300;letter-spacing:-.025em}.text-hero-alt{font-size:clamp(2rem,3vw,3rem);line-height:1.1;font-weight:300;letter-spacing:-.025em}.text-section-title{font-size:clamp(1.6rem,3vw,3rem);line-height:1.3em;font-weight:300;letter-spacing:-.025em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important;color:hsl(var(--primary-foreground));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-primary:hover{background-color:hsl(var(--primary-dark));background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-primary-accent{background-color:hsl(var(--primary));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important;color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-primary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-secondary{background-color:hsl(var(--secondary));background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important;color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important;box-shadow:0 10px 15px -3px #0000001a}.btn-secondary-accent{background-color:hsl(var(--secondary));background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important;color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;text-decoration:none;cursor:pointer}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important;color:hsl(var(--accent-foreground));padding:.75rem 2rem;border-radius:.5rem;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 6px -1px #0000001a;display:inline-block;text-decoration:none;cursor:pointer}.btn-accent:hover{background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important;color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow)}.form-field{display:block;width:100%;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:.6rem;box-shadow:inset 0 1px 2px hsl(var(--foreground) / .04);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease}.form-field::placeholder{color:hsl(var(--muted-foreground) / .7)}.form-field:hover{border-color:hsl(var(--primary) / .45)}.form-field:focus,.form-field:focus-visible{outline:none;border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary) / .22);background-color:hsl(var(--background))}.form-select{-moz-appearance:none;appearance:none;-webkit-appearance:none;padding-right:2.6rem;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-repeat:no-repeat;background-position:right .9rem center;background-size:1.1rem 1.1rem}.form-select optgroup{font-weight:600;font-style:normal;color:hsl(var(--primary))}.form-select option{font-weight:400;color:hsl(var(--foreground))}.card-elevated{background-color:hsl(var(--card));border-radius:1rem;box-shadow:var(--shadow-card);border:1px solid hsl(var(--border) / .5)}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (min-width: 1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient: linear-gradient( 100deg, hsl(var(--primary-dark)) 0%, hsl(var(--primary)) 42%, hsl(var(--cta-band-end, var(--secondary-dark))) 100% );position:relative;overflow:hidden;background:var(--cta-band-gradient)}.cta-band:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line, 0 0% 100%) / .6) 50%,transparent 100%)}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:linear-gradient(165deg,hsl(0 0% 100% / .07) 0%,transparent 48%)}.section-footer{background-color:hsl(var(--footer-bg, var(--dark-bg)));color:hsl(var(--footer-fg, var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted, var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line, var(--dark-muted)) / .3)}.text-clay{color:hsl(var(--clay, var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (min-width: 640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (min-width: 640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary) / .1)}.bg-secondary\/15{background-color:hsl(var(--secondary) / .15)}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-card\/95{background-color:hsl(var(--card) / .95)}.border-border\/50{border-color:hsl(var(--border) / .5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted) / .3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{position:fixed;top:0;left:0;right:0;z-index:50;background-color:hsl(var(--background) / .8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out}.header-normal{position:relative;transition:all .3s ease-in-out;border-bottom:1px solid hsl(var(--border)/.3)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.border-border\/30{border-color:hsl(var(--border) / .3)}.font-secondary{font-family:var(--font-secondary, "Inter"),var(--font-primary, "Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;transform:translateY(30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;transform:translateY(-30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;transform:translate(-30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;transform:translate(30px);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;transform:scale(.97);will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion: reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{transition:none!important;opacity:1!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary) / .2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary) / .3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary) / .15),0 0 20px hsl(var(--secondary) / .1),0 4px 10px -4px hsl(var(--secondary) / .2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary) / .25),0 0 30px hsl(var(--secondary) / .15),0 5px 10px -5px hsl(var(--secondary) / .3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary) / .35),0 0 60px hsl(var(--secondary) / .2),0 0 90px hsl(var(--secondary-dark) / .1),0 10px 10px -10px hsl(var(--secondary) / .4)}.icon-secondary-linear{background-color:hsl(var(--secondary) / .1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));color:hsl(var(--secondary-foreground))!important;position:relative}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent) /.5),hsl(var(--accent-dark) / .5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{border:1px solid rgba(255,255,255,.9);background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));box-shadow:#0000001a 0 10px 20px 5px;position:relative}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card)) 40%,hsl(var(--card) / .92));box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005;border:1px solid rgba(255,255,255,.9);transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s ease;position:relative}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008;transform:translateY(-2px) scale(1.005);filter:brightness(1.01)}.variante-glass-flow .btn,.variante-glass-flow button,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{position:relative;overflow:hidden;isolation:isolate;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s ease}.variante-glass-flow .btn:hover,.variante-glass-flow button:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary) / .3);transform:translateY(-2px);filter:brightness(1.08)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;transform:none;filter:none;overflow:visible;isolation:auto;transition:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary) / .06);stroke:hsl(var(--secondary) / .45);stroke-width:1.5;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep, var(--secondary)));font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary) / .18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));font-size:11px;text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke} diff --git a/public/build/style2own/theme-b2a-BCAFYDZJ.css b/public/build/style2own/theme-b2a-BCAFYDZJ.css new file mode 100644 index 00000000..9c564501 --- /dev/null +++ b/public/build/style2own/theme-b2a-BCAFYDZJ.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:0 25% 96%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:207 70% 26%;--primary-light:207 70% 36%;--primary-lighter:207 70% 86%;--primary-dark:207 70% 20%;--primary-foreground:30 25% 98%;--secondary:352 76% 48%;--secondary-light:352 76% 56%;--secondary-lighter:352 76% 75%;--secondary-dark:352 76% 42%;--secondary-foreground:0 25% 96%;--muted:0 0% 92%;--muted-foreground:199 50% 45%;--accent:210 20% 95%;--accent-foreground:20 14% 16%;--dark-bg:207 70% 26%;--dark-text:30 25% 98%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--ring:20 14% 16%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"Merriweather",Georgia,serif}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/style2own/theme-b2in-DK_BFMo-.css b/public/build/style2own/theme-b2in-DK_BFMo-.css new file mode 100644 index 00000000..e35ad105 --- /dev/null +++ b/public/build/style2own/theme-b2in-DK_BFMo-.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:38 33% 95%;--foreground:26 8% 16%;--card:40 43% 98%;--card-foreground:26 8% 16%;--popover:40 43% 98%;--popover-foreground:26 8% 16%;--primary:175 16% 15%;--primary-light:175 13% 22%;--primary-lighter:175 8% 82%;--primary-dark:175 18% 11%;--primary-foreground:38 33% 95%;--secondary:37 69% 39%;--secondary-light:37 62% 48%;--secondary-lighter:37 55% 78%;--secondary-dark:37 70% 32%;--secondary-deep:37 70% 30%;--cta-band-line:37 69% 39%;--secondary-foreground:38 33% 95%;--clay:24 15% 57%;--muted:30 24% 90%;--muted-foreground:24 12% 40%;--accent:28 25% 80%;--accent-dark:28 25% 74%;--accent-foreground:26 8% 16%;--dark-bg:175 16% 15%;--dark-text:38 33% 95%;--dark-muted:38 20% 76%;--footer-bg:28 25% 80%;--footer-fg:175 16% 15%;--footer-muted:24 12% 40%;--footer-line:175 16% 15%;--cta-band-end:175 12% 26%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:28 20% 84%;--input:40 40% 98%;--ring:175 16% 15%;--radius:.75rem;--hero-container:30 28% 89%;--hero-container-dark:28 25% 83%;--hero-container-light:36 32% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"EB Garamond","Georgia","Times New Roman",serif}.world-immobilien{--background:32 20% 97%;--foreground:20 14% 16%;--card:0 25% 96%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:209 32% 25%;--primary-light:209 32% 35%;--primary-lighter:209 32% 85%;--primary-dark:209 32% 20%;--primary-foreground:0 25% 96%;--secondary:199 74% 49%;--secondary-light:199 74% 56%;--secondary-lighter:199 74% 75%;--secondary-dark:199 74% 42%;--secondary-deep:199 74% 36%;--secondary-foreground:0 25% 96%;--clay:199 50% 35%;--muted:0 0% 92%;--muted-foreground:199 50% 35%;--accent:210 0% 90%;--accent-dark:210 0% 85%;--accent-foreground:20 14% 16%;--dark-bg:209 32% 25%;--dark-text:0 0% 100%;--dark-muted:0 0% 80%;--footer-bg:209 32% 25%;--footer-fg:0 0% 100%;--footer-muted:0 0% 80%;--footer-line:0 0% 80%;--cta-band-end:199 74% 42%;--border:0 0% 80%;--input:0 0% 92%;--ring:20 14% 16%;--hero-container:0 0% 93%;--hero-container-dark:0 0% 85%;--hero-container-light:0 0% 95%;--font-secondary:"IBM Plex Sans","Inter",system-ui,-apple-system,sans-serif}.world-interior{--background:40 25% 98%;--card:0 0% 100%;--popover:0 0% 100%;--muted:40 12% 94%;--muted-foreground:24 8% 38%;--accent:36 14% 93%;--accent-dark:36 14% 88%;--border:36 12% 88%;--input:0 0% 100%;--hero-container:40 14% 95%;--hero-container-dark:40 12% 90%;--hero-container-light:40 25% 98%;--footer-bg:175 16% 15%;--footer-fg:38 33% 95%;--footer-muted:38 20% 76%;--footer-line:38 20% 76%;--shadow-card:0 6px 24px -10px hsl(var(--foreground)/.14);--shadow-elevated:0 24px 48px -20px hsl(var(--foreground)/.2)}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.world-interior .btn-secondary-accent{color:hsl(var(--primary));border:1px solid hsl(var(--primary)/.55);box-shadow:none;background:0 0!important}.world-interior .btn-secondary-accent:hover{color:hsl(var(--primary-foreground));border-color:hsl(var(--primary));background:hsl(var(--primary))!important}.world-interior .section-footer .text-secondary{color:hsl(var(--secondary))}.world-interior .section-footer{border-top:1px solid hsl(var(--footer-muted)/.35)}.world-interior .appointment-toggle.btn-secondary-accent{background:hsl(var(--card))!important}.world-interior .appointment-toggle.btn-secondary-accent:hover{background:hsl(var(--primary))!important}.world-interior .cookie-consent-wrapper{--cc-primary:hsl(var(--secondary));--cc-primary-hover:hsl(var(--secondary-dark));--cc-save:hsl(var(--primary));--cc-save-hover:hsl(var(--primary-light));--cc-button-bg:hsl(var(--primary));--cc-button-hover:hsl(var(--primary-light))}.world-interior .cookie-consent-wrapper .cc-floating-btn{color:hsl(var(--primary-foreground));background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)));--tw-ring-color:hsl(var(--secondary))!important}.world-interior .cookie-consent-wrapper .cc-floating-btn:hover{background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))}.footer-logo-dark,.world-interior .footer-logo-light{display:none}.world-interior .footer-logo-dark{display:block}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}.world-interior :is(h2,h3).text-xl{font-size:1.5rem;line-height:1.25}.world-interior h4{font-size:1.25rem;line-height:1.3}.variante-glass-flow button[data-hero-dot],.variante-glass-flow button[data-hero-dot]:hover{box-shadow:none;filter:none;overflow:visible;transform:none}section.bg-secondary [data-vision-box] .text-secondary{color:hsl(var(--secondary))}.world-interior .variante-glass-flow div.hero-frame,.world-interior div.hero-frame{background:linear-gradient(to bottom right,#f5f4f3,#f2f0ed)padding-box,linear-gradient(125deg,hsl(var(--secondary-lighter)/.9),hsl(var(--secondary-light)/.75)22%,hsl(var(--secondary-lighter)/.45)55%,hsl(var(--secondary-light)/.75)82%,hsl(var(--secondary-lighter)/.9))border-box;border:1.5px solid #0000}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/style2own/theme-stileigentum-skwGRiP0.css b/public/build/style2own/theme-stileigentum-skwGRiP0.css new file mode 100644 index 00000000..ae385070 --- /dev/null +++ b/public/build/style2own/theme-stileigentum-skwGRiP0.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:38 40% 97%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:209 65% 20%;--primary-light:209 65% 30%;--primary-lighter:209 65% 80%;--primary-dark:209 65% 15%;--primary-foreground:0 25% 96%;--secondary:38 40% 66%;--secondary-light:38 40% 76%;--secondary-lighter:38 40% 85%;--secondary-dark:38 40% 55%;--secondary-foreground:20 14% 16%;--muted:209 35% 94%;--muted-foreground:209 10% 40%;--accent:38 40% 88%;--accent-foreground:209 10% 40%;--dark-bg:209 65% 20%;--dark-text:0 0% 100%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"EB Garamond",Georgia,serif}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.text-section-title{line-height:.95em}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/build/style2own/theme-style2own-1F1Xts-B.css b/public/build/style2own/theme-style2own-1F1Xts-B.css new file mode 100644 index 00000000..c6487a9a --- /dev/null +++ b/public/build/style2own/theme-style2own-1F1Xts-B.css @@ -0,0 +1 @@ +/*! tailwindcss v4.0.8 | MIT License | https://tailwindcss.com */@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-400:oklch(.841 .238 128.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-900:oklch(.405 .101 131.063);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-sky-100:oklch(.951 .026 236.824);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-violet-500:oklch(.606 .25 292.717);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-900:oklch(.408 .153 2.432);--color-rose-500:oklch(.645 .246 16.439);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-200:oklch(.922 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-md:0 3px 3px #0000001f;--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-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}:root{--background:32 20% 97%;--foreground:20 14% 16%;--card:30 25% 98%;--card-foreground:20 14% 16%;--popover:0 25% 96%;--popover-foreground:20 14% 16%;--primary:195 100% 34%;--primary-light:195 100% 44%;--primary-lighter:195 100% 84%;--primary-dark:195 100% 24%;--primary-foreground:30 25% 98%;--secondary:46 95% 56%;--secondary-light:46 95% 66%;--secondary-lighter:46 95% 86%;--secondary-dark:46 95% 46%;--secondary-foreground:20 14% 16%;--muted:0 0% 92%;--muted-foreground:199 50% 45%;--accent:210 20% 95%;--accent-foreground:20 14% 16%;--dark-bg:195 100% 34%;--dark-text:30 25% 98%;--dark-muted:30 20% 70%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:0 0% 80%;--input:0 0% 92%;--radius:.75rem;--hero-container:0 0% 91%;--hero-container-dark:0 0% 83%;--hero-container-light:0 0% 93%;--transition-smooth:all .3s cubic-bezier(.4,0,.2,1);--transition-bounce:all .4s cubic-bezier(.68,-.55,.265,1.55);--shadow-warm:0 10px 30px -15px hsl(var(--foreground)/.1);--shadow-card:0 4px 20px -8px hsl(var(--foreground)/.08);--shadow-elevated:0 20px 40px -20px hsl(var(--foreground)/.15);--shadow-accent-glow:0 0 30px hsl(var(--secondary)/.3);--font-primary:"Inter",system-ui,-apple-system,sans-serif;--font-secondary:"Ephesis",cursive}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.\!static{position:static!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-\[3px\]{inset-block:3px}.start-0{inset-inline-start:calc(var(--spacing)*0)}.end-0{inset-inline-end:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.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-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-24{top:calc(var(--spacing)*24)}.top-\[1px\]{top:1px}.top-\[5\%\]{top:5%}.top-\[10\%\]{top:10%}.top-\[24\%\]{top:24%}.top-\[42\%\]{top:42%}.top-\[44\%\]{top:44%}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-\[70\%\]{top:70%}.top-\[87\%\]{top:87%}.top-full{top:100%}.-right-2{right:calc(var(--spacing)*-2)}.-right-6{right:calc(var(--spacing)*-6)}.-right-12{right:calc(var(--spacing)*-12)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-\[3\.25rem\]{right:3.25rem}.right-\[8\%\]{right:8%}.-bottom-4{bottom:calc(var(--spacing)*-4)}.-bottom-6{bottom:calc(var(--spacing)*-6)}.-bottom-12{bottom:calc(var(--spacing)*-12)}.-bottom-16{bottom:calc(var(--spacing)*-16)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-\[8\%\]{bottom:8%}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-4{left:calc(var(--spacing)*-4)}.-left-12{left:calc(var(--spacing)*-12)}.-left-16{left:calc(var(--spacing)*-16)}.-left-20{left:calc(var(--spacing)*-20)}.left-0{left:calc(var(--spacing)*0)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\[8\%\]{left:8%}.left-\[21\%\]{left:21%}.left-\[24\%\]{left:24%}.left-\[29\%\]{left:29%}.left-\[34\%\]{left:34%}.left-\[50\%\]{left:50%}.left-\[56\%\]{left:56%}.left-\[70\%\]{left:70%}.left-auto{left:auto}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-20{z-index:-20}.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}.z-\[60\]{z-index:60}.z-\[100\]{z-index:100}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-8{grid-column:span 8/span 8}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.\!row-span-1{grid-row:span 1/span 1!important}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4{margin-inline-start:calc(var(--spacing)*4)}.-me-2{margin-inline-end:calc(var(--spacing)*-2)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.me-2{margin-inline-end:calc(var(--spacing)*2)}.me-3{margin-inline-end:calc(var(--spacing)*3)}.me-5{margin-inline-end:calc(var(--spacing)*5)}.me-10{margin-inline-end:calc(var(--spacing)*10)}.-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-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-2\.5{margin-top:calc(var(--spacing)*2.5)}.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-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-auto{margin-top:auto}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.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-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:calc(var(--spacing)*0)}.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-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-\[2px\]{margin-bottom:2px}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-px{margin-left:-1px}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.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-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-cell{display:table-cell}.aspect-2\/3{aspect-ratio:2/3}.aspect-\[2\/1\]{aspect-ratio:2}.aspect-\[3\/1\]{aspect-ratio:3}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[4\/5\]{aspect-ratio:4/5}.aspect-\[9\/16\]{aspect-ratio:9/16}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3\!{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-full{width:100%;height:100%}.\!h-10{height:calc(var(--spacing)*10)!important}.h-0{height:calc(var(--spacing)*0)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-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-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-18{height:calc(var(--spacing)*18)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-28{height:calc(var(--spacing)*28)}.h-32{height:calc(var(--spacing)*32)}.h-36{height:calc(var(--spacing)*36)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-52{height:calc(var(--spacing)*52)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[3\.3rem\]{height:3.3rem}.h-\[3px\]{height:3px}.h-\[4\.2rem\]{height:4.2rem}.h-\[26\%\]{height:26%}.h-\[30vh\]{height:30vh}.h-\[32\.5rem\]{height:32.5rem}.h-\[35\.5rem\]{height:35.5rem}.h-\[50vh\]{height:50vh}.h-\[62vh\]{height:62vh}.h-\[78\%\]{height:78%}.h-\[78vh\]{height:78vh}.h-\[86\%\]{height:86%}.h-\[400px\]{height:400px}.h-\[460px\]{height:460px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[calc\(100dvh-6rem\)\]{height:calc(100dvh - 6rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-16{max-height:calc(var(--spacing)*16)}.max-h-20{max-height:calc(var(--spacing)*20)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[58vh\]{max-height:58vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[600px\]{max-height:600px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-10{min-height:calc(var(--spacing)*10)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[24rem\]{min-height:24rem}.min-h-\[70vh\]{min-height:70vh}.min-h-\[76vh\]{min-height:76vh}.min-h-\[80px\]{min-height:80px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[360px\]{min-height:360px}.min-h-\[400px\]{min-height:400px}.min-h-\[460px\]{min-height:460px}.min-h-\[520px\]{min-height:520px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.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-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-18{width:calc(var(--spacing)*18)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-32\!{width:calc(var(--spacing)*32)!important}.w-35{width:calc(var(--spacing)*35)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1px\]{width:1px}.w-\[8rem\]{width:8rem}.w-\[15\%\]{width:15%}.w-\[32\%\]{width:32%}.w-\[35\%\]{width:35%}.w-\[46\%\]{width:46%}.w-\[60\%\]{width:60%}.w-\[62\%\]{width:62%}.w-\[94\%\]{width:94%}.w-\[95\%\]{width:95%}.w-\[98\%\]{width:98%}.w-\[100px\]{width:100px}.w-\[220px\]{width:220px}.w-\[calc\(100\%_\+_8rem\)\]{width:calc(100% + 8rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing)*0)}.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-150{max-width:calc(var(--spacing)*150)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[180px\]{max-width:180px}.max-w-\[320px\]{max-width:320px}.max-w-\[877px\]{max-width:877px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.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-none{max-width:none}.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-64{min-width:calc(var(--spacing)*64)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-1\!{flex:1!important}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.origin-top{transform-origin:top}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;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-px{--tw-translate-x:-1px;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-0\.5{--tw-translate-x:calc(var(--spacing)*.5);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-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;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-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-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)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.rotate-\[-18deg\]{rotate:-18deg}.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-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-mt-28{scroll-margin-top:calc(var(--spacing)*28)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[120px_1fr_1fr_80px\]{grid-template-columns:120px 1fr 1fr 80px}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.\!flex-row{flex-direction:row!important}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.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-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}: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-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-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)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*12)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*12)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-\[2px\]>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(2px*var(--tw-space-y-reverse));margin-block-end:calc(2px*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-6{column-gap:calc(var(--spacing)*6)}:where(.space-x-0\.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-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-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-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)))}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}: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-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-zinc-100>:not(:last-child)){border-color:var(--color-zinc-100)}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.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-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[28px\]{border-radius:28px}.rounded-\[48\%\]{border-radius:48%}.rounded-\[55\%\]{border-radius:55%}.rounded-\[calc\(1\.25rem-1\.5px\)\]{border-radius:calc(1.25rem - 1.5px)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[--color-border\]{border-color:--color-border}.border-\[hsl\(var\(--dark-muted\)\)\]{border-color:hsl(var(--dark-muted))}.border-\[hsl\(var\(--dark-muted\)\)\]\/20{border-color:color-mix(in oklab,hsl(var(--dark-muted))20%,transparent)}.border-\[hsl\(var\(--dark-muted\)\)\]\/30{border-color:color-mix(in oklab,hsl(var(--dark-muted))30%,transparent)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/80{border-color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}.border-amber-300{border-color:var(--color-amber-300)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-emerald-200\/80{border-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}.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-900\/10{border-color:color-mix(in oklab,var(--color-gray-900)10%,transparent)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-lime-200{border-color:var(--color-lime-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-sky-400\/30{border-color:color-mix(in oklab,var(--color-sky-400)30%,transparent)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\!{border-color:var(--color-white)!important}.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}.border-white\/25{border-color:color-mix(in oklab,var(--color-white)25%,transparent)}.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}.border-white\/50{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.border-white\/70{border-color:color-mix(in oklab,var(--color-white)70%,transparent)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-transparent{border-top-color:#0000}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.\!bg-red-500{background-color:var(--color-red-500)!important}.bg-\[\#3b5998\]{background-color:#3b5998}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#0077B5\]{background-color:#0077b5}.bg-\[\#142f34\]{background-color:#142f34}.bg-\[\#FF2D20\]\/10{background-color:#ff2d201a}.bg-\[\#e1e5e7\]{background-color:#e1e5e7}.bg-\[--color-bg\]{background-color:--color-bg}.bg-\[hsl\(var\(--dark-muted\)\)\]{background-color:hsl(var(--dark-muted))}.bg-\[hsl\(var\(--hero-container\)\)\]{background-color:hsl(var(--hero-container))}.bg-\[hsl\(var\(--muted-foreground\)\/0\.25\)\]{background-color:hsl(var(--muted-foreground)/.25)}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50)70%,transparent)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}.bg-black\/45{background-color:color-mix(in oklab,var(--color-black)45%,transparent)}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}.bg-black\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}.bg-black\/92{background-color:color-mix(in oklab,var(--color-black)92%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/60{background-color:color-mix(in oklab,var(--color-blue-50)60%,transparent)}.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-300\/20{background-color:color-mix(in oklab,var(--color-emerald-300)20%,transparent)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-200\/80{background-color:color-mix(in oklab,var(--color-gray-200)80%,transparent)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.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-500{background-color:var(--color-red-500)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-300\/20{background-color:color-mix(in oklab,var(--color-sky-300)20%,transparent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.bg-white\/25{background-color:color-mix(in oklab,var(--color-white)25%,transparent)}.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}.bg-white\/85{background-color:color-mix(in oklab,var(--color-white)85%,transparent)}.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}.bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-800\/5{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/50{background-color:color-mix(in oklab,var(--color-zinc-950)50%,transparent)}.bg-zinc-950\/75{background-color:color-mix(in oklab,var(--color-zinc-950)75%,transparent)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.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-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#071316\]\/95{--tw-gradient-from:oklab(17.6807% -.0152181 -.0107005/.95);--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-black\/15{--tw-gradient-from:color-mix(in oklab,var(--color-black)15%,transparent);--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-black\/20{--tw-gradient-from:color-mix(in oklab,var(--color-black)20%,transparent);--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-black\/30{--tw-gradient-from:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/40{--tw-gradient-from:color-mix(in oklab,var(--color-black)40%,transparent);--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-black\/60{--tw-gradient-from:color-mix(in oklab,var(--color-black)60%,transparent);--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-black\/70{--tw-gradient-from:color-mix(in oklab,var(--color-black)70%,transparent);--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-black\/80{--tw-gradient-from:color-mix(in oklab,var(--color-black)80%,transparent);--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-black\/85{--tw-gradient-from:color-mix(in oklab,var(--color-black)85%,transparent);--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-blue-50{--tw-gradient-from:var(--color-blue-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-blue-600{--tw-gradient-from:var(--color-blue-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-gray-700\/50{--tw-gradient-from:color-mix(in oklab,var(--color-gray-700)50%,transparent);--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-green-50{--tw-gradient-from:var(--color-green-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-purple-50{--tw-gradient-from:var(--color-purple-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-red-50{--tw-gradient-from:var(--color-red-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-sky-100{--tw-gradient-from:var(--color-sky-100);--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-transparent{--tw-gradient-from:transparent;--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-zinc-50{--tw-gradient-from:var(--color-zinc-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-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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-\[\#071316\]\/35{--tw-gradient-via:oklab(17.6807% -.0152181 -.0107005/.35);--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)}.via-black\/10{--tw-gradient-via:color-mix(in oklab,var(--color-black)10%,transparent);--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)}.via-black\/30{--tw-gradient-via:color-mix(in oklab,var(--color-black)30%,transparent);--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)}.via-black\/35{--tw-gradient-via:color-mix(in oklab,var(--color-black)35%,transparent);--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)}.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent);--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)}.via-black\/65{--tw-gradient-via:color-mix(in oklab,var(--color-black)65%,transparent);--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)}.via-transparent{--tw-gradient-via:transparent;--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)}.via-white{--tw-gradient-via:var(--color-white);--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)}.via-white\/50{--tw-gradient-via:color-mix(in oklab,var(--color-white)50%,transparent);--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)}.via-zinc-950\/90{--tw-gradient-via:color-mix(in oklab,var(--color-zinc-950)90%,transparent);--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-\[\#071316\]\/10{--tw-gradient-to:oklab(17.6807% -.0152181 -.0107005/.1);--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-black\/5{--tw-gradient-to:color-mix(in oklab,var(--color-black)5%,transparent);--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-black\/10{--tw-gradient-to:color-mix(in oklab,var(--color-black)10%,transparent);--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-black\/30{--tw-gradient-to:color-mix(in oklab,var(--color-black)30%,transparent);--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-black\/35{--tw-gradient-to:color-mix(in oklab,var(--color-black)35%,transparent);--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-blue-50{--tw-gradient-to:var(--color-blue-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-emerald-50{--tw-gradient-to:var(--color-emerald-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-indigo-50{--tw-gradient-to:var(--color-indigo-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-orange-50{--tw-gradient-to:var(--color-orange-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-pink-50{--tw-gradient-to:var(--color-pink-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-purple-50{--tw-gradient-to:var(--color-purple-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-purple-700{--tw-gradient-to:var(--color-purple-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-transparent{--tw-gradient-to:transparent;--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-white{--tw-gradient-to:var(--color-white);--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-zinc-100{--tw-gradient-to:var(--color-zinc-100);--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-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.to-zinc-950\/65{--tw-gradient-to:color-mix(in oklab,var(--color-zinc-950)65%,transparent);--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))}.box-decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.box-decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-current{fill:currentColor}.fill-gray-300{fill:var(--color-gray-300)}.fill-gray-500{fill:var(--color-gray-500)}.fill-red-500{fill:var(--color-red-500)}.fill-yellow-400{fill:var(--color-yellow-400)}.stroke-\[\#FF2D20\]{stroke:#ff2d20}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.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-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-\[1px\],.p-px{padding:1px}.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-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-7{padding-inline:calc(var(--spacing)*7)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.py-0\!{padding-block:calc(var(--spacing)*0)!important}.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-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-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.py-24{padding-block:calc(var(--spacing)*24)}.py-32{padding-block:calc(var(--spacing)*32)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-7{padding-inline-start:calc(var(--spacing)*7)}.pe-4{padding-inline-end:calc(var(--spacing)*4)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.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-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pt-20{padding-top:calc(var(--spacing)*20)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-32{padding-top:calc(var(--spacing)*32)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-2\.5{padding-right:calc(var(--spacing)*2.5)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pb-28{padding-bottom:calc(var(--spacing)*28)}.pb-40{padding-bottom:calc(var(--spacing)*40)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.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-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--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-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-\[0\.8rem\]{font-size:.8rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[10px\]\!{font-size:10px!important}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.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-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.overflow-ellipsis,.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-green-600{color:var(--color-green-600)!important}.\!text-white{color:var(--color-white)!important}.text-\[\#0e2226\]{color:#0e2226}.text-\[hsl\(var\(--dark-foreground\)\)\]{color:hsl(var(--dark-foreground))}.text-\[hsl\(var\(--dark-muted\)\)\]{color:hsl(var(--dark-muted))}.text-\[hsl\(var\(--dark-text\)\)\]{color:hsl(var(--dark-text))}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-black\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}.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-current{color:currentColor}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-900{color:var(--color-emerald-900)}.text-gray-50{color:var(--color-gray-50)}.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-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.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-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-lime-600{color:var(--color-lime-600)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-900{color:var(--color-orange-900)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.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-rose-500{color:var(--color-rose-500)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-500{color:var(--color-violet-500)}.text-white{color:var(--color-white)}.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}.text-white\/65{color:color-mix(in oklab,var(--color-white)65%,transparent)}.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.text-white\/75{color:color-mix(in oklab,var(--color-white)75%,transparent)}.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.text-white\/85{color:color-mix(in oklab,var(--color-white)85%,transparent)}.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.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,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-white\/50{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white)50%,transparent)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_12px_30px_-14px_rgba\(0\,0\,0\,0\.65\)\]{--tw-shadow:0 12px 30px -14px var(--tw-shadow-color,#000000a6);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_24px_60px_-28px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 24px 60px -28px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_30px_60px_-24px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 30px 60px -24px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0px_14px_34px_0px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0px 14px 34px 0px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-card\)\]{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[var\(--shadow-elevated\)\]{--tw-shadow:var(--shadow-elevated);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-md{--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)}.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)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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)}.shadow-black\/20{--tw-shadow-color:color-mix(in oklab,var(--color-black)20%,transparent)}.shadow-gray-500\/20{--tw-shadow-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}.shadow-zinc-950\/10{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)10%,transparent)}.shadow-zinc-950\/20{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)20%,transparent)}.shadow-zinc-950\/25{--tw-shadow-color:color-mix(in oklab,var(--color-zinc-950)25%,transparent)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-900\/5{--tw-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/30{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}.ring-white\/\[0\.05\]{--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}.inset-ring-gray-900\/5{--tw-inset-ring-color:color-mix(in oklab,var(--color-gray-900)5%,transparent)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:-1px}.outline-offset-2{outline-offset:2px}.outline-gray-300{outline-color:var(--color-gray-300)}.outline-lime-600{outline-color:var(--color-lime-600)}.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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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: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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #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,)}.drop-shadow-\[0px_4px_34px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px #00000040);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-md{--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));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{--tw-backdrop-blur:blur(8px);-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-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;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.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}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.duration-\[1400ms\]{--tw-duration:1.4s;transition-duration:1.4s}.ease-\[cubic-bezier\(0\.33\,1\,0\.68\,1\)\]{--tw-ease:cubic-bezier(.33,1,.68,1);transition-timing-function:cubic-bezier(.33,1,.68,1)}.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-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[a-z0-9\:-\]{a-z0-9:-}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:-translate-y-2:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-x-100:is(:where(.group):hover *){--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-500:is(:where(.group):hover *){color:var(--color-gray-500)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/card\:scale-105:is(:where(.group\/card):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/detail\:translate-x-0\.5:is(:where(.group\/detail):hover *){--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\/gallery\:scale-105:is(:where(.group\/gallery):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-checked\:translate-x-3\.5:is(:where(.group):has(:checked) *){--tw-translate-x:calc(var(--spacing)*3.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-open\/disclosure-button\:block:is(:where(.group\/disclosure-button)[data-open] *){display:block}.group-data-open\/disclosure-button\:hidden:is(:where(.group\/disclosure-button)[data-open] *){display:none}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius-lg)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--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)}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}.group-\[\.status-down\]\:bg-red-600:is(:where(.group).status-down *){background-color:var(--color-red-600)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--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)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.selection\:bg-\[\#FF2D20\] ::selection{background-color:#ff2d20}.selection\:bg-\[\#FF2D20\]::selection{background-color:#ff2d20}.selection\:bg-red-500 ::selection{background-color:var(--color-red-500)}.selection\:bg-red-500::selection{background-color:var(--color-red-500)}.selection\:text-white ::selection{color:var(--color-white)}.selection\:text-white::selection{color:var(--color-white)}.file\:mr-2::file-selector-button{margin-right:calc(var(--spacing)*2)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:rounded-lg::file-selector-button{border-radius:var(--radius-lg)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:bg-zinc-100::file-selector-button{background-color:var(--color-zinc-100)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing)*1.5)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.placeholder\:text-gray-400::placeholder{color:var(--color-gray-400)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:bottom-\[-4px\]:after{content:var(--tw-content);bottom:-4px}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--spacing)*.5)}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.first\:border-l:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.odd\:bg-zinc-50:nth-child(odd),.even\:bg-zinc-50:nth-child(2n){background-color:var(--color-zinc-50)}.default\:col-span-full:default{grid-column:1/-1}.default\:row-span-1:default{grid-row:span 1/span 1}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:z-20:hover{z-index:20}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.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\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing)*3)}.hover\:rounded-t-md:hover{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.hover\:rounded-b-md:hover{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.hover\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-500\/50:hover{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-green-500:hover{border-color:var(--color-green-500)}.hover\:border-purple-500:hover{border-color:var(--color-purple-500)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-teal-500:hover{border-color:var(--color-teal-500)}.hover\:border-violet-500:hover{border-color:var(--color-violet-500)}.hover\:border-white\/50:hover{border-color:color-mix(in oklab,var(--color-white)50%,transparent)}.hover\:border-white\/80:hover{border-color:color-mix(in oklab,var(--color-white)80%,transparent)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:\!bg-red-600:hover{background-color:var(--color-red-600)!important}.hover\:bg-\[\#0095e5\]:hover{background-color:#0095e5}.hover\:bg-\[\#5077cc\]:hover{background-color:#5077cc}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-500\/5:hover{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}.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-100\/75:hover{background-color:color-mix(in oklab,var(--color-gray-100)75%,transparent)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-800\/5:hover{background-color:color-mix(in oklab,var(--color-zinc-800)5%,transparent)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-black\/70:hover{color:color-mix(in oklab,var(--color-black)70%,transparent)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-800:hover{color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-white:hover{-webkit-text-decoration-color:var(--color-white);text-decoration-color:var(--color-white)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_18px_38px_-14px_rgba\(0\,0\,0\,0\.7\)\]:hover{--tw-shadow:0 18px 38px -14px var(--tw-shadow-color,#000000b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-elevated\)\]:hover{--tw-shadow:var(--shadow-elevated);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--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)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--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)}.hover\:ring-black\/20:hover{--tw-ring-color:color-mix(in oklab,var(--color-black)20%,transparent)}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:file\:bg-zinc-200:hover::file-selector-button{background-color:var(--color-zinc-200)}}.focus\:z-10:focus{z-index:10}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-indigo-700:focus{border-color:var(--color-indigo-700)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-indigo-100:focus{background-color:var(--color-indigo-100)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-indigo-800:focus{color:var(--color-indigo-800)}.focus\:opacity-100:focus{opacity:1}.focus\:ring:focus,.focus\:ring-1: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-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-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-white\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)50%,transparent)}.focus\:ring-white\/70:focus{--tw-ring-color:color-mix(in oklab,var(--color-white)70%,transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-\[\#e1e5e7\]:focus{--tw-ring-offset-color:#e1e5e7}.focus\:outline-hidden:focus{outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:-outline-offset-1:focus{outline-offset:-1px}.focus\:-outline-offset-2:focus{outline-offset:-2px}.focus\:outline-indigo-600:focus{outline-color:var(--color-indigo-600)}.focus\:outline-red-500:focus{outline-color:var(--color-red-500)}.focus\:outline-white:focus{outline-color:var(--color-white)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.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\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-600:focus-visible{outline-color:var(--color-indigo-600)}.focus-visible\:outline-sky-600:focus-visible{outline-color:var(--color-sky-600)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-900:active{background-color:var(--color-gray-900)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:text-gray-500:active{color:var(--color-gray-500)}.active\:text-gray-700:active{color:var(--color-gray-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.has-checked\:bg-lime-600:has(:checked){background-color:var(--color-lime-600)}.has-focus-visible\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-open\:block[data-open]{display:block}@media (hover:hover){.data-\[active\=false\]\:group-hover\:bg-\[hsl\(var\(--muted-foreground\)\/0\.45\)\][data-active=false]:is(:where(.group):hover *){background-color:hsl(var(--muted-foreground)/.45)}}.data-\[active\=true\]\:pointer-events-auto[data-active=true]{pointer-events:auto}.data-\[active\=true\]\:w-14[data-active=true]{width:calc(var(--spacing)*14)}.data-\[active\=true\]\:bg-\[hsl\(var\(--primary\)\)\][data-active=true]{background-color:hsl(var(--primary))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:opacity-100[data-active=true]{opacity:1}.data-\[active\=true\]\:delay-500[data-active=true]{transition-delay:.5s}.data-\[active\=true\]\:duration-500[data-active=true]{--tw-duration:.5s;transition-duration:.5s}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[60px\]\! *)[data-slot=content]{min-height:60px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[80px\]\! *)[data-slot=content]{min-height:80px!important}:is(.\*\*\:data-\[slot\=content\]\:min-h-\[120px\]\! *)[data-slot=content]{min-height:120px!important}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width<64rem){.max-lg\:hidden{display:none}}@media (width<48rem){.max-md\:flex-col{flex-direction:column}.max-md\:pt-6{padding-top:calc(var(--spacing)*6)}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-auto{margin-inline:auto}.sm\:-my-px{margin-block:-1px}.sm\:ms-6{margin-inline-start:calc(var(--spacing)*6)}.sm\:ms-10{margin-inline-start:calc(var(--spacing)*10)}.sm\:-mt-44{margin-top:calc(var(--spacing)*-44)}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-10{margin-top:calc(var(--spacing)*10)}.sm\:mt-20{margin-top:calc(var(--spacing)*20)}.sm\:mr-0{margin-right:calc(var(--spacing)*0)}.sm\:ml-0{margin-left:calc(var(--spacing)*0)}.sm\:ml-4{margin-left:calc(var(--spacing)*4)}.sm\:ml-6{margin-left:calc(var(--spacing)*6)}.sm\:ml-10{margin-left:calc(var(--spacing)*10)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.sm\:size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.sm\:h-14{height:calc(var(--spacing)*14)}.sm\:h-20{height:calc(var(--spacing)*20)}.sm\:h-\[7\.2rem\]{height:7.2rem}.sm\:w-3\/4{width:75%}.sm\:w-14{width:calc(var(--spacing)*14)}.sm\:w-20{width:calc(var(--spacing)*20)}.sm\:w-56{width:calc(var(--spacing)*56)}.sm\:w-\[26rem\]{width:26rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:max-w-xl{max-width:var(--container-xl)}.sm\:flex-1{flex:1}.sm\:flex-none{flex:none}.sm\:shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-2\.5{gap:calc(var(--spacing)*2.5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\: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(.sm\: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)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:p-12{padding:calc(var(--spacing)*12)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-10{padding-inline:calc(var(--spacing)*10)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-64{padding-block:calc(var(--spacing)*64)}.sm\:pt-0{padding-top:calc(var(--spacing)*0)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}.sm\:pt-16{padding-top:calc(var(--spacing)*16)}.sm\:pt-52{padding-top:calc(var(--spacing)*52)}.sm\:pt-80{padding-top:calc(var(--spacing)*80)}.sm\:pb-16{padding-bottom:calc(var(--spacing)*16)}.sm\:pl-20{padding-left:calc(var(--spacing)*20)}.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\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-sm\/6{font-size:var(--text-sm);line-height:calc(var(--spacing)*6)}}@media (width>=48rem){.md\:absolute{position:absolute}.md\:order-1{order:1}.md\:order-2{order:2}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-span-3{grid-row:span 3/span 3}.md\:mx-0{margin-inline:calc(var(--spacing)*0)}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:table-cell{display:table-cell}.md\:aspect-\[2\/1\]{aspect-ratio:2}.md\:h-80{height:calc(var(--spacing)*80)}.md\:h-96{height:calc(var(--spacing)*96)}.md\:h-\[500px\]{height:500px}.md\:w-1\/2{width:50%}.md\:w-2xl{width:var(--container-2xl)}.md\:w-3\/4{width:75%}.md\:w-4xl{width:var(--container-4xl)}.md\:w-6xl{width:var(--container-6xl)}.md\:w-\[220px\]{width:220px}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:max-w-80{max-width:calc(var(--spacing)*80)}.md\:max-w-\[420px\]{max-width:420px}.md\:min-w-64{min-width:calc(var(--spacing)*64)}.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-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-8{gap:calc(var(--spacing)*8)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--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)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:bottom-6{bottom:calc(var(--spacing)*6)}.lg\:left-6{left:calc(var(--spacing)*6)}.lg\:z-10{z-index:10}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-last{order:9999}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-2{grid-column-start:2}.lg\:mx-6{margin-inline:calc(var(--spacing)*6)}.lg\:mx-auto{margin-inline:auto}.lg\:ms-0{margin-inline-start:calc(var(--spacing)*0)}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:mt-24{margin-top:calc(var(--spacing)*24)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:table-cell{display:table-cell}.lg\:aspect-\[2\/1\]{aspect-ratio:2}.lg\:aspect-\[5\/4\]{aspect-ratio:5/4}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-8{height:calc(var(--spacing)*8)}.lg\:h-16{height:calc(var(--spacing)*16)}.lg\:h-96{height:calc(var(--spacing)*96)}.lg\:h-\[500px\]{height:500px}.lg\:h-\[600px\]{height:600px}.lg\:h-full{height:100%}.lg\:min-h-\[560px\]{min-height:560px}.lg\:w-2\/3{width:66.6667%}.lg\:w-3\/4{width:75%}.lg\:w-80{width:calc(var(--spacing)*80)}.lg\:w-\[12rem\]{width:12rem}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:max-w-\[calc\(\(100\%-2rem\)\/2\)\]{max-width:calc(50% - 1rem)}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.lg\:grid-cols-\[0\.68fr_0\.32fr\]{grid-template-columns:.68fr .32fr}.lg\:grid-cols-\[0\.72fr_0\.28fr\]{grid-template-columns:.72fr .28fr}.lg\:grid-cols-\[1\.2fr_0\.8fr\]{grid-template-columns:1.2fr .8fr}.lg\:grid-cols-\[1\.05fr_0\.95fr\]{grid-template-columns:1.05fr .95fr}.lg\:flex-col{flex-direction:column}.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\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-14{gap:calc(var(--spacing)*14)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-14>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*14)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*14)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\: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)))}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:bg-white\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-14{padding:calc(var(--spacing)*14)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-24{padding-block:calc(var(--spacing)*24)}.lg\:py-32{padding-block:calc(var(--spacing)*32)}.lg\:pt-0{padding-top:calc(var(--spacing)*0)}.lg\:pt-4{padding-top:calc(var(--spacing)*4)}.lg\:pt-16{padding-top:calc(var(--spacing)*16)}.lg\:pt-36{padding-top:calc(var(--spacing)*36)}.lg\:pr-4{padding-right:calc(var(--spacing)*4)}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}.lg\:pr-12{padding-right:calc(var(--spacing)*12)}.lg\:pb-10{padding-bottom:calc(var(--spacing)*10)}.lg\:pl-0{padding-left:calc(var(--spacing)*0)}.lg\:pl-14{padding-left:calc(var(--spacing)*14)}.lg\:pl-16{padding-left:calc(var(--spacing)*16)}.lg\:text-left{text-align:left}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-\[\#FF2D20\]{color:#ff2d20}.lg\: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)}.lg\: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,)}.default\:lg\:col-span-6:default{grid-column:span 6/span 6}}@media (width>=80rem){.xl\:order-0{order:0}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:mt-0{margin-top:calc(var(--spacing)*0)}.xl\:grid{display:grid}.xl\:w-1\/2{width:50%}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:pt-80{padding-top:calc(var(--spacing)*80)}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.ltr\:origin-top-left:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:0 0}.ltr\:origin-top-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){transform-origin:100% 0}.rtl\:origin-top-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:0 0}.rtl\:origin-top-right:where(:dir(rtl),[dir=rtl],[dir=rtl] *){transform-origin:100% 0}.rtl\:flex-row-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *){flex-direction:row-reverse}:where(.rtl\:space-x-reverse:where(:dir(rtl),[dir=rtl],[dir=rtl] *)>:not(:last-child)){--tw-space-x-reverse:1}@media (prefers-color-scheme:dark){.dark\:block{display:block}.dark\:hidden{display:none}:where(.dark\:divide-zinc-700>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark\:border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.dark\:border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}.dark\:border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500)60%,transparent)}.dark\:border-amber-700{border-color:var(--color-amber-700)}.dark\:border-amber-800{border-color:var(--color-amber-800)}.dark\:border-blue-400{border-color:var(--color-blue-400)}.dark\:border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}.dark\:border-blue-700{border-color:var(--color-blue-700)}.dark\:border-blue-800{border-color:var(--color-blue-800)}.dark\:border-gray-500{border-color:var(--color-gray-500)}.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-gray-900{border-color:var(--color-gray-900)}.dark\:border-green-800{border-color:var(--color-green-800)}.dark\:border-indigo-600{border-color:var(--color-indigo-600)}.dark\:border-neutral-800{border-color:var(--color-neutral-800)}.dark\:border-orange-800{border-color:var(--color-orange-800)}.dark\:border-purple-800{border-color:var(--color-purple-800)}.dark\:border-red-800{border-color:var(--color-red-800)}.dark\:border-teal-800{border-color:var(--color-teal-800)}.dark\:border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark\:border-zinc-600{border-color:var(--color-zinc-600)}.dark\:border-zinc-700{border-color:var(--color-zinc-700)}.dark\:border-zinc-800{border-color:var(--color-zinc-800)}.dark\:border-l-red-500{border-left-color:var(--color-red-500)}.dark\:bg-amber-900{background-color:var(--color-amber-900)}.dark\:bg-amber-900\/20{background-color:color-mix(in oklab,var(--color-amber-900)20%,transparent)}.dark\:bg-amber-950\/20{background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}.dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}.dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}.dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark\:bg-blue-950\/20{background-color:color-mix(in oklab,var(--color-blue-950)20%,transparent)}.dark\:bg-blue-950\/30{background-color:color-mix(in oklab,var(--color-blue-950)30%,transparent)}.dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:bg-gray-900\/80{background-color:color-mix(in oklab,var(--color-gray-900)80%,transparent)}.dark\:bg-gray-950\/95{background-color:color-mix(in oklab,var(--color-gray-950)95%,transparent)}.dark\:bg-green-900\/10{background-color:color-mix(in oklab,var(--color-green-900)10%,transparent)}.dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}.dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark\:bg-indigo-900\/20{background-color:color-mix(in oklab,var(--color-indigo-900)20%,transparent)}.dark\:bg-indigo-900\/50{background-color:color-mix(in oklab,var(--color-indigo-900)50%,transparent)}.dark\:bg-lime-900\/20{background-color:color-mix(in oklab,var(--color-lime-900)20%,transparent)}.dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark\:bg-orange-900\/10{background-color:color-mix(in oklab,var(--color-orange-900)10%,transparent)}.dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}.dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}.dark\:bg-orange-950\/30{background-color:color-mix(in oklab,var(--color-orange-950)30%,transparent)}.dark\:bg-pink-900\/20{background-color:color-mix(in oklab,var(--color-pink-900)20%,transparent)}.dark\:bg-purple-900\/10{background-color:color-mix(in oklab,var(--color-purple-900)10%,transparent)}.dark\:bg-purple-900\/20{background-color:color-mix(in oklab,var(--color-purple-900)20%,transparent)}.dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}.dark\:bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}.dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}.dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950)30%,transparent)}.dark\:bg-teal-900\/20{background-color:color-mix(in oklab,var(--color-teal-900)20%,transparent)}.dark\:bg-teal-900\/30{background-color:color-mix(in oklab,var(--color-teal-900)30%,transparent)}.dark\:bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}.dark\:bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}.dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}.dark\:bg-zinc-600{background-color:var(--color-zinc-600)}.dark\:bg-zinc-700{background-color:var(--color-zinc-700)}.dark\:bg-zinc-800{background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/50{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:bg-zinc-900{background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/60{background-color:color-mix(in oklab,var(--color-zinc-900)60%,transparent)}.dark\:bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900)90%,transparent)}.dark\:bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.dark\:from-blue-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:from-green-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-900)20%,transparent);--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))}.dark\:from-purple-900\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-900)20%,transparent);--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))}.dark\: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))}.dark\:from-zinc-900{--tw-gradient-from:var(--color-zinc-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))}.dark\:from-zinc-950{--tw-gradient-from:var(--color-zinc-950);--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))}.dark\:via-slate-950{--tw-gradient-via:var(--color-slate-950);--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)}.dark\:via-zinc-900{--tw-gradient-via:var(--color-zinc-900);--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)}.dark\:to-blue-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-blue-900)20%,transparent);--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))}.dark\:to-emerald-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-900)20%,transparent);--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))}.dark\:to-emerald-950{--tw-gradient-to:var(--color-emerald-950);--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))}.dark\:to-indigo-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-900)20%,transparent);--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))}.dark\:to-pink-900\/20{--tw-gradient-to:color-mix(in oklab,var(--color-pink-900)20%,transparent);--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))}.dark\:to-zinc-800{--tw-gradient-to:var(--color-zinc-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))}.dark\:to-zinc-900{--tw-gradient-to:var(--color-zinc-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))}.dark\:text-amber-200{color:var(--color-amber-200)}.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-blue-600{color:var(--color-blue-600)}.dark\:text-emerald-100{color:var(--color-emerald-100)}.dark\:text-emerald-300{color:var(--color-emerald-300)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-emerald-600{color:var(--color-emerald-600)}.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-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-800{color:var(--color-gray-800)}.dark\:text-gray-950{color:var(--color-gray-950)}.dark\:text-green-100{color:var(--color-green-100)}.dark\:text-green-200{color:var(--color-green-200)}.dark\:text-green-300{color:var(--color-green-300)}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-green-600{color:var(--color-green-600)}.dark\:text-indigo-200{color:var(--color-indigo-200)}.dark\:text-indigo-300{color:var(--color-indigo-300)}.dark\:text-indigo-400{color:var(--color-indigo-400)}.dark\:text-lime-400{color:var(--color-lime-400)}.dark\:text-orange-100{color:var(--color-orange-100)}.dark\:text-orange-300{color:var(--color-orange-300)}.dark\:text-orange-400{color:var(--color-orange-400)}.dark\:text-orange-600{color:var(--color-orange-600)}.dark\:text-pink-400{color:var(--color-pink-400)}.dark\:text-purple-100{color:var(--color-purple-100)}.dark\:text-purple-200{color:var(--color-purple-200)}.dark\:text-purple-300{color:var(--color-purple-300)}.dark\:text-purple-400{color:var(--color-purple-400)}.dark\:text-purple-600{color:var(--color-purple-600)}.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-red-600{color:var(--color-red-600)}.dark\:text-sky-300{color:var(--color-sky-300)}.dark\:text-sky-400{color:var(--color-sky-400)}.dark\:text-teal-400{color:var(--color-teal-400)}.dark\:text-white{color:var(--color-white)}.dark\:text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}.dark\:text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:text-yellow-100{color:var(--color-yellow-100)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-zinc-100{color:var(--color-zinc-100)}.dark\:text-zinc-200{color:var(--color-zinc-200)}.dark\:text-zinc-300{color:var(--color-zinc-300)}.dark\:text-zinc-400{color:var(--color-zinc-400)}.dark\:text-zinc-500{color:var(--color-zinc-500)}.dark\:text-zinc-600{color:var(--color-zinc-600)}.dark\: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)}.dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark\:ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.dark\:ring-offset-zinc-800{--tw-ring-offset-color:var(--color-zinc-800)}.dark\:file\:bg-zinc-700::file-selector-button{background-color:var(--color-zinc-700)}.dark\:odd\:bg-zinc-800\/30:nth-child(odd){background-color:color-mix(in oklab,var(--color-zinc-800)30%,transparent)}.dark\:even\:bg-zinc-800\/50:nth-child(2n){background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}@media (hover:hover){.dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark\:hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.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-gray-800\/75:hover{background-color:color-mix(in oklab,var(--color-gray-800)75%,transparent)}.dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white:hover{background-color:var(--color-white)}.dark\:hover\:bg-white\/\[7\%\]:hover{background-color:color-mix(in oklab,var(--color-white)7%,transparent)}.dark\:hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}.dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.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-400:hover{color:var(--color-gray-400)}.dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark\:hover\:text-white:hover{color:var(--color-white)}.dark\:hover\:text-white\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}.dark\:hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}.dark\:hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-color:var(--color-zinc-700)}.dark\:hover\:file\:bg-zinc-600:hover::file-selector-button{background-color:var(--color-zinc-600)}}.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\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark\:focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.dark\:focus\:border-indigo-600:focus{border-color:var(--color-indigo-600)}.dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark\:focus\:bg-indigo-900:focus{background-color:var(--color-indigo-900)}.dark\:focus\:bg-white:focus{background-color:var(--color-white)}.dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark\:focus\:text-gray-400:focus{color:var(--color-gray-400)}.dark\:focus\:text-gray-500:focus{color:var(--color-gray-500)}.dark\:focus\:text-indigo-200:focus{color:var(--color-indigo-200)}.dark\:focus\:ring-indigo-600:focus{--tw-ring-color:var(--color-indigo-600)}.dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-color:#ff2d20}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-color:var(--color-white)}.dark\:active\:bg-gray-300:active{background-color:var(--color-gray-300)}.dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark\:active\:text-gray-300:active{color:var(--color-gray-300)}}@media print{.print\:hidden{display:none}}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer,.\[\&_\.recharts-sector\]\:outline-none .recharts-sector{--tw-outline-style:none;outline-style:none}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:#0000}.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{--tw-outline-style:none;outline-style:none}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>svg\]\:size-5>div>svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:h-2\.5>svg{height:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:h-3>svg{height:calc(var(--spacing)*3)}.\[\&\>svg\]\:w-2\.5>svg{width:calc(var(--spacing)*2.5)}.\[\&\>svg\]\:w-3>svg{width:calc(var(--spacing)*3)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}:where(.\[\:where\(\&\)\]\:size-4){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}:where(.\[\:where\(\&\)\]\:size-5){width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}:where(.\[\:where\(\&\)\]\:size-6){width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}}.text-hero{font-size:clamp(3.6rem,4.2vw,7.8rem)!important}.text-section-title{line-height:.85em;font-size:clamp(2.1rem,3.9vw,3.9rem)!important}.text-xl{font-size:clamp(1.3rem,2.2vw,2.2rem)!important}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/inter/inter-v20-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/inter/inter-v20-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/inter/inter-v20-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/inter/inter-v20-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/inter/inter-v20-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:400;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:500;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:600;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:IBM Plex Sans;font-style:normal;font-weight:700;src:url(/fonts/ibm-plex-sans/ibm-plex-sans-v23-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:300;src:url(/fonts/merriweather/merriweather-v33-latin-300.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:400;src:url(/fonts/merriweather/merriweather-v33-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:Merriweather;font-style:normal;font-weight:700;src:url(/fonts/merriweather/merriweather-v33-latin-700.woff2)format("woff2")}@font-face{font-display:swap;font-family:Ephesis;font-style:normal;font-weight:400;src:url(/fonts/ephesis/ephesis-v11-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:400;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-regular.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:500;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-500.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:600;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-600.woff2)format("woff2")}@font-face{font-display:swap;font-family:EB Garamond;font-style:normal;font-weight:700;src:url(/fonts/eb-garamond/eb-garamond-v32-latin-700.woff2)format("woff2")}*,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,a,[role=button],input[type=submit],input[type=button],input[type=reset],summary,.clickable{cursor:pointer}h1,h2,h3,h4,h5,h6{letter-spacing:-.025em;font-weight:500;font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.text-hero{letter-spacing:-.025em;font-size:clamp(2.6rem,3.5vw,3.6rem);font-weight:300;line-height:1.1}.text-hero-alt{letter-spacing:-.025em;font-size:clamp(2rem,3vw,3rem);font-weight:300;line-height:1.1}.text-section-title{letter-spacing:-.025em;font-size:clamp(1.6rem,3vw,3rem);font-weight:300;line-height:1.3em}.text-large{font-size:clamp(1.1rem,2vw,1.2rem);line-height:1.625}.border-t{border-top-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border{border-width:1px!important}.btn-primary{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary:hover{background-color:hsl(var(--primary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-primary-accent{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--primary)),hsl(var(--primary-light)))!important}.btn-primary-accent:hover{background-color:hsl(var(--accent));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--primary-light)),hsl(var(--primary)))!important}.btn-secondary{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary:hover{background-color:hsl(var(--secondary-dark));box-shadow:0 10px 15px -3px #0000001a;background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent{background-color:hsl(var(--secondary));color:hsl(var(--secondary-foreground));border:1px solid hsl(var(--border));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;background:linear-gradient(145deg,hsl(var(--secondary)),hsl(var(--secondary-dark)))!important}.btn-secondary-accent:hover{background-color:hsl(var(--accent));background:linear-gradient(145deg,hsl(var(--secondary-dark)),hsl(var(--secondary)))!important}.btn-secondary-accent.small{padding:.75rem 1.25rem;font-size:.95rem}.btn-accent{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));cursor:pointer;border-radius:.5rem;padding:.75rem 2rem;font-weight:500;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-block;box-shadow:0 4px 6px -1px #0000001a;background:linear-gradient(145deg,hsl(var(--accent)),hsl(var(--accent-dark)))!important}.btn-accent:hover{color:hsl(var(--accent-foreground));box-shadow:var(--shadow-accent-glow);background:linear-gradient(145deg,hsl(var(--accent-dark)),hsl(var(--accent)))!important}.form-field{width:100%;color:hsl(var(--foreground));background-color:hsl(var(--card));border:1px solid hsl(var(--border));box-shadow:inset 0 1px 2px hsl(var(--foreground)/.04);border-radius:.6rem;padding:.65rem .9rem;font-size:.95rem;line-height:1.5;transition:border-color .2s,box-shadow .2s,background-color .2s;display:block}.form-field::placeholder{color:hsl(var(--muted-foreground)/.7)}.form-field:hover{border-color:hsl(var(--primary)/.45)}.form-field:focus,.form-field:focus-visible{border-color:hsl(var(--secondary));box-shadow:0 0 0 3px hsl(var(--secondary)/.22);background-color:hsl(var(--background));outline:none}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,");background-position:right .9rem center;background-repeat:no-repeat;background-size:1.1rem 1.1rem;padding-right:2.6rem}.form-select optgroup{color:hsl(var(--primary));font-style:normal;font-weight:600}.form-select option{color:hsl(var(--foreground));font-weight:400}.card-elevated{background-color:hsl(var(--card));box-shadow:var(--shadow-card);border:1px solid hsl(var(--border)/.5);border-radius:1rem}.section-padding{padding-top:4rem;padding-bottom:4rem}@media (width>=1024px){.section-padding{padding-top:6rem;padding-bottom:6rem}}.section-dark{background-color:hsl(var(--dark-bg));color:hsl(var(--dark-text))}.cta-band{--cta-band-gradient:linear-gradient(100deg,hsl(var(--primary-dark))0%,hsl(var(--primary))42%,hsl(var(--cta-band-end,var(--secondary-dark)))100%);background:var(--cta-band-gradient);position:relative;overflow:hidden}.cta-band:before{content:"";background:linear-gradient(90deg,transparent 0%,hsl(var(--cta-band-line,0 0% 100%)/.6)50%,transparent 100%);height:1px;position:absolute;top:0;left:0;right:0}.cta-band .text-primary{color:hsl(var(--secondary))}section.bg-secondary .text-secondary{color:hsl(var(--primary))}.cta-band:after{content:"";pointer-events:none;background:linear-gradient(165deg,#ffffff12,#0000 48%);position:absolute;top:0;right:0;bottom:0;left:0}.section-footer{background-color:hsl(var(--footer-bg,var(--dark-bg)));color:hsl(var(--footer-fg,var(--dark-text)))}.text-footer-muted{color:hsl(var(--footer-muted,var(--dark-muted)))}.border-footer-line\/30{border-color:hsl(var(--footer-line,var(--dark-muted))/.3)}.text-clay{color:hsl(var(--clay,var(--muted-foreground)))}.hover-bg-primary-light:hover{background-color:hsl(var(--primary-light))}.container-padding{max-width:80rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-padding{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-padding{padding-left:2rem;padding-right:2rem}}.container-narrow{max-width:56rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}@media (width>=640px){.container-narrow{padding-left:1.5rem;padding-right:1.5rem}}@media (width>=1024px){.container-narrow{padding-left:2rem;padding-right:2rem}}.spacing-section>*+*{margin-top:2rem}.spacing-content>*+*{margin-top:1.5rem}.spacing-small>*+*{margin-top:1rem}.bg-background{background-color:hsl(var(--background))}.text-foreground{color:hsl(var(--foreground))}.bg-card{background-color:hsl(var(--card))}.text-card-foreground{color:hsl(var(--card-foreground))}.border-border{border-color:hsl(var(--border))}.bg-secondary{background:linear-gradient(180deg,hsl(var(--secondary)),hsl(var(--secondary),.4));position:relative}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.bg-accent{background-color:hsl(var(--accent))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.bg-muted{background-color:hsl(var(--muted))}.bg-secondary\/10{background-color:hsl(var(--secondary)/.1)}.bg-secondary\/15{background-color:hsl(var(--secondary)/.15)}.bg-secondary\/20{background-color:hsl(var(--secondary)/.2)}.bg-card\/95{background-color:hsl(var(--card)/.95)}.border-border\/50{border-color:hsl(var(--border)/.5)}.text-dark-muted{color:hsl(var(--dark-muted))}.border-dark-muted\/30{border-color:hsl(var(--dark-muted)/.3)}.text-dark-text{color:hsl(var(--dark-text))}.bg-dark-bg{background-color:hsl(var(--dark-bg))}.bg-hero-container{background-color:hsl(var(--hero-container))}.shadow-elevated{box-shadow:var(--shadow-elevated)}.shadow-card{box-shadow:var(--shadow-card)}.shadow-accent-glow{box-shadow:var(--shadow-accent-glow)}.text-primary{color:hsl(var(--primary))}.text-secondary{color:hsl(var(--secondary))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.border-primary{border-color:hsl(var(--primary))}.border-secondary{border-color:hsl(var(--secondary))}.hover-text-secondary:hover{color:hsl(var(--secondary))}.hover-text-primary:hover{color:hsl(var(--primary))}.hover-bg-primary:hover{background-color:hsl(var(--primary))}.hover-bg-secondary:hover{background-color:hsl(var(--secondary))}.hover-border-secondary:hover{border-color:hsl(var(--secondary))}.hover-shadow-accent-glow:hover{box-shadow:var(--shadow-accent-glow)}.topbar-normal{background-color:hsl(var(--muted))}.header-sticky{z-index:50;background-color:hsl(var(--background)/.8);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid hsl(var(--border));transition:all .3s ease-in-out;position:fixed;top:0;left:0;right:0}.header-normal{border-bottom:1px solid hsl(var(--border)/.3);transition:all .3s ease-in-out;position:relative}.bg-muted\/20{background-color:hsl(var(--muted)/.2)}.border-border\/30{border-color:hsl(var(--border)/.3)}.font-secondary{font-family:var(--font-secondary,"Inter"),var(--font-primary,"Inter"),system-ui,-apple-system,sans-serif}.scroll-animate{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}.scroll-animate.is-visible{opacity:1}.fade-in{opacity:0;will-change:opacity;transition:opacity .8s cubic-bezier(.25,.46,.45,.94)}.fade-in.is-visible{opacity:1}.slide-up{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(30px)}.slide-up.is-visible{opacity:1;transform:translateY(0)}.slide-down{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translateY(-30px)}.slide-down.is-visible{opacity:1;transform:translateY(0)}.slide-right{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(-30px)}.slide-right.is-visible{opacity:1;transform:translate(0)}.slide-left{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:translate(30px)}.slide-left.is-visible{opacity:1;transform:translate(0)}.scale-in{opacity:0;will-change:opacity,transform;transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94);transform:scale(.97)}.scale-in.is-visible{opacity:1;transform:scale(1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-500{transition-delay:.5s}.delay-600{transition-delay:.6s}.delay-700{transition-delay:.7s}.delay-800{transition-delay:.8s}.delay-900{transition-delay:.9s}.delay-1000{transition-delay:1s}@media (prefers-reduced-motion:reduce){.scroll-animate,.fade-in,.slide-up,.slide-right,.slide-left,.scale-in{opacity:1!important;transition:none!important;transform:none!important}}.shadow-elegant{box-shadow:0 10px 30px -10px hsl(var(--secondary)/.2)}.shadow-elegant-white{box-shadow:0 10px 30px -10px #fff3}.shadow-white{box-shadow:0 10px 30px -10px #fff6}.elegant-shadow-card{box-shadow:0 2px 8px -2px #00000014,0 4px 10px hsl(var(--secondary))}.shadow-premium{box-shadow:0 20px 60px -15px hsl(var(--secondary)/.3)}.glow-soft{box-shadow:0 0 10px hsl(var(--secondary)/.15),0 0 20px hsl(var(--secondary)/.1),0 4px 10px -4px hsl(var(--secondary)/.2)}.glow-medium{box-shadow:0 0 15px hsl(var(--secondary)/.25),0 0 30px hsl(var(--secondary)/.15),0 5px 10px -5px hsl(var(--secondary)/.3)}.glow-strong{box-shadow:0 0 30px hsl(var(--secondary)/.35),0 0 60px hsl(var(--secondary)/.2),0 0 90px hsl(var(--secondary-dark)/.1),0 10px 10px -10px hsl(var(--secondary)/.4)}.icon-secondary-linear{background-color:hsl(var(--secondary)/.1);background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative;color:hsl(var(--secondary-foreground))!important}.variante-glass-flow{scroll-behavior:smooth}.variante-glass-flow *{will-change:auto}.variante-glass-flow section,.variante-glass-flow .section-container{background:linear-gradient(135deg,hsl(var(--background)),hsl(var(--background)/90%));position:relative}.variante-glass-flow section.cta-band{background:var(--cta-band-gradient);position:relative}.variante-glass-flow section.bg-accent{background:linear-gradient(135deg,hsl(var(--accent)/.5),hsl(var(--accent-dark)/.5));position:relative}.variante-glass-flow section.bg-secondary{background:linear-gradient(135deg,hsl(var(--secondary)),hsl(var(--secondary-dark)));position:relative}.variante-glass-flow div.bg-hero-container{background:linear-gradient(135deg,hsl(var(--hero-container)),hsl(var(--hero-container-dark)));border:1px solid #ffffffe6;position:relative;box-shadow:0 10px 20px 5px #0000001a}.variante-glass-flow .card,.variante-glass-flow [class*=card],.variante-glass-flow .bg-card{background:linear-gradient(145deg,hsl(var(--card)),hsl(var(--card))40%,hsl(var(--card)/.92));border:1px solid #ffffffe6;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .4s cubic-bezier(.34,1.56,.64,1),filter .3s;position:relative;box-shadow:0 0 0 1px #00000008,0 1px 1px #00000005,0 2px 3px #00000006,0 4px 6px #00000008,0 8px 12px #0000000a,0 12px 20px #0000000b,inset 0 1px 2px #fffc,inset 0 -1px 1px #00000005}.variante-glass-flow .card:hover,.variante-glass-flow [class*=card]:hover{filter:brightness(1.01);transform:translateY(-2px)scale(1.005);box-shadow:0 0 0 1px #0000000a,0 2px 4px #00000008,0 4px 8px #0000000a,0 8px 16px #0000000d,0 16px 24px #00000012,0 24px 40px #00000014,0 32px 64px #0000000f,inset 0 1px 3px #ffffffe6,inset 0 -1px 2px #00000008}.variante-glass-flow button,.variante-glass-flow .btn,.variante-glass-flow .btn-secondary,.variante-glass-flow a[class*=btn],.variante-glass-flow [role=button]{isolation:isolate;transition:transform .2s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1),filter .2s;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 2px 4px #0000000f,0 4px 8px #00000012,0 8px 16px #0000000d}.variante-glass-flow button:hover,.variante-glass-flow .btn:hover,.variante-glass-flow .btn-secondary:hover,.variante-glass-flow a[class*=btn]:hover,.variante-glass-flow [role=button]:hover{box-shadow:0 2px 4px #0000000f,0 4px 8px #00000014,0 8px 16px #0000001a,0 16px 32px #00000014,0 0 40px hsl(var(--secondary)/.3);filter:brightness(1.08);transform:translateY(-2px)}.variante-glass-flow .sidebar-nav button,.variante-glass-flow .sidebar-nav button:hover{box-shadow:none;filter:none;isolation:auto;transition:none;overflow:visible;transform:none}.origin-map{width:100%;height:auto;font-family:inherit;overflow:visible}.origin-map-region{fill:hsl(var(--secondary)/.06);stroke:hsl(var(--secondary)/.45);stroke-width:1.5px;stroke-dasharray:4 6}.origin-map-region-label{fill:hsl(var(--secondary-deep,var(--secondary)));letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600}.origin-map-spoke{stroke:hsl(var(--secondary));stroke-width:2px;stroke-dasharray:6 6;opacity:.7}.origin-map-hub{fill:hsl(var(--secondary))}.origin-map-hub-ring{fill:hsl(var(--secondary)/.18)}.origin-map-dot{fill:hsl(var(--primary));stroke:hsl(var(--card));stroke-width:3px}.origin-map-label{fill:hsl(var(--foreground));font-size:15px;font-weight:500}.origin-map-sublabel{fill:hsl(var(--muted-foreground));font-size:12px}.origin-map-distance{fill:hsl(var(--muted-foreground));text-anchor:middle;stroke:hsl(var(--card));stroke-width:5px;paint-order:stroke;font-size:11px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-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:""} diff --git a/public/favicon/android-icon-144x144.png b/public/favicon/android-icon-144x144.png index 4d59c540..52126729 100644 Binary files a/public/favicon/android-icon-144x144.png and b/public/favicon/android-icon-144x144.png differ diff --git a/public/favicon/android-icon-192x192.png b/public/favicon/android-icon-192x192.png index 338c769a..5db2bf34 100644 Binary files a/public/favicon/android-icon-192x192.png and b/public/favicon/android-icon-192x192.png differ diff --git a/public/favicon/android-icon-36x36.png b/public/favicon/android-icon-36x36.png index 31171287..9711cc1f 100644 Binary files a/public/favicon/android-icon-36x36.png and b/public/favicon/android-icon-36x36.png differ diff --git a/public/favicon/android-icon-48x48.png b/public/favicon/android-icon-48x48.png index 9fe5826b..855c2c14 100644 Binary files a/public/favicon/android-icon-48x48.png and b/public/favicon/android-icon-48x48.png differ diff --git a/public/favicon/android-icon-72x72.png b/public/favicon/android-icon-72x72.png index 94f262e2..2a321e28 100644 Binary files a/public/favicon/android-icon-72x72.png and b/public/favicon/android-icon-72x72.png differ diff --git a/public/favicon/android-icon-96x96.png b/public/favicon/android-icon-96x96.png index f3afd5d5..68676dd8 100644 Binary files a/public/favicon/android-icon-96x96.png and b/public/favicon/android-icon-96x96.png differ diff --git a/public/favicon/apple-icon-114x114.png b/public/favicon/apple-icon-114x114.png index 0f5c644e..76bfc7aa 100644 Binary files a/public/favicon/apple-icon-114x114.png and b/public/favicon/apple-icon-114x114.png differ diff --git a/public/favicon/apple-icon-120x120.png b/public/favicon/apple-icon-120x120.png index e1e9b4d3..201c1b6b 100644 Binary files a/public/favicon/apple-icon-120x120.png and b/public/favicon/apple-icon-120x120.png differ diff --git a/public/favicon/apple-icon-144x144.png b/public/favicon/apple-icon-144x144.png index f81b3bf3..3019c5e1 100644 Binary files a/public/favicon/apple-icon-144x144.png and b/public/favicon/apple-icon-144x144.png differ diff --git a/public/favicon/apple-icon-152x152.png b/public/favicon/apple-icon-152x152.png index b3ce7178..999c4aa1 100644 Binary files a/public/favicon/apple-icon-152x152.png and b/public/favicon/apple-icon-152x152.png differ diff --git a/public/favicon/apple-icon-180x180.png b/public/favicon/apple-icon-180x180.png index acf55a81..d0e44c56 100644 Binary files a/public/favicon/apple-icon-180x180.png and b/public/favicon/apple-icon-180x180.png differ diff --git a/public/favicon/apple-icon-57x57.png b/public/favicon/apple-icon-57x57.png index bd69e12b..d0812f1f 100644 Binary files a/public/favicon/apple-icon-57x57.png and b/public/favicon/apple-icon-57x57.png differ diff --git a/public/favicon/apple-icon-60x60.png b/public/favicon/apple-icon-60x60.png index 8ab2dba2..5e527983 100644 Binary files a/public/favicon/apple-icon-60x60.png and b/public/favicon/apple-icon-60x60.png differ diff --git a/public/favicon/apple-icon-72x72.png b/public/favicon/apple-icon-72x72.png index 94f262e2..334084ed 100644 Binary files a/public/favicon/apple-icon-72x72.png and b/public/favicon/apple-icon-72x72.png differ diff --git a/public/favicon/apple-icon-76x76.png b/public/favicon/apple-icon-76x76.png index f79c946a..b04b7055 100644 Binary files a/public/favicon/apple-icon-76x76.png and b/public/favicon/apple-icon-76x76.png differ diff --git a/public/favicon/apple-icon-precomposed.png b/public/favicon/apple-icon-precomposed.png index 3b0de1af..87337674 100644 Binary files a/public/favicon/apple-icon-precomposed.png and b/public/favicon/apple-icon-precomposed.png differ diff --git a/public/favicon/apple-icon.png b/public/favicon/apple-icon.png index 3b0de1af..87337674 100644 Binary files a/public/favicon/apple-icon.png and b/public/favicon/apple-icon.png differ diff --git a/public/favicon/favicon-16x16.png b/public/favicon/favicon-16x16.png index 6f20373d..d12ce017 100644 Binary files a/public/favicon/favicon-16x16.png and b/public/favicon/favicon-16x16.png differ diff --git a/public/favicon/favicon-32x32.png b/public/favicon/favicon-32x32.png index 7bc484a1..126c2ab3 100644 Binary files a/public/favicon/favicon-32x32.png and b/public/favicon/favicon-32x32.png differ diff --git a/public/favicon/favicon-96x96.png b/public/favicon/favicon-96x96.png index 2140f245..68676dd8 100644 Binary files a/public/favicon/favicon-96x96.png and b/public/favicon/favicon-96x96.png differ diff --git a/public/favicon/favicon.ico b/public/favicon/favicon.ico index c949cadb..11bdea25 100644 Binary files a/public/favicon/favicon.ico and b/public/favicon/favicon.ico differ diff --git a/public/favicon/ms-icon-144x144.png b/public/favicon/ms-icon-144x144.png index f81b3bf3..52126729 100644 Binary files a/public/favicon/ms-icon-144x144.png and b/public/favicon/ms-icon-144x144.png differ diff --git a/public/favicon/ms-icon-150x150.png b/public/favicon/ms-icon-150x150.png index 5720d210..f0255e1c 100644 Binary files a/public/favicon/ms-icon-150x150.png and b/public/favicon/ms-icon-150x150.png differ diff --git a/public/favicon/ms-icon-310x310.png b/public/favicon/ms-icon-310x310.png index 4ba01825..dd42c76d 100644 Binary files a/public/favicon/ms-icon-310x310.png and b/public/favicon/ms-icon-310x310.png differ diff --git a/public/favicon/ms-icon-70x70.png b/public/favicon/ms-icon-70x70.png index a242a181..13d3fbe0 100644 Binary files a/public/favicon/ms-icon-70x70.png and b/public/favicon/ms-icon-70x70.png differ diff --git a/public/img/assets/b2in/marcel-scheibe.jpg b/public/img/assets/b2in/marcel-scheibe.jpg index 6ba9c975..73842153 100644 Binary files a/public/img/assets/b2in/marcel-scheibe.jpg and b/public/img/assets/b2in/marcel-scheibe.jpg differ diff --git a/public/img/assets/b2in/marcel-scheibe.webp b/public/img/assets/b2in/marcel-scheibe.webp deleted file mode 100644 index 2c91d724..00000000 Binary files a/public/img/assets/b2in/marcel-scheibe.webp and /dev/null differ diff --git a/public/img/assets/b2in/slideshow/cabinet-ankleide-solitaer-eiche-tano.webp b/public/img/assets/b2in/slideshow/cabinet-ankleide-solitaer-eiche-tano.webp new file mode 100644 index 00000000..809b8137 Binary files /dev/null and b/public/img/assets/b2in/slideshow/cabinet-ankleide-solitaer-eiche-tano.webp differ diff --git a/public/img/assets/b2in/slideshow/cabinet-dachschraegenschrank-filo-cashmere.webp b/public/img/assets/b2in/slideshow/cabinet-dachschraegenschrank-filo-cashmere.webp new file mode 100644 index 00000000..f257f36d Binary files /dev/null and b/public/img/assets/b2in/slideshow/cabinet-dachschraegenschrank-filo-cashmere.webp differ diff --git a/public/img/assets/b2in/slideshow/cabinet-flur-schrank-eiche-tano.webp b/public/img/assets/b2in/slideshow/cabinet-flur-schrank-eiche-tano.webp new file mode 100644 index 00000000..8112d4ef Binary files /dev/null and b/public/img/assets/b2in/slideshow/cabinet-flur-schrank-eiche-tano.webp differ diff --git a/public/img/assets/b2in/slideshow/cabinet-schlafzimmer-wandschrank-filo-cashmere.webp b/public/img/assets/b2in/slideshow/cabinet-schlafzimmer-wandschrank-filo-cashmere.webp new file mode 100644 index 00000000..d5b9db59 Binary files /dev/null and b/public/img/assets/b2in/slideshow/cabinet-schlafzimmer-wandschrank-filo-cashmere.webp differ diff --git a/public/img/assets/b2in/slideshow/februe-active-2-0-buero.webp b/public/img/assets/b2in/slideshow/februe-active-2-0-buero.webp new file mode 100644 index 00000000..efe9a534 Binary files /dev/null and b/public/img/assets/b2in/slideshow/februe-active-2-0-buero.webp differ diff --git a/public/img/assets/b2in/slideshow/februe-elements-soul-grossraum.webp b/public/img/assets/b2in/slideshow/februe-elements-soul-grossraum.webp new file mode 100644 index 00000000..99e62efc Binary files /dev/null and b/public/img/assets/b2in/slideshow/februe-elements-soul-grossraum.webp differ diff --git a/public/img/assets/b2in/slideshow/rotpunkt-bad-mk04.webp b/public/img/assets/b2in/slideshow/rotpunkt-bad-mk04.webp new file mode 100644 index 00000000..5936630c Binary files /dev/null and b/public/img/assets/b2in/slideshow/rotpunkt-bad-mk04.webp differ diff --git a/public/img/assets/b2in/slideshow/rotpunkt-fenix-house.webp b/public/img/assets/b2in/slideshow/rotpunkt-fenix-house.webp new file mode 100644 index 00000000..d7ddc181 Binary files /dev/null and b/public/img/assets/b2in/slideshow/rotpunkt-fenix-house.webp differ diff --git a/public/img/assets/b2in/slideshow/rotpunkt-kueche-mk01.webp b/public/img/assets/b2in/slideshow/rotpunkt-kueche-mk01.webp new file mode 100644 index 00000000..b66eaedf Binary files /dev/null and b/public/img/assets/b2in/slideshow/rotpunkt-kueche-mk01.webp differ diff --git a/public/img/assets/b2in/slideshow/rotpunkt-kueche-mk06.webp b/public/img/assets/b2in/slideshow/rotpunkt-kueche-mk06.webp new file mode 100644 index 00000000..73b74d11 Binary files /dev/null and b/public/img/assets/b2in/slideshow/rotpunkt-kueche-mk06.webp differ diff --git a/public/img/assets/b2in/slideshow/rotpunkt-kueche-mk10.webp b/public/img/assets/b2in/slideshow/rotpunkt-kueche-mk10.webp new file mode 100644 index 00000000..bd62678d Binary files /dev/null and b/public/img/assets/b2in/slideshow/rotpunkt-kueche-mk10.webp differ diff --git a/public/img/assets/marken/cabinet.svg b/public/img/assets/marken/cabinet.svg new file mode 100644 index 00000000..79dd9b8e --- /dev/null +++ b/public/img/assets/marken/cabinet.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + diff --git a/public/img/assets/marken/cabinet/ankleide-solitaer-eiche-tano-seite.webp b/public/img/assets/marken/cabinet/ankleide-solitaer-eiche-tano-seite.webp new file mode 100644 index 00000000..54903ff6 Binary files /dev/null and b/public/img/assets/marken/cabinet/ankleide-solitaer-eiche-tano-seite.webp differ diff --git a/public/img/assets/marken/cabinet/ankleide-solitaer-eiche-tano.webp b/public/img/assets/marken/cabinet/ankleide-solitaer-eiche-tano.webp new file mode 100644 index 00000000..020e9d35 Binary files /dev/null and b/public/img/assets/marken/cabinet/ankleide-solitaer-eiche-tano.webp differ diff --git a/public/img/assets/marken/cabinet/dachschraege-velluto-fango.webp b/public/img/assets/marken/cabinet/dachschraege-velluto-fango.webp new file mode 100644 index 00000000..80de2c69 Binary files /dev/null and b/public/img/assets/marken/cabinet/dachschraege-velluto-fango.webp differ diff --git a/public/img/assets/marken/cabinet/dachschraegenschrank-filo-cashmere.webp b/public/img/assets/marken/cabinet/dachschraegenschrank-filo-cashmere.webp new file mode 100644 index 00000000..f257f36d Binary files /dev/null and b/public/img/assets/marken/cabinet/dachschraegenschrank-filo-cashmere.webp differ diff --git a/public/img/assets/marken/cabinet/drehtuerenschrank-marmor.webp b/public/img/assets/marken/cabinet/drehtuerenschrank-marmor.webp new file mode 100644 index 00000000..30114cdf Binary files /dev/null and b/public/img/assets/marken/cabinet/drehtuerenschrank-marmor.webp differ diff --git a/public/img/assets/marken/cabinet/flur-schrank-eiche-tano.webp b/public/img/assets/marken/cabinet/flur-schrank-eiche-tano.webp new file mode 100644 index 00000000..8112d4ef Binary files /dev/null and b/public/img/assets/marken/cabinet/flur-schrank-eiche-tano.webp differ diff --git a/public/img/assets/marken/cabinet/garderobe-seite-offen.webp b/public/img/assets/marken/cabinet/garderobe-seite-offen.webp new file mode 100644 index 00000000..7f81cf4a Binary files /dev/null and b/public/img/assets/marken/cabinet/garderobe-seite-offen.webp differ diff --git a/public/img/assets/marken/cabinet/garderobe-sitznische-filo-cashmere.webp b/public/img/assets/marken/cabinet/garderobe-sitznische-filo-cashmere.webp new file mode 100644 index 00000000..bd480515 Binary files /dev/null and b/public/img/assets/marken/cabinet/garderobe-sitznische-filo-cashmere.webp differ diff --git a/public/img/assets/marken/cabinet/schlafzimmer-eiche-tano.webp b/public/img/assets/marken/cabinet/schlafzimmer-eiche-tano.webp new file mode 100644 index 00000000..a607e8f0 Binary files /dev/null and b/public/img/assets/marken/cabinet/schlafzimmer-eiche-tano.webp differ diff --git a/public/img/assets/marken/cabinet/schlafzimmer-velluto-fango.webp b/public/img/assets/marken/cabinet/schlafzimmer-velluto-fango.webp new file mode 100644 index 00000000..905f1af8 Binary files /dev/null and b/public/img/assets/marken/cabinet/schlafzimmer-velluto-fango.webp differ diff --git a/public/img/assets/marken/cabinet/schlafzimmer-wandschrank-filo-cashmere.webp b/public/img/assets/marken/cabinet/schlafzimmer-wandschrank-filo-cashmere.webp new file mode 100644 index 00000000..d5b9db59 Binary files /dev/null and b/public/img/assets/marken/cabinet/schlafzimmer-wandschrank-filo-cashmere.webp differ diff --git a/public/img/assets/marken/cabinet/schrank-gegen-schraege-marmor.webp b/public/img/assets/marken/cabinet/schrank-gegen-schraege-marmor.webp new file mode 100644 index 00000000..b6d345c5 Binary files /dev/null and b/public/img/assets/marken/cabinet/schrank-gegen-schraege-marmor.webp differ diff --git a/public/img/assets/marken/februe.png b/public/img/assets/marken/februe.png new file mode 100644 index 00000000..7651548d Binary files /dev/null and b/public/img/assets/marken/februe.png differ diff --git a/public/img/assets/marken/februe/active-2-0-bureo.webp b/public/img/assets/marken/februe/active-2-0-bureo.webp new file mode 100644 index 00000000..efe9a534 Binary files /dev/null and b/public/img/assets/marken/februe/active-2-0-bureo.webp differ diff --git a/public/img/assets/marken/februe/active-2-0-soul-grossraum.webp b/public/img/assets/marken/februe/active-2-0-soul-grossraum.webp new file mode 100644 index 00000000..568b194e Binary files /dev/null and b/public/img/assets/marken/februe/active-2-0-soul-grossraum.webp differ diff --git a/public/img/assets/marken/februe/adesso.webp b/public/img/assets/marken/februe/adesso.webp new file mode 100644 index 00000000..a107148b Binary files /dev/null and b/public/img/assets/marken/februe/adesso.webp differ diff --git a/public/img/assets/marken/februe/arena-stage.webp b/public/img/assets/marken/februe/arena-stage.webp new file mode 100644 index 00000000..cd9497c4 Binary files /dev/null and b/public/img/assets/marken/februe/arena-stage.webp differ diff --git a/public/img/assets/marken/februe/base-sideboard.webp b/public/img/assets/marken/februe/base-sideboard.webp new file mode 100644 index 00000000..4be54371 Binary files /dev/null and b/public/img/assets/marken/februe/base-sideboard.webp differ diff --git a/public/img/assets/marken/februe/base-thekenloesung.webp b/public/img/assets/marken/februe/base-thekenloesung.webp new file mode 100644 index 00000000..55a5053b Binary files /dev/null and b/public/img/assets/marken/februe/base-thekenloesung.webp differ diff --git a/public/img/assets/marken/februe/base.webp b/public/img/assets/marken/februe/base.webp new file mode 100644 index 00000000..9f760baa Binary files /dev/null and b/public/img/assets/marken/februe/base.webp differ diff --git a/public/img/assets/marken/februe/bobb-bionics-coworker-container-cube.webp b/public/img/assets/marken/februe/bobb-bionics-coworker-container-cube.webp new file mode 100644 index 00000000..3ea85951 Binary files /dev/null and b/public/img/assets/marken/februe/bobb-bionics-coworker-container-cube.webp differ diff --git a/public/img/assets/marken/februe/bobb.webp b/public/img/assets/marken/februe/bobb.webp new file mode 100644 index 00000000..68edfdae Binary files /dev/null and b/public/img/assets/marken/februe/bobb.webp differ diff --git a/public/img/assets/marken/februe/brandon.webp b/public/img/assets/marken/februe/brandon.webp new file mode 100644 index 00000000..28c9826c Binary files /dev/null and b/public/img/assets/marken/februe/brandon.webp differ diff --git a/public/img/assets/marken/februe/corporate.webp b/public/img/assets/marken/februe/corporate.webp new file mode 100644 index 00000000..370d92f5 Binary files /dev/null and b/public/img/assets/marken/februe/corporate.webp differ diff --git a/public/img/assets/marken/februe/coworker.webp b/public/img/assets/marken/februe/coworker.webp new file mode 100644 index 00000000..e5f9db17 Binary files /dev/null and b/public/img/assets/marken/februe/coworker.webp differ diff --git a/public/img/assets/marken/februe/curved-ben-basic.webp b/public/img/assets/marken/februe/curved-ben-basic.webp new file mode 100644 index 00000000..74d1908c Binary files /dev/null and b/public/img/assets/marken/februe/curved-ben-basic.webp differ diff --git a/public/img/assets/marken/februe/elements-soul-grossraum.webp b/public/img/assets/marken/februe/elements-soul-grossraum.webp new file mode 100644 index 00000000..99e62efc Binary files /dev/null and b/public/img/assets/marken/februe/elements-soul-grossraum.webp differ diff --git a/public/img/assets/marken/februe/eline-one-silent-garderobenpaneel.webp b/public/img/assets/marken/februe/eline-one-silent-garderobenpaneel.webp new file mode 100644 index 00000000..ba010f49 Binary files /dev/null and b/public/img/assets/marken/februe/eline-one-silent-garderobenpaneel.webp differ diff --git a/public/img/assets/marken/februe/vio.webp b/public/img/assets/marken/februe/vio.webp new file mode 100644 index 00000000..982abb37 Binary files /dev/null and b/public/img/assets/marken/februe/vio.webp differ diff --git a/public/img/assets/marken/otterpohl.png b/public/img/assets/marken/otterpohl.png new file mode 100644 index 00000000..a7b0aea9 Binary files /dev/null and b/public/img/assets/marken/otterpohl.png differ diff --git a/public/img/assets/marken/otterpohl/referenz-berkemeier-treppe.webp b/public/img/assets/marken/otterpohl/referenz-berkemeier-treppe.webp new file mode 100644 index 00000000..b77a910c Binary files /dev/null and b/public/img/assets/marken/otterpohl/referenz-berkemeier-treppe.webp differ diff --git a/public/img/assets/marken/otterpohl/referenz-dziuballe-treppe.webp b/public/img/assets/marken/otterpohl/referenz-dziuballe-treppe.webp new file mode 100644 index 00000000..d57c29e0 Binary files /dev/null and b/public/img/assets/marken/otterpohl/referenz-dziuballe-treppe.webp differ diff --git a/public/img/assets/marken/otterpohl/referenz-luecke-01.webp b/public/img/assets/marken/otterpohl/referenz-luecke-01.webp new file mode 100644 index 00000000..ebae4d4b Binary files /dev/null and b/public/img/assets/marken/otterpohl/referenz-luecke-01.webp differ diff --git a/public/img/assets/marken/otterpohl/referenz-luecke-12.webp b/public/img/assets/marken/otterpohl/referenz-luecke-12.webp new file mode 100644 index 00000000..ef5d905d Binary files /dev/null and b/public/img/assets/marken/otterpohl/referenz-luecke-12.webp differ diff --git a/public/img/assets/marken/otterpohl/referenz-luecke-15.webp b/public/img/assets/marken/otterpohl/referenz-luecke-15.webp new file mode 100644 index 00000000..bed7d61f Binary files /dev/null and b/public/img/assets/marken/otterpohl/referenz-luecke-15.webp differ diff --git a/public/img/assets/marken/otterpohl/referenz-neugebauer.webp b/public/img/assets/marken/otterpohl/referenz-neugebauer.webp new file mode 100644 index 00000000..405851c3 Binary files /dev/null and b/public/img/assets/marken/otterpohl/referenz-neugebauer.webp differ diff --git a/public/img/assets/marken/otterpohl/referenz-objektbau-luecke-technik.webp b/public/img/assets/marken/otterpohl/referenz-objektbau-luecke-technik.webp new file mode 100644 index 00000000..43b257ce Binary files /dev/null and b/public/img/assets/marken/otterpohl/referenz-objektbau-luecke-technik.webp differ diff --git a/public/img/assets/marken/otterpohl/referenz-otterpohl-11.webp b/public/img/assets/marken/otterpohl/referenz-otterpohl-11.webp new file mode 100644 index 00000000..157a27ef Binary files /dev/null and b/public/img/assets/marken/otterpohl/referenz-otterpohl-11.webp differ diff --git a/public/img/assets/marken/otterpohl/titel-treppe.webp b/public/img/assets/marken/otterpohl/titel-treppe.webp new file mode 100644 index 00000000..0e1bcba8 Binary files /dev/null and b/public/img/assets/marken/otterpohl/titel-treppe.webp differ diff --git a/public/img/assets/marken/otterpohl/werkstatt-02.webp b/public/img/assets/marken/otterpohl/werkstatt-02.webp new file mode 100644 index 00000000..8eba27be Binary files /dev/null and b/public/img/assets/marken/otterpohl/werkstatt-02.webp differ diff --git a/public/img/assets/marken/otterpohl/werkstatt-03.webp b/public/img/assets/marken/otterpohl/werkstatt-03.webp new file mode 100644 index 00000000..2e5d2611 Binary files /dev/null and b/public/img/assets/marken/otterpohl/werkstatt-03.webp differ diff --git a/public/img/assets/marken/otterpohl/werkstatt-04.webp b/public/img/assets/marken/otterpohl/werkstatt-04.webp new file mode 100644 index 00000000..faf65a8a Binary files /dev/null and b/public/img/assets/marken/otterpohl/werkstatt-04.webp differ diff --git a/public/img/assets/marken/otterpohl/werkstatt-05-lift.webp b/public/img/assets/marken/otterpohl/werkstatt-05-lift.webp new file mode 100644 index 00000000..dbe28bff Binary files /dev/null and b/public/img/assets/marken/otterpohl/werkstatt-05-lift.webp differ diff --git a/public/img/assets/marken/otterpohl/werkstatt-titel.webp b/public/img/assets/marken/otterpohl/werkstatt-titel.webp new file mode 100644 index 00000000..3efdf8db Binary files /dev/null and b/public/img/assets/marken/otterpohl/werkstatt-titel.webp differ diff --git a/public/img/assets/marken/rotpunkt.svg b/public/img/assets/marken/rotpunkt.svg new file mode 100644 index 00000000..d66ae475 --- /dev/null +++ b/public/img/assets/marken/rotpunkt.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/img/assets/marken/rotpunkt/kueche-01-b.webp b/public/img/assets/marken/rotpunkt/kueche-01-b.webp new file mode 100644 index 00000000..b66eaedf Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-01-b.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-01.webp b/public/img/assets/marken/rotpunkt/kueche-01.webp new file mode 100644 index 00000000..4e244ee3 Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-01.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-02.webp b/public/img/assets/marken/rotpunkt/kueche-02.webp new file mode 100644 index 00000000..864706ea Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-02.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-03.webp b/public/img/assets/marken/rotpunkt/kueche-03.webp new file mode 100644 index 00000000..e8a90376 Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-03.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-04.webp b/public/img/assets/marken/rotpunkt/kueche-04.webp new file mode 100644 index 00000000..dfb78e7e Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-04.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-05.webp b/public/img/assets/marken/rotpunkt/kueche-05.webp new file mode 100644 index 00000000..e78835a4 Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-05.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-06-b.webp b/public/img/assets/marken/rotpunkt/kueche-06-b.webp new file mode 100644 index 00000000..1ee9f169 Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-06-b.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-06.webp b/public/img/assets/marken/rotpunkt/kueche-06.webp new file mode 100644 index 00000000..73b74d11 Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-06.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-07.webp b/public/img/assets/marken/rotpunkt/kueche-07.webp new file mode 100644 index 00000000..abaf5e75 Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-07.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-08.webp b/public/img/assets/marken/rotpunkt/kueche-08.webp new file mode 100644 index 00000000..e587704f Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-08.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-09.webp b/public/img/assets/marken/rotpunkt/kueche-09.webp new file mode 100644 index 00000000..82a658ce Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-09.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-10.webp b/public/img/assets/marken/rotpunkt/kueche-10.webp new file mode 100644 index 00000000..bd62678d Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-10.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-11.webp b/public/img/assets/marken/rotpunkt/kueche-11.webp new file mode 100644 index 00000000..79d6bbd2 Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-11.webp differ diff --git a/public/img/assets/marken/rotpunkt/kueche-12.webp b/public/img/assets/marken/rotpunkt/kueche-12.webp new file mode 100644 index 00000000..6b611a79 Binary files /dev/null and b/public/img/assets/marken/rotpunkt/kueche-12.webp differ diff --git a/public/img/assets/sponsoring/arminia-bielefeld.png b/public/img/assets/sponsoring/arminia-bielefeld.png new file mode 100644 index 00000000..2b05fe31 Binary files /dev/null and b/public/img/assets/sponsoring/arminia-bielefeld.png differ diff --git a/public/img/assets/sponsoring/tc-bad-salzuflen.png b/public/img/assets/sponsoring/tc-bad-salzuflen.png new file mode 100644 index 00000000..60aff556 Binary files /dev/null and b/public/img/assets/sponsoring/tc-bad-salzuflen.png differ diff --git a/public/img/assets/sponsoring/tc-blau-weiss-halle.jpg b/public/img/assets/sponsoring/tc-blau-weiss-halle.jpg new file mode 100644 index 00000000..a7b537d4 Binary files /dev/null and b/public/img/assets/sponsoring/tc-blau-weiss-halle.jpg differ diff --git a/public/img/assets/sponsoring/tc-hiddenhausen.png b/public/img/assets/sponsoring/tc-hiddenhausen.png new file mode 100644 index 00000000..a66b8b63 Binary files /dev/null and b/public/img/assets/sponsoring/tc-hiddenhausen.png differ diff --git a/public/img/favicons/b2in-favicon.ico b/public/img/favicons/b2in-favicon.ico new file mode 100644 index 00000000..11bdea25 Binary files /dev/null and b/public/img/favicons/b2in-favicon.ico differ diff --git a/public/img/logos/b2in-interior-logo-negative.png b/public/img/logos/b2in-interior-logo-negative.png new file mode 100644 index 00000000..f047233c Binary files /dev/null and b/public/img/logos/b2in-interior-logo-negative.png differ diff --git a/public/img/logos/b2in-interior-logo-negative.svg b/public/img/logos/b2in-interior-logo-negative.svg new file mode 100644 index 00000000..838bf931 --- /dev/null +++ b/public/img/logos/b2in-interior-logo-negative.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/img/logos/b2in-interior-logo-positive.png b/public/img/logos/b2in-interior-logo-positive.png new file mode 100644 index 00000000..cb6eadb9 Binary files /dev/null and b/public/img/logos/b2in-interior-logo-positive.png differ diff --git a/public/img/logos/b2in-interior-logo-positive.svg b/public/img/logos/b2in-interior-logo-positive.svg new file mode 100644 index 00000000..23719451 --- /dev/null +++ b/public/img/logos/b2in-interior-logo-positive.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/img/logos/b2in-logo-negative.png b/public/img/logos/b2in-logo-negative.png index 7646afc3..1b846baa 100644 Binary files a/public/img/logos/b2in-logo-negative.png and b/public/img/logos/b2in-logo-negative.png differ diff --git a/public/img/logos/b2in-logo-negative.svg b/public/img/logos/b2in-logo-negative.svg index 6ef5d925..36ffe00b 100644 --- a/public/img/logos/b2in-logo-negative.svg +++ b/public/img/logos/b2in-logo-negative.svg @@ -1,25 +1,36 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + diff --git a/public/img/logos/b2in-logo-positive.png b/public/img/logos/b2in-logo-positive.png index 20ce0578..731fc145 100644 Binary files a/public/img/logos/b2in-logo-positive.png and b/public/img/logos/b2in-logo-positive.png differ diff --git a/public/img/logos/b2in-logo-positive.svg b/public/img/logos/b2in-logo-positive.svg index fc43ca1e..dabb1b97 100644 --- a/public/img/logos/b2in-logo-positive.svg +++ b/public/img/logos/b2in-logo-positive.svg @@ -1,25 +1,36 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + diff --git a/resources/css/web/shared-styles.css b/resources/css/web/shared-styles.css index ca2c9996..6bc58980 100644 --- a/resources/css/web/shared-styles.css +++ b/resources/css/web/shared-styles.css @@ -232,6 +232,61 @@ h1, h2, h3, h4, h5, h6 { box-shadow: var(--shadow-accent-glow); } +/* Formularfelder (Terminanfrage-Widget, Kontaktseite). Tokenbasiert, damit sie in jeder + Welt zum Grund passen; Fokus im Akzent der Welt. `.form-select` ergaenzt einen eigenen + Chevron, weil der Browser-Pfeil neben den uebrigen Feldern fremd wirkt. */ +.form-field { + display: block; + width: 100%; + padding: 0.65rem 0.9rem; + font-size: 0.95rem; + line-height: 1.5; + color: hsl(var(--foreground)); + background-color: hsl(var(--card)); + border: 1px solid hsl(var(--border)); + border-radius: 0.6rem; + box-shadow: inset 0 1px 2px hsl(var(--foreground) / 0.04); + transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease; +} + +.form-field::placeholder { + color: hsl(var(--muted-foreground) / 0.7); +} + +.form-field:hover { + border-color: hsl(var(--primary) / 0.45); +} + +.form-field:focus, +.form-field:focus-visible { + outline: none; + border-color: hsl(var(--secondary)); + box-shadow: 0 0 0 3px hsl(var(--secondary) / 0.22); + background-color: hsl(var(--background)); +} + +.form-select { + appearance: none; + -webkit-appearance: none; + padding-right: 2.6rem; + cursor: pointer; + background-image: url("data:image/svg+xml;utf8,"); + background-repeat: no-repeat; + background-position: right 0.9rem center; + background-size: 1.1rem 1.1rem; +} + +.form-select optgroup { + font-weight: 600; + font-style: normal; + color: hsl(var(--primary)); +} + +.form-select option { + font-weight: 400; + color: hsl(var(--foreground)); +} + /* Card styles */ .card-elevated { background-color: hsl(var(--card)); @@ -258,10 +313,94 @@ h1, h2, h3, h4, h5, h6 { color: hsl(var(--dark-text)); } +/* Abschlussband der Marken- und Startseite. + Ein durchgehender Verlauf ueber die volle Breite: vom dunklen Hauptton in den + Akzent. Bewusst ohne weiche Kreise – die setzten sichtbare Flecken in die + Ecken. Die Tiefe kommt aus dem Verlauf selbst, die Kontur aus zwei Haarlinien. + Wo das Band ausläuft, sagt `--cta-band-end` (Interior: tiefes Ocker, + Immobilien: Dynamic Blue); Themes ohne den Token nutzen `--secondary-dark`. */ +.cta-band { + --cta-band-gradient: linear-gradient( + 100deg, + hsl(var(--primary-dark)) 0%, + hsl(var(--primary)) 42%, + hsl(var(--cta-band-end, var(--secondary-dark))) 100% + ); + + position: relative; + overflow: hidden; + background: var(--cta-band-gradient); +} + +/* Lichtkante oben, die zu beiden Seiten auslaeuft (Interior: in Ocker, sonst weiss). */ +.cta-band::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 1px; + background: linear-gradient( + 90deg, + transparent 0%, + hsl(var(--cta-band-line, 0 0% 100%) / 0.6) 50%, + transparent 100% + ); +} + +/* Hervorgehobene Woerter im Titel des Bands. Die Inhalte tragen `text-primary` + (dunkler Hauptton) – auf dem dunklen Band unlesbar, deshalb hier der Akzent. */ +.cta-band .text-primary { + color: hsl(var(--secondary)); +} + +/* Umgekehrt auf Flaechen im Akzentton (z. B. „Lernen Sie unsere Marken kennen" auf /marken): + ein `text-secondary`-Wort waere Ocker auf Ocker. Dort traegt es den Hauptton. */ +section.bg-secondary .text-secondary { + color: hsl(var(--primary)); +} + +/* Sehr flacher Schimmer von oben links, damit die Flaeche nicht flach wirkt. */ +.cta-band::after { + content: ''; + position: absolute; + inset: 0; + pointer-events: none; + background: linear-gradient( + 165deg, + hsl(0 0% 100% / 0.07) 0%, + transparent 48% + ); +} + .text-dark-muted { color: hsl(var(--dark-muted)); } +/* Footer. Eigene Tokens, weil der Footer nicht in jeder Welt dunkel ist: + Interior legt ihn auf Sand mit Tanne, Immobilien auf Anthrazit mit Weiss. + Themes ohne Footer-Tokens fallen auf die dunkle Sektion zurueck. */ +.section-footer { + background-color: hsl(var(--footer-bg, var(--dark-bg))); + color: hsl(var(--footer-fg, var(--dark-text))); +} + +.text-footer-muted { + color: hsl(var(--footer-muted, var(--dark-muted))); +} + +.border-footer-line\/30 { + border-color: hsl(var(--footer-line, var(--dark-muted)) / 0.3); +} + +.text-clay { + color: hsl(var(--clay, var(--muted-foreground))); +} + +.hover-bg-primary-light:hover { + background-color: hsl(var(--primary-light)); +} + /* Container styles */ .container-padding { max-width: 80rem; @@ -679,9 +818,9 @@ h1, h2, h3, h4, h5, h6 { } } -/* Shadow Effects - Updated for new primary color */ +/* Schatten und Glow leiten sich aus dem Akzent der jeweiligen Welt ab. */ .shadow-elegant { - box-shadow: 0 10px 30px -10px rgba(0, 136, 204, 0.2); + box-shadow: 0 10px 30px -10px hsl(var(--secondary) / 0.2); } .shadow-elegant-white { @@ -695,34 +834,34 @@ h1, h2, h3, h4, h5, h6 { .elegant-shadow-card { box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.08), - 0 4px 10px 0px rgba(0, 136, 204,1); + 0 4px 10px 0px hsl(var(--secondary)); } .shadow-premium { - box-shadow: 0 20px 60px -15px rgba(0, 136, 204, 0.3); + box-shadow: 0 20px 60px -15px hsl(var(--secondary) / 0.3); } /* Glow Effects - Inspired by Möbius band's luminous edge */ .glow-soft { box-shadow: - 0 0 10px rgba(0, 155, 221, 0.15), - 0 0 20px rgba(0, 155, 221, 0.1), - 0 4px 10px -4px rgba(0, 136, 204, 0.2); + 0 0 10px hsl(var(--secondary) / 0.15), + 0 0 20px hsl(var(--secondary) / 0.1), + 0 4px 10px -4px hsl(var(--secondary) / 0.2); } .glow-medium { box-shadow: - 0 0 15px rgba(0, 155, 221, 0.25), - 0 0 30px rgba(0, 155, 221, 0.15), - 0 5px 10px -5px rgba(0, 136, 204, 0.3); + 0 0 15px hsl(var(--secondary) / 0.25), + 0 0 30px hsl(var(--secondary) / 0.15), + 0 5px 10px -5px hsl(var(--secondary) / 0.3); } .glow-strong { box-shadow: - 0 0 30px rgba(0, 155, 221, 0.35), - 0 0 60px rgba(0, 155, 221, 0.2), - 0 0 90px rgba(0, 113, 168, 0.1), - 0 10px 10px -10px rgba(0, 136, 204, 0.4); + 0 0 30px hsl(var(--secondary) / 0.35), + 0 0 60px hsl(var(--secondary) / 0.2), + 0 0 90px hsl(var(--secondary-dark) / 0.1), + 0 10px 10px -10px hsl(var(--secondary) / 0.4); } .icon-secondary-linear { background-color: hsl(var(--secondary) / 0.1); @@ -748,6 +887,10 @@ h1, h2, h3, h4, h5, h6 { ); position: relative; } + & section.cta-band { + background: var(--cta-band-gradient); + position: relative; + } & section.bg-accent { background: linear-gradient( 135deg, @@ -772,7 +915,7 @@ h1, h2, h3, h4, h5, h6 { hsl(var(--hero-container)) 0%, hsl(var(--hero-container-dark)) 100% ); - box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.1); + box-shadow: rgba(0, 0, 0, 0.1) 0px 10px 20px 5px; position: relative; } @@ -785,9 +928,9 @@ h1, h2, h3, h4, h5, h6 { background: linear-gradient( 145deg, - hsl(0 0% 100%) 0%, - hsl(0 0% 99.5%) 40%, - hsl(0 0% 99%) 100% + hsl(var(--card)) 0%, + hsl(var(--card)) 40%, + hsl(var(--card) / 0.92) 100% ); box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.03), @@ -853,7 +996,7 @@ h1, h2, h3, h4, h5, h6 { 0 4px 8px rgba(0, 0, 0, 0.08), 0 8px 16px rgba(0, 0, 0, 0.1), 0 16px 32px rgba(0, 0, 0, 0.08), - 0 0 40px hsla(199, 74%, 49%, 0.3); + 0 0 40px hsl(var(--secondary) / 0.3); transform: translateY(-2px); filter: brightness(1.08); } @@ -874,3 +1017,67 @@ h1, h2, h3, h4, h5, h6 { transition: none; } } + +/* Herkunfts-Sektion: schematische Standortkarte (Bielefeld als Drehscheibe) */ +.origin-map { + width: 100%; + height: auto; + font-family: inherit; + overflow: visible; +} + +.origin-map-region { + fill: hsl(var(--secondary) / 0.06); + stroke: hsl(var(--secondary) / 0.45); + stroke-width: 1.5; + stroke-dasharray: 4 6; +} + +.origin-map-region-label { + fill: hsl(var(--secondary-deep, var(--secondary))); + font-size: 11px; + font-weight: 600; + letter-spacing: 0.12em; + text-transform: uppercase; +} + +.origin-map-spoke { + stroke: hsl(var(--secondary)); + stroke-width: 2; + stroke-dasharray: 6 6; + opacity: 0.7; +} + +.origin-map-hub { + fill: hsl(var(--secondary)); +} + +.origin-map-hub-ring { + fill: hsl(var(--secondary) / 0.18); +} + +.origin-map-dot { + fill: hsl(var(--primary)); + stroke: hsl(var(--card)); + stroke-width: 3; +} + +.origin-map-label { + fill: hsl(var(--foreground)); + font-size: 15px; + font-weight: 500; +} + +.origin-map-sublabel { + fill: hsl(var(--muted-foreground)); + font-size: 12px; +} + +.origin-map-distance { + fill: hsl(var(--muted-foreground)); + font-size: 11px; + text-anchor: middle; + stroke: hsl(var(--card)); + stroke-width: 5px; + paint-order: stroke; +} diff --git a/resources/css/web/theme-b2in.css b/resources/css/web/theme-b2in.css index 7cd27735..867ab76c 100644 --- a/resources/css/web/theme-b2in.css +++ b/resources/css/web/theme-b2in.css @@ -1,76 +1,311 @@ @import "tailwindcss"; -/* B2IN Domain Theme - Anthracite & Dynamic Blue */ +/* B2in – zwei Farbwelten auf einem Themensystem (Arbeitsplan September 2026, Punkt 1.1). + + Standard ist die Interior-Welt: Tanne, Creme, Sand, Ocker, Clay, Anthrazit. + Die Immobilien-Welt behält das bestehende Blau; sie greift, sobald das Layout + `world-immobilien` an den Body setzt (siehe b2in_world() in app/helpers.php). + Welche Logo-Variante dazu erscheint, entscheidet ThemeHelper::getLogoPath(). + + Alle Werte sind HSL-Tripel ohne Funktionsaufruf, damit `hsl(var(--x) / 0.5)` + in shared-styles.css und in den Tailwind-Utilities funktioniert. */ @layer base { :root { - /* Base colors */ - --background: 32 20% 97%; /* #f5f4f2 - Light Beige */ - --foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */ + /* ── Interior-Welt ─────────────────────────────────────────────── */ - /* Card colors */ - --card: 0 25% 96%; /* #hsl(0 25% 96%) - Off White */ - --card-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */ + /* Grundflächen */ + --background: 38 33% 95%; /* #f7f4ef Creme – Hintergrund */ + --foreground: 26 8% 16%; /* #2d2926 Anthrazit – Text */ - --popover: 0 25% 96%; /* #hsl(0 25% 96%)- Off White */ - --popover-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */ + /* Karten eine Stufe heller als Creme, damit sie sich vom Grund abheben */ + --card: 40 43% 98%; /* #fbf9f5 */ + --card-foreground: 26 8% 16%; + --popover: 40 43% 98%; + --popover-foreground: 26 8% 16%; - /* B2IN Theme Colors */ - --primary: 209 32% 25%; /* #2b3f51 - Anthracite */ - --primary-light: 209 32% 35%; /* #2b3f51 - Anthracite */ - --primary-lighter: 209 32% 85%; /* #2b3f51 - Anthracite */ - --primary-dark: 209 32% 20%; /* #2b3f51 - Anthracite */ - --primary-foreground: 0 25% 96%; /* #hsl(0 25% 96%) - Off White */ + /* Hauptton dunkel: Wortmarke, Buttons, dunkle Sektionen */ + --primary: 175 16% 15%; /* #202c2b Tanne */ + --primary-light: 175 13% 22%; + --primary-lighter: 175 8% 82%; + --primary-dark: 175 18% 11%; + --primary-foreground: 38 33% 95%; /* Creme auf Tanne */ - --secondary: 199 74% 49%; /* #20a0da - Dynamic Blue */ - --secondary-light: 199 74% 56%; /* #20a0da - Dynamic Blue */ - --secondary-lighter: 199 74% 75%; /* #20a0da - Dynamic Blue */ - --secondary-dark: 199 74% 42%; /* #20a0da - Dynamic Blue */ - --secondary-foreground: 0 25% 96%; /* hsl(0 25% 96%) - Off White */ + /* Akzent: Logo-Bogen, Hervorhebungen, Icons, aktive Navigation */ + --secondary: 37 69% 39%; /* #a8741f Ocker, dunkler (07.10.2026; vorher #d39e46) */ + --secondary-light: 37 62% 48%; + --secondary-lighter: 37 55% 78%; + --secondary-dark: 37 70% 32%; + --secondary-deep: 37 70% 30%; /* Ocker als Textfarbe auf hellem Grund */ + --cta-band-line: 37 69% 39%; /* Haarlinie am Abschlussband in Ocker */ + --secondary-foreground: 38 33% 95%; - /* Neutral colors */ - --muted: 0 0% 92%; /* hsl(0 0% 92%) - Light Muted */ - --muted-foreground: 199 50% 35%; /* #4a8bb5 - Muted Blue */ + /* Sekundärton für Produkte und ruhige Beschriftungen */ + --clay: 24 15% 57%; /* #a38f82 Clay */ - --accent: 210 0% 90%; /* hsl(210 5.26% 92.55%) - Light Accent */ - --accent-dark: 210 0% 85%; /* hsl(210 5.26% 92.55%) - Light Accent */ - --accent-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */ + /* Ruhige Flächen und Fließtext in gedämpfter Farbe */ + --muted: 30 24% 90%; /* helles Sand */ + --muted-foreground: 24 12% 40%; /* abgedunkelter Clay – lesbar auf Creme */ - /* Dark section colors */ - --dark-bg: 209 32% 25%; /* Matching primary */ - --dark-text: 0 0% 100%; /* hsl(0 0% 100%) - Off White */ - --dark-muted: 0 0% 80%; /* hsl(0 0% 80%) - Dark Muted */ + /* Sektionswechsel: Sand als Fläche */ + --accent: 28 25% 80%; /* #d9cbbf Sand */ + --accent-dark: 28 25% 74%; + --accent-foreground: 26 8% 16%; - /* Interactive elements */ - --destructive: 0 84.2% 60.2%; /* #ef4444 - Red */ - --destructive-foreground: 210 40% 98%; /* #f8fafc - Light */ + /* Dunkle Sektionen */ + --dark-bg: 175 16% 15%; /* Tanne */ + --dark-text: 38 33% 95%; + --dark-muted: 38 20% 76%; - --border: 0 0% 80%; /* hsl(0 0% 80%) - Light Border */ - --input: 0 0% 92%; /* hsl(0 0% 92%) - Input Background */ - --ring: 20 14% 16%; /* #2a2a2a - Focus Ring */ + /* Footer: Sand mit Tanne (laut Farbwelt „Sand – Flächen, Footer“) */ + --footer-bg: 28 25% 80%; + --footer-fg: 175 16% 15%; + --footer-muted: 24 12% 40%; + --footer-line: 175 16% 15%; + + /* Abschlussband: Ton in Ton von dunklem Tannengrün in ein helleres, kein Ocker im + Verlauf – Grün zu Ocker wirkte unharmonisch. Ocker bleibt Akzent für Wörter und Linien. */ + --cta-band-end: 175 12% 26%; + + /* Interaktion */ + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + + --border: 28 20% 84%; + --input: 40 40% 98%; + --ring: 175 16% 15%; --radius: 0.75rem; - /* Hero container background */ - --hero-container: 0 0% 93%; /* #e8e8e8 - Light Gray */ - --hero-container-dark: 0 0% 85%; /* #e8e8e8 - Light Gray */ - --hero-container-light: 0 0% 95%; /* #e8e8e8 - Light Gray */ + /* Bühne des Hero-Bereichs */ + --hero-container: 30 28% 89%; + --hero-container-dark: 28 25% 83%; + --hero-container-light: 36 32% 93%; - /* Consistent shadows */ + /* Schatten */ --shadow-warm: 0 10px 30px -15px hsl(var(--foreground) / 0.1); --shadow-card: 0 4px 20px -8px hsl(var(--foreground) / 0.08); --shadow-elevated: 0 20px 40px -20px hsl(var(--foreground) / 0.15); --shadow-accent-glow: 0 0 30px hsl(var(--secondary) / 0.3); - /* Transitions */ + /* Übergänge */ --transition-smooth: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); --transition-bounce: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); - /* Font families */ + /* Schriften: Inter für Fließtext, eine Serife für Überschriften – der Ton der + Shop-Entwürfe. EB Garamond liegt bereits lokal vor (public/fonts/eb-garamond). */ --font-primary: 'Inter', system-ui, -apple-system, sans-serif; + --font-secondary: 'EB Garamond', 'Georgia', 'Times New Roman', serif; + } + + /* ── Immobilien-Welt: das bisherige Blau ───────────────────────── */ + .world-immobilien { + --background: 32 20% 97%; /* #f5f4f2 helles Beige */ + --foreground: 20 14% 16%; /* #2a2a2a */ + + --card: 0 25% 96%; + --card-foreground: 20 14% 16%; + --popover: 0 25% 96%; + --popover-foreground: 20 14% 16%; + + --primary: 209 32% 25%; /* #2b3f51 Anthracite */ + --primary-light: 209 32% 35%; + --primary-lighter: 209 32% 85%; + --primary-dark: 209 32% 20%; + --primary-foreground: 0 25% 96%; + + --secondary: 199 74% 49%; /* #20a0da Dynamic Blue */ + --secondary-light: 199 74% 56%; + --secondary-lighter: 199 74% 75%; + --secondary-dark: 199 74% 42%; + --secondary-deep: 199 74% 36%; + --secondary-foreground: 0 25% 96%; + + --clay: 199 50% 35%; + + --muted: 0 0% 92%; + --muted-foreground: 199 50% 35%; /* #4a8bb5 */ + + --accent: 210 0% 90%; + --accent-dark: 210 0% 85%; + --accent-foreground: 20 14% 16%; + + --dark-bg: 209 32% 25%; + --dark-text: 0 0% 100%; + --dark-muted: 0 0% 80%; + + --footer-bg: 209 32% 25%; + --footer-fg: 0 0% 100%; + --footer-muted: 0 0% 80%; + --footer-line: 0 0% 80%; + + --cta-band-end: 199 74% 42%; + + --border: 0 0% 80%; + --input: 0 0% 92%; + --ring: 20 14% 16%; + + --hero-container: 0 0% 93%; + --hero-container-dark: 0 0% 85%; + --hero-container-light: 0 0% 95%; + --font-secondary: 'IBM Plex Sans', 'Inter', system-ui, -apple-system, sans-serif; } + + /* ── Interior: helle Flächen (Nachtrag 18, seit 25.09.2026 fest) ───── + Marcels Rückmeldung vom 23.09.: die Creme-Flächen wirken altbacken. Tanne und + Ocker aus dem Logo bleiben, nur die Flächen werden heller: Grund fast weiß, + Karten weiß, Sektionswechsel in hellem Grau-Beige, Footer in Tanne. Die Werte + in :root bleiben die Grundlage, die Immobilien-Welt erbt sie. */ + .world-interior { + --background: 40 25% 98%; /* #fbfaf8 fast weiß, leicht warm */ + --card: 0 0% 100%; /* Karten reinweiß */ + --popover: 0 0% 100%; + + --muted: 40 12% 94%; /* #f2f0ed */ + --muted-foreground: 24 8% 38%; + + --accent: 36 14% 93%; /* #efece7 Sektionswechsel, klar statt Sand */ + --accent-dark: 36 14% 88%; + + --border: 36 12% 88%; /* #e6e2dc */ + --input: 0 0% 100%; + + --hero-container: 40 14% 95%; + --hero-container-dark: 40 12% 90%; + --hero-container-light: 40 25% 98%; + + /* Footer dunkel in Tanne – gibt der hellen Seite unten einen klaren Abschluss */ + --footer-bg: 175 16% 15%; + --footer-fg: 38 33% 95%; + --footer-muted: 38 20% 76%; + --footer-line: 38 20% 76%; + + /* Karten sind jetzt weiß auf fast weiß: etwas mehr Schatten, damit sie sich lösen */ + --shadow-card: 0 6px 24px -10px hsl(var(--foreground) / 0.14); + --shadow-elevated: 0 24px 48px -20px hsl(var(--foreground) / 0.2); + } + } +/* Interior: Ocker ist Akzent, kein Flächenton unter Text – Creme auf Ocker erreicht + keinen ausreichenden Kontrast. Der zweite Hero-Button wird deshalb zur Kontur in + Tanne. */ +.world-interior .btn-secondary-accent { + background: transparent !important; + color: hsl(var(--primary)); + border: 1px solid hsl(var(--primary) / 0.55); + box-shadow: none; +} + +.world-interior .btn-secondary-accent:hover { + background: hsl(var(--primary)) !important; + color: hsl(var(--primary-foreground)); + border-color: hsl(var(--primary)); +} + +/* Auf dem dunklen Footer trägt Ocker in voller Stärke. */ +.world-interior .section-footer .text-secondary { + color: hsl(var(--secondary)); +} + +/* Abschlussband und Footer sind beide dunkel – eine helle Haarlinie trennt sie. */ +.world-interior .section-footer { + border-top: 1px solid hsl(var(--footer-muted) / 0.35); +} + +/* Der schwebende Termin-Button liegt über Bildern und weißen Karten: er bekommt eine + Fläche in Kartenfarbe, damit die Kontur nicht im Hintergrund verschwindet. */ +.world-interior .appointment-toggle.btn-secondary-accent { + background: hsl(var(--card)) !important; +} + +.world-interior .appointment-toggle.btn-secondary-accent:hover { + background: hsl(var(--primary)) !important; +} + +/* Cookie-Manager (acme/cookie-consent) in der Interior-Welt: die Paketfarben aus + config/cookie-consent.php sind das Blau der Immobilien-Welt. Hier folgt der schwebende + Button dem Akzent-Button der Seite (Tanne, Hover heller), Icon, Schalter und Link-Hover + tragen Ocker, „Speichern“ liegt in Tanne. Die Immobilien-Welt behält ihr Blau. */ +.world-interior .cookie-consent-wrapper { + --cc-primary: hsl(var(--secondary)); + --cc-primary-hover: hsl(var(--secondary-dark)); + --cc-save: hsl(var(--primary)); + --cc-save-hover: hsl(var(--primary-light)); + --cc-button-bg: hsl(var(--primary)); + --cc-button-hover: hsl(var(--primary-light)); +} + +.world-interior .cookie-consent-wrapper .cc-floating-btn { + --tw-ring-color: hsl(var(--secondary)) !important; + color: hsl(var(--primary-foreground)); + background: linear-gradient(145deg, hsl(var(--primary)) 0%, hsl(var(--primary-light)) 100%); +} + +.world-interior .cookie-consent-wrapper .cc-floating-btn:hover { + background: linear-gradient(145deg, hsl(var(--primary-light)) 0%, hsl(var(--primary)) 100%); +} + +/* Der Interior-Footer ist dunkel, also das negative Logo statt des positiven. */ +.footer-logo-dark { + display: none; +} + +.world-interior .footer-logo-light { + display: none; +} + +.world-interior .footer-logo-dark { + display: block; +} @import "./shared-styles.css"; + +/* Interior: EB Garamond wirkt bei gleicher Größe deutlich kleiner als IBM Plex Sans der + Immobilien-Welt. Die kleinen Überschriften (h2/h3 mit text-xl, h4) bekommen deshalb hier eine + Stufe mehr (07.10.2026); die Immobilien-Welt bleibt unverändert. */ +.world-interior :is(h2, h3).text-xl { + font-size: 1.5rem; + line-height: 1.25; +} + +.world-interior h4 { + font-size: 1.25rem; + line-height: 1.3; +} + +/* Slideshow-Punkte im Hero: die Glass-Flow-Regel für Buttons (Schatten, Anheben, Aufhellen) gilt + hier nicht – der Button ist nur eine unsichtbare Klickfläche um den dünnen Balken. */ +.variante-glass-flow button[data-hero-dot], +.variante-glass-flow button[data-hero-dot]:hover { + box-shadow: none; + transform: none; + filter: none; + overflow: visible; +} + +/* Auf Ockerflächen wird `text-secondary` sonst zu Tanne (shared-styles.css) – in der weißen Box der + Vision-Section (Startseite) trägt die Hervorhebung wieder Ocker. */ +section.bg-secondary [data-vision-box] .text-secondary { + color: hsl(var(--secondary)); +} + +/* Heroes der Interior-Welt (Startseite, Marken, Über uns, Kontakt): Rahmen als Goldverlauf + (07.10.2026, Vorbild „Farbwelt und Stil“). Die Immobilien-Welt behält ihren Rahmen. + Transparenter Rand, Fläche auf padding-box, Verlauf auf border-box – so folgt die Linie + der Rundung ohne Pseudo-Element. Selektor schlägt die Glass-Flow-Regel für den Rahmen. */ +.world-interior .variante-glass-flow div.hero-frame, +.world-interior div.hero-frame { + border: 1.5px solid transparent; + background: + linear-gradient(to bottom right, hsl(40, 5.65%, 95.65%), hsl(40, 15.95%, 93.9%)) padding-box, + linear-gradient( + 125deg, + hsl(var(--secondary-lighter) / 0.9) 0%, + hsl(var(--secondary-light) / 0.75) 22%, + hsl(var(--secondary-lighter) / 0.45) 55%, + hsl(var(--secondary-light) / 0.75) 82%, + hsl(var(--secondary-lighter) / 0.9) 100% + ) border-box; +} diff --git a/resources/js/app.js b/resources/js/app.js index 88d489ef..bfb3b50a 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -75,6 +75,22 @@ globalObserver.observe(el); }); + // Terminanfrage: Links auf die Kontaktseite mit data-open-appointment oeffnen das + // schwebende Widget statt die Seite zu wechseln. Das Anliegen kommt aus + // data-appointment-topic (z. B. der Marken-Slug). Nur einmal registrieren. + if (!window.appointmentLinksInitialized) { + document.addEventListener('click', function(e) { + const trigger = e.target.closest('a[data-open-appointment]'); + if (!trigger) return; + + e.preventDefault(); + window.dispatchEvent(new CustomEvent('open-appointment', { + detail: { topic: trigger.dataset.appointmentTopic || null } + })); + }); + window.appointmentLinksInitialized = true; + } + // Smooth Scroll für Anchor-Links (nur einmal registrieren) if (!window.smoothScrollInitialized) { document.addEventListener('click', function(e) { diff --git a/resources/js/error-reporting-sdk.js b/resources/js/error-reporting-sdk.js new file mode 100644 index 00000000..402c8a1a --- /dev/null +++ b/resources/js/error-reporting-sdk.js @@ -0,0 +1,5 @@ +/** + * Nur die benötigten SDK-Funktionen — der dynamische Import in + * error-reporting.js zieht so nicht das ganze Paket (Replay, Feedback …) nach. + */ +export { captureException, init, setTag, setUser } from '@sentry/browser'; diff --git a/resources/js/error-reporting.js b/resources/js/error-reporting.js new file mode 100644 index 00000000..6b936664 --- /dev/null +++ b/resources/js/error-reporting.js @@ -0,0 +1,128 @@ +/** + * Browserfehler an GlitchTip. + * + * Fehlerfreie Seiten laden nur diese paar Zeilen: Das Sentry-SDK wird erst + * beim ersten Fehler nachgeladen (eigener Chunk) und meldet dann genau diesen + * Fehler. Konfiguration kommt aus , das die + * Blade-Komponente x-monitoring.browser-errors setzt. + * + * Fehlgeschlagene Livewire-Requests (5xx, 419) meldet bereits der Server. + */ +const config = (() => { + const meta = document.querySelector('meta[name="pk-error-reporting"]'); + + try { + return meta ? JSON.parse(meta.content) : null; + } catch { + return null; + } +})(); + +const ALLOWED_QUERY = ['page', 'q', 'tab', 'sort']; // wie ErrorReportScrubber::AllowedQueryParameters +const TOKEN_SEGMENT = /(?<=\/)[A-Za-z0-9_-]{32,}(?=\/|$)/g; +const EMAIL = /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi; + +/** Gleiche Regeln wie ErrorReportScrubber auf dem Server. */ +function scrubUrl(value) { + try { + const url = new URL(value, window.location.origin); + url.pathname = url.pathname.replace(TOKEN_SEGMENT, '[Filtered]'); + for (const key of [...url.searchParams.keys()]) { + if (!ALLOWED_QUERY.includes(key) && !key.startsWith('utm_')) { + url.searchParams.set(key, '[Filtered]'); + } + } + url.hash = ''; + + return url.toString().replace(EMAIL, '[email]'); + } catch { + return '[Filtered]'; + } +} + +let sdk = null; + +function loadSdk() { + sdk ??= import('./error-reporting-sdk.js').then((Sentry) => { + Sentry.init({ + dsn: config.dsn, + release: config.release || undefined, + environment: config.environment, + sampleRate: config.sampleRate ?? 1, + sendDefaultPii: false, + // Eigene Listener unten statt GlobalHandlers (sonst doppelt); + // keine Breadcrumbs (Klicktexte, URLs) und keine Sessions. + integrations: (defaults) => + defaults.filter( + (integration) => + !['GlobalHandlers', 'Breadcrumbs', 'BrowserSession', 'BrowserApiErrors'].includes(integration.name), + ), + ignoreErrors: ['ResizeObserver loop', 'Script error.', 'AbortError'], + denyUrls: [/^chrome-extension:\/\//, /^moz-extension:\/\//, /^safari-(web-)?extension:\/\//], + beforeSend(event) { + if (event.request?.url) { + event.request.url = scrubUrl(event.request.url); + } + if (event.request?.headers?.Referer) { + event.request.headers.Referer = scrubUrl(event.request.headers.Referer); + } + for (const exception of event.exception?.values ?? []) { + if (exception.value) { + exception.value = exception.value.replace(EMAIL, '[email]'); + } + } + + return event; + }, + }); + + if (config.userId) { + Sentry.setUser({ id: String(config.userId) }); + } + Sentry.setTag('area', config.area); + + return Sentry; + }); + + return sdk; +} + +/** + * Promise-Ablehnungen mit Objekt statt Error kamen als „Error: [object Object]“ + * an — Typ und Inhalt mitschicken, + * damit die Quelle erkennbar ist. + */ +function rejectionToError(reason) { + if (reason instanceof Error) { + return reason; + } + + const kind = reason?.constructor?.name ?? typeof reason; + let text; + try { + text = typeof reason === 'string' ? reason : JSON.stringify(reason); + } catch { + text = String(reason); + } + + return new Error(`Unbehandelte Ablehnung (${kind}): ${String(text ?? '').slice(0, 300)}`); +} + +function capture(error) { + loadSdk() + .then((Sentry) => Sentry.captureException(error)) + .catch(() => {}); +} + +if (config?.dsn) { + window.addEventListener('error', (event) => { + // Ressourcenfehler (Bild, Skript) haben kein `error` — nur echte Skriptfehler. + if (event.error) { + capture(event.error); + } + }); + + window.addEventListener('unhandledrejection', (event) => { + capture(rejectionToError(event.reason)); + }); +} diff --git a/resources/lang/de/b2in.php b/resources/lang/de/b2in.php index 44329f1a..395e9c9f 100644 --- a/resources/lang/de/b2in.php +++ b/resources/lang/de/b2in.php @@ -5,638 +5,641 @@ return [ 'b2in' => [ 'announcement_bar' => [ 'enabled' => true, - 'id' => 'azizi-launch-2026', - 'badge' => 'NEW LAUNCH', - 'text' => 'Azizi Creek Views 4 – Exklusives Off-Market-Projekt in Dubai '.\App\Helpers\PriceHelper::formatAed(1_125_000, 'ab'), + 'id' => 'interior-rotpunkt-2026', + 'badge' => 'NEU', + 'text' => 'Rotpunkt Küchen neu bei B2in Interior – jetzt Beratungstermin sichern', + 'link_text' => 'Termin anfragen', + 'link_url' => '/contact', + ], + // Ankündigungsleiste der Immobilien-Welt – eigenes Thema, eigener Dismiss-Schlüssel. + 'announcement_bar_immobilien' => [ + 'enabled' => true, + 'id' => 'azizi-creek-views-4-2026', + 'badge' => 'NEU', + 'text' => 'Azizi Creek Views 4 – Off-Market-Projekt in Dubai ab 1.125.000 AED', 'link_text' => 'Exposé ansehen', 'link_url' => '/immobilien/azizi-creek-views-4', ], + 'appointment_widget' => [ + 'button_label' => 'Termin anfragen', + 'title' => 'Termin anfragen', + 'intro' => 'Sagen Sie uns kurz, worum es geht – wir melden uns und stimmen einen Termin ab. Persönlich, unverbindlich.', + 'success' => 'Vielen Dank! Wir melden uns zeitnah bei Ihnen und stimmen den Termin ab.', + 'whatsapp_text' => 'Hallo B2in Interior, ich hätte gern einen Beratungstermin.', + ], + 'referenzen_hero' => [ + 'title' => 'Unsere Referenzen', + 'text' => 'Hier zeigen wir ausschließlich Arbeiten, die wir tatsächlich ausgeführt haben. Der Bereich wächst mit jedem Auftrag, den wir zeigen dürfen.', + 'image' => '', + 'image_alt' => 'B2in Interior – realisierte Projekte', + ], + 'reference_projects' => [ + 'title' => 'Realisierte Projekte', + 'text' => 'Ausgeführte Arbeiten aus unseren Aufträgen, sortiert nach Marke. Entwürfe und Visualisierungen zeigen wir bewusst getrennt davon – auf den Markenseiten.', + 'empty' => 'Die ersten Projekte sind in Arbeit und erscheinen hier, sobald wir sie zeigen dürfen. Bis dahin schauen wir uns gern gemeinsam an, was für Ihre Räume möglich ist.', + ], + 'display_feed' => [ + 'title' => 'Aktuelles aus unserem Showroom', + 'text' => 'Was gerade auf dem Bildschirm im Showroom läuft, sehen Sie hier live – dieselbe Ansicht, derselbe Stand.', + 'note' => 'Der Inhalt wechselt automatisch.', + 'link_text' => 'Zu den Referenzen', + 'link_url' => '/referenzen', + 'iframe_title' => 'Live-Ansicht des Showroom-Displays', + 'display_id' => '', + ], + 'footer' => [ + 'claim' => 'Premium-Einrichtung. Persönlich gemacht.', + 'byline' => 'Marcel Scheibe', + 'links' => [ + ['label' => 'Häufige Fragen', 'url' => '/faq'], + ['label' => 'Datenschutz', 'url' => '/privacy'], + ['label' => 'AGB', 'url' => '/terms'], + ['label' => 'Cookie-Richtlinie', 'url' => '/cookie-policy'], + ['label' => 'Impressum', 'url' => '/impressum'], + ], + ], 'header' => [ 'portal_login' => 'Partner-Login', 'navigation' => [ ['label' => 'Home', 'url' => '/'], - ['label' => 'Immobilien', 'url' => '/immobilien'], - ['label' => 'Netzwerk', 'url' => '/netzwerk'], + ['label' => 'Marken', 'url' => '/marken'], + ['label' => 'Referenzen', 'url' => '/referenzen'], ['label' => 'Magazin', 'url' => '/magazin'], - ['label' => 'FAQ', 'url' => '/faq'], ['label' => 'Über B2in', 'url' => '/about'], ], ], - 'hero' => [ - 'title' => 'B2in – Wo exklusive Immobilien-Investments auf smartes Interior treffen.', - 'subtitle' => 'Ihr Partner für renditestarke internationale Immobilien und globales Supply-Chain-Management im Interior-Bereich.', - 'image' => 'b2in/hero-room.jpg', - 'image_alt' => 'B2in – Internationale Immobilien und exklusive Einrichtungskonzepte', - 'cta1_text' => 'Zu den Immobilien-Projekten', - 'cta1_link' => '/immobilien', - 'cta2_text' => 'Unser Netzwerk', - 'cta2_link' => '/netzwerk', - 'stats' => [ - 'Internationale Immobilien', - 'Exklusive Einrichtung', - 'Persönliche Beratung', + // Navigation der Immobilien-Welt. „Immobilien“ steht nicht in der Interior-Navigation + // und umgekehrt – der Welten-Wechsler in Kopf- und Fußzeile ist die einzige Brücke. + 'header_immobilien' => [ + 'portal_login' => 'Partner-Login', + 'navigation' => [ + ['label' => 'Immobilien', 'url' => '/immobilien'], + ['label' => 'Projekte', 'url' => '/immobilien#projekte'], + ['label' => 'Magazin', 'url' => '/immobilien/magazin'], + ['label' => 'Über B2in', 'url' => '/immobilien/ueber-b2in'], + ], + ], + 'hero' => [ + 'eyebrow' => 'B2in Interior', + 'title' => 'Räume aus einer Hand.
Mit starken Marken und persönlichen Lösungen.', + 'subtitle' => 'Wir vereinen CABINET, Rotpunkt Küchen, Febrü und ein Netzwerk regionaler Experten, um individuelle Interior-Lösungen für Ihr Zuhause oder Ihr Projekt zu realisieren.', + 'image' => 'b2in/hero-room.jpg', + 'image_alt' => 'B2in Interior – Premium-Einrichtung von starken Marken', + 'cta1_text' => 'Unsere Marken entdecken', + 'cta1_link' => '/marken', + 'stats' => [ + 'Deutsche Manufakturen', + 'Planung bis Montage', + 'Zwei Showrooms in Bielefeld', + ], + 'card_title' => 'B2in Interior', + 'card_text' => 'Einrichtung, die bleibt.', + 'interval' => 7, + 'slides' => [ + [ + 'image' => 'b2in/slideshow/rotpunkt-fenix-house.webp', + 'label' => 'B2in Interior', + 'caption' => 'Ein ganzes Haus, durchgängig eingerichtet', + 'alt' => 'Schnitt durch ein Haus, durchgehend mit Rotpunkt eingerichtet – Küche, Wohnen und Ankleide', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/cabinet-ankleide-solitaer-eiche-tano.webp', + 'label' => 'CABINET', + 'caption' => 'Ankleide Solitär in Eiche Tano', + 'alt' => 'Begehbare Ankleide mit Solitär in Eiche Tano unter einem Oberlicht', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/rotpunkt-kueche-mk06.webp', + 'label' => 'Rotpunkt Küchen', + 'caption' => 'Küche mit Holzinsel und Hochschrankwand', + 'alt' => 'Küche mit Kochinsel in Holz und dunkler Hochschrankwand', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/februe-active-2-0-buero.webp', + 'label' => 'Febrü', + 'caption' => 'Arbeitsplätze Active 2.0 im Loft-Büro', + 'alt' => 'Loft-Büro mit Schreibtischen Active 2.0, Rollcontainer, Sitzhockern und Lounge-Ecke', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/cabinet-schlafzimmer-wandschrank-filo-cashmere.webp', + 'label' => 'CABINET', + 'caption' => 'Wandschrank in Filo Cashmere', + 'alt' => 'Schlafzimmer mit raumhohem Wandschrank in Filo Cashmere', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/rotpunkt-kueche-mk01.webp', + 'label' => 'Rotpunkt Küchen', + 'caption' => 'Helle Küche mit Kochinsel', + 'alt' => 'Helle Küche mit Hochschränken und Insel in Holzoptik', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/cabinet-flur-schrank-eiche-tano.webp', + 'label' => 'CABINET', + 'caption' => 'Flurschrank in Eiche Tano', + 'alt' => 'Flurschrank in Eiche Tano mit beleuchtetem Innenleben', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/rotpunkt-kueche-mk10.webp', + 'label' => 'Rotpunkt Küchen', + 'caption' => 'Wohnküche mit beleuchteten Vitrinen', + 'alt' => 'Wohnküche mit beleuchteten Vitrinen und Esstisch', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/februe-elements-soul-grossraum.webp', + 'label' => 'Febrü', + 'caption' => 'Lounge und Begegnungszone mit Elements Soul', + 'alt' => 'Atrium mit Sofalandschaft Elements Soul, Bistrotischen, Sesseln und Bäumen', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/cabinet-dachschraegenschrank-filo-cashmere.webp', + 'label' => 'CABINET', + 'caption' => 'Schrank unter der Dachschräge', + 'alt' => 'Schrank unter der Dachschräge in Filo Cashmere', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/rotpunkt-bad-mk04.webp', + 'label' => 'Rotpunkt Küchen', + 'caption' => 'Bad mit Waschtisch in Holz', + 'alt' => 'Bad mit Waschtisch in Holz, runder Spiegelnische und freistehender Wanne', + 'active' => true, + ], ], - 'card_title' => 'B2in', - 'card_text' => 'Connecting Design and Property', ], 'founder_bar' => [ 'image' => 'b2in/marcel-scheibe.jpg', 'name' => 'Marcel Scheibe', 'title' => 'Gründer & CEO, B2in', - 'statement' => 'B2in by Marcel Scheibe – Ihr persönlicher Partner für internationale Immobilien und exklusive Einrichtungskonzepte.', - ], - 'synergie_section' => [ - 'title' => 'Zwei Welten. Ein Netzwerk.', - 'paragraphs' => [ - 'Wir verbinden den Immobilienkauf mit der perfekten Einrichtung. Immobilien-Investoren profitieren von unserem exklusiven Möbel-Netzwerk – Projektentwickler von unserer deutschen Vertragssicherheit im Supply-Chain-Management.', - ], - 'image' => 'b2in/best-of-two-worlds.jpg', - 'image_alt' => 'Das B2in-Ökosystem – Immobilien und Einrichtung', - 'image_caption' => 'Das B2in-Ökosystem', - ], - 'ecosystem_core' => [ - 'title' => 'Ein Ökosystem, drei Säulen', - 'subtitle' => '', - 'pillars' => [ - [ - 'icon' => 'building-office-2', - 'title' => 'Immobilien & Investments', - 'description' => 'Exklusive Off-Market-Projekte & High-Yield Renditeobjekte.', - 'link' => '/immobilien', - ], - [ - 'icon' => 'squares-2x2', - 'title' => 'Local-for-Local Marktplatz', - 'description' => 'Das Netzwerk für den regionalen Möbelfachhandel und Makler.', - 'link' => '/netzwerk', - ], - [ - 'icon' => 'clipboard-document-check', - 'title' => 'Supply-Chain-Management', - 'description' => 'Deutsche Vertragssicherheit für internationale Immobilienentwickler.', - 'link' => '/netzwerk', - ], - ], + 'statement' => 'B2in by Marcel Scheibe – Ihr persönlicher Partner für hochwertige Einrichtung und starke Marken.', ], 'vision_section' => [ - 'title' => 'Gebaut auf Expertise und Vertrauen', + 'title' => 'Gebaut auf Expertise und Vertrauen', 'paragraphs' => [ - 'B2in (Bridges2international) verbindet zwei Welten: internationale Immobilien und exklusive Einrichtungskonzepte. Als Ihr persönlicher Partner navigiere ich Sie durch beide Bereiche – mit Expertise, Netzwerk und dem Anspruch, dass jede Entscheidung auf Vertrauen basiert.', - 'Ob ein Investment in Dubai, eine Villa in Lissabon oder die maßgeschneiderte Einrichtung Ihres neuen Zuhauses durch lokale Fachexperten – bei B2in laufen alle Fäden zusammen.', + 'B2in stand ursprünglich für Bridges to International. Heute steht es ebenso für Bridges to Interior: hochwertige Einrichtung mit persönlicher Handschrift. Als Ihr Ansprechpartner verbinde ich ausgewählte Hersteller, regionale Fachexperten und ein verlässliches Netzwerk – damit aus Räumen Orte werden, die bleiben.', + 'Ob maßgefertigter Einbauschrank, neue Küche oder die vollständige Ausstattung eines Objekts: Bei B2in laufen alle Fäden zusammen. Und wer über die Einrichtung hinausdenkt, findet bei uns auch den Zugang zu internationalen Immobilien.', 'Regional verwurzelt, international vernetzt – das ist B2in.', ], 'image' => 'b2in/marcel-scheibe-about.jpg', 'image_alt' => 'Marcel Scheibe, Gründer und CEO von B2in', 'image_caption' => 'Marcel Scheibe, Gründer & CEO', ], - 'brand_worlds' => [ - 'title' => 'Unsere Welten:
Design, Immobilien und internationaler Handel', - 'subtitle' => 'Von internationalen Immobilien-Investments über exklusive Einrichtungskonzepte bis zum transatlantischen Handel – B2in verbindet die Welten, die zusammengehören.', - 'worlds' => [ - [ - 'image' => 'b2in/stileigentum.jpg', - 'title' => 'Stileigentum', - 'description' => 'Das Premium-Segment: Exklusive und hochwertige Einrichtungskonzepte für anspruchsvolle Kunden, die Qualität und Tradition schätzen.', - 'link' => env('DOMAIN_STILEIGENTUM_URL', 'https://stileigentum.test'), - 'logo' => 'img/logos/stileigentum-logo-positiv.svg', - 'logo_width' => 'w-35', - 'external' => true, - ], - [ - 'image' => 'b2in/style2own.jpg', - 'title' => 'Style2own', - 'description' => 'Der Lifestyle-Kanal: Moderne Einrichtungskonzepte für Young Professionals und trend-orientierte Kunden – urban, flexibel, inspirierend.', - 'link' => env('DOMAIN_STYLE2OWN_URL', 'https://style2own.test'), - 'logo' => 'img/logos/style2own-logo-positiv.svg', - 'logo_width' => 'w-28', - 'external' => true, - ], - [ - 'image' => 'b2in/b2a.jpg', - 'title' => 'B2A', - 'description' => 'Unsere Logistik-Power für den transatlantischen Handel. Wir ermöglichen Herstellern den direkten Zugang zu internationalen Märkten.', - 'link' => env('DOMAIN_B2A_URL', 'https://b2a.test'), - 'logo' => 'img/logos/b2a-logo-positiv.svg', - 'logo_width' => 'w-18', - 'external' => true, - ], - ], - ], - 'integriertes_modell_b2in' => [ - 'title' => 'Das Beste aus zwei Welten:
Immobilien und Einrichtung', - 'paragraphs' => [ - 'B2in verbindet, was zusammengehört: Wer eine Immobilie erwirbt, braucht die passende Einrichtung. Wer exklusiv einrichten möchte, findet über unser Netzwerk die besten lokalen Fachexperten – ergänzt durch das Sortiment europäischer Hersteller.', - 'Das Ergebnis: Ein nahtloses Erlebnis für den Kunden und neue Ertragsquellen für unsere Partner – ob Makler, Händler oder Entwickler.', - ], - 'image' => 'b2in/best-of-two-worlds.jpg', - 'image_alt' => 'Das Ergebnis für den Kunden – Immobilie und Einrichtung aus einer Hand', - 'image_caption' => 'Immobilie und Einrichtung – aus einer Hand', - ], - 'cta_section' => [ - 'title' => 'Ihr nächster Schritt', - 'subtitle' => 'Ob Immobilien-Investment, Supply-Chain-Partnerschaft oder Einrichtungs-Netzwerk – sprechen Sie direkt mit uns.', - 'button_text' => 'Kontakt aufnehmen', - 'button_link' => '/contact', - ], - 'immobilien_hero' => [ - 'title' => 'Investieren Sie in die Zukunft – Dubai, Lissabon & mehr.', - 'subtitle' => 'Exklusive Off-Market-Projekte und High-Yield-Investments. Persönlich kuratiert und begleitet von Marcel Scheibe.', - 'features' => [ - [ - 'title' => 'Off-Market', - 'description' => 'Exklusive Projekte', - 'icon' => 'lock-closed', - ], - [ - 'title' => 'High-Yield', - 'description' => 'Renditestarke Investments', - 'icon' => 'arrow-trending-up', - ], - [ - 'title' => 'Persönlich', - 'description' => 'Begleitung durch Marcel Scheibe', - 'icon' => 'user', - ], - [ - 'title' => 'International', - 'description' => 'Dubai, Lissabon & mehr', - 'icon' => 'globe-alt', - ], - ], - 'image' => 'b2in/hero-immobilien.jpg', - 'image_alt' => 'Internationale Immobilien-Investments', - 'card_title' => 'B2in Immobilien', - 'card_text' => 'Exklusive internationale Investments', - 'hub' => [ - 'title' => 'B2in Immobilien', - 'subtitle' => 'Exklusive internationale Investments', - ], - 'stats' => [ - 'Off-Market Zugang', - 'Persönliche Begleitung', - 'Renditestarke Objekte', - ], - ], - 'immobilien_projects' => [ - 'title' => 'Aktuelle Launches & Projekte', - 'subtitle' => 'Entdecken Sie unsere aktuellen Immobilien-Projekte auf internationalen Märkten.', - 'projects' => [ - 'azizi-creek-views-4' => [ - 'slug' => 'azizi-creek-views-4', - 'title' => 'Azizi Developments: Creek Views 4', - 'location' => 'Al Jaddaf, Dubai', - 'status' => 'NEW LAUNCH', - 'launch_date' => '03.03.2026', - 'price_from' => \App\Helpers\PriceHelper::formatAed(1_125_000, 'ab'), - 'image' => 'expose/a1/image-4.jpeg', - 'highlights' => [ - 'Prime Waterfront Views', - '1BR: '.\App\Helpers\PriceHelper::formatAed(1_125_000, 'ab'), - 'Exklusives 3BR Penthouse (Single Inventory)', - 'High Rental Demand & Capital Appreciation', - ], - 'quick_facts' => [ - ['icon' => 'home-modern', 'label' => 'Typen', 'value' => '1BR & 3BR Penthouse'], - ['icon' => 'squares-2x2', 'label' => 'Größe', 'value' => '543 – 2.346 sqft'], - ['icon' => 'building-office-2', 'label' => 'Einheiten', 'value' => 'Nur 132 (Limited)'], - ['icon' => 'user', 'label' => 'Entwickler', 'value' => 'Azizi Developments'], - ], - 'investment_case' => [ - 'title' => 'Starkes Investment, hohe Nachfrage.', - 'text' => 'Creek Views 4 bietet eine strategische Top-Lage in Al Jaddaf. Die Kombination aus limitiertem Angebot (nur 132 Einheiten) und Premium-Ausstattung macht dieses Projekt zur idealen Wahl für Investoren, die auf Wertsteigerung (Capital Appreciation) und hohe Mietnachfrage abzielen.', - 'views' => [ - 'Road View', - 'Sitting & Play Area View', - 'Neighbour View', - ], - ], - 'gallery' => [ - 'expose/a1/image-4.jpeg', - 'expose/a1/image-3.jpeg', - 'expose/a1/image-2.jpeg', - 'expose/a1/image-5.jpeg', - 'expose/a1/image-6.jpeg', - 'expose/a1/image-7.jpeg', - ], - 'location_info' => [ - 'title' => 'Strategische Location: Al Jaddaf', - 'map_url' => 'https://maps.google.com/?q=Al+Jaddaf+Dubai', - 'points' => [ - 'Direkte Anbindung an Dubai Creek und Waterfront', - 'Wenige Minuten bis Downtown Dubai & Burj Khalifa', - 'Exzellente Infrastruktur und wachsender Stadtteil', - ], - ], - 'contact' => [ - 'title' => 'Sichern Sie sich eine der 132 Einheiten.', - 'subtitle' => 'Ihr Ansprechpartner: Marcel Scheibe', - 'options' => [ - '' => 'Ich interessiere mich für...', - '1br' => '1 Bedroom Apartment', - '3br_penthouse' => '3BR Penthouse (Single Unit)', - 'general' => 'Allgemeine Beratung', - ], - ], - ], - ], - 'cta_text' => 'Jetzt Exposé & Verfügbarkeit anfragen', - 'cta_link' => '/contact', - ], - 'immobilien_moebel_vorteil' => [ - 'title' => 'Ihr Investment, Ihr Vorteil', - 'text' => 'Als Käufer einer B2in-Immobilie erhalten Sie exklusiven Insider-Zugang zu unserem B2in-Möbelnetzwerk. Richten Sie Ihre Immobilie zu unschlagbaren Partner-Konditionen ein.', - 'button_text' => 'Mehr zum B2in-Netzwerk', - 'button_link' => '/netzwerk', - ], - 'immobilien_trust' => [ - 'title' => 'Persönliche Begleitung', - 'paragraphs' => [ - 'Hinter jedem B2in-Investment steht Marcel Scheibe als persönlicher Ansprechpartner. Keine anonyme Plattform – sondern ein Gesicht mit Expertise, Netzwerk und dem Anspruch, dass Ihr Investment in den besten Händen ist.', - ], - 'image' => 'b2in/marcel-scheibe-about.jpg', - 'image_alt' => 'Marcel Scheibe – Persönliche Investmentbegleitung', - 'image_caption' => 'Marcel Scheibe, Gründer & CEO', - 'list' => [ - [ - 'icon' => 'calendar', - 'title' => 'Investor Evenings – Exklusive Quartals-Events im kleinen Kreis', - ], - [ - 'icon' => 'phone', - 'title' => 'Direkter Draht – Persönliches Gespräch und Terminvereinbarung', - ], - [ - 'icon' => 'shield-check', - 'title' => 'Transparenz – Von der Marktanalyse bis zum Closing begleitet', - ], - ], - ], - // ============================================================ - // IMMOBILIEN SOFT LAUNCH (v2) - Neue Sektionen - // ============================================================ - 'immobilien_hero_v2' => [ - 'title' => 'Investieren in globale Dynamik. Mit deutscher Verlässlichkeit.', - 'subtitle' => 'Exklusive Off-Market-Projekte, attraktive Renditen und eine Begleitung, die weit über den Kaufvertrag hinausgeht. Entdecken Sie den Immobilienmarkt in Dubai.', - 'cta_text' => 'Aktuelle Projekte ansehen', - 'cta_link' => '#projekte', - 'image' => 'b2in/hero-immobilien.jpg', - 'image_alt' => 'Dubai Skyline – Premium Immobilien-Investments', - ], - 'immobilien_warum_dubai' => [ - 'title' => 'Warum sich ein Investment in Dubai lohnt', - 'intro' => 'Dubai ist nicht nur eine finanzielle Entscheidung, sondern der Zugang zu einem der wachstumsstärksten Märkte der Welt. Investoren schätzen die klaren rechtlichen Strukturen und Rahmenbedingungen, die weltweit nahezu einzigartig sind:', - 'facts' => [ - [ - 'icon' => 'banknotes', - 'title' => '0 % Steuern', - 'description' => 'Keine Einkommensteuer auf Mieteinnahmen, keine Kapitalertragsteuer beim Verkauf.', - ], - [ - 'icon' => 'arrow-trending-up', - 'title' => 'Starke Renditen', - 'description' => 'Attraktive Mietrenditen von historisch 6 % bis 9 % jährlich.', - ], - [ - 'icon' => 'shield-check', - 'title' => 'Hohe Sicherheit', - 'description' => 'Ein staatlich regulierter Markt mit dem sicheren Escrow-Treuhand-System.', - ], - [ - 'icon' => 'currency-dollar', - 'title' => 'Stabile Währung', - 'description' => 'Der Dirham (AED) ist fest an den US-Dollar gekoppelt.', - ], - [ - 'icon' => 'identification', - 'title' => 'Golden Visa', - 'description' => 'Sichern Sie sich Aufenthaltsgenehmigungen über attraktive Investor-Programme.', - ], - [ - 'icon' => 'globe-alt', - 'title' => 'Hohe Nachfrage', - 'description' => 'Internationale Zuwanderung und begrenztes Angebot treiben die Nachfrage nach Wohnraum stetig nach oben.', - ], - ], - ], - 'immobilien_image_break' => [ - 'image' => 'b2in/hero-immobilien.jpg', - 'image_alt' => 'Dubai Skyline – Immobilien-Investments', - 'quote' => 'Dubai hat sich zu einem der dynamischsten Immobilienmärkte der Welt entwickelt.', - 'author' => 'Marcel Scheibe', - ], - 'immobilien_kaufprozess' => [ - 'title' => 'Klar strukturiert: Der Kaufprozess in Dubai', - 'intro' => 'Der Markt in Dubai ist schneller, digitaler und projektbezogen organisiert. Jeder Schritt ist durch das staatliche Escrow-System (Treuhandkonten nach Baufortschritt) maximal abgesichert.', - 'steps' => [ - [ - 'number' => '1', - 'title' => 'Reservierung (Booking Fee)', - 'description' => 'Mit einer Gebühr von ca. 3–10 % wird Ihre Wunsch-Einheit offiziell aus dem Verkauf genommen und für Sie blockiert.', - ], - [ - 'number' => '2', - 'title' => 'Anzahlung & Vertrag (SPA)', - 'description' => 'Nach einer ersten Anzahlung (meist 10 %) wird der offizielle Kaufvertrag, das Sales & Purchase Agreement (SPA), erstellt.', - ], - [ - 'number' => '3', - 'title' => 'Staatliche Registrierung (DLD)', - 'description' => 'Durch die Zahlung der Registrierungsgebühr (4 %) an das Dubai Land Department wird Ihr Eigentum offiziell im staatlichen Register verankert.', - ], - [ - 'number' => '4', - 'title' => 'Finaler Kaufvertrag', - 'description' => 'Ihr Eigentumsrecht ist offiziell gesichert. Die weiteren Zahlungen erfolgen streng nach Baufortschritt auf sichere Treuhandkonten.', - ], - ], - ], - 'immobilien_bruecke' => [ - 'title' => '"Der Markt spricht für sich. Meine Aufgabe ist eine andere."', - 'paragraphs' => [ - 'Für viele deutsche Investoren wirkt der Immobilienkauf in Dubai zunächst ungewohnt. In Deutschland sind wir Notare, Grundbücher und hochbürokratische Prozesse gewohnt. Dubai ist dynamischer.', - 'Ich bin nicht hier, um Ihnen den Markt zu verkaufen – die Qualität der Projekte spricht für sich. Meine Aufgabe ist es, Ihre Brücke zu sein. Als Investor, der selbst in Dubai gekauft hat, kenne ich die Praxis. Ich bin regelmäßig vor Ort, stehe im permanenten Austausch mit Bauträgern und begleite Sie durch den kompletten Prozess. Ich übersetze die internationale Geschwindigkeit in deutsche Verlässlichkeit.', - ], - 'advantage_title' => 'Ihr B2in-Vorteil', - 'advantage_text' => 'Meine Begleitung endet nicht beim Kauf. Planen Sie die lukrative Kurzzeitvermietung (z.B. Airbnb)? Über unser B2in-Netzwerk und meine Wurzeln in der Möbelbranche realisieren wir für Sie komplette Einrichtungskonzepte – für maximale Rendite bei minimalem Aufwand.', - 'cta_text' => 'Persönliches Beratungsgespräch vereinbaren', - 'cta_link' => '/contact', - 'image' => 'b2in/marcel-scheibe-about.jpg', - 'image_alt' => 'Marcel Scheibe – Persönliche Investmentbegleitung', - 'image_caption' => 'Marcel Scheibe, Gründer & CEO', - ], - 'immobilien_mindset' => [ - 'title' => 'Sind Sie der richtige Investor für Dubai?', - 'text_positive' => 'Dubai richtet sich an Menschen, die international denken. Der Staat priorisiert Effizienz, wirtschaftliche Entwicklung und enorme Geschwindigkeit. Wenn Sie an die Verschiebung weltweiter Wirtschaftszentren glauben und ein dynamisches System schätzen, ist Dubai der strategisch perfekte Baustein für Ihr Portfolio. Dann sind Sie bei uns genau richtig.', - 'text_negative' => 'Wenn Sie jedoch ein System bevorzugen, das auf langsamen Entscheidungswegen und maximaler Bürokratie aufbaut, wird dieser Markt nicht zu Ihren Erwartungen passen.', - 'closing' => 'Der Schritt ist kleiner, als Sie denken. Lassen Sie uns gemeinsam herausfinden, ob ein Investment in Dubai in Ihre Strategie passt.', - 'cta_text' => 'Unverbindliches Gespräch vereinbaren', - 'cta_link' => '/contact', - ], - - // ============================================================ - // NETZWERK SOFT LAUNCH - Kombinierte Teaser-Seite - // ============================================================ - 'netzwerk_hero' => [ - 'title' => 'Das B2in Ökosystem – Immobilien trifft Interior.', - 'subtitle' => 'Wir bauen aktuell das intelligenteste Local-for-Local Einrichtungsnetzwerk. Als Immobilienkunde von B2in profitieren Sie in Zukunft exklusiv von unserem Closed-Shop.', - 'image' => 'b2in/ecosystem-hero.jpg', - 'image_alt' => 'B2in Ökosystem – Einrichtung und Immobilien', - ], - 'netzwerk_image_break' => [ - 'image' => 'b2in/ecosystem-hero.jpg', - 'image_alt' => 'B2in Ökosystem – Einrichtung und Immobilien', - 'quote' => 'Wir verbinden, was zusammengehört: Immobilien und Einrichtung.', - 'author' => 'Marcel Scheibe', - ], - 'netzwerk_teasers' => [ - 'title' => 'Was wir aufbauen', + 'audience_switch' => [ + 'title' => 'Für Ihr Zuhause. Für Ihr Projekt.', + 'subtitle' => 'Ob einzelnes Möbelstück oder komplette Ausstattung – wir begleiten Sie mit denselben Marken, demselben Anspruch und einem persönlichen Ansprechpartner.', 'cards' => [ - [ - 'icon' => 'squares-2x2', - 'title' => 'Einrichtungsnetzwerk', - 'description' => 'Persönliche Beratung durch lokale Fachexperten, kuratierte europäische Hersteller und exklusive Konditionen für B2in-Immobilienkunden. Einrichtung, die man anfassen kann – nicht nur online bestellen.', - 'status' => 'In Entwicklung', - ], - [ - 'icon' => 'building-storefront', - 'title' => 'Für Händler & Fachhändler', - 'description' => 'Sie sind lokaler Einrichtungsexperte und möchten Teil eines Premium-Netzwerks werden? Wir verbinden Sie mit Kunden, die persönliche Beratung und Qualität schätzen.', - 'status' => 'Vorab-Registrierung möglich', - ], - [ - 'icon' => 'globe-alt', - 'title' => 'Für Entwickler & Marken', - 'description' => 'Deutsche Vertragssicherheit für internationale Immobilienentwickler. Supply-Chain-Management mit Fokus auf Termintreue, Qualitätskontrolle und Durchsetzungskraft.', - 'status' => 'Vorab-Registrierung möglich', - ], - ], - ], - 'netzwerk_cta' => [ - 'title' => 'Interesse an einer Partnerschaft?', - 'text' => 'Ob als Fachhändler, Hersteller, Makler oder Entwickler – kontaktieren Sie uns für eine Vorab-Registrierung und erfahren Sie als Erste, wenn unser Netzwerk live geht.', - 'button_text' => 'Kontakt aufnehmen', - 'button_link' => '/contact', - ], - 'netzwerk_cabinet_partner' => [ - 'badge' => 'Premiumpartner', - 'title' => 'Unser Premiumpartner: CABINET Einbauschränke', - 'lead' => 'Maßgefertigte Exzellenz für höchste Ansprüche.', - 'paragraphs' => [ - 'Im B2in-Ökosystem setzen wir auf Qualität, die Bestand hat. Wir sind stolz darauf, CABINET als Premiumpartner in unserem Netzwerk zu präsentieren. Der CABINET Store in Bielefeld (unser physischer Ankerpunkt) steht für maßgefertigte Einbaulösungen, die Design, Funktionalität und handwerkliche Präzision perfekt vereinen.', - 'Ob begehbare Kleiderschränke, smarte Raumlösungen oder exklusive Innenausbauten – CABINET liefert den Premium-Standard, den unsere Immobilien-Investoren und Entwickler für ihre High-End-Projekte fordern. Diese Partnerschaft ist ein lebendiger Beweis für unsere Philosophie: Wir verbinden internationale Immobilien mit deutscher Einrichtungsexzellenz.', - ], - 'image' => 'b2in/cabinet_logo.png', - 'image_alt' => 'CABINET Einbauschränke – Premiumpartner von B2in', - ], - 'netzwerk_immobilien_hint' => [ - 'title' => 'Schon jetzt verfügbar: Immobilien', - 'description' => 'Unser Immobilienbereich ist bereits aktiv. Entdecken Sie exklusive Off-Market-Projekte in Dubai mit persönlicher Begleitung durch Marcel Scheibe.', - 'button_text' => 'Zu den Immobilien-Projekten', - 'button_link' => '/immobilien', - ], - - 'interior_hero' => [ - 'title' => 'Exklusive Einrichtung. Lokal gedacht, international vernetzt.', - 'subtitle' => 'Das B2in-Einrichtungsnetzwerk verbindet lokale Fachexpertise mit internationalen Herstellern – persönlich, greifbar und in Ihrer Nähe.', - 'features' => [ - [ - 'title' => 'Local-for-Local', - 'description' => 'Ihr Fachhändler vor Ort', - 'icon' => 'map-pin', - ], - [ - 'title' => 'Premium-Netzwerk', - 'description' => 'Kuratierte Hersteller & Marken', - 'icon' => 'star', - ], - [ - 'title' => 'Zwei Marken', - 'description' => 'stileigentum & style2own', - 'icon' => 'squares-2x2', - ], - [ - 'title' => 'Persönlich', - 'description' => 'Beratung statt Algorithmus', - 'icon' => 'user', - ], - ], - 'image' => 'b2in/ecosystem-hero.jpg', - 'image_alt' => 'B2in Einrichtungsnetzwerk – Local-for-Local', - 'card_title' => 'B2in Interior', - 'card_text' => 'Local-for-Local Einrichtungsnetzwerk', - 'hub' => [ - 'title' => 'B2in Interior', - 'subtitle' => 'Das Einrichtungsnetzwerk', - ], - 'stats' => [ - 'Lokale Fachexperten', - 'Europäische Hersteller', - 'Persönliche Beratung', - ], - ], - 'interior_concept' => [ - 'title' => 'Was bedeutet Local-for-Local?', - 'paragraphs' => [ - 'Unser Einrichtungsnetzwerk setzt auf das, was online nicht geht: echte Beratung, echtes Anfassen, echte Expertise. Statt anonymer Plattformen vermitteln wir den direkten Kontakt zu lokalen Fachhändlern – Menschen, die ihr Handwerk verstehen und Sie persönlich begleiten.', - 'B2in verbindet diese lokalen Experten mit einem kuratierten Netzwerk europäischer Hersteller. Das Ergebnis: Zugang zu exklusiven Marken und Sortimenten, die Sie so nicht im Internet finden – aber mit der Beratungsqualität, die nur Ihr Fachhändler vor Ort bieten kann.', - ], - 'image' => 'b2in/ecosystem_result.jpg', - 'image_alt' => 'Local-for-Local – Persönliche Beratung statt anonyme Plattform', - 'image_caption' => 'Persönliche Einrichtungsberatung vor Ort', - ], - 'interior_brands' => [ - 'title' => 'Zwei Marken, ein Netzwerk', - 'subtitle' => 'Je nach Stil und Anspruch finden Sie Ihren Zugang über eine unserer zwei Einrichtungsmarken.', - 'brands' => [ - [ - 'name' => 'stileigentum', - 'tagline' => 'Premium-Einrichtung', - 'description' => 'Exklusive und hochwertige Einrichtungskonzepte für anspruchsvolle Kunden, die Qualität und Tradition schätzen. Handverlesene Hersteller, zeitlose Materialien, individuelle Beratung.', - 'audience' => 'Für Kunden, die das Besondere suchen.', - 'logo' => 'img/logos/stileigentum-logo-positiv.svg', - 'logo_width' => 'w-35', - 'link' => 'https://stileigentum.test', - ], - [ - 'name' => 'style2own', - 'tagline' => 'Design-Lifestyle', - 'description' => 'Moderne Einrichtungskonzepte für Young Professionals und trend-orientierte Kunden – urban, flexibel, inspirierend. Aktuelle Trends, smarte Lösungen, faire Preise.', - 'audience' => 'Für alle, die Design lieben.', - 'logo' => 'img/logos/style2own-logo-positiv.svg', - 'logo_width' => 'w-28', - 'link' => 'https://style2own.test', - ], - ], - ], - 'interior_zielgruppen' => [ - 'title' => 'Für wen ist das Einrichtungsnetzwerk?', - 'groups' => [ [ 'icon' => 'home', - 'title' => 'Privatpersonen', - 'description' => 'Sie richten Ihr neues Zuhause ein und wünschen sich persönliche Beratung statt endlosem Online-Scrollen? Über unser Netzwerk finden Sie lokale Fachexperten, die Ihren Stil verstehen.', + 'title' => 'Einrichtung für Ihr Zuhause', + 'description' => 'Einzelne Möbelstücke, maßgefertigte Einbaulösungen oder die komplette Einrichtung: Unsere Kernmarken und unser Fachhandels-Netzwerk begleiten Sie von der ersten Idee bis zur Montage. Besuchen Sie unsere Showrooms oder vereinbaren Sie eine persönliche Beratung.', + 'button_text' => 'Beratung anfragen', + 'button_link' => '/contact', ], [ 'icon' => 'building-office-2', - 'title' => 'Immobilien-Investoren', - 'description' => 'Sie haben über B2in ein Investment getätigt? Als Immobilienkäufer erhalten Sie exklusiven Zugang zu Partner-Konditionen für die komplette Einrichtung – aus einer Hand.', - ], - [ - 'icon' => 'clipboard-document-check', - 'title' => 'Entwickler & Makler', - 'description' => 'Sie brauchen Mustereinrichtungen, Home-Staging oder eine schlüsselfertige Ausstattung für Ihre Projekte? B2in koordiniert von der Planung bis zur Lieferung.', + 'title' => 'Ausstattung für Ihr Projekt', + 'description' => 'Vollständige Einrichtung für Objekte, Büros und Projektentwicklungen. Koordiniert aus einer Hand, von der Küche bis zur letzten Blume. Mit einem zentralen deutschen Vertragspartner und einem eingespielten Herstellernetzwerk.', + 'button_text' => 'Projekt besprechen', + 'button_link' => '/contact', ], ], ], - 'interior_process' => [ - 'title' => 'So einfach funktioniert es', + 'core_brands' => [ + 'title' => 'Unsere Kernmarken', + 'subtitle' => 'Wir arbeiten nicht mit beliebigen Katalogen, sondern mit ausgewählten Herstellern, hinter denen wir stehen – jede Marke ein Spezialist auf ihrem Gebiet.', + 'brands' => [ + [ + 'slug' => 'cabinet', + 'name' => 'CABINET', + 'tagline' => 'Einbauschränke nach Maß.', + 'teaser' => 'Maßgefertigte Schranklösungen, geplant bis auf den Millimeter – gefertigt für Räume, in denen Standard nicht genügt. Erleben Sie die Möglichkeiten in unserem Showroom in Bielefeld.', + 'image' => '', + 'logo' => '', + 'link_text' => 'Mehr zu CABINET', + 'origin_city' => 'Köln', + 'origin_distance' => 'rund 200 km', + 'origin_role' => 'Gefertigt in der Kölner Manufaktur, beraten und geplant im CABINET Store Bielefeld.', + ], + [ + 'slug' => 'rotpunkt', + 'name' => 'Rotpunkt Küchen', + 'tagline' => 'Küchen, die Haltung zeigen.', + 'teaser' => 'Premium-Küchen aus deutscher Fertigung – individuell geplant, nachhaltig gedacht und gebaut für den Mittelpunkt Ihres Zuhauses. Beratung und Planung in unserem Küchenstudio.', + 'image' => '', + 'logo' => '', + 'link_text' => 'Mehr zu Rotpunkt', + 'origin_city' => 'Bünde', + 'origin_distance' => 'rund 30 km', + 'origin_role' => 'Küchen aus eigener Fertigung in Bünde – geplant bei uns im Küchenstudio.', + ], + [ + 'slug' => 'februe', + 'name' => 'Febrü', + 'tagline' => 'Arbeiten, wo man gerne bleibt.', + 'teaser' => 'Möbel für konzentriertes Arbeiten – vom durchdachten Homeoffice bis zur kompletten Büroeinrichtung. Ergonomie und Design für Zuhause und fürs Unternehmen.', + 'image' => '', + 'logo' => '', + 'link_text' => 'Mehr zu Febrü', + 'origin_city' => 'Herford', + 'origin_distance' => 'rund 20 km', + 'origin_role' => 'Büro- und Objektmöbel aus eigener Fertigung in Herford.', + ], + [ + 'slug' => 'tischlerei', + 'name' => 'Otterpohl Möbelservice', + 'tagline' => 'Nicht easy click & buy. Aber dennoch easy to get.', + 'teaser' => 'Individuelle Möbel, Türen, Treppen, Küchen, Wandverkleidungen und Objektbau – bis hin zum kompletten Innenausbau. Tischlerhandwerk aus Rheda-Wiedenbrück.', + 'image' => '', + 'logo' => 'marken/otterpohl.png', + 'link_text' => 'Mehr zu Otterpohl', + 'origin_city' => 'Rheda-Wiedenbrück', + 'origin_distance' => 'rund 35 km', + 'origin_role' => 'Tischlerei und Innenausbau aus Rheda-Wiedenbrück – vom einzelnen Möbel bis zum ganzen Raum, inklusive Montage.', + ], + ], + ], + // Herkunfts-Sektion (Arbeitsplan 14.09., Punkt 1.3). Die Standorte kommen aus den Marken + // (origin_city, origin_distance, origin_role – Nachtrag 11), die Kartenpositionen aus + // OriginSection::MAP_POSITIONS. ⚠️ Ablauf CABINET (steps) nach Kevins Verständnis – von Marcel bestätigen lassen. + 'origin_section' => [ + 'title' => 'Aus der Region gefertigt', + 'subtitle' => 'Vier deutsche Manufakturen, drei davon in Ostwestfalen. Kurze Wege, Menschen, die wir kennen, und Qualität, die man besuchen kann.', + 'map_alt' => 'Schematische Karte: Bielefeld als Ausgangspunkt, Fertigung in Bünde, Herford, Rheda-Wiedenbrück und Köln', + 'region_label' => 'Ostwestfalen', + 'distance_suffix' => 'von Bielefeld', + 'hub' => [ + 'city' => 'Bielefeld', + 'role' => 'B2in Interior · Beratung, Planung, Showrooms', + 'x' => 400, + 'y' => 175, + ], + 'link_text' => 'Zur Marke', + 'steps_title' => 'Gefertigt in Köln, geplant in Bielefeld', + 'steps_text' => 'Am Beispiel CABINET: Die Möbel entstehen in der Kölner Fertigung. Beraten und geplant wird bei uns im CABINET Store Bielefeld, aufgemessen nach Ihrer Zusage bei Ihnen vor Ort. Aufgebaut wird vor Ort – mit der Tischlerei Otterpohl, die auf Wunsch auch das umsetzt, was im Katalog nicht steht.', 'steps' => [ [ - 'number' => '01', - 'title' => 'Beratung', - 'description' => 'Kontaktieren Sie uns oder besuchen Sie einen unserer lokalen Partner. Gemeinsam definieren wir Ihren Stil, Ihr Budget und Ihre Wünsche.', + 'title' => 'Beratung und Planung in Bielefeld', + 'description' => 'Im CABINET Store planen wir mit Ihnen bis ins Detail und stimmen jede Front und jede Innenaufteilung ab – für den Anfang reichen Fotos und grobe Maße. Nach Ihrer Zusage nehmen wir vor Ort exakt Maß.', ], [ - 'number' => '02', - 'title' => 'Auswahl', - 'description' => 'Ihr Fachhändler zeigt Ihnen kuratierte Kollektionen europäischer Hersteller – zum Anfassen, nicht nur auf dem Bildschirm.', + 'title' => 'Fertigung in Köln', + 'description' => 'CABINET fertigt Ihren Schrank in der eigenen Manufaktur – nach den exakten Maßen aus dem Aufmaß vor Ort.', ], [ - 'number' => '03', - 'title' => 'Lieferung & Einrichtung', - 'description' => 'B2in koordiniert Logistik und Lieferung. Ihr lokaler Partner begleitet die Einrichtung bis zum letzten Detail.', + 'title' => 'Aufbau vor Ort, Sonderwünsche inklusive', + 'description' => 'Die Tischlerei Otterpohl baut auf und ergänzt, was der Raum zusätzlich braucht: Blenden, Anschlüsse, Sonderlösungen.', ], ], ], - 'interior_trust' => [ - 'title' => 'Persönlich statt anonym', + // Gemeinsamer Handwerk-Abschluss jeder Markenseite (Feedback 17.09., Nachtrag 15). Erscheint auf + // allen Markenseiten außer bei Otterpohl selbst; der Link führt zur Otterpohl-Seite. + 'brand_craft' => [ + 'title' => 'Planung plus Handwerk', 'paragraphs' => [ - 'Hinter dem B2in-Einrichtungsnetzwerk steht Marcel Scheibe mit der Überzeugung, dass gute Einrichtung persönliche Beratung braucht. Kein Algorithmus ersetzt das Gespräch mit einem Experten, der Materialien kennt, Räume versteht und Ihren Stil trifft.', + 'CABINET, Rotpunkt und Febrü decken bereits eine enorme planerische und gestalterische Bandbreite ab. Es geht deshalb ausdrücklich nicht um Sonderanfertigungen um jeden Preis.', + 'Natürlich gibt es trotzdem diesen einen Fall, bei dem selbst ein hervorragendes System an seine Grenze kommt: der Übergang zur Architektur, die besondere Verkleidung, die Wand, die noch fehlt, oder der letzte Millimeter. Dann greift unsere Zusammenarbeit mit Otterpohl aus Rheda-Wiedenbrück – Tischlerhandwerk, Innenausbau und Montage aus einer Hand.', + 'Wir wägen gestalterischen Mehrwert, technische Notwendigkeit und wirtschaftliche Sinnhaftigkeit ehrlich miteinander ab. Am Ende entscheiden aber Ihre Wünsche – nicht unser Drang, Ihnen noch eine Sonderlösung zu verkaufen.', ], - 'image' => 'b2in/marcel-scheibe-about.jpg', - 'image_alt' => 'Marcel Scheibe – Das Gesicht hinter dem Einrichtungsnetzwerk', - 'image_caption' => 'Marcel Scheibe, Gründer & CEO', - 'list' => [ + 'detail' => [ + 'title' => 'Wenn das Handwerk den letzten Millimeter übernimmt', + 'paragraphs' => [ + 'Möglich sind beispielsweise passgenaue Nischenlösungen, besondere Verkleidungen, raumhohe Einbauten, Übergänge zu angrenzenden Möbeln, individuelle Lackierungen und Echtholzfurniere oder Anpassungen an die vorhandene Architektur.', + 'Bei Bedarf endet das Konzept nicht am Möbel. Auch Trockenbau, Tapeten, Fußböden, Wandgestaltung, Beleuchtung und weitere Details können einbezogen werden.', + ], + ], + 'claim' => 'Die Möglichkeiten eines Maßsystems. Die Flexibilität des Handwerks.', + 'link_text' => 'Mehr zu Otterpohl', + 'brand_slug' => 'tischlerei', + ], + 'sponsoring' => [ + 'title' => 'Regional verbunden', + 'subtitle' => 'Wir unterstützen Vereine und Organisationen aus der Region – weil Verwurzelung mehr ist als eine Adresse.', + 'logos' => [ [ - 'icon' => 'map-pin', - 'title' => 'Lokale Experten – Fachhändler in Ihrer Region, die Sie persönlich beraten', + 'name' => 'DSC Arminia Bielefeld', + 'image' => 'sponsoring/arminia-bielefeld.png', + 'text' => 'Traditionsverein aus Bielefeld – regional verwurzelt und engagiert im Vereinssport.', + 'url' => 'https://www.arminia.de', ], [ + 'name' => 'TC Bad Salzuflen', + 'image' => 'sponsoring/tc-bad-salzuflen.png', + 'text' => 'Tennisclub aus Bad Salzuflen – regional verwurzelt und engagiert im Vereinssport.', + 'url' => 'https://www.tcbadsalzuflen.de/', + ], + [ + 'name' => 'TC Hiddenhausen', + 'image' => 'sponsoring/tc-hiddenhausen.png', + 'text' => 'Tennisclub aus Hiddenhausen – regional verwurzelt und engagiert im Vereinssport.', + 'url' => 'https://tc-hiddenhausen.de/', + ], + [ + 'name' => 'TC Blau Weiss Halle', + 'image' => 'sponsoring/tc-blau-weiss-halle.jpg', + 'text' => 'Tennisclub aus Halle (Westfalen) – regional verwurzelt und engagiert im Vereinssport.', + 'url' => 'https://www.tcbw-hallewestf.de/Home', + ], + ], + ], + 'immobilien_teaser' => [ + 'title' => 'Außerdem: Internationale Immobilien', + 'text' => 'Neben der Einrichtung begleiten wir ausgewählte internationale Immobilienprojekte – persönlich kuratiert und mit klarem Blick auf Substanz.', + 'link_text' => 'Zu den Immobilien', + 'link_url' => '/immobilien', + ], + 'marken_hero' => [ + 'eyebrow' => 'B2in Interior', + 'title' => 'Unsere Marken', + 'text' => 'Wir arbeiten nicht mit beliebigen Katalogen, sondern mit ausgewählten Herstellern, hinter denen wir stehen. Jede Marke ist Spezialist auf ihrem Gebiet – und jede bringt mit, was gute Einrichtung ausmacht: Qualität, die man sieht, und Beratung, die zuhört.', + // Platzhalter aus dem Altbestand – gegen ein eigenes Motiv tauschen, sobald geliefert. + 'image' => 'b2in/b2a.jpg', + 'image_alt' => 'B2in Interior – unsere Kernmarken', + 'stats' => [ + 'Maßarbeit vom Handwerk', + 'Werk und Ausstellung erlebbar', + 'Küche, Einbau, Arbeitsplatz', + ], + ], + // Bildpause zwischen Markenblöcken und Herkunft (07.10.2026): letztes Bild der Hero-Slideshow + 'marken_image_break' => [ + 'image' => 'b2in/slideshow/rotpunkt-bad-mk04.webp', + 'image_alt' => 'Bad mit Waschtisch in Holz, runder Spiegelnische und freistehender Wanne', + 'quote' => 'Hinter jeder unserer Marken stehe ich persönlich. Ich kenne die Werke und die Menschen, die dort arbeiten.', + 'author' => 'Marcel Scheibe', + ], + 'marken_network' => [ + 'title' => 'Mehr als Marken: unser Netzwerk', + 'paragraphs' => [ + 'Gute Einrichtung endet nicht beim Möbelstück. Deshalb arbeiten wir mit Fachbetrieben und Handwerkern aus der Region zusammen – von der Aufmaß-Erstellung über die Montage bis zu angrenzenden Gewerken.', + 'Für Sie bedeutet das: ein Ansprechpartner, der die Fäden zusammenhält, statt vieler Einzelgespräche. Und Partner, die wir kennen und für deren Arbeit wir geradestehen.', + ], + 'points' => [ + [ + 'icon' => 'pencil-square', + 'title' => 'Planung & Aufmaß', + 'description' => 'Wir planen mit Ihnen gemeinsam – zunächst nach Fotos und groben Maßen. Das exakte Aufmaß vor Ort übernehmen wir nach Ihrer Zusage.', + ], + [ + 'icon' => 'wrench-screwdriver', + 'title' => 'Montage durch Fachbetriebe', + 'description' => 'Handwerker aus der Region, die wir persönlich kennen.', + ], + [ + 'icon' => 'user', + 'title' => 'Ein Ansprechpartner', + 'description' => 'Von der ersten Idee bis zur Übergabe koordiniert aus einer Hand.', + ], + ], + ], + 'marken_growth' => [ + 'enabled' => true, + 'title' => 'Unsere Markenwelt wächst', + 'text' => 'Wir erweitern unser Portfolio laufend um Hersteller, die zu unserem Anspruch passen. Sie vermissen eine bestimmte Marke oder haben einen konkreten Wunsch? Sprechen Sie uns an – oft finden wir über unser Netzwerk genau das Richtige.', + ], + 'marken_cta' => [ + 'title' => 'Lernen Sie unsere Marken kennen', + 'text' => 'Am besten dort, wo Sie sie anfassen können: in unseren Showrooms. Vereinbaren Sie einen unverbindlichen Beratungstermin – wir nehmen uns Zeit.', + 'button_text' => 'Termin anfragen', + 'button_link' => '/contact', + 'whatsapp_text' => 'Per WhatsApp schreiben', + ], + 'cta_section' => [ + 'title' => 'Ihr nächster Schritt', + 'subtitle' => 'Ob einzelnes Möbelstück, komplette Einrichtung oder Projektausstattung – sprechen Sie mit uns. Persönlich, unkompliziert, verbindlich.', + 'button_text' => 'Termin anfragen', + 'button_link' => '/contact', + ], + // Abschluss der Immobilien-Welt – fuehrt zur Kontaktseite dieser Welt. + 'cta_section_immobilien' => [ + 'title' => 'Ihr nächster Schritt', + 'subtitle' => 'Ob Exposé, Kaufprozess oder Einrichtung nach dem Kauf – sprechen Sie mit uns. Persönlich, unkompliziert, verbindlich.', + 'button_text' => 'Gespräch anfragen', + 'button_link' => '/immobilien/kontakt', + ], + + // ── Immobilien-Welt: Magazin, Über uns und FAQ ────────────────────────────── + // Inhalte aus der Zeit vor dem Interior-Relaunch (Stand Februar 2026), leicht + // angepasst und als Immobilien-Bereich gekennzeichnet. + 'magazin_list_immobilien' => [ + 'title' => 'B2in Immobilien-Magazin', + 'subtitle' => 'Marktanalysen und Praxiswissen rund um Immobilien-Investments in Dubai – Kaufprozess, Stadtteile und die Rolle der Einrichtung für die Rendite.', + 'read_more' => 'Weiterlesen', + ], + 'immobilien_about_hero' => [ + 'title' => 'B2in Immobilien: Unsere Mission', + 'quote' => '„Meine Mission ist es, zwei Welten zu verbinden, die zusammengehören: internationale Immobilien und hochwertige Einrichtung. B2in begleitet Investoren persönlich beim Kauf – und richtet die Immobilie anschließend aus einer Hand ein.

Wir bauen Brücken – zwischen europäischem Design, internationalen Märkten und dem Zuhause der Menschen.“', + 'founder_name' => 'Marcel Scheibe', + 'founder_title' => 'Gründer & CEO, B2in', + 'image' => 'b2in/about-hero.jpg', + 'image_alt' => 'Marcel Scheibe, Gründer und CEO von B2in', + 'card_title' => 'B2in Immobilien', + 'card_text' => 'Connecting Design and Property', + ], + 'immobilien_our_story' => [ + 'title' => 'Unsere Geschichte', + 'timeline' => [ + [ + 'title' => 'Die Idee', + 'description' => '2024 erkannten wir eine entscheidende Lücke: Immobilienkäufer suchen nach nahtlosen Einrichtungslösungen, und der Fachhandel vor Ort braucht Sichtbarkeit. Diese beiden Welten gehören zusammen.', + 'icon' => 'light-bulb', + ], + [ + 'title' => 'Das Fundament', + 'description' => 'Wir bauen B2in als Netzwerk auf: Einrichtungsexperten aus der Region, europäische Hersteller und Immobilienprofis – fair, transparent und mit einem persönlichen Ansprechpartner.', + 'icon' => 'rocket-launch', + ], + [ + 'title' => 'Die Erweiterung', + 'description' => '2025/2026 kommen internationale Immobilien dazu: ausgewählte Projekte in Dubai, aus eigener Investorensicht geprüft und persönlich begleitet. Die Einrichtung bleibt der Kern – beide Bereiche ergänzen sich.', + 'icon' => 'globe-alt', + ], + [ + 'title' => 'Die Vision', + 'description' => 'B2in verbindet Design und Immobilien – regional verwurzelt, international vernetzt. In jeder Region der verlässliche Partner für Immobilien-Investments und exklusive Einrichtungskonzepte.', 'icon' => 'star', - 'title' => 'Kuratierte Hersteller – Nur geprüfte europäische Qualitätsmarken', + ], + ], + 'summary' => 'Was als Vision begann, den regionalen Handel zu stärken, ist heute ein Netzwerk, das Immobilien und Einrichtung verbindet. B2in schließt die Lücke zwischen internationalen Investments und lokaler Expertise – mit Marcel Scheibe als Gesicht und Ansprechpartner.', + ], + 'immobilien_about_image_break' => [ + 'image' => 'b2in/best-of-two-worlds.jpg', + 'image_alt' => 'B2in – Immobilien und Einrichtung verbinden', + 'quote' => 'Regional verwurzelt, international vernetzt – das ist B2in.', + 'author' => 'Marcel Scheibe', + ], + 'immobilien_our_values' => [ + 'title' => 'Unsere Werte', + 'subtitle' => 'Diese sechs Grundpfeiler leiten unser tägliches Handeln und definieren, wer wir als Unternehmen sind und wofür wir stehen.', + 'values' => [ + [ + 'title' => 'Persönliche Begleitung', + 'description' => 'Vom ersten Gespräch über den Kaufprozess bis zur eingerichteten Immobilie: ein Ansprechpartner, der die Märkte aus eigener Investorensicht kennt.', + 'icon' => 'light-bulb', ], [ - 'icon' => 'shield-check', - 'title' => 'Transparente Preise – Faire Konditionen ohne versteckte Aufschläge', + 'title' => 'Konnektivität', + 'description' => 'Wir verbinden internationale Immobilienmärkte mit lokaler Expertise und europäische Manufakturen mit den Menschen, die ihre Produkte schätzen.', + 'icon' => 'globe-alt', + ], + [ + 'title' => 'Qualität', + 'description' => 'Kompromisslose Standards – bei der Auswahl der Projekte, der Prüfung der Entwickler und der Kuration der Einrichtung.', + 'icon' => 'check-badge', + ], + [ + 'title' => 'Vertrauen', + 'description' => 'Transparente Modelle und verlässliche Partnerschaften sind unser Fundament. Hinter B2in steht ein Gesicht – und das Versprechen, dass wir liefern, was wir zusagen.', + 'icon' => 'user-group', + ], + [ + 'title' => 'Verlässlichkeit', + 'description' => 'Deutsche Vertragssicherheit trifft auf die Dynamik internationaler Märkte: klare Abläufe, geprüfte Partner, abgesicherte Zahlungswege.', + 'icon' => 'arrow-path', + ], + [ + 'title' => 'Design-Exzellenz', + 'description' => 'Design ist der Kern unserer Wertschöpfung – von internationaler Architektur bis zur kuratierten Einrichtung, die aus einer Immobilie ein Zuhause macht.', + 'icon' => 'cube-transparent', + ], + ], + ], + // Kontaktseite der Immobilien-Welt (/immobilien/kontakt). Overlay über `contact_form`: + // nur Einstieg und Betreffe weichen ab, Adresse und Beschriftungen werden geerbt. + 'contact_form_immobilien' => [ + 'hero' => [ + 'title' => 'Fragen zu einem
Projekt?', + 'subtitle' => 'Ob Exposé, Kaufprozess oder Einrichtung nach dem Kauf – schreiben Sie uns. Marcel Scheibe meldet sich persönlich bei Ihnen.', + ], + ], + 'faq_immobilien' => [ + 'title' => 'Häufige Fragen zu Immobilien', + 'subtitle' => 'Antworten zu Investments in Dubai, zum Kaufprozess und dazu, wie B2in Sie dabei begleitet.', + 'questions' => [ + [ + 'question' => 'Wie funktioniert das Immobilien-Investment über B2in?', + 'answer' => 'Wir vermitteln nicht nur, wir begleiten Sie. Marcel Scheibe ist Ihr persönlicher Berater, der den Markt in Dubai aus eigener Investorensicht kennt. Nach einer Bedarfsanalyse stellen wir Ihnen ausgewählte Projekte vor, etwa von Azizi Developments. Der Kaufprozess selbst ist durch das staatliche Escrow-System in Dubai abgesichert. Ihr Vorteil als B2in-Kunde: Im Anschluss richten wir Ihre Immobilie schlüsselfertig und renditeorientiert ein.', + 'category' => '', + ], + [ + 'question' => 'Was macht B2in zu einem vertrauenswürdigen Partner?', + 'answer' => 'Vertrauen entsteht durch Transparenz und eigene Markterfahrung. B2in-Gründer Marcel Scheibe investiert selbst in die Märkte, die wir anbieten, und ist regelmäßig vor Ort, um Baufortschritte zu prüfen. Wir verbinden die Dynamik internationaler Märkte mit deutscher Verlässlichkeit und einem persönlichen Ansprechpartner, der Ihre Interessen vertritt.', + 'category' => '', + ], + [ + 'question' => 'Muss ich für den Immobilienkauf persönlich nach Dubai reisen?', + 'answer' => 'Nein, der gesamte Kaufprozess kann vollständig digital und rechtsverbindlich aus der Ferne abgewickelt werden. Das Dubai Land Department bietet hierfür sichere Prozesse. Wir empfehlen unseren Investoren zwar, sich vor Ort ein Bild von der Stadt zu machen – für den rechtssicheren Erwerb ist Ihre Anwesenheit jedoch nicht erforderlich.', + 'category' => 'Für Immobilien-Investoren', + ], + [ + 'question' => 'Was passiert nach dem Immobilienkauf? Helfen Sie bei der Einrichtung?', + 'answer' => 'Genau hier liegt der Vorteil von B2in. Unser Service endet nicht mit dem Kaufvertrag. Wir unterstützen Sie dabei, Ihre Immobilie schlüsselfertig („Turnkey“) und renditeorientiert mit Qualitätsmöbeln auszustatten – die Grundlage für eine erfolgreiche Vermietung.', + 'category' => 'Für Immobilien-Investoren', + ], + [ + 'question' => 'Welche steuerlichen Vorteile bietet ein Investment in Dubai?', + 'answer' => 'Dubai bietet ein besonderes wirtschaftliches Umfeld: Es fallen weder Einkommensteuer auf Mieteinnahmen noch Kapitalertragsteuer beim Verkauf der Immobilie an. In Kombination mit den Mietrenditen macht das den Standort für internationale Anleger interessant. Bitte lassen Sie Ihre persönliche steuerliche Situation von einem Steuerberater prüfen.', + 'category' => 'Für Immobilien-Investoren', + ], + ], + 'categories' => [ + [ + 'title' => 'Für Immobilien-Investoren', + 'icon' => 'home-modern', ], ], ], 'faq' => [ 'title' => 'Häufig gestellte Fragen', - 'subtitle' => 'Hier finden Sie Antworten auf die häufigsten Fragen zu B2in und unserem Ökosystem.', + 'subtitle' => 'Antworten auf die Fragen, die uns am häufigsten gestellt werden – zur Beratung, zur Maßanfertigung und zur Ausstattung von Projekten.', 'questions' => [ [ 'question' => 'Was ist B2in und welche Services bieten Sie an?', - 'answer' => 'B2in ist die Brücke zwischen internationalen Premium-Immobilien und exklusiven Einrichtungskonzepten. Wir bieten Immobilieninvestoren Zugang zu Off-Market-Projekten (Fokus: Dubai) und begleiten sie durch den gesamten Kaufprozess. Gleichzeitig bieten wir Bauträgern ein knallhartes Supply-Chain-Management für die Beschaffung deutscher Qualitätsmöbel und bauen ein innovatives Einrichtungsnetzwerk für lokale Händler auf.', + 'answer' => 'B2in Interior steht für hochwertige Einrichtung von starken Marken – CABINET, Rotpunkt Küchen, Febrü und Otterpohl Möbelservice – ergänzt um ein Netzwerk regionaler Fachexperten. Wir begleiten Privatkunden von der einzelnen Maßanfertigung bis zur kompletten Einrichtung und statten Objekte, Büros und Projektentwicklungen vollständig aus. Darüber hinaus begleiten wir ausgewählte internationale Immobilienprojekte.', + 'category' => '', ], [ - 'question' => 'Was bedeutet Supply-Chain-Management bei B2in?', - 'answer' => 'Für internationale Immobilienentwickler fungieren wir als verlängerter Arm in Deutschland. Wir übernehmen die operative und strategische Steuerung der Möbel- und Innenausstattungsbeschaffung. Das bedeutet: Wir sichern Lieferverträge ab, überwachen Meilensteine direkt bei den Herstellern und eskalieren bei Abweichungen sofort auf Managementebene. Unser Ziel ist absolute Vertragssicherheit und termingerechte Lieferung ohne Reibungsverluste.', + 'question' => 'Was bedeutet Projektausstattung bei B2in?', + 'answer' => 'Für Objekte, Büros und Projektentwicklungen übernehmen wir die vollständige Einrichtung – koordiniert aus einer Hand, von der Küche bis zur letzten Blume. Sie haben einen zentralen deutschen Vertragspartner und einen festen Ansprechpartner, der Planung, Hersteller und Gewerke zusammenhält. Dahinter steht ein eingespieltes Herstellernetzwerk, dessen Abläufe wir kennen – so bleibt auch ein großes Projekt übersichtlich.', + 'category' => '', ], [ - 'question' => 'Wie kann ich Partner bei B2in werden?', - 'answer' => 'Unser Netzwerk richtet sich an Immobilienentwickler, Makler und den regionalen Möbelfachhandel. Wenn Sie als Entwickler deutsche Beschaffungssicherheit suchen oder als Händler Teil unseres künftigen "Local for Local"-Netzwerks werden möchten, um qualifizierte Leads von Immobilienkäufern zu erhalten, nutzen Sie einfach unser Kontaktformular. Wir prüfen jede Partnerschaft individuell auf Qualität und Passgenauigkeit.', + 'question' => 'Wie kann ich Partner bei B2in Interior werden?', + 'answer' => 'Unser Netzwerk umfasst Fachbetriebe und Handwerker rund um die Einrichtung – vom Aufmaß über die Montage bis zu angrenzenden Gewerken. Wenn Sie Interesse an einer Zusammenarbeit haben, schreiben Sie uns über das Kontaktformular. Wir prüfen jede Partnerschaft einzeln, weil wir für die Arbeit unserer Partner geradestehen.', + 'category' => '', ], [ - 'question' => 'Wie funktioniert das Immobilien-Investment über B2in?', - 'answer' => 'Wir vermitteln nicht nur, wir begleiten Sie. Marcel Scheibe ist Ihr persönlicher Berater, der den Markt (insbesondere Dubai) aus eigener Investorensicht kennt. Nach einer Bedarfsanalyse stellen wir Ihnen exklusive Projekte vor (z. B. von Azizi Developments). Der Kaufprozess selbst ist durch das staatliche Escrow-System in Dubai maximal abgesichert. Ihr besonderer Vorteil: Als B2in-Kunde erhalten Sie im Anschluss exklusiven Zugang zu unserem Netzwerk, um Ihr Investment schlüsselfertig (Turnkey) und renditeoptimiert einrichten zu lassen.', + 'question' => 'Wie läuft eine Beratung bei Ihnen ab?', + 'answer' => 'Am Anfang steht ein Gespräch – im Showroom, telefonisch oder auf Wunsch bei Ihnen vor Ort. Für eine erste Planung reichen uns in der Regel Fotos, ein Grundriss und grobe Maße. Damit können wir bereits Ideen entwickeln, die Planung konkretisieren und Ihnen ein entsprechendes Angebot erstellen. Wenn Ihnen die Planung gefällt und Sie unser Angebot annehmen, erfolgt nach der Anzahlung das professionelle Aufmaß bei Ihnen vor Ort. Auf Grundlage dieser exakten Maße erstellen wir die Feinplanung und geben die Möbel anschließend zur Fertigung frei.', + 'category' => '', ], [ - 'question' => 'Was macht B2in zu einem vertrauenswürdigen Partner?', - 'answer' => 'Vertrauen entsteht durch Transparenz und eigene Markterfahrung. B2in-Gründer Marcel Scheibe investiert selbst in die Märkte, die wir anbieten, und ist regelmäßig vor Ort, um Baufortschritte zu prüfen. Wir verbinden die immense Dynamik internationaler Märkte (wie Dubai) mit deutscher Verlässlichkeit, striktem Vertragsmanagement und einem kuratierten Netzwerk von Premiumpartnern wie CABINET. Bei uns haben Sie immer einen persönlichen Ansprechpartner, der Ihre Interessen vertritt.', + 'question' => 'Was macht B2in Interior zu einem verlässlichen Partner?', + 'answer' => 'Wir arbeiten mit einer überschaubaren Zahl ausgewählter Hersteller statt mit beliebigen Katalogen – und stehen für deren Arbeit gerade. Hinter B2in Interior steht mit Marcel Scheibe ein Gesicht und ein fester Ansprechpartner, vom ersten Gespräch bis nach der Montage. Für die Gewerke rund um die Einrichtung arbeiten wir mit Fachbetrieben aus der Region zusammen, die wir kennen.', + 'category' => '', + ], + [ + 'question' => 'Muss ich gleich die ganze Wohnung einrichten?', + 'answer' => 'Nein. Viele Aufträge beginnen mit einem einzigen Möbelstück – einem Einbauschrank für die Dachschräge, einer neuen Küche, einem Arbeitsplatz. Ob daraus mehr wird, entscheiden Sie. Wir planen so, dass eine spätere Ergänzung passt und nicht wie ein Fremdkörper wirkt.', + 'category' => 'Für Ihr Zuhause', + ], + [ + 'question' => 'Was kostet eine Maßanfertigung im Vergleich zu Möbeln von der Stange?', + 'answer' => 'Das hängt vom Raum, den Materialien und der Ausstattung ab. Bereits auf Basis von Fotos, Grundriss und groben Maßen können wir eine konkrete Planung und ein entsprechendes Angebot erstellen. Das professionelle Aufmaß erfolgt nach Angebotsannahme und Anzahlung und dient anschließend der finalen Feinplanung und Fertigungsfreigabe; zeigen sich dabei vor Ort relevante Abweichungen, stimmen wir Anpassungen mit Ihnen ab. Maßanfertigung nutzt Flächen, die ein Standardmöbel liegen lässt – Schrägen, Nischen, ungewöhnliche Höhen. Sie zahlen für den Raum, den Sie sonst verschenken.', + 'category' => 'Für Ihr Zuhause', + ], + [ + 'question' => 'Übernehmen Sie auch die Montage?', + 'answer' => 'Ja. Lieferung und Montage laufen über uns beziehungsweise über Fachbetriebe aus unserem Netzwerk, mit denen wir regelmäßig arbeiten. Sie haben einen Ansprechpartner, der die Termine koordiniert – auch dann, wenn mehrere Gewerke beteiligt sind.', + 'category' => 'Für Ihr Zuhause', + ], + [ + 'question' => 'Kann ich mir die Marken vorher ansehen?', + 'answer' => 'Ja, im Showroom in Bielefeld lassen sich Oberflächen, Fronten und Beschläge in Ruhe anfassen und vergleichen. Fotos und Muster helfen bei der Vorauswahl, ersetzen aber nicht den direkten Eindruck. Vereinbaren Sie dafür am besten vorher einen Termin, damit wir uns Zeit nehmen können.', + 'category' => 'Für Ihr Zuhause', + ], + [ + 'question' => 'Ab welcher Größe lohnt sich eine Projektausstattung?', + 'answer' => 'Eine feste Untergrenze gibt es nicht. Sinnvoll wird die Zusammenarbeit, sobald mehrere Einheiten oder mehrere Gewerke im Spiel sind und die Koordination zum eigentlichen Aufwand wird – bei Büroflächen, möblierten Wohneinheiten oder der Ausstattung eines ganzen Objekts.', + 'category' => 'Für Projekte und Objekte', + ], + [ + 'question' => 'Wie stellen Sie Termintreue sicher?', + 'answer' => 'Wir arbeiten mit festen Lieferverträgen, verfolgen die Meilensteine direkt beim Hersteller und melden Abweichungen, sobald sie sichtbar werden – nicht erst zum Liefertermin. Bei mehreren Gewerken übernehmen wir die Abstimmung untereinander, damit die Reihenfolge auf der Baustelle stimmt.', + 'category' => 'Für Projekte und Objekte', + ], + [ + 'question' => 'Arbeiten Sie mit Architekten und Planungsbüros zusammen?', + 'answer' => 'Ja. Wir übernehmen bestehende Planungen und setzen sie um oder steigen früher ein, wenn Möblierung und Grundriss noch aufeinander abgestimmt werden müssen. Für Sonderlösungen sprechen wir direkt mit den Herstellern.', + 'category' => 'Für Projekte und Objekte', + ], + [ + 'question' => 'Wie werde ich Partner im regionalen Netzwerk?', + 'answer' => 'Unser Netzwerk umfasst Fachbetriebe und Handwerker rund um die Einrichtung – von der Montage bis zu angrenzenden Gewerken. Wenn Sie Interesse haben, schreiben Sie uns über das Kontaktformular. Wir prüfen jede Zusammenarbeit einzeln, weil wir für die Arbeit unserer Partner geradestehen.', + 'category' => 'Für Projekte und Objekte', ], ], - 'sections' => [ + 'categories' => [ [ - 'title' => 'Fokus: Immobilien-Investoren (B2C)', + 'title' => 'Für Ihr Zuhause', 'icon' => 'home-modern', - 'questions' => [ - [ - 'question' => 'Muss ich für den Immobilienkauf persönlich nach Dubai reisen?', - 'answer' => 'Nein, der gesamte Kaufprozess kann vollständig digital und rechtsverbindlich aus der Ferne abgewickelt werden. Das Dubai Land Department bietet hierfür hochsichere Prozesse. Wir empfehlen unseren Investoren zwar gerne, sich vor Ort ein Bild von der Dynamik der Stadt zu machen, für den rechtssicheren Erwerb ist Ihre physische Anwesenheit jedoch nicht zwingend erforderlich.', - ], - [ - 'question' => 'Was passiert nach dem Immobilienkauf? Helfen Sie bei der Einrichtung?', - 'answer' => 'Genau hier liegt der große Vorteil des B2in-Ökosystems. Unser Service endet nicht mit dem Kaufvertrag. Als B2in-Kunde erhalten Sie exklusiven Zugang zu unserem Einrichtungsnetzwerk. Wir unterstützen Sie dabei, Ihre Immobilie renditeoptimiert und schlüsselfertig („Turnkey") mit Qualitätsmöbeln auszustatten – die perfekte Grundlage für eine lukrative Kurzzeitvermietung.', - ], - [ - 'question' => 'Welche steuerlichen Vorteile bietet ein Investment in Dubai?', - 'answer' => 'Dubai bietet ein weltweit einzigartiges wirtschaftliches Umfeld. Es fallen weder Einkommensteuer auf Mieteinnahmen noch Kapitalertragsteuer beim Verkauf der Immobilie an. In Kombination mit den starken Mietrenditen macht dies den Standort für internationale Anleger strategisch so wertvoll.', - ], - ], ], [ - 'title' => 'Fokus: B2B-Partner (Makler & Händler)', + 'title' => 'Für Projekte und Objekte', 'icon' => 'briefcase', - 'questions' => [ - [ - 'question' => 'Wie profitieren Immobilienmakler von einer Partnerschaft mit B2in?', - 'answer' => 'B2in bietet Maklern ein exklusives Werkzeug zur Kundenbindung: Sie können Ihren Immobilienkäufern den Zugang zu unserem geschlossenen Einrichtungsnetzwerk als exklusives „Closing-Geschenk" überreichen. Gleichzeitig profitieren Sie als Makler durch unser technisches Clearing-System von einer passiven Lifetime-Vergütung an den Möbelumsätzen Ihrer Kunden.', - ], - [ - 'question' => 'Was genau ist der „Local for Local" Marktplatz?', - 'answer' => 'Unser „Local for Local"-Prinzip ist der Gegenentwurf zu anonymen Online-Möbelgiganten. Wir machen die sofort verfügbaren Bestände und Ausstellungsstücke regionaler Fachhändler (Säule „Local Express") für einen geschlossenen Kundenkreis transparent. So stärken wir den lokalen Handel vor Ort und bieten Käufern gleichzeitig Insider-Konditionen für Premium-Einrichtung.', - ], - [ - 'question' => 'Ist das Einrichtungsnetzwerk für jeden öffentlich zugänglich?', - 'answer' => 'Nein. Um die exklusiven Insider-Konditionen und Rabatte unserer Hersteller und lokalen Händler zu schützen, agiert der B2in-Möbelmarktplatz als „Closed Shop". Der Zugang erfolgt ausschließlich über Einladungen – beispielsweise durch unsere Partner-Makler beim Erwerb einer Immobilie.', - ], - ], ], ], ], 'contact_form' => [ 'hero' => [ + 'eyebrow' => 'Kontakt', 'title' => 'Senden Sie uns eine
Nachricht.', 'subtitle' => 'Wir freuen uns auf Ihre Nachricht und werden uns schnellstmöglich bei Ihnen melden.', ], @@ -650,25 +653,48 @@ return [ 'subject' => 'Betreff *', 'message' => 'Ihre Nachricht *', ], - 'subjects' => [ - '' => 'Wählen Sie einen Betreff', - 'immobilien' => 'Internationale Immobilien', - 'supply_chain' => 'Supply-Chain-Management', - 'general' => 'Allgemeine Anfrage', - 'partnership' => 'Partnerschaft', - 'press' => 'Presse', - 'career' => 'Karriere', + 'subject_placeholder' => 'Wählen Sie einen Betreff', + // Betreffe in Gruppen. Die Kernmarken aus dem CMS stehen automatisch am + // Anfang der Gruppe „Interior“; die Welt der Seite bestimmt die Reihenfolge. + 'subject_groups' => [ + 'interior' => [ + 'label' => 'Interior', + 'subjects' => [ + 'beratung' => 'Beratungstermin', + 'massanfertigung' => 'Maßanfertigung für mein Zuhause', + 'kueche' => 'Küchenplanung', + 'supply_chain' => 'Ausstattung für Projekte', + ], + ], + 'immobilien' => [ + 'label' => 'Immobilien', + 'subjects' => [ + 'immobilien' => 'Beratung zum Investment', + 'expose' => 'Exposé und Verfügbarkeit', + 'kaufprozess' => 'Fragen zum Kaufprozess', + 'einrichtung' => 'Einrichtung nach dem Kauf', + ], + ], + 'b2in' => [ + 'label' => 'B2in', + 'subjects' => [ + 'partnership' => 'Zusammenarbeit im Netzwerk', + 'general' => 'Allgemeine Anfrage', + 'press' => 'Presse', + 'career' => 'Karriere', + ], + ], ], 'placeholders' => [ - 'message' => 'Ihre Nachricht...', + 'message' => 'Ihre Nachricht …', ], 'button_text' => 'Senden', - 'button_loading' => 'Wird gesendet...', + 'button_loading' => 'Wird gesendet …', 'success_message' => 'Vielen Dank für Ihre Nachricht! Wir werden uns schnellstmöglich bei Ihnen melden.', ], 'contact_info' => [ [ - 'title' => 'Unser Büro-Standort', + 'title' => 'Unser Bürostandort', 'info' => [ 'Rathausstraße 11', '33602 Bielefeld', @@ -683,816 +709,232 @@ return [ 'icon' => 'mail', ], [ - 'title' => 'Unser Kontakt-Nummer', + 'title' => 'Unsere Telefonnummer', 'info' => [ '+49 (0) 5221 9255055', ], 'icon' => 'phone', ], ], - 'social_media' => [ - 'title' => 'Follow for
exclusives', - 'subtitle' => 'Bleiben Sie auf dem Laufenden mit exklusiven Angeboten und News.', - 'platforms' => [ - ['name' => 'Instagram', 'handle' => '@b2in_official', 'url' => 'https://instagram.com/b2in_official'], - ['name' => 'Youtube', 'handle' => 'B2IN Channel', 'url' => 'https://youtube.com/@b2in'], - ['name' => 'Pinterest', 'handle' => 'B2IN Inspiration', 'url' => 'https://pinterest.com/b2in'], - ['name' => 'Facebook', 'handle' => 'B2IN Deutschland', 'url' => 'https://facebook.com/b2in'], - ['name' => 'LinkedIn', 'handle' => 'B2IN Company', 'url' => 'https://linkedin.com/company/b2in'], - ], - ], ], 'about_hero' => [ - 'title' => 'Über B2in: Unsere Mission', - 'quote' => '"Meine Mission ist es, zwei Welten zu verbinden, die zusammengehören: internationale Immobilien und exklusive Einrichtung. B2in gibt dem lokalen Fachexperten die digitalen Werkzeuge und den Immobilienentwickler den operativen Partner vor Ort.

Wir bauen Brücken – zwischen europäischem Design, internationalen Märkten und dem Zuhause der Menschen."', + 'eyebrow' => 'Über B2in', + 'title' => 'Unsere Mission', + 'quote' => '„Gute Einrichtung entsteht nicht im Katalog, sondern im Gespräch. Deshalb arbeiten wir mit wenigen ausgewählten Herstellern, die wir kennen – und mit Fachbetrieben aus der Region, für deren Arbeit wir geradestehen.

Mein Anspruch ist einfach: ein Ansprechpartner, vom ersten Gespräch bis nach der Montage.“', 'founder_name' => 'Marcel Scheibe', 'founder_title' => 'Gründer & CEO, B2in', 'image' => 'b2in/about-hero.jpg', 'image_alt' => 'Marcel Scheibe, Gründer und CEO von B2in', 'card_title' => 'B2in', - 'card_text' => 'Connecting Design and Property', + 'card_text' => 'Premium-Einrichtung. Persönlich gemacht.', ], - 'broker_section' => [ - 'title' => 'Lifetime Vergütung für Makler', - 'subtitle' => 'Profitieren Sie von einem revolutionären Vergütungsmodell, das über den einmaligen Verkauf hinausgeht. Bauen Sie langfristige Kundenbeziehungen auf und generieren Sie kontinuierliche Erträge.', - 'card_title' => 'Lifetime-Vergütung', - 'compensation' => [ - 'initial_sale' => '3.5%', - 'follow_up' => '1.5%', - ], - 'compensation_text' => 'Kontinuierliche Erträge über die gesamte Kundenbeziehung', - 'benefits' => [ - [ - 'title' => 'Lifetime-Vergütungsmodell', - 'description' => 'Kontinuierliche Provisionen durch langfristige Kundenbeziehungen und wiederkehrende Geschäfte', - 'icon' => 'trending-up', - ], - [ - 'title' => 'Schnellere Vermarktung', - 'description' => 'Durchdachte Wohnkonzepte reduzieren die Verkaufszeit und erhöhen die Erfolgschancen', - 'icon' => 'clock', - ], - [ - 'title' => 'Qualifizierte Leads', - 'description' => 'Vorgefilterte, interessierte Kunden durch das B2in-Portal und Premium-Mitgliedschaften', - 'icon' => 'target', - ], - [ - 'title' => 'Premium-Positioning', - 'description' => 'Exklusive Vermarktung hochwertiger Wohnkonzepte für anspruchsvolle Zielgruppen', - 'icon' => 'award', - ], - ], - ], - 'commitment_section' => [ - 'title' => 'Das Vertrauen unserer Partner', - 'subtitle' => 'Echte Meinungen von echten Partnern. Ihr Erfolg ist unser größter Ansporn.', - 'testimonials' => [ - [ - 'image' => 'b2in/testo-1.jpg', - 'rating' => 5, - 'quote' => 'Die Zusammenarbeit mit B2in hat unsere Erwartungen übertroffen. Professionell, effizient und immer lösungsorientiert.', - 'author' => 'Max Mustermann', - 'author_title' => 'Möbelhersteller', - ], - [ - 'image' => 'b2in/testo-2.jpg', - 'rating' => 5, - 'quote' => 'Dank der B2in-Plattform konnten wir unsere Reichweite signifikant erhöhen und neue Märkte erschließen.', - 'author' => 'Erika Mustermann', - 'author_title' => 'lokaler Möbelhändler', - ], - [ - 'image' => 'b2in/testo-3.jpg', - 'rating' => 5, - 'quote' => 'Das B2in-Portal hat die Art, wie ich Immobilien vermarkte, revolutioniert. Das Staging wertet meine Objekte auf, und die Möbelprovision ist ein extrem attraktiver Zusatzverdienst.', - 'author' => 'John Doe', - 'author_title' => 'Immobilienmakler', - ], - ], - ], - 'dark_stats_section' => [ - 'stats' => [ - ['number' => '17+', 'text' => 'Years of Experience'], - ['number' => '2M', 'text' => 'Happy Guests'], - ], - 'title' => 'Economically Sound and Well-
Friendly Service for
Families and Their
Precious Belongings', - 'description' => 'We understand that every family is unique, which is why we offer personalized services tailored to meet your specific needs. From luxury amenities to budget-friendly options, we ensure every guest feels valued and comfortable.', - 'features' => [ - ['title' => 'Top Consultation', 'subtitle' => 'Expert guidance'], - ['title' => 'Finest Meal', 'subtitle' => 'Gourmet dining'], - ['title' => 'Easy Tax Reduction', 'subtitle' => 'Cost-effective'], - ], - 'image' => 'b2in/accommodation-2.jpg', - 'image_alt' => 'Luxury interior design', - ], - 'ecosystem_hero' => [ - 'title' => 'Wie unser Ökosystem Wachstum für alle Partner generiert', - 'subtitle' => 'Ein intelligentes Netzwerk, das Immobilienkäufer, lokale Fachexperten, internationale Hersteller, Makler und Entwickler nahtlos miteinander verbindet – für außergewöhnliche Immobilien- und Einrichtungserlebnisse.', - 'features' => [ - [ - 'title' => 'Immobilien', - 'description' => 'Internationale Investments', - 'icon' => 'globe-alt', - ], - [ - 'title' => 'Einrichtung', - 'description' => 'Local for Local', - 'icon' => 'cube-transparent', - ], - [ - 'title' => 'Supply Chain', - 'description' => 'Beschaffung & Kontrolle', - 'icon' => 'clipboard-document-check', - ], - [ - 'title' => 'Technologie', - 'description' => 'Digitales Herzstück', - 'icon' => 'cpu-chip', - ], - ], - 'image' => 'b2in/ecosystem-hero.jpg', - 'image_alt' => 'Ecosystem Hero Image', - 'card_title' => 'B2in Portal', - 'card_text' => 'Die Technologie dahinter, die das Ökosystem ermöglicht', - 'hub' => [ - 'title' => 'B2in Portal', - 'subtitle' => 'Die Technologie dahinter, die das Ökosystem ermöglicht', - ], - 'stats' => [ - 'Exklusive Auswahl', - 'Persönlicher Service', - 'Werte die bleiben', - ], - ], - 'ecosystem_stats' => [ - 'title' => 'Unser Ecosystem in Zahlen', - 'subtitle' => 'Zahlen, die die Stärke und das Vertrauen in unser vernetztes Geschäftsmodell widerspiegeln.', - 'stats' => [ - [ - 'number' => '1,7K+', - 'label' => 'Partner & Experten im Netzwerk', - 'description' => 'Wachsende Community von Entwicklern, Maklern, Händlern und Herstellern', - ], - [ - 'number' => '510+', - 'label' => 'Realisierte Projekte', - 'description' => 'Immobilien- und Einrichtungsprojekte durch unser Netzwerk', - ], - [ - 'number' => '98%', - 'label' => 'Partner-Zufriedenheit', - 'description' => 'Zufriedenheit über alle Ecosystem-Teilnehmer hinweg', - ], - [ - 'number' => '24/7', - 'label' => 'Partner-Support', - 'description' => 'Kontinuierliche Verfügbarkeit der digitalen Infrastruktur', - ], - ], - ], - 'ecosystem_start' => [ - 'title' => 'Alles beginnt mit dem Moment of Need:', - 'paragraphs' => [ - 'Unser Ökosystem startet beim Kunden – genau dann, wenn er ihn braucht: beim Immobilienkauf.', - 'Über den Makler erhält der Kunde Zugang zum B2in-Ökosystem. Unsere Marken style2own und stileigentum schaffen den passenden Rahmen – je nach Zielgruppe und Lebensstil.', - ], - 'image' => 'b2in/ecosystem_start.jpg', - 'image_alt' => 'Der Einstieg ins Ökosystem – über den Immobilienkauf', - 'image_caption' => 'Der Einstieg: Immobilienkauf als Trigger', - 'image_description' => 'Eine stilisierte Grafik, die zeigt, wie der Immobilienkauf den Einstieg ins B2in-Ökosystem auslöst.', - ], - 'ecosystem_hub' => [ - 'title' => 'Im Hub trifft Local for Local auf internationale Expertise', - 'paragraphs' => [ - 'Sobald ein Kunde seine Region wählt, spielt unsere Plattform ihre Stärke aus: Die "Local First"-Logik zeigt die Angebote der lokalen Fachexperten prominent an.', - 'Ergänzt wird das Sortiment durch europäische Hersteller. Und für Immobilienentwickler liefern wir die operative Beschaffung gleich mit – vom Vertrag bis zur Qualitätskontrolle.', - ], - 'image' => 'b2in/ecosystem_hub.jpg', - 'image_alt' => 'Local for Local – lokale Expertise trifft internationale Beschaffung', - 'image_caption' => 'Local for Local: Lokale Expertise, internationale Reichweite', - 'image_description' => 'Eine klare Infografik, die zeigt: [Lokales Angebot] + [Internationale Beschaffung] = Das B2in-Ökosystem.', - ], - 'ecosystem_result' => [ - 'title' => 'Ein Kreislauf, in dem jeder gewinnt', - 'paragraphs' => [ - 'In diesem Zusammenspiel entstehen klare Vorteile für jeden Teilnehmer:', - ], - 'list' => [ - [ - 'icon' => 'globe-alt', - 'title' => 'Der Immobilienentwickler erhält einen verlässlichen Partner für Beschaffung und Qualitätskontrolle in Deutschland – transparent und termingerecht.', - ], - [ - 'icon' => 'building-storefront', - 'title' => 'Der lokale Händler gewinnt qualifizierte Kunden, die er alleine nicht erreicht hätte, und stärkt seine Position vor Ort.', - ], - [ - 'icon' => 'home-modern', - 'title' => 'Der Makler bietet seinen Kunden einen einzigartigen Mehrwert nach dem Abschluss und profitiert von attraktiven Zusatzprovisionen.', - ], - ], - 'image' => 'b2in/ecosystem_result.jpg', - 'image_alt' => 'Ihr Erfolg und die Partnerschaft mit B2in', - 'image_caption' => 'Ihr Erfolg und die Partnerschaft mit B2in', - 'image_description' => 'Eine stilisierte Grafik, die zeigt, wie Ihr Erfolg und die Partnerschaft mit B2in zusammenhängen.', - ], - 'end_customer_section' => [ - 'tag' => 'Für Endkunden', - 'title' => 'Exklusive Erlebnisse für Sie', - 'subtitle' => 'Mit Ihrer persönlichen Login-Karte erhalten Sie Zugang zu einer einzigartigen Erlebniswelt, die speziell auf Ihre Wohnwünsche und Lebensstil abgestimmt ist. Entdecken Sie kuratierte Immobilien und Services, die sonst nicht verfügbar sind.', - 'benefits' => [ - [ - 'title' => 'Exklusive Login-Karte', - 'description' => 'Personalisierter Zugang zu ausgewählten Immobilienerlebnissen und Premium-Services', - 'icon' => 'credit-card', - ], - [ - 'title' => 'Personalisierte Erlebniswelt', - 'description' => 'Maßgeschneiderte Immobilienangebote basierend auf individuellen Präferenzen und Bedürfnissen', - 'icon' => 'star', - ], - [ - 'title' => 'Kuratierte Wohnkonzepte', - 'description' => 'Hochwertige, durchdachte Immobilienlösungen von verifizierten Partnern', - 'icon' => 'home', - ], - [ - 'title' => 'Qualitätsgarantie', - 'description' => 'Geprüfte Anbieter und standardisierte Qualitätsprozesse für maximale Sicherheit', - 'icon' => 'shield', - ], - ], - 'image' => 'b2in/end-customer-section.jpg', - 'image_alt' => 'End Customer Section Image', - 'card_title' => 'Login-Karte', - 'card_text' => 'Ihr Schlüssel zu exklusiven Immobilienerlebnissen', - 'card' => [ - 'title' => 'Login-Karte', - 'subtitle' => 'Ihr Schlüssel zu exklusiven Immobilienerlebnissen', - 'member_number_label' => 'Mitgliedsnummer', - 'member_number' => 'B2IN-2024-VIP', - ], - ], - 'final_commitment' => [ - 'title' => 'Were committed to
your comfort and
satisfaction for
unforgettable
experiences', - 'author' => 'Robert Wilson', - 'author_title' => 'General Manager', - ], - 'digital_core' => [ - 'title' => 'Die Technologie, die diesen Kreislauf ermöglicht', - 'subtitle' => 'Unsere zentrale Plattform ist mehr als nur Technologie. Sie ist das digitale Herzstück für transparente Prozesse, datengestützte Entscheidungen und nahtlose Zusammenarbeit im gesamten Ökosystem.', - 'features' => [ - [ - 'title' => 'Maximale Zuverlässigkeit', - 'description' => 'Unsere Plattform ist jederzeit und von überall erreichbar. Sie wächst mit Ihrem Erfolg und garantiert einen stabilen Betrieb, auf den Sie sich verlassen können.', - 'icon' => 'cloud', - 'icon_style' => 'solid', - ], - [ - 'title' => 'Kompromisslose Sicherheit', - 'description' => 'Ihre Daten und die Ihrer Kunden sind unser höchstes Gut. Wir schützen sie mit modernsten Sicherheitsarchitekturen und garantieren vollsten Datenschutz.', - 'icon' => 'shield-check', - ], - [ - 'title' => 'Zukunftsfähige Integration', - 'description' => 'Das B2in-Portal ist offen für die Zukunft. Es lässt sich nahtlos in andere Systeme integrieren und ist bereit für zukünftige Erweiterungen und Technologien.', - 'icon' => 'squares-2x2', - ], - [ - 'title' => 'Datenbasierte Einblicke', - 'description' => 'Verfolgen Sie als Makler die Aktivitäten Ihrer Kunden oder als Lieferant die Performance Ihrer Produkte – alles in Echtzeit. Treffen Sie bessere Entscheidungen auf Basis valider Daten.', - 'icon' => 'chart-bar', - 'icon_style' => 'solid', - ], - [ - 'title' => 'Intelligente Personalisierung', - 'description' => 'Künstliche Intelligenz unterstützt Sie und Ihre Kunden – von personalisierten Einrichtungsvorschlägen bis zur Automatisierung von Prozessen für maximale Effizienz.', - 'icon' => 'cpu-chip', - ], - [ - 'title' => 'Exzellente User Experience', - 'description' => 'Unsere Plattform ist für maximale Geschwindigkeit optimiert und bietet auf jedem Gerät – vom Desktop bis zum Smartphone – eine intuitive und flüssige Bedienung.', - 'icon' => 'users', - 'icon_style' => 'solid', - ], - ], - ], 'magazin_detail' => [ 'back_to_magazine' => 'Zurück zum Magazin', - 'share_article' => 'Artikel teilen', - 'cta_title' => 'Entdecken Sie mehr über Immobilien-Investments und das B2in-Ökosystem.', + 'cta_title' => 'Weitere Einblicke rund um Einrichtung, Planung und Projekte finden Sie im B2in Magazin.', 'cta_button' => 'Weitere Artikel entdecken', ], 'magazin_list' => [ 'title' => 'B2in Magazin', - 'subtitle' => 'Insights, Marktanalysen und Praxiswissen rund um Immobilien-Investments in Dubai, Einrichtungskonzepte und das B2in-Ökosystem.', + 'subtitle' => 'Praxiswissen rund ums Einrichten: Maßanfertigung, Küchenplanung, Marken und der Möbelhandel aus der Region.', 'read_more' => 'Weiterlesen', - 'load_more' => 'Weitere Artikel laden', ], 'our_story' => [ 'title' => 'Unsere Geschichte', 'timeline' => [ [ 'title' => 'Die Idee', - 'description' => '2024 erkannten wir eine entscheidende Lücke: Der lokale Fachhandel braucht digitale Sichtbarkeit und Immobilienkäufer suchen nach nahtlosen Einrichtungslösungen. Diese beiden Welten gehören zusammen.', + 'description' => '2024 war der Ausgangspunkt eine einfache Beobachtung: Wer hochwertig einrichten will, findet online viele Kataloge – aber selten jemanden, der zuhört, aufmisst und am Ende auch dafür geradesteht.', 'icon' => 'light-bulb', ], [ 'title' => 'Das Fundament', - 'description' => 'Wir entwickeln die B2in-Plattform: ein Ökosystem, das lokale Einrichtungsexperten, europäische Hersteller und Immobilienprofis auf einer gemeinsamen Plattform verbindet – fair, transparent und technologiegestützt.', + 'description' => 'Wir bauen das Netzwerk auf: ausgewählte Hersteller, Fachbetriebe und Handwerker aus der Region – verbunden durch dieselbe Grundhaltung: Zu Qualität gehört, Wort zu halten.', 'icon' => 'rocket-launch', ], [ 'title' => 'Die Erweiterung', - 'description' => '2025/2026 erweitert B2in sein Ökosystem: Internationale Immobilien und Supply-Chain-Management für Entwickler werden zur dominanten Säule. Der lokale Möbelmarktplatz bleibt als starker ergänzender Bereich bestehen.', + 'description' => '2026 rückt die Einrichtung in den Mittelpunkt: CABINET, Rotpunkt Küchen, Febrü und Otterpohl Möbelservice bilden die Kernmarken, ergänzt um ein Netzwerk regionaler Fachexperten. Internationale Immobilien bleiben als zweiter Bereich bestehen.', 'icon' => 'globe-alt', ], [ 'title' => 'Die Vision', - 'description' => 'B2in wird zum zentralen Netzwerk für "Design & Property" – regional verwurzelt, international vernetzt. In jeder Region der verlässliche Partner für Immobilien-Investments und exklusive Einrichtungskonzepte.', + 'description' => 'B2in Interior wird in der Region die erste Adresse für hochwertige Einrichtung – vom einzelnen Einbauschrank bis zur vollständigen Ausstattung. Regional verwurzelt, international vernetzt.', 'icon' => 'star', ], ], - 'summary' => 'Was als Vision begann, den lokalen Handel zu stärken, ist heute ein Netzwerk, das Immobilien und Einrichtung nahtlos verbindet. B2in schließt die Lücke zwischen internationalen Investments und lokaler Expertise – mit Marcel Scheibe als Gesicht und Ansprechpartner.', + 'summary' => 'Aus der Idee, hochwertige Einrichtung wieder persönlich zu machen, ist ein Netzwerk aus starken Marken und regionalen Fachbetrieben geworden – mit Marcel Scheibe als Gesicht und festem Ansprechpartner.', ], 'about_image_break' => [ 'image' => 'b2in/best-of-two-worlds.jpg', - 'image_alt' => 'B2in – Immobilien und Einrichtung verbinden', + 'image_alt' => 'Wohnraum halb als Planungsskizze, halb fertig eingerichtet', 'quote' => 'Regional verwurzelt, international vernetzt – das ist B2in.', 'author' => 'Marcel Scheibe', ], 'our_values' => [ 'title' => 'Unsere Werte', - 'subtitle' => 'Diese sechs Grundpfeiler leiten unser tägliches Handeln und definieren, wer wir als Unternehmen sind und wofür wir stehen.', + 'subtitle' => 'Sechs Grundsätze, an denen wir uns messen lassen – in der Beratung, in der Planung und nach der Montage.', 'values' => [ [ - 'title' => 'Innovation', - 'description' => 'Wir entwickeln digitale Lösungen, die Immobilienprofis und lokale Einrichtungsexperten gleichermaßen einen echten Wettbewerbsvorteil verschaffen.', - 'icon' => 'light-bulb', + 'title' => 'Beratung statt Verkauf', + 'description' => 'Wir fragen zuerst, wie Sie Ihre Räume nutzen, und schlagen erst danach etwas vor. Manchmal ist die richtige Antwort ein kleineres Möbelstück als gedacht.', + 'icon' => 'chat-bubble-left-right', ], [ - 'title' => 'Konnektivität', - 'description' => 'Wir verbinden internationale Immobilienmärkte mit lokaler Expertise und europäische Manufakturen mit den Menschen, die ihre Produkte schätzen.', - 'icon' => 'globe-alt', + 'title' => 'Maßarbeit', + 'description' => 'Schrägen, Nischen und ungewöhnliche Höhen sind kein Problem, sondern der Grund für eine Maßanfertigung. Wir planen auch den Raum, den ein Standardmöbel ungenutzt lässt.', + 'icon' => 'cube-transparent', ], [ - 'title' => 'Qualität', - 'description' => 'Kompromisslose Standards – bei der Auswahl unserer Partner, der Kuration der Einrichtung, der Überwachung von Lieferketten und der Technologie, die alles zusammenhält.', + 'title' => 'Ausgewählte Marken', + 'description' => 'Lieber wenige Hersteller, die wir kennen, als ein beliebiges Sortiment. Für die Marken, die wir führen, stehen wir gerade.', 'icon' => 'check-badge', ], [ - 'title' => 'Vertrauen', - 'description' => 'Transparente Modelle und verlässliche Partnerschaften sind unser Fundament. Hinter B2in steht ein Gesicht – und das Versprechen, dass wir liefern, was wir zusagen.', + 'title' => 'Regional verwurzelt', + 'description' => 'Wir arbeiten mit Fachbetrieben und Handwerkern aus der Region – Menschen, die wir kennen und die vor Ort sind, wenn es darauf ankommt.', + 'icon' => 'map-pin', + ], + [ + 'title' => 'Ein Ansprechpartner', + 'description' => 'Vom ersten Gespräch über das Aufmaß bis nach der Montage bleibt der Kontakt derselbe. Auch dann, wenn mehrere Gewerke beteiligt sind.', 'icon' => 'user-group', ], [ - 'title' => 'Nachhaltigkeit', - 'description' => 'Wir stärken den lokalen Handel, optimieren Transportwege und sorgen dafür, dass internationale Beschaffung verantwortungsvoll und effizient abläuft.', - 'icon' => 'arrow-path', - ], - [ - 'title' => 'Design-Exzellenz', - 'description' => 'Design ist der Kern unserer Wertschöpfung – von internationaler Architektur über kuratierte Einrichtung bis zur intuitiven Gestaltung unserer digitalen Plattform.', - 'icon' => 'cube-transparent', - ], - ], - ], - 'partner_benefits' => [ - 'title' => 'Warum Partner werden?', - 'subtitle' => 'Entdecken Sie die Vorteile einer Partnerschaft mit B2in und wie Sie von unserem innovativen Ecosystem profitieren können.', - 'broker' => [ - 'tag' => 'Für Makler', - 'title' => 'Revolutionäres Provisionsmodell', - 'benefits' => [ - [ - 'icon' => 'trending-up', - 'title' => 'Lifetime-Provisionsmodell', - 'description' => 'Profitieren Sie von kontinuierlichen Einnahmen durch unser innovatives Vergütungssystem', - ], - [ - 'icon' => 'target', - 'title' => 'Schnellere Vermarktung', - 'description' => 'Durchdachte Wohnkonzepte verkürzen Vermarktungszeiten und erhöhen Ihre Erfolgsquote', - ], - [ - 'icon' => 'award', - 'title' => 'Mehrwert für Ihre Kunden', - 'description' => 'Bieten Sie Ihren Kunden exklusive, kuratierte Immobilienerlebnisse', - ], - ], - 'highlight' => [ - 'value' => '3.5% - ∞', - 'text' => 'Erstprovision bis Lifetime-Vergütung', - ], - ], - 'supplier' => [ - 'tag' => 'Für Lieferanten', - 'title' => 'Globale Marktchancen', - 'benefits' => [ - [ - 'icon' => 'globe', - 'title' => 'Zugang zu internationalen Märkten', - 'description' => 'Erweitern Sie Ihre Reichweite über Grenzen hinweg mit unserem globalen Netzwerk', - ], - [ - 'icon' => 'handshake', - 'title' => 'Faire Konditionen', - 'description' => 'Transparente und partnerschaftliche Geschäftsbedingungen für nachhaltigen Erfolg', - ], - [ - 'icon' => 'settings', - 'title' => 'Einfache Produktverwaltung', - 'description' => 'Intuitive Plattform für die Verwaltung und Präsentation Ihrer Produkte', - ], - ], - 'highlight' => [ - 'image' => 'b2in/accommodation-1.jpg', - 'alt' => 'Partner success visualization', - 'value' => '500+', - 'text' => 'Erfolgreiche Partner', - ], - ], - ], - 'supply_chain_intro' => [ - 'title' => 'Supply-Chain-Management: Ihr verlängerter Arm in Deutschland.', - 'paragraphs' => [ - 'Für Immobilienentwickler, die Möbel oder Innenausstattung aus Deutschland beziehen möchten, fungieren wir als verlängerter Arm vor Ort – mit klarem Fokus auf Vertragssicherheit, Termintreue und Durchsetzungskraft.', - ], - 'list' => [ - [ - 'icon' => 'document-check', - 'title' => 'Vertragsmanagement – Ausarbeitung, Strukturierung und Absicherung von Lieferverträgen', - ], - [ + 'title' => 'Verlässlichkeit', + 'description' => 'Zusagen zu Terminen und Preisen halten wir ein. Wenn sich etwas verschiebt, sagen wir es, sobald wir es wissen – nicht erst am Liefertag.', 'icon' => 'shield-check', - 'title' => 'Vertragssicherung & Durchsetzung – Meilenstein-Überwachung, Eskalation, Nachverfolgung', - ], - [ - 'icon' => 'magnifying-glass-circle', - 'title' => 'Tracking & Qualitätskontrolle – Laufende Überwachung, persönliche Kontrolle, termingerechte Lieferung', ], ], - 'image' => 'b2in/marcel-scheibe-about.jpg', - 'image_alt' => 'Marcel Scheibe – Supply-Chain-Management', - 'image_caption' => 'Marcel Scheibe, Gründer & CEO', ], 'partner_cta' => [ 'title' => 'Wachsen Sie mit uns', 'subtitle' => 'Werden Sie Teil des B2in-Netzwerks – ob als Immobilienentwickler, Einrichtungsexperte, Hersteller oder Makler. Wir verbinden die Welten, die zusammengehören.', - 'stats' => [ - [ - 'number' => '500+', - 'label' => 'Aktive Partner', - ], - [ - 'number' => '98%', - 'label' => 'Zufriedenheitsrate', - ], - [ - 'number' => '24/7', - 'label' => 'Partner-Support', - ], - ], - 'button_text' => 'Werden Sie B2in Partner', + 'button_text' => 'Werden Sie B2in-Partner', 'button_link' => '/contact', 'small_text' => 'Entdecken Sie die Vorteile einer strategischen Partnerschaft mit B2in', ], - 'partner_hero' => [ - 'title' => 'Für Entwickler & Partner', - 'subtitle' => 'Ob Immobilienentwickler, lokaler Einrichtungsexperte, europäische Marke oder Makler – B2in ist das Netzwerk, das Ihr Geschäft mit den richtigen Partnern und Kunden verbindet.', - 'partner_types' => [ - [ - 'title' => 'Immobilienentwickler', - 'description' => 'Supply-Chain-Management aus Deutschland', - 'icon' => 'globe-alt', - ], - [ - 'title' => 'Hersteller & Marken', - 'description' => 'Kuratierter Marktzugang, intelligente Logistik', - 'icon' => 'building-office-2', - ], - [ - 'title' => 'Lokale Händler', - 'description' => 'Digitale Reichweite, exklusives Sortiment', - 'icon' => 'building-storefront', - ], - [ - 'title' => 'Makler & Bauträger', - 'description' => 'Mehrwert für Kunden, Zusatzertrag für Sie', - 'icon' => 'home-modern', - ], - ], - 'image' => 'b2in/partner-hero.jpg', - 'image_alt' => 'Partner Hero Image', - 'card_title' => 'Partner Network', - 'card_text' => 'Werden Sie Teil unseres Ecosystems', - 'hub' => [ - 'title' => 'Partner Network', - 'subtitle' => 'Werden Sie Teil unseres Ecosystems', - ], - 'connection_points' => [ - ['name' => 'Makler', 'subtext' => 'Lifetime-Modell'], - ['name' => 'Lieferanten', 'subtext' => 'Global Markets'], - ['name' => 'Erfolg', 'subtext' => 'Messbare Ziele'], - ['name' => 'Qualität', 'subtext' => 'Premium Standards'], - ], - ], - 'partner_card_section' => [ - 'title' => 'Welcher Partner-Typ sind Sie?', - 'subtitle' => 'Entdecken Sie die Vorteile einer Partnerschaft mit B2in – ob im Bereich Immobilien, Einrichtung oder Supply Chain.', - 'cards' => [ - [ - 'title' => 'Für Immobilienentwickler', - 'description' => 'Operative Steuerung Ihrer Beschaffung aus Deutschland – Vertragsmanagement, Qualitätskontrolle und termingerechte Lieferung.', - 'icon' => 'globe-alt', - 'button' => '#partner-benefits-developer', - 'button_text' => 'Ihre Vorteile als Entwickler', - ], - [ - 'title' => 'Für lokale Händler & Fachexperten', - 'description' => 'Stärken Sie Ihr Geschäft vor Ort. Erhalten Sie Zugang zu Online-Kunden und einem exklusiven, überregionalen Sortiment.', - 'icon' => 'building-storefront', - 'button' => '#partner-benefits-retailer', - 'button_text' => 'Ihre Vorteile als Händler', - ], - [ - 'title' => 'Für Hersteller & europäische Marken', - 'description' => 'Erschließen Sie neue, kuratierte Vertriebskanäle in regionalen Märkten und profitieren Sie von unserer intelligenten Logistik.', - 'icon' => 'building-office-2', - 'button' => '#partner-benefits-supplier', - 'button_text' => 'Ihre Vorteile als Hersteller', - ], - [ - 'title' => 'Für Immobilienmakler & Bauträger', - 'description' => 'Bieten Sie Ihren Kunden einen einzigartigen Mehrwert, beschleunigen Sie die Vermarktung und sichern Sie sich attraktive Zusatzprovisionen.', - 'icon' => 'home-modern', - 'button' => '#partner-benefits-broker', - 'button_text' => 'Ihre Vorteile als Makler', - ], - ], - ], - 'partner_benefits_developer' => [ - 'id' => 'partner-benefits-developer', - 'tag' => 'Ihre Vorteile als Immobilienentwickler', - 'tag_icon' => 'globe-alt', - 'tag_title' => 'Ihr verlängerter Arm in Deutschland.', - 'features' => [ - [ - 'title' => 'Vertragsmanagement', - 'description' => 'Unterstützung bei der Ausarbeitung und Strukturierung von Lieferverträgen. Definition klarer Leistungs- und Qualitätsparameter, Absicherung von Zahlungs- und Lieferbedingungen.', - 'icon' => 'document-check', - ], - [ - 'title' => 'Vertragssicherung & Durchsetzung', - 'description' => 'Aktive Überwachung der vereinbarten Meilensteine, Eskalation auf Managementebene bei Abweichungen und konsequente Nachverfolgung offener Punkte.', - 'icon' => 'shield-check', - ], - [ - 'title' => 'Tracking & Qualitätskontrolle', - 'description' => 'Laufende Produktions- und Lieferüberwachung, persönliche Kontrolle bei Bedarf und Sicherstellung termingerechter Auslieferung.', - 'icon' => 'magnifying-glass-circle', - ], - [ - 'title' => 'Netzwerk & Marktkenntnis', - 'description' => 'Direkte Anbindung an Hersteller und Entscheider in Deutschland. Wir sorgen dafür, dass Vereinbarungen nicht nur auf dem Papier bestehen, sondern tatsächlich umgesetzt werden.', - 'icon' => 'link', - ], - ], - 'highlight' => [ - 'value' => '100%', - 'text' => 'Transparenz, Verlässlichkeit und planbare Lieferung – ohne operative Reibungsverluste', - ], - 'image' => 'b2in/partner-benefits-developer.jpg', - 'image_alt' => 'Supply-Chain-Management für Immobilienentwickler', - ], - 'partner_benefits_retailer' => [ - 'id' => 'partner-benefits-retailer', - 'tag' => 'Ihre Vorteile als lokaler Händler', - 'tag_icon' => 'building-storefront', - 'tag_title' => 'Werden Sie zum digitalen Champion in Ihrer Region.', - 'features' => [ - [ - 'title' => 'Digitale Reichweite', - 'description' => 'Wir bringen Ihnen die Online-Kunden, die Sie alleine nicht erreichen. Profitieren Sie von unseren reichweitenstarken Endkunden-Marken.', - 'icon' => 'signal', - ], - [ - 'title' => 'Sortiments-Erweiterung', - 'description' => 'Ergänzen Sie Ihr Angebot mit exklusiven Herstellermarken aus unserem Portfolio – ganz ohne eigenes Lagerrisiko.', - 'icon' => 'squares-plus', - ], - [ - 'title' => 'Stärkung gegen Online-Riesen', - 'description' => 'Mit "Local First" stärken wir gezielt Ihre Position im Markt. Der Kunde sieht Ihr Angebot immer zuerst.', - 'icon' => 'shield-check', - ], - [ - 'title' => 'Faire Konditionen', - 'description' => 'Unser Provisionsmodell ist transparent und darauf ausgelegt, dass wir nur dann verdienen, wenn Sie es auch tun.', - 'icon' => 'scale', - ], - ], - 'highlight' => [ - 'value' => '+35%', - 'text' => 'Digitale Reichweite im ersten Jahr (Durchschnitt unserer Partner)', - ], - 'image' => 'b2in/partner-benefits-retailer.jpg', - 'image_alt' => 'Partner Benefits Retailer', - ], - 'partner_benefits_supplier' => [ - 'id' => 'partner-benefits-supplier', - 'tag' => 'Ihre Vorteile als Hersteller & Marke', - 'tag_icon' => 'building-office-2', - 'tag_title' => 'Erschließen Sie neue Märkte – intelligent und kuratiert.', - 'features' => [ - [ - 'title' => 'Kuratierter Vertriebskanal', - 'description' => 'Statt sich im Rauschen großer Marktplätze zu verlieren, wird Ihre Marke gezielt designaffinen Kunden in kaufkräftigen Regionen präsentiert.', - 'icon' => 'eye', - ], - [ - 'title' => 'Effiziente Logistik', - 'description' => 'Unsere Bündel-Logistik senkt Ihre Vertriebskosten. Wir managen den Sammeltransport und die komplette Abwicklung.', - 'icon' => 'truck', - ], - [ - 'title' => 'Direkter Marktzugang', - 'description' => 'Überspringen Sie den klassischen Großhandel und bauen Sie eine direkte Beziehung zu regionalen Märkten und Endkunden auf.', - 'icon' => 'map-pin', - ], - [ - 'title' => 'Skalierbares Wachstum', - 'description' => 'Starten Sie mit uns in einer Region und wachsen Sie schrittweise in weitere europäische Hubs hinein.', - 'icon' => 'chart-bar-square', - ], - ], - 'highlight' => [ - 'value' => '> 20', - 'text' => 'Kuratierte regionale Hubs als neue Vertriebskanäle in Europa', - ], - 'image' => 'b2in/partner-benefits-supplier.jpg', - 'image_alt' => 'Partner Benefits Supplier', - ], - 'partner_benefits_broker' => [ - 'id' => 'partner-benefits-broker', - 'tag' => 'Ihre Vorteile als Makler & Immobilienprofi', - 'tag_icon' => 'home-modern', - 'tag_title' => 'Mehrwert für Ihre Kunden – Mehr Ertrag für Sie.', - 'features' => [ - [ - 'title' => 'Schnellere Vermarktung durch Home Staging', - 'description' => 'Nutzen Sie unsere kuratierten Möbel-Pakete (stileigentum&style2own), um Ihre Immobilien professionell zu inszenieren. Beschleunigen Sie den Verkaufsprozess und erzielen Sie höhere Preise.', - 'icon' => 'rocket-launch', - ], - [ - 'title' => 'Einzigartiger Service nach dem Abschluss', - 'description' => 'Bieten Sie Ihren Käufern oder Mietern nach Vertragsunterzeichnung über unsere exklusive Login-Karte direkten Zugang zu einem kompletten Einrichtungsservice.', - 'icon' => 'gift', - ], - [ - 'title' => 'Attraktives Provisionsmodell', - 'description' => 'Profitieren Sie doppelt: Neben Ihrer klassischen Courtage erhalten Sie eine faire, lebenslange Provision auf alle Möbelumsätze, die Ihre Kunden über die Plattform generieren.', - 'icon' => 'currency-euro', - ], - [ - 'title' => 'Einfaches Handling', - 'description' => 'Unser digitales Makler-Portal macht es Ihnen leicht: Kunden einladen, Aktivitäten verfolgen und Provisionen transparent einsehen.', - 'icon' => 'finger-print', - ], - ], - 'highlight' => [ - 'value' => '-25%', - 'text' => 'Kürzere Vermarktungszeit für mit B2in inszenierte Objekte', - ], - 'image' => 'b2in/partner-benefits-broker.jpg', - 'image_alt' => 'Partner Benefits Broker', - ], - 'partner_process' => [ - 'title' => 'So werden Sie Partner', - 'subtitle' => 'In nur drei einfachen Schritten werden Sie Teil des B2in Ecosystems und können von allen Vorteilen unserer Partnerschaft profitieren.', - 'steps' => [ - [ - 'step' => '1', - 'title' => 'Bewerben', - 'description' => 'Erzählen Sie uns Ihre Geschichte. Füllen Sie unser kurzes Kontaktformular aus und zeigen Sie uns, was Ihre Produkte oder Ihr Geschäft auszeichnet.', - 'icon' => 'envelope', - 'image' => 'b2in/room-1.jpg', - ], - [ - 'step' => '2', - 'title' => 'Prüfung', - 'description' => 'Wir prüfen jede Anfrage persönlich. Unser Ziel ist es, ein hochwertiges und komplementäres Netzwerk aufzubauen, von dem alle profitieren.', - 'icon' => 'check-circle', - 'image' => 'b2in/room-2.jpg', - ], - [ - 'step' => '3', - 'title' => 'Onboarding', - 'description' => 'Willkommen an Bord! Wir schulen Sie persönlich im Umgang mit unserem Partner-Portal und stellen sicher, dass Sie vom ersten Tag an erfolgreich sind.', - 'icon' => 'rocket-launch', - 'image' => 'b2in/room-3.jpg', - ], - ], - 'cta' => [ - 'button_text' => ' Zum Partner-Portal', - 'button_link' => '/contact', - ], - 'cta' => [ - 'title' => 'Bereit für den nächsten Schritt?', - 'subtitle' => 'Werden Sie noch heute Teil des B2in Ecosystems und profitieren Sie von innovativen Geschäftsmodellen und nachhaltigen Erfolgsstrategien.', - 'button_text' => 'Jetzt Partner werden', - 'button_link' => '/contact', - ], - ], - - 'supplier_section' => [ - 'tag' => 'Für Lieferanten', - 'title' => 'Kuratierte Plattform für Anbieter', - 'subtitle' => 'Werden Sie Teil eines exklusiven Netzwerks hochwertiger Anbieter. Präsentieren Sie Ihre Produkte und Services einer vorqualifizierten, kaufkräftigen Zielgruppe mit höchsten Qualitätsansprüchen.', - 'benefits' => [ - [ - 'title' => 'Kuratierter Vertriebskanal', - 'description' => 'Zugang zu einer exklusiven, vorqualifizierten Kundenbasis mit hohem Qualitätsanspruch', - 'icon' => 'store', - ], - [ - 'title' => 'Selbstverwaltung', - 'description' => 'Vollständige Kontrolle über Produktpräsentation, Preisgestaltung und Verfügbarkeit', - 'icon' => 'settings', - ], - [ - 'title' => 'Zentrale Qualitätssicherung', - 'description' => 'Standardisierte Prozesse und Qualitätskontrollen für maximales Kundenvertrauen', - 'icon' => 'check-circle', - ], - [ - 'title' => 'Analytics & Insights', - 'description' => 'Detaillierte Verkaufsanalysen und Markteinblicke für optimierte Geschäftsentscheidungen', - 'icon' => 'bar-chart', - ], - ], - 'dashboard' => [ - 'title' => 'Anbieter-Dashboard', - 'stats' => [ - [ - 'label' => 'Produktsichtbarkeit', - 'value' => '94%', - ], - [ - 'label' => 'Qualitätsbewertung', - 'value' => '98%', - ], - ], - ], - ], - 'leadership_team' => [ - 'title' => 'Das Führungsteam', - 'subtitle' => 'Unser erfahrenes Team bringt jahrzehntelange Expertise in den Bereichen Technologie, Operations und Geschäftsentwicklung mit.', - 'team_tag' => 'B2IN TEAM', - 'team' => [ - [ - 'name' => 'Marcel Scheibe', - 'position' => 'Gründer & CEO', - 'expertise' => 'Visionär für die digitale Zukunft des lokalen Handels und strategischer Brückenbauer zwischen den USA und Europa.', - 'image' => 'b2in/marcel-scheibe.jpg', - ], - [ - 'name' => 'Sarah Müller', - 'position' => 'Head of Operations', - 'expertise' => 'Expertin für die Optimierung unserer europaweiten Logistikprozesse und die operative Exzellenz unserer regionalen Hubs.', - 'image' => 'b2in/sarah-mueller.jpg', - ], - [ - 'name' => 'Thomas Weber', - 'position' => 'Head of Technology', - 'expertise' => 'Technologieführer mit Fokus auf eine intuitive, skalierbare Plattform-Architektur, die Händler und Hersteller nahtlos verbindet.', - 'image' => 'b2in/thomas-weber.jpg', - ], - ], - ], // Weitere Komponenten für b2in ], ], 'articles' => [ + // ⚠️ Platzhalter-Beiträge zum neuen Interior-Auftritt. Inhaltlich bewusst allgemein + // gehalten (keine Referenzen, keine Zahlen, keine Namen) – vor dem Livegang von Marcel + // gegenlesen und bei Bedarf um echte Beispiele ergänzen. + 6 => [ + 'id' => 6, + 'slug' => 'massanfertigung-warum-der-millimeter-zaehlt', + 'title' => 'Nach Maß statt von der Stange:
Warum am Ende der Millimeter zählt – und am Anfang grobe Maße reichen', + 'subtitle' => 'Dachschrägen, Nischen, ungewöhnliche Höhen: Wo Standardmöbel an ihre Grenzen kommen, beginnt die Maßanfertigung. Und am Ende entscheiden tatsächlich wenige Millimeter darüber, ob eine Lösung wirklich perfekt in den Raum passt.', + 'image' => 'b2in/stileigentum.jpg', + 'category' => 'Einrichtung', + 'date' => '26. August 2026', + 'readTime' => '5 Min. Lesezeit', + 'author' => [ + 'name' => 'Marcel Scheibe', + 'bio' => 'Gründer & CEO von B2in Interior. Mit Wurzeln in der Möbelbranche begleitet er Kunden von der Planung bis nach der Montage.', + 'avatar' => 'b2in/marcel-scheibe.jpg', + ], + 'content' => [ + 'intro' => 'Am Anfang müssen Sie diese Millimeter aber noch gar nicht kennen. + +Für eine erste Beratung, Planung und ein konkretes Angebot reichen uns in der Regel grobe Raummaße, ein Grundriss oder ein paar Fotos. Damit können wir bereits beurteilen, was sinnvoll machbar ist, erste Ideen entwickeln und Ihre individuelle Lösung planen. + +Das exakte Aufmaß kommt später – und ist unsere Aufgabe, nicht Ihre.', + 'sections' => [ + [ + 'title' => 'Erst die Idee, dann der Millimeter', + 'content' => 'Niemand muss vor dem ersten Beratungstermin mit dem Lasermessgerät durch die Wohnung laufen. + +Für die erste Planung reichen ungefähre Breiten, Höhen und Tiefen vollkommen aus. Gemeinsam entwickeln wir daraus die passende Lösung und klären Materialien, Ausstattung, Gestaltung und Budget. + +Auf dieser Grundlage erhalten Sie von uns Ihre Planung und ein entsprechendes Angebot. + +Wenn Sie sich für die Lösung entscheiden, das Angebot annehmen und die Anzahlung erfolgt ist, kommt der nächste Schritt: das professionelle Aufmaß bei Ihnen vor Ort. + +Denn spätestens jetzt zählt tatsächlich jeder Millimeter. + +Wände sind selten vollkommen gerade, Böden nicht immer eben und gerade in älteren Gebäuden können sich Höhen, Winkel und Anschlüsse über einen Raum deutlich verändern. + +Diese Abweichungen nehmen wir exakt auf und berücksichtigen sie bei der finalen Feinplanung. + +Der Ablauf ist damit bewusst einfach: + +Grobe Maße reichen für Beratung und Angebot. Die exakten Maße übernehmen wir nach Auftragserteilung. + +Anschließend erfolgt die Fertigungsfreigabe und Ihre individuelle Einrichtung geht in die Bestellung bzw. Fertigung.', + ], + [ + 'title' => 'Der Raum, den man sonst verschenkt', + 'content' => 'Der Vorteil einer Maßanfertigung liegt nicht nur in der Optik, sondern vor allem darin, den vorhandenen Raum bestmöglich zu nutzen. + +Ein Schrank, der einer Dachschräge exakt folgt, nutzt Bereiche, die mit einem Standardmöbel häufig verloren gehen. Gleiches gilt für Nischen, schwierige Ecken, ungewöhnliche Raumhöhen oder individuelle Grundrisse. + +So entsteht Stauraum dort, wo vorher keiner war – und eine Lösung, die sich selbstverständlich in den Raum einfügt.', + ], + [ + 'title' => 'Maßanfertigung dort, wo sie Sinn ergibt', + 'content' => 'Maßanfertigung ist nicht automatisch überall die beste Lösung. + +Bei geraden Wänden, üblichen Raumhöhen und klassischen Anforderungen kann auch ein gutes Serienmöbel die vernünftigere Wahl sein. + +Deshalb beginnt unsere Beratung nicht mit der Frage, wie möglichst viel Maßanfertigung eingesetzt werden kann, sondern damit, welche Lösung für den jeweiligen Raum tatsächlich die richtige ist. + +Und wenn Maßanfertigung sinnvoll ist, sorgen wir dafür, dass am Ende genau das stimmt, was am Anfang noch gar nicht stimmen muss: der letzte Millimeter.', + ], + ], + ], + ], + 7 => [ + 'id' => 7, + 'slug' => 'kueche-planen-vom-wunsch-zum-grundriss', + 'title' => 'Küche planen:
Wie aus Wünschen ein Grundriss wird', + 'subtitle' => 'Bevor über Fronten und Farben gesprochen wird, entscheidet sich der Erfolg einer Küche an drei Fragen – und die haben mit Design zunächst wenig zu tun.', + 'image' => 'b2in/style2own.jpg', + 'category' => 'Küche', + 'date' => '20. August 2026', + 'readTime' => '6 Min. Lesezeit', + 'author' => [ + 'name' => 'Marcel Scheibe', + 'bio' => 'Gründer & CEO von B2in Interior. Mit Wurzeln in der Möbelbranche begleitet er Kunden von der Planung bis nach der Montage.', + 'avatar' => 'b2in/marcel-scheibe.jpg', + ], + 'content' => [ + 'intro' => 'Die meisten Küchengespräche beginnen bei der Front: matt oder glänzend, hell oder dunkel, Griff oder grifflos. Verständlich, denn das sieht man. Nur entscheidet sich an dieser Stelle noch gar nichts. Ob eine Küche im Alltag funktioniert, hängt an Fragen, die sich vor der ersten Farbmustertafel klären lassen – und die man später kaum noch korrigieren kann.', + 'sections' => [ + [ + 'title' => 'Frage eins: Wie kochen Sie wirklich?', + 'content' => 'Nicht, wie Sie gern kochen würden – wie Sie es tatsächlich tun. Wer täglich frisch kocht, braucht Arbeitsfläche neben dem Herd und kurze Wege zwischen Kühlschrank, Spüle und Kochfeld. Wer die Küche vor allem als Treffpunkt nutzt, plant anders: mehr Platz zum Stehen, eine Fläche, an der jemand sitzen kann, während gekocht wird. Beides sind gute Küchen, aber es sind nicht dieselben.', + ], + [ + 'title' => 'Frage zwei: Was gibt der Raum vor?', + 'content' => 'Fenster, Türen, Anschlüsse und tragende Wände bestimmen den Rahmen, bevor irgendjemand etwas plant. Manches lässt sich verlegen, manches nicht – und was es kostet, sollte auf dem Tisch liegen, bevor die Planung darauf aufbaut. Auch die Deckenhöhe gehört dazu: Sie entscheidet, ob Oberschränke bis nach oben laufen können oder ob darüber eine Staubkante entsteht.', + ], + [ + 'title' => 'Frage drei: Was soll in zehn Jahren noch stimmen?', + 'content' => 'Eine Küche bleibt lange. Fronten lassen sich in vielen Systemen später tauschen, Korpusmaße und Grundriss praktisch nicht. Es lohnt sich deshalb, bei Auszügen, Beschlägen und Arbeitsplatte auf Haltbarkeit zu achten und die Aufmerksamkeit für Modisches auf die Teile zu lenken, die austauschbar sind. Erst danach kommt die Farbe – und dann darf sie auch mutig sein.', + ], + ], + ], + ], 1 => [ 'id' => 1, - 'title' => 'Sicherheit statt Bürokratie:
Warum das Dubai Escrow-System deutsche Investoren überrascht', + 'title' => 'Sicherheit statt Bürokratie:
Warum das Dubai-Escrow-System deutsche Investoren überrascht', 'subtitle' => 'Wie das staatlich regulierte Treuhandsystem in Dubai Investorengelder konsequent schützt – und warum es internationalen Standards weit voraus ist.', 'image' => 'b2in/magazin-1.jpg', 'category' => 'Dubai Investment', - 'date' => 'März 10, 2026', - 'readTime' => '6 min read', + 'world' => 'immobilien', + 'date' => '10. März 2026', + 'readTime' => '6 Min. Lesezeit', 'author' => [ 'name' => 'Marcel Scheibe', 'bio' => 'Gründer & CEO von B2in. Marcel ist selbst Immobilien-Investor in Dubai und begleitet deutsche Käufer persönlich durch den gesamten Kaufprozess.', 'avatar' => 'b2in/marcel-scheibe.jpg', ], 'content' => [ - 'intro' => 'Deutsche Investoren schätzen beim Immobilienkauf vor allem eines: maximale Sicherheit. Der vertraute Prozess über Notar und Grundbuchamt vermittelt ein Gefühl von Kontrolle, ist jedoch oft mit langen Wartezeiten und enormer Bürokratie verbunden. Wer zum ersten Mal auf den Immobilienmarkt in Dubai blickt, ist oft überrascht von der unglaublichen Dynamik und Geschwindigkeit. Doch bedeutet dieses Tempo ein höheres Risiko? Im Gegenteil: Dubai hat mit dem Escrow-System einen der sichersten und transparentesten regulatorischen Rahmenwerke der Welt geschaffen, der Investorengelder konsequent schützt.', + 'intro' => 'Deutsche Investoren schätzen beim Immobilienkauf vor allem eines: maximale Sicherheit. Der vertraute Prozess über Notar und Grundbuchamt vermittelt ein Gefühl von Kontrolle, ist jedoch oft mit langen Wartezeiten und enormer Bürokratie verbunden. Wer zum ersten Mal auf den Immobilienmarkt in Dubai blickt, ist oft überrascht von der unglaublichen Dynamik und Geschwindigkeit. Doch bedeutet dieses Tempo ein höheres Risiko? Im Gegenteil: Dubai hat mit dem Escrow-System eines der sichersten und transparentesten regulatorischen Rahmenwerke der Welt geschaffen, das Investorengelder konsequent schützt.', 'sections' => [ [ 'title' => 'Das Escrow-System: Sicherheit durch staatlich regulierte Treuhandkonten', @@ -1515,19 +957,20 @@ return [ 'subtitle' => 'Strategische Waterfront-Location, hohe Mietnachfrage und enormes Potenzial für Wertsteigerung – Al Jaddaf ist der Hidden Champion unter Dubais Vierteln.', 'image' => 'b2in/magazin-2.jpg', 'category' => 'Dubai Investment', - 'date' => 'März 5, 2026', - 'readTime' => '7 min read', + 'world' => 'immobilien', + 'date' => '5. März 2026', + 'readTime' => '7 Min. Lesezeit', 'author' => [ 'name' => 'Marcel Scheibe', 'bio' => 'Gründer & CEO von B2in. Marcel ist selbst Immobilien-Investor in Dubai und begleitet deutsche Käufer persönlich durch den gesamten Kaufprozess.', 'avatar' => 'b2in/marcel-scheibe.jpg', ], 'content' => [ - 'intro' => 'Die Wahl der richtigen Lage ist der entscheidende Faktor für eine hohe Rendite und langfristige Wertsteigerung. Während weltbekannte Areale wie Downtown Dubai oder die Palm Jumeirah hohe Einstiegspreise aufrufen, suchen smarte Investoren nach den "Hidden Champions" – Vierteln, die vor einer massiven Aufwertung stehen. Eines der spannendsten Entwicklungsgebiete der Stadt ist aktuell Al Jaddaf. Historisch als Werft-Viertel am Dubai Creek bekannt, transformiert sich Al Jaddaf rasend schnell zu einem modernen, strategisch extrem wichtigen Knotenpunkt für exklusives Wohnen und Lifestyle.', + 'intro' => 'Die Wahl der richtigen Lage ist der entscheidende Faktor für eine hohe Rendite und langfristige Wertsteigerung. Während weltbekannte Areale wie Downtown Dubai oder die Palm Jumeirah hohe Einstiegspreise aufrufen, suchen smarte Investoren nach den „Hidden Champions“ – Vierteln, die vor einer massiven Aufwertung stehen. Eines der spannendsten Entwicklungsgebiete der Stadt ist aktuell Al Jaddaf. Historisch als Werft-Viertel am Dubai Creek bekannt, transformiert sich Al Jaddaf rasend schnell zu einem modernen, strategisch extrem wichtigen Knotenpunkt für exklusives Wohnen und Lifestyle.', 'sections' => [ [ 'title' => 'Die strategische Waterfront-Location', - 'content' => 'Al Jaddaf bietet eine seltene Kombination aus direkter Wasserlage (Waterfront) und zentraler Anbindung. Eingebettet zwischen dem historischen Dubai Creek und der modernen Erweiterung, bietet es unverbaubare Blicke auf die Skyline. Gleichzeitig sind Hotspots wie Downtown Dubai, der Burj Khalifa sowie der Dubai International Airport in nur wenigen Autominuten erreichbar. Diese Logistik macht den Standort unvergleichlich.', + 'content' => 'Al Jaddaf bietet eine seltene Kombination aus direkter Wasserlage (Waterfront) und zentraler Anbindung. Eingebettet zwischen dem historischen Dubai Creek und der modernen Erweiterung, bietet es unverbaubare Blicke auf die Skyline. Gleichzeitig sind Hotspots wie Downtown Dubai, der Burj Khalifa sowie der Dubai International Airport in nur wenigen Autominuten erreichbar. Diese Anbindung macht den Standort unvergleichlich.', ], [ 'title' => 'Hohe Mietnachfrage durch perfekte Infrastruktur', @@ -1546,39 +989,42 @@ return [ 'subtitle' => 'Warum schlüsselfertige Einrichtungskonzepte den Unterschied zwischen durchschnittlicher und Premium-Rendite ausmachen.', 'image' => 'b2in/magazin-3.jpg', 'category' => 'Rendite & Einrichtung', - 'date' => 'Februar 25, 2026', - 'readTime' => '6 min read', + 'world' => 'immobilien', + 'date' => '25. Februar 2026', + 'readTime' => '6 Min. Lesezeit', 'author' => [ 'name' => 'Marcel Scheibe', 'bio' => 'Gründer & CEO von B2in. Mit Wurzeln in der Möbelbranche verbindet Marcel Immobilien-Expertise mit Einrichtungskompetenz.', 'avatar' => 'b2in/marcel-scheibe.jpg', ], 'content' => [ - 'intro' => 'Der Kauf einer Premium-Immobilie in Dubai ist der erste Schritt zu einem erfolgreichen Investment. Doch erst die richtige Nutzung entscheidet über die tatsächliche Rendite. Besonders lukrativ ist die Kurzzeitvermietung (Short-Term-Rental, z. B. via Airbnb), die in Dubai florierende Umsätze generiert. Die Herausforderung für viele internationale Investoren: Wie richtet man eine Wohnung über Tausende Kilometer Entfernung so ein, dass sie aus der Masse heraussticht und Premium-Preise erzielt? Die Antwort lautet "Turnkey" (schlüsselfertig) – intelligente Einrichtungskonzepte, die Ästhetik, Langlebigkeit und Effizienz vereinen.', + 'intro' => 'Der Kauf einer Premium-Immobilie in Dubai ist der erste Schritt zu einem erfolgreichen Investment. Doch erst die richtige Nutzung entscheidet über die tatsächliche Rendite. Besonders lukrativ ist die Kurzzeitvermietung (Short-Term-Rental, z. B. via Airbnb), die in Dubai hohe Umsätze generiert. Die Herausforderung für viele internationale Investoren: Wie richtet man eine Wohnung aus Tausenden Kilometern Entfernung so ein, dass sie aus der Masse heraussticht und Premium-Preise erzielt? Die Antwort lautet „Turnkey“ (schlüsselfertig) – intelligente Einrichtungskonzepte, die Ästhetik, Langlebigkeit und Effizienz vereinen.', 'sections' => [ [ 'title' => 'Premium-Look für höhere Übernachtungspreise', 'content' => 'Der erste Eindruck auf Buchungsplattformen entscheidet. Ein durchschnittlich eingerichtetes Apartment erzielt durchschnittliche Preise. Maßgeschneiderte Design-Konzepte, die perfekt auf die Architektur der Immobilie und die demografische Zielgruppe (Business-Reisende oder Urlauber) abgestimmt sind, erlauben es Ihnen, sich im Premium-Segment zu positionieren und die Mieteinnahmen signifikant zu steigern.', ], [ - 'title' => 'Der "Turnkey"-Vorteil aus der Ferne', + 'title' => 'Der „Turnkey“-Vorteil aus der Ferne', 'content' => 'Niemand möchte sich aus Europa heraus um Lieferverzögerungen, fehlende Schrauben oder Handwerkertermine in Dubai kümmern. Ein intelligentes Turnkey-Konzept nimmt Ihnen diesen gesamten Prozess ab. Über das exklusive B2in-Netzwerk erhalten Käufer Zugang zu einem Service, der von der ersten Design-Skizze bis zum fertig bezogenen Bett alles abdeckt – komplett gesteuert durch deutsches Projektmanagement.', ], [ 'title' => 'Langlebigkeit durch deutsche Qualitätsstandards', - 'content' => 'Bei einer hohen Auslastung in der Kurzzeitvermietung werden Möbel stark beansprucht. Billige Ausstattungen müssen oft schon nach kurzer Zeit ersetzt werden, was die Rendite schmälert. Der Fokus auf langlebige Materialien und erstklassige Verarbeitungsqualität – oft gesichert durch Zugänge zu deutschen und europäischen Premium-Herstellern – reduziert die Instandhaltungskosten auf ein Minimum und erhält den Wert Ihres Investments.', + 'content' => 'Bei einer hohen Auslastung in der Kurzzeitvermietung werden Möbel stark beansprucht. Billige Ausstattungen müssen oft schon nach kurzer Zeit ersetzt werden, was die Rendite schmälert. Der Fokus auf langlebige Materialien und erstklassige Verarbeitungsqualität – oft gesichert durch Zugang zu deutschen und europäischen Premium-Herstellern – reduziert die Instandhaltungskosten auf ein Minimum und erhält den Wert Ihres Investments.', ], ], ], ], 4 => [ 'id' => 4, + // Offline seit 08.10.2026 – stammt aus der früheren B2in-Ausrichtung (Marktplatz, Supply-Chain-Garantien). + 'published' => false, 'title' => 'Supply-Chain-Management für Entwickler:
Warum Vertragssicherheit den Unterschied macht', 'subtitle' => 'Wie professionelles Beschaffungsmanagement aus Deutschland Bauverzögerungen verhindert und Millionen spart.', 'image' => 'b2in/magazin-4.jpg', 'category' => 'B2B & Partner', - 'date' => 'Februar 15, 2026', - 'readTime' => '7 min read', + 'date' => '15. Februar 2026', + 'readTime' => '7 Min. Lesezeit', 'author' => [ 'name' => 'Marcel Scheibe', 'bio' => 'Gründer & CEO von B2in. Als Brücke zwischen europäischen Herstellern und internationalen Entwicklern sorgt Marcel für Vertragssicherheit und Termintreue.', @@ -1589,7 +1035,7 @@ return [ 'sections' => [ [ 'title' => 'Eskalation auf Managementebene', - 'content' => 'Wenn Lieferungen ins Stocken geraten, verpuffen E-Mails oft im Kundenservice. Effektives Supply-Chain-Management erfordert Durchsetzungskraft und die richtigen Kontakte. Durch ein tief verankertes Netzwerk in der europäischen Einrichtungsbranche greifen wir bei Abweichungen sofort ein und eskalieren Probleme direkt auf Managementebene der Hersteller, um sofortige Lösungen zu erzwingen.', + 'content' => 'Wenn Lieferungen ins Stocken geraten, verpuffen E-Mails oft im Kundenservice. Effektives Supply-Chain-Management erfordert Durchsetzungskraft und die richtigen Kontakte. Durch ein tief verankertes Netzwerk in der europäischen Einrichtungsbranche greifen wir bei Abweichungen sofort ein und eskalieren Probleme direkt auf Managementebene der Hersteller, um schnelle Lösungen zu erzwingen.', ], [ 'title' => 'Aktives Vertragsmanagement statt Hoffnungsprinzip', @@ -1604,27 +1050,29 @@ return [ ], 5 => [ 'id' => 5, + // Offline seit 08.10.2026 – stammt aus der früheren B2in-Ausrichtung (Marktplatz, Supply-Chain-Garantien). + 'published' => false, 'title' => 'Local for Local:
Wie der regionale Möbelhandel die Zukunft des Wohnens prägt', 'subtitle' => 'Warum Konsumenten sich wieder nach Haptik und persönlicher Beratung sehnen – und wie digitale Marktplätze den lokalen Fachhandel stärken.', 'image' => 'b2in/magazin-5.jpg', 'category' => 'Einrichtung & Netzwerk', - 'date' => 'Februar 5, 2026', - 'readTime' => '5 min read', + 'date' => '5. Februar 2026', + 'readTime' => '5 Min. Lesezeit', 'author' => [ 'name' => 'Marcel Scheibe', 'bio' => 'Gründer & CEO von B2in. Marcel baut mit dem Local-for-Local-Konzept die Brücke zwischen digitalem Komfort und regionaler Fachhandels-Stärke.', 'avatar' => 'b2in/marcel-scheibe.jpg', ], 'content' => [ - 'intro' => 'In den letzten Jahren schien der Trend unaufhaltsam: Gigantische Online-Plattformen dominierten den Möbelmarkt. Doch der Markt wandelt sich. Konsumenten sehnen sich wieder nach Haptik, persönlicher Beratung und sofortiger Verfügbarkeit. Gleichzeitig schlummern in den regionalen Möbelhäusern echte Schätze ("Hidden Gems"), die online oft unsichtbar bleiben. Das Konzept "Local for Local" setzt genau hier an: Es ist ein digitaler Marktplatz-Ansatz, der nicht den anonymen Großhandel, sondern den lokalen Fachhandel stärkt – und damit eine Brücke zwischen digitaler Bequemlichkeit und regionaler Stärke baut.', + 'intro' => 'In den letzten Jahren schien der Trend unaufhaltsam: Gigantische Online-Plattformen dominierten den Möbelmarkt. Doch der Markt wandelt sich. Konsumenten sehnen sich wieder nach Haptik, persönlicher Beratung und sofortiger Verfügbarkeit. Gleichzeitig schlummern in den regionalen Möbelhäusern echte Schätze („Hidden Gems“), die online oft unsichtbar bleiben. Das Konzept „Local for Local“ setzt genau hier an: Es ist ein digitaler Marktplatz-Ansatz, der nicht den anonymen Großhandel, sondern den lokalen Fachhandel stärkt – und damit eine Brücke zwischen digitaler Bequemlichkeit und regionaler Stärke baut.', 'sections' => [ [ 'title' => 'Digitale Sichtbarkeit für lokale Bestände', - 'content' => 'Die Frage "Was ist heute in meiner Nähe verfügbar?" konnte der lokale Handel digital oft nicht beantworten. Moderne Marktplatz-Technologien ändern das. Sie geben regionalen Händlern die Werkzeuge an die Hand, ihre sofort verfügbare Ausstellungs- und Lagerware einem breiten, kaufkräftigen Publikum (wie etwa neuen Immobilienbesitzern) sichtbar zu machen – ganz ohne komplexe eigene IT-Infrastruktur.', + 'content' => 'Die Frage „Was ist heute in meiner Nähe verfügbar?“ konnte der lokale Handel digital oft nicht beantworten. Moderne Marktplatz-Technologien ändern das. Sie geben regionalen Händlern die Werkzeuge an die Hand, ihre sofort verfügbare Ausstellungs- und Lagerware einem breiten, kaufkräftigen Publikum (wie etwa neuen Immobilienbesitzern) sichtbar zu machen – ganz ohne komplexe eigene IT-Infrastruktur.', ], [ - 'title' => 'Support your Locals – Ein Gewinn für alle', - 'content' => 'Das "David gegen Goliath"-Prinzip bringt die Kunden zurück in die Geschäfte. Käufer profitieren von exklusiven Preisen für Ausstellungsstücke und Markenware, die oft günstiger ist als im Großmarkt. Der Händler wiederum steigert seine Frequenz vor Ort, baut Liquidität durch schnellen Abverkauf auf und gewinnt Neukunden, die den Wert echter, physischer Beratung schätzen.', + 'title' => 'Support your Locals – ein Gewinn für alle', + 'content' => 'Das „David-gegen-Goliath“-Prinzip bringt die Kunden zurück in die Geschäfte. Käufer profitieren von exklusiven Preisen für Ausstellungsstücke und Markenware, die oft günstiger ist als im Großmarkt. Der Händler wiederum steigert seine Frequenz vor Ort, baut Liquidität durch schnellen Abverkauf auf und gewinnt Neukunden, die den Wert echter, physischer Beratung schätzen.', ], [ 'title' => 'Smarte Vernetzung statt anonymer Plattform', diff --git a/resources/lang/de/b2in_legal.php b/resources/lang/de/b2in_legal.php index 0c592c66..5e5a325b 100644 --- a/resources/lang/de/b2in_legal.php +++ b/resources/lang/de/b2in_legal.php @@ -4,7 +4,7 @@ return [ 'impressum' => [ 'title' => 'Impressum', 'meta_title' => 'Impressum', - 'subtitle' => 'Angaben gemäß § 5 TMG', + 'subtitle' => 'Angaben gemäß § 5 DDG', 'back_link' => '← Zurück', 'content' => '
@@ -24,7 +24,7 @@ return [

Kontakt

- E-Mail: info@b2in.de
+ E-Mail: info@b2in.eu
Telefon: +49 (0) 5221 9255055

@@ -33,7 +33,7 @@ return [

Registereintrag

Eintragung im Handelsregister.
- Registergericht: Amtsg. Bad Oeynhausen
+ Registergericht: Amtsgericht Bad Oeynhausen
Registernummer: HRB 13068

@@ -47,7 +47,7 @@ return [

-

Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV

+

Verantwortlich für den Inhalt nach § 18 Abs. 2 MStV

Marcel Scheibe
Feldstraße 59
@@ -56,7 +56,7 @@ return [

-

EU-Streitschlichtung

+

Verbraucherstreitbeilegung

Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.

@@ -65,7 +65,7 @@ return [

Haftung für Inhalte

- Als Diensteanbieter sind wir gemäß § 7 Abs. 1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. + Als Diensteanbieter sind wir gemäß § 7 Abs. 1 DDG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 DDG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.

Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen. @@ -101,25 +101,25 @@ return [ 'terms' => [ 'title' => 'Nutzungsbedingungen', 'meta_title' => 'Nutzungsbedingungen', - 'subtitle' => 'Stand: 13.03.2026', + 'subtitle' => 'Stand: 06.10.2026', 'back_link' => '← Zurück', 'content' => '

1. Geltungsbereich

- Diese Nutzungsbedingungen gelten für die Nutzung der öffentlich zugänglichen Website und der damit verbundenen Informationsdienste der B2in GmbH („B2in", „wir", „uns"). Mit dem Aufruf und der Nutzung unserer Website erklären Sie sich mit diesen Bedingungen einverstanden. + Diese Nutzungsbedingungen gelten für die Nutzung der öffentlich zugänglichen Website und der damit verbundenen Informationsdienste der B2in GmbH („B2in“, „wir“, „uns“). Mit dem Aufruf und der Nutzung unserer Website erklären Sie sich mit diesen Bedingungen einverstanden.

2. Leistungsbeschreibung

- B2in ist das Netzwerk, das exklusives Design und internationale Immobilien verbindet („Connecting Design and Property"). Über unsere Website bieten wir unverbindliche Informationen zu unseren Dienstleistungen, Immobilienprojekten (z. B. in Dubai oder Lissabon), Supply-Chain-Management und unserem Einrichtungsnetzwerk an. Die konkrete Leistungserbringung, Vermittlung oder Beschaffung erfolgt nicht über die Website, sondern ausschließlich auf Basis gesonderter, individueller Verträge. + Unter B2in Interior bieten wir hochwertige Einrichtung mit ausgewählten Marken, Maßanfertigung und persönlicher Beratung für private Räume und Projekte an; ergänzend informieren wir über ausgewählte internationale Immobilienprojekte. Über unsere Website bieten wir unverbindliche Informationen zu unseren Leistungen, Marken, Einrichtungs- und Ausstattungsprojekten sowie zu Immobilienprojekten (z. B. in Dubai) an. Die konkrete Leistungserbringung, Vermittlung oder Beschaffung erfolgt nicht über die Website, sondern ausschließlich auf Basis gesonderter, individueller Verträge.

-

3. Unverbindlichkeit von Immobilien- und Investmentinformationen (WICHTIG!)

+

3. Unverbindlichkeit von Immobilien- und Investmentinformationen

Die auf der Website dargestellten Immobilienprojekte, Exposés, Preisangaben, Grundrisse und Renditeprognosen (z. B. erwartete Mietrenditen) dienen ausschließlich der allgemeinen Information und Inspiration.

@@ -148,7 +148,7 @@ return [

6. Haftungsausschluss

- Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte (insbesondere Projektbeschreibungen von Drittanbietern) können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs. 1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Wir sind jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen. + Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte (insbesondere Projektbeschreibungen von Drittanbietern) können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs. 1 DDG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Wir sind jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen.

@@ -178,7 +178,7 @@ return [ 'privacy' => [ 'title' => 'Datenschutzerklärung', 'meta_title' => 'Datenschutzerklärung', - 'subtitle' => 'Stand: 13.03.2026', + 'subtitle' => 'Stand: 06.10.2026', 'back_link' => '← Zurück', 'content' => '
@@ -196,9 +196,16 @@ return [
-

2. Datenerfassung auf unserer Website (Server-Log-Dateien)

+

2. Hosting

- Beim Aufruf unserer Website werden durch den auf Ihrem Endgerät zum Einsatz kommenden Browser automatisch Informationen an den Server unserer Website gesendet. Diese Informationen werden temporär in einem sogenannten Logfile gespeichert. Folgende Informationen werden dabei ohne Ihr Zutun erfasst und bis zur automatisierten Löschung gespeichert: + Unsere Website wird auf einem Cloud-Server der Hetzner Online GmbH, Industriestr. 25, 91710 Gunzenhausen, betrieben; der Server steht in deren Rechenzentrum in Falkenstein (Sachsen), Deutschland. Alle beim Aufruf der Website anfallenden Daten – insbesondere die unter Ziffer 3 genannten Server-Log-Daten und die Angaben aus dem Kontaktformular – werden auf diesem Server verarbeitet. Rechtsgrundlage ist unser berechtigtes Interesse an einem sicheren und zuverlässigen Betrieb unserer Website (Art. 6 Abs. 1 lit. f DSGVO). Mit Hetzner besteht ein Vertrag über Auftragsverarbeitung nach Art. 28 DSGVO. +

+
+ +
+

3. Datenerfassung auf unserer Website (Server-Log-Dateien)

+

+ Beim Aufruf unserer Website werden durch den auf Ihrem Endgerät zum Einsatz kommenden Browser automatisch Informationen an den Server unserer Website gesendet. Diese Informationen werden temporär in einem sogenannten Logfile gespeichert. Folgende Informationen werden dabei ohne Ihr Zutun erfasst, höchstens 14 Tage gespeichert und danach automatisch gelöscht:

  • IP-Adresse des anfragenden Rechners
  • @@ -213,12 +220,12 @@ return [
-

3. Kontaktformular und E-Mail-Kontakt

+

4. Kontaktformular und E-Mail-Kontakt

- Wenn Sie uns per Kontaktformular oder E-Mail Anfragen zukommen lassen, werden Ihre Angaben aus dem Anfrageformular inklusive der von Ihnen dort angegebenen Kontaktdaten (wie Name, E-Mail-Adresse, Telefonnummer) zwecks Bearbeitung der Anfrage und für den Fall von Anschlussfragen bei uns gespeichert. Diese Daten geben wir nicht ohne Ihre Einwilligung weiter. + Wenn Sie uns per Kontaktformular oder E-Mail Anfragen zukommen lassen, werden Ihre Angaben aus dem Anfrageformular inklusive der von Ihnen dort angegebenen Kontaktdaten (wie Name, E-Mail-Adresse, Telefonnummer) zwecks Bearbeitung der Anfrage und für den Fall von Anschlussfragen bei uns gespeichert. Diese Daten geben wir nicht ohne Ihre Einwilligung weiter. Unsere Domains und unser E-Mail-Postfach liegen bei der united-domains GmbH, Gautinger Straße 10, 82319 Starnberg; E-Mails, die Sie uns schreiben, und unsere Antworten werden über deren Server übertragen und dort gespeichert. Auch mit united-domains besteht ein Vertrag über Auftragsverarbeitung nach Art. 28 DSGVO.

- Die Verarbeitung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1 lit. b DSGVO, sofern Ihre Anfrage mit der Erfüllung eines Vertrags zusammenhängt oder zur Durchführung vorvertraglicher Maßnahmen (z. B. Immobilien-Investment oder Supply-Chain-Management) erforderlich ist. In allen übrigen Fällen beruht die Verarbeitung auf unserem berechtigten Interesse an der effektiven Bearbeitung der an uns gerichteten Anfragen (Art. 6 Abs. 1 lit. f DSGVO) oder auf Ihrer Einwilligung (Art. 6 Abs. 1 lit. a DSGVO), sofern diese abgefragt wurde. + Die Verarbeitung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1 lit. b DSGVO, sofern Ihre Anfrage mit der Erfüllung eines Vertrags zusammenhängt oder zur Durchführung vorvertraglicher Maßnahmen (z. B. Beratung, Planung und Angebot für Ihre Einrichtung oder Anfragen zu Immobilienprojekten) erforderlich ist. In allen übrigen Fällen beruht die Verarbeitung auf unserem berechtigten Interesse an der effektiven Bearbeitung der an uns gerichteten Anfragen (Art. 6 Abs. 1 lit. f DSGVO) oder auf Ihrer Einwilligung (Art. 6 Abs. 1 lit. a DSGVO), sofern diese abgefragt wurde.

Die von Ihnen im Kontaktformular eingegebenen Daten verbleiben bei uns, bis Sie uns zur Löschung auffordern, Ihre Einwilligung zur Speicherung widerrufen oder der Zweck für die Datenspeicherung entfällt (z. B. nach abgeschlossener Bearbeitung Ihrer Anfrage). Zwingende gesetzliche Bestimmungen – insbesondere Aufbewahrungsfristen – bleiben unberührt. @@ -226,12 +233,12 @@ return [

-

4. Cookies

+

5. Cookies

Unsere Website verwendet Cookies. Das sind kleine Textdateien, die Ihr Browser automatisch erstellt und die auf Ihrem Endgerät gespeichert werden.

    -
  • Technisch notwendige Cookies: Diese sind erforderlich, um den Betrieb der Website zu gewährleisten (z. B. das Speichern Ihrer Consent-Einstellungen). Die Rechtsgrundlage hierfür ist Art. 6 Abs. 1 lit. f DSGVO.
  • +
  • Technisch notwendige Cookies: Diese sind erforderlich, um den Betrieb der Website zu gewährleisten (z. B. das Speichern Ihrer Consent-Einstellungen). Die Rechtsgrundlage hierfür ist § 25 Abs. 2 Nr. 2 TDDDG sowie Art. 6 Abs. 1 lit. f DSGVO.
  • Analyse- und Marketing-Cookies: Diese Cookies (z. B. Google Analytics) werden nur gesetzt, wenn Sie uns zuvor Ihre ausdrückliche Einwilligung über unser Cookie-Consent-Banner erteilt haben (Art. 6 Abs. 1 lit. a DSGVO).

@@ -242,17 +249,17 @@ return [

-

5. Google Analytics

+

6. Google Analytics

- Soweit Sie Ihre Einwilligung erklärt haben, wird auf dieser Website Google Analytics eingesetzt, ein Webanalysedienst der Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland („Google"). + Soweit Sie Ihre Einwilligung erklärt haben, wird auf dieser Website Google Analytics eingesetzt, ein Webanalysedienst der Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland („Google“). Google Analytics verwendet Cookies, die eine Analyse der Benutzung der Website durch Sie ermöglichen. Die dadurch erzeugten Informationen werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert.

- IP-Anonymisierung: Wir haben auf dieser Website die Funktion IP-Anonymisierung aktiviert. Dadurch wird Ihre IP-Adresse von Google innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum vor der Übermittlung in die USA gekürzt. + IP-Adressen: Wir setzen Google Analytics 4 ein. Dort werden IP-Adressen nicht protokolliert oder gespeichert; Google nutzt sie lediglich, um daraus grobe Standortdaten abzuleiten, und verwirft sie anschließend.

Zweck und Rechtsgrundlage: In unserem Auftrag wird Google diese Informationen benutzen, um Ihre Nutzung der Website auszuwerten, um Reports über die Websiteaktivitäten zusammenzustellen und um weitere mit der Websitenutzung und der Internetnutzung verbundene Dienstleistungen gegenüber dem Websitebetreiber zu erbringen. - Die Rechtsgrundlage für den Einsatz von Google Analytics ist Ihre freiwillig erteilte Einwilligung gemäß Art. 6 Abs. 1 lit. a DSGVO sowie § 25 Abs. 1 TTDSG/TDDDG. + Die Rechtsgrundlage für den Einsatz von Google Analytics ist Ihre freiwillig erteilte Einwilligung gemäß Art. 6 Abs. 1 lit. a DSGVO sowie § 25 Abs. 1 TDDDG.

Datenübermittlung in die USA: Datenübertragungen in die USA stützen sich auf den Angemessenheitsbeschluss der EU-Kommission (EU-US Data Privacy Framework), unter dem Google LLC zertifiziert ist, sowie auf Standardvertragsklauseln. @@ -267,21 +274,21 @@ return [

-

6. Externe Links (z. B. Google Maps)

+

7. Externe Links (z. B. Google Maps)

Auf unserer Website finden Sie Links zu externen Diensten, wie beispielsweise zu Google Maps, um Ihnen Standorte (z. B. Immobilien-Projekte) zu visualisieren. Wir binden diese Dienste nicht direkt auf unserer Seite ein, sondern verlinken lediglich darauf. Wenn Sie auf einen solchen Link klicken, verlassen Sie unsere Website und werden auf die Server des jeweiligen Anbieters (z. B. Google) weitergeleitet. Erst dort werden Ihre Daten (wie z. B. Ihre IP-Adresse) durch den externen Anbieter erfasst. Es gilt die Datenschutzerklärung des jeweiligen Anbieters.

-

7. SSL- bzw. TLS-Verschlüsselung

+

8. SSL- bzw. TLS-Verschlüsselung

- Diese Seite nutzt aus Sicherheitsgründen und zum Schutz der Übertragung vertraulicher Inhalte, wie zum Beispiel Anfragen, die Sie an uns als Seitenbetreiber senden, eine SSL- bzw. TLS-Verschlüsselung. Eine verschlüsselte Verbindung erkennen Sie daran, dass die Adresszeile des Browsers von „http://" auf „https://" wechselt und an dem Schloss-Symbol in Ihrer Browserzeile. Wenn die Verschlüsselung aktiviert ist, können die Daten, die Sie an uns übermitteln, nicht von Dritten mitgelesen werden. + Diese Seite nutzt aus Sicherheitsgründen und zum Schutz der Übertragung vertraulicher Inhalte, wie zum Beispiel Anfragen, die Sie an uns als Seitenbetreiber senden, eine SSL- bzw. TLS-Verschlüsselung. Eine verschlüsselte Verbindung erkennen Sie daran, dass die Adresszeile des Browsers von „http://“ auf „https://“ wechselt und an dem Schloss-Symbol in Ihrer Browserzeile. Wenn die Verschlüsselung aktiviert ist, können die Daten, die Sie an uns übermitteln, nicht von Dritten mitgelesen werden.

-

8. Ihre Rechte als betroffene Person

+

9. Ihre Rechte als betroffene Person

Sie haben das Recht:

@@ -307,7 +314,7 @@ return [ 'cookie_policy' => [ 'title' => 'Cookie-Richtlinie', 'meta_title' => 'Cookie-Richtlinie', - 'subtitle' => 'Stand: 13.03.2026', + 'subtitle' => 'Stand: 06.10.2026', 'back_link' => '← Zurück', 'content' => '
@@ -316,7 +323,7 @@ return [ Verantwortlich für die Cookie-Nutzung auf dieser Website ist:

- B2In GmbH
+ B2in GmbH
Feldstraße 59
32120 Hiddenhausen
Telefon: +49 (0) 5221 9255055
@@ -337,8 +344,8 @@ return [ Wir unterscheiden zwischen zwei Kategorien von Cookies:

    -
  • Technisch notwendige Cookies: Diese sind erforderlich, um den Betrieb der Website zu gewährleisten (z. B. das Speichern Ihrer Consent-Einstellungen). Sie können nicht deaktiviert werden. Die Rechtsgrundlage hierfür ist Art. 6 Abs. 1 lit. f DSGVO.
  • -
  • Analyse- und Marketing-Cookies: Diese Cookies (z. B. Google Analytics) werden nur gesetzt, wenn Sie uns zuvor Ihre ausdrückliche Einwilligung über unser Cookie-Consent-Banner erteilt haben. Die Rechtsgrundlage ist Art. 6 Abs. 1 lit. a DSGVO sowie § 25 Abs. 1 TTDSG/TDDDG.
  • +
  • Technisch notwendige Cookies: Diese sind erforderlich, um den Betrieb der Website zu gewährleisten (z. B. das Speichern Ihrer Consent-Einstellungen). Sie können nicht deaktiviert werden. Die Rechtsgrundlage hierfür ist § 25 Abs. 2 Nr. 2 TDDDG sowie Art. 6 Abs. 1 lit. f DSGVO.
  • +
  • Analyse- und Marketing-Cookies: Diese Cookies (z. B. Google Analytics) werden nur gesetzt, wenn Sie uns zuvor Ihre ausdrückliche Einwilligung über unser Cookie-Consent-Banner erteilt haben. Die Rechtsgrundlage ist Art. 6 Abs. 1 lit. a DSGVO sowie § 25 Abs. 1 TDDDG.

Sie können Ihre Einwilligung jederzeit widerrufen oder anpassen, indem Sie die Cookie-Einstellungen über den folgenden Link aufrufen: @@ -350,11 +357,11 @@ return [

4. Google Analytics

- Soweit Sie Ihre Einwilligung erklärt haben, wird auf dieser Website Google Analytics eingesetzt, ein Webanalysedienst der Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland („Google"). + Soweit Sie Ihre Einwilligung erklärt haben, wird auf dieser Website Google Analytics eingesetzt, ein Webanalysedienst der Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland („Google“). Google Analytics verwendet Cookies, die eine Analyse der Benutzung der Website durch Sie ermöglichen. Die dadurch erzeugten Informationen werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert.

- IP-Anonymisierung: Wir haben auf dieser Website die Funktion IP-Anonymisierung aktiviert. Dadurch wird Ihre IP-Adresse von Google innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum vor der Übermittlung in die USA gekürzt. + IP-Adressen: Wir setzen Google Analytics 4 ein. Dort werden IP-Adressen nicht protokolliert oder gespeichert; Google nutzt sie lediglich, um daraus grobe Standortdaten abzuleiten, und verwirft sie anschließend.

Datenübermittlung in die USA: Datenübertragungen in die USA stützen sich auf den Angemessenheitsbeschluss der EU-Kommission (EU-US Data Privacy Framework), unter dem Google LLC zertifiziert ist, sowie auf Standardvertragsklauseln. diff --git a/resources/lang/de/immobilien-azizi.json b/resources/lang/de/immobilien-azizi.json index e4521252..538780d2 100644 --- a/resources/lang/de/immobilien-azizi.json +++ b/resources/lang/de/immobilien-azizi.json @@ -83,7 +83,7 @@ "official_description_label": "Aus dem offiziellen Azizi-Exposé (übersetzt)", "gallery_heading": "Galerie", "gallery_count_word": "Bilder", - "gallery_image_word": "Galerie Bild", + "gallery_image_word": "Galeriebild", "gallery_zoom_suffix": "groß ansehen", "for_whom": "Für wen eignet sich das Projekt?", "hard_facts": "Wichtige Eckpunkte", @@ -111,11 +111,9 @@ "stat_price": "Preis / Verfügbarkeit", "stat_price_fallback": "Auf Anfrage", "stat_handover": "Übergabe", - "stat_handover_fallback": "Phase abhängig", + "stat_handover_fallback": "Phasenabhängig", "stat_units": "Einheiten", "stat_units_fallback": "Aktuell prüfen", - "stat_data_confidence": "Datenstand", - "stat_data_confidence_fallback": "Prüfen", "section_investment": "Investment-Einordnung", "for_whom": "Für wen eignet sich das Projekt?", "hard_facts": "Wichtige Eckpunkte", @@ -126,7 +124,7 @@ "next_step_text": "Marcel prüft aktive Einheiten, aktuellen Zahlungsplan, Floor Plans und ob Resale oder Off-Plan für Ihre Strategie sinnvoller ist.", "request_cta": "Verfügbarkeit anfragen", "process_title": "Wie B2in dieses Projekt prüft", - "process_intro": "Diese Preview trennt redaktionelle Einordnung von beweglichen Vertriebsdaten. Der Live-Stand wird immer vor einer konkreten Empfehlung geprüft.", + "process_intro": "Diese Übersicht trennt redaktionelle Einordnung von beweglichen Vertriebsdaten. Der Live-Stand wird immer vor einer konkreten Empfehlung geprüft.", "process_steps": [ { "title": "1. Strategische Passung", @@ -152,13 +150,8 @@ "construction": "Im Bau", "offplan": "Off-Plan" }, - "confidence_labels": { - "green": "Direkt belegt", - "yellow": "Vor Livegang final prüfen", - "red": "Nur als Anfragewert nutzen" - }, "fallbacks": { - "handover": "Phase abhängig", + "handover": "Phasenabhängig", "project_default": "Projekt" } }, @@ -189,11 +182,11 @@ "handover": "Übergabe wird aktuell geprüft", "image": "immobile/dubai/azizi-creek-views-4/image/05_kcP9jhA785EDzdKfsUmsGYUrRSq4GLrDxfFKnTqc.webp", "headline": "Aktueller Launch in Al Jaddaf am Dubai Creek.", - "text": "Nur 132 Einheiten, 1-BR Apartments und ein einzelnes 3-BR Penthouse direkt am Dubai Creek. Limitiertes Angebot mit Premium-Ausstattung in einer Lage mit klarer Vermietungsstärke.", + "text": "Nur 132 Einheiten, 1-BR-Apartments und ein einzelnes 3-BR-Penthouse direkt am Dubai Creek. Limitiertes Angebot mit Premium-Ausstattung in einer Lage mit klarer Vermietungsstärke.", "marcel_take": "Creek Views 4 ist mein aktueller Off-Market-Launch in Dubai. Wer einen kontrollierten, planbaren Einstieg sucht, profitiert von limitiertem Angebot, klarer Lagenlogik am Creek und kurzer Distanz zu Downtown und DXB. Ich begleite die Verfügbarkeit pro Einheit persönlich.", "facts": [ - "Prime Waterfront Lage am Dubai Creek", - "1-BR Apartments ab AED 1.125.000", + "Prime-Waterfront-Lage am Dubai Creek", + "1-BR-Apartments ab AED 1.125.000", "Einmalig verfügbare 3-BR-Penthouse-Einheit", "Nur 132 Einheiten - bewusst limitiert", "543 - 2.346 sqft Wohnfläche", @@ -343,7 +336,7 @@ { "name": "Dubailand / Azizi Milan", "projects": "Azizi Milan", - "description": "Azizi Milan ist eine italienisch inspirierte Fashion- und Lifestyle-Adresse nahe IMG Worlds und Global Village. Schwerpunkt sind Grünflächen, Einkaufsstraßen, Retail, Hospitality und ein langfristig angelegter Masterplan. Damit ein Lifestyle- statt reiner Yield-Case." + "description": "Azizi Milan ist eine italienisch inspirierte Fashion- und Lifestyle-Adresse nahe IMG Worlds und Global Village. Schwerpunkt sind Grünflächen, Einkaufsstraßen, Retail, Hospitality und ein langfristig angelegter Masterplan. Damit eher ein Lifestyle- als ein reiner Yield-Case." }, { "name": "Dubai Healthcare City / Al Jaddaf", @@ -368,7 +361,7 @@ { "name": "Al Furjan", "projects": "Al-Furjan-Bestand, Star, ROY Mediterranean, Farishta", - "description": "Al Furjan ist der fertige, gut angebundene Yield-Cluster: Metro-Achse, MBZ Road, Nähe zu Al Maktoum International Airport, Expo City, Jebel Ali und Dubai Marina. Studios und 1- bis 2-BR-Apartments mit etabliertem Mietmarkt - vor allem für Cashflow-Käufer interessant." + "description": "Al Furjan ist der fertige, gut angebundene Yield-Cluster: Metro-Achse, MBZ Road, Nähe zum Al Maktoum International Airport, Expo City, Jebel Ali und Dubai Marina. Studios und 1- bis 2-BR-Apartments mit etabliertem Mietmarkt - vor allem für Cashflow-Käufer interessant." }, { "name": "Dubai Islands", @@ -383,7 +376,7 @@ { "name": "Jumeirah Village Circle", "projects": "Azizi Ruby", - "description": "JVC ist ein etablierter Wohnkreis im mittleren Dubai mit breitem Mietermarkt und urbaner Alltagslogik. Über Azizi Ruby in der Auswahl vertreten - eher für Cashflow als für Trophy-Asset-Positionierung." + "description": "JVC ist ein etablierter Wohnkreis im mittleren Dubai mit breitem Mietmarkt und urbaner Alltagslogik. Über Azizi Ruby in der Auswahl vertreten - eher für Cashflow als für Trophy-Asset-Positionierung." } ] }, @@ -451,7 +444,6 @@ "Bestandsobjekt mit Verfügbarkeit auf Anfrage", "Prestige-Lage für Eigennutzung oder Vermietung" ], - "data_confidence": "yellow", "overview_bedrooms": "1, 2 Bedrooms & 3 Bedroom Penthouse", "official_headline": "DISCOVER THE BEAUTY OF THE ARABIAN-GULF AT MINA", "official_description": "Revel in beachfront luxury at Mina's contemporary-designed residences, where you can savor breathtaking views from your room and feel the refreshing sea breeze.", @@ -469,21 +461,20 @@ "buyer_profile": "Investoren mit Fokus auf Capital Appreciation und planbarem Off-Market-Einstieg", "price_from": "ab AED 1.125.000", "handover": "Übergabe wird aktuell geprüft", - "units": "Nur 132 Einheiten (limitiert) - 1-BR und ein 3-BR Penthouse", + "units": "Nur 132 Einheiten (limitiert) - 1-BR und ein 3-BR-Penthouse", "image": "immobile/dubai/azizi-creek-views-4/overview-thumbnail/azizi-creek-views-4-overview-thumbnail.webp", "official_url": "/immobilien/azizi-creek-views-4", "short": "Aktueller Off-Market-Launch am Dubai Creek mit nur 132 Einheiten.", "marcel_take": "Creek Views 4 ist mein aktueller Launch in Dubai. Limitiertes Angebot, klare Lagenlogik am Creek und kurze Distanz zu Downtown und DXB. Ich begleite Verfügbarkeit und Auswahl pro Einheit persönlich.", "highlights": [ - "Prime Waterfront Lage am Dubai Creek", - "1-BR Apartments ab AED 1.125.000", + "Prime-Waterfront-Lage am Dubai Creek", + "1-BR-Apartments ab AED 1.125.000", "Einmalig verfügbare 3-BR-Penthouse-Einheit", "Nur 132 Einheiten - bewusst limitiert", "543 - 2.346 sqft Wohnfläche", "Wenige Minuten bis Downtown Dubai und Burj Khalifa", "Entwickler: Azizi Developments" - ], - "data_confidence": "green" + ] }, { "slug": "royal-bay", @@ -506,7 +497,6 @@ "Bewusst kleinere Hausgemeinschaft", "Resale-Verfügbarkeit individuell prüfen" ], - "data_confidence": "yellow", "overview_bedrooms": "1 & 3 BEDROOMS", "official_headline": "A TRANQUIL HAVEN", "official_description": "Bask in the warmth of the sun in your sanctuary at Royal Bay in Palm Jumeirah, a place cleverly angled at 45 degrees with spectacular views of the city’s skyline, the Atlantis Hotel and the Arabian Sea, designed to maximize light and provide stunning views from every room.", @@ -536,7 +526,6 @@ "Gebäudehöhe UG+B+G+2P+19", "Nahe Dubai Creek, Downtown, Festival City und DXB" ], - "data_confidence": "green", "overview_bedrooms": "STUDIO, 1 & 2 BEDROOMS", "official_headline": "ENCHANTMENT BETWEEN THE SKYLINE AND THE HORIZON", "official_description": "Poised on the edge of the mesmerizing Dubai Creek, Creek Views III unveils a world where tradition meets modernity—offering panoramic vistas that weave Dubai's timeless charm with its futuristic skyline. Situated in the heart of Dubai Healthcare City, this residence seamlessly merges a connected lifestyle with every contemporary comfort, all cradled by nature's tranquility.", @@ -564,15 +553,14 @@ "Commercial-Kategorie", "96 Units", "Dubai Healthcare City", - "Als eigener Beratungsfall statt normale Wohnkarte behandeln" + "Als eigener Beratungsfall statt als normale Wohnkarte behandeln" ], - "data_confidence": "green", "overview_bedrooms": "COMMERCIAL SPACES", "official_headline": "YOUR GATEWAY TO SUCCESS IN DUBAI’S DYNAMIC HUB", "official_description": "Azizi Emerald, the first exclusively commercial building from Azizi, is ideally situated in the heart of Dubai Healthcare City. This remarkable environment seamlessly combines luxury with practicality, fostering innovation and collaboration. With its strategic location, Azizi Emerald serves as a vibrant hub where businesses can thrive in a constantly evolving market. It is a premier destination that elevates your business experience to exceptional heights.", "official_unit_type": "COMMERCIAL SPACES", "official_starting_price": "From AED 5.28M", - "official_description_de": "Azizi Emerald ist Azizis erstes rein kommerzielles Gebäude und liegt zentral in der Dubai Healthcare City. Office- und Retail-Flächen mit strategischer Positionierung in einem etablierten Geschäftsstandort - eine Adresse für Käufer mit Commercial-These statt klassischer Wohnnutzung." + "official_description_de": "Azizi Emerald ist Azizis erstes rein kommerzielles Gebäude und liegt zentral in der Dubai Healthcare City. Office- und Retail-Flächen mit strategischer Positionierung an einem etablierten Geschäftsstandort - eine Adresse für Käufer mit Commercial-These statt klassischer Wohnnutzung." }, { "slug": "creek-views", @@ -595,7 +583,6 @@ "Downtown Dubai und DXB ca. 7 Minuten", "Studios, 1- und 2-Bedroom-Apartments" ], - "data_confidence": "green", "overview_bedrooms": "STUDIO, 1 & 2 BEDROOMS", "official_headline": "DISCOVER MODERN LIVING WHERE DUBAI’S PAST AND FUTURE MEET", "official_description": "Nestled on the banks of the iconic Dubai Creek, Creek Views lays out all the capital has to offer—with panoramic views that connect Dubai’s traditional vista with its futuristic cityscape. Located close to downtown Dubai, the residence harmoniously blends a connected lifestyle with every modern convenience, all wrapped in the calm of nature’s embrace.", @@ -624,7 +611,6 @@ "Bestehende Vermietungsnachfrage", "Jüngeres Gebäude als Creek Views" ], - "data_confidence": "green", "overview_bedrooms": "STUDIO, 1 & 2 BEDROOMS", "official_headline": "SETTING THE NEW BENCHMARK FOR MODERN LIVING", "official_description": "Experience the next level of convenience, practicality, and modernism in one stunning package at Creek Views II, where every detail is meticulously crafted to redefine your living experience. Elevate your lifestyle and revel in a new standard of luxury living. Are you ready to embrace the extraordinary life at Creek Views II?", @@ -641,7 +627,7 @@ "status_group": "construction", "buyer_profile": "Renditeorientierte Erstkäufer und Lifestyle-Familien", "price_from": "From AED 1.22M", - "handover": "Phase abhängig", + "handover": "Phasenabhängig", "units": "12.285 Apartments", "image": "immobile/dubai/azizi-riviera/overview-thumbnail/azizi-riviera-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/meydan/riviera", @@ -654,7 +640,6 @@ "Downtown- und Meydan-Nähe", "Mehrere Phasen und Produktlinien" ], - "data_confidence": "yellow", "overview_bedrooms": "STUDIO, 1 & 3 BEDROOMS", "official_headline": "EVOKE THE MEDITERRANEAN EVERY DAY", "official_description": "Embodying coastal charm, Azizi Riviera offers a unique blend of city life and waterside living. This contemporary haven hosts a wealth of amenities amidst beautifully landscaped spaces. Set against the iconic Dubai skyline, experience Azizi Riviera's cosmopolitan living harmoniously intertwined with tranquil natural beauty.", @@ -671,7 +656,7 @@ "status_group": "offplan", "buyer_profile": "Käufer mit Wunsch nach Community plus Exklusivität", "price_from": "From AED 2.35M", - "handover": "Phase abhängig", + "handover": "Phasenabhängig", "units": "5.061 Homes in 24 Gebäuden", "image": "immobile/dubai/riviera-reve/overview-thumbnail/riviera-reve-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/meydan/riviera-reve", @@ -681,15 +666,14 @@ "Preis: From AED 2.35M", "24 Ultra-Luxus-Gebäude", "Studios bis Duplex-Penthouses", - "Premium-Positionierung innerhalb Riviera" + "Premium-Positionierung innerhalb von Riviera" ], - "data_confidence": "yellow", "overview_bedrooms": "1 & 3 BEDROOMS", "official_headline": "EXPERIENCE LUXURY LIVING IN A DREAMLIKE LANDSCAPE", "official_description": "More than a residence, Riviera Rêve is a destination—one that creates a five-star getaway feel through high-end, hotel-inspired design. Beyond your abode, the amenities promise to tend to your every need. And, because location is everything, this oasis of calm places Dubai’s beating heart right at your fingertips.", "official_unit_type": "1 & 3 BEDROOMS", "official_starting_price": "From AED 2.35M", - "official_description_de": "Riviera Rêve ist nicht nur eine Wohnadresse, sondern eine Adresse mit Hotel-Charakter: hochwertige Ausstattung, Resort-orientierte Annehmlichkeiten und die zentrale Lage in Meydan, mit kurzer Distanz zum Herzen der Stadt." + "official_description_de": "Riviera Rêve ist nicht nur eine Wohnadresse, sondern eine Adresse mit Hotel-Charakter: hochwertige Ausstattung, resortorientierte Annehmlichkeiten und die zentrale Lage in Meydan, mit kurzer Distanz zum Herzen der Stadt." }, { "slug": "riviera-beachfront", @@ -712,13 +696,12 @@ "Studios, 1BR, 2BR und Retail", "Pools, Gym, BBQ und Yoga-Spaces" ], - "data_confidence": "yellow", "overview_bedrooms": "1 & 2 BEDROOMS", "official_headline": "GET BEACHFRONT LIVING IN THE CITY", "official_description": "Amplify the resort-like ambiance with our top-tier amenities and services. Fully embrace the feeling of the French coast-inspired life with exclusive access to the pristine beaches of the crystal lagoon. Play a variety of sports, enjoy the leisure facilities and children's play areas. For your convenience, a wide selection of retail outlets, cafes, and restaurants are all within walking distance.", "official_unit_type": "1 & 2 BEDROOMS", "official_starting_price": "From AED 1.26M", - "official_description_de": "Riviera Beachfront verstärkt den Resort-Charakter der Riviera-Community: exklusiver Zugang zur Crystal Lagoon, Sport- und Freizeitbereiche, Spielflächen für Kinder, dazu Retail, Cafés und Restaurants in Geh-Distanz." + "official_description_de": "Riviera Beachfront verstärkt den Resort-Charakter der Riviera-Community: exklusiver Zugang zur Crystal Lagoon, Sport- und Freizeitbereiche, Spielflächen für Kinder, dazu Retail, Cafés und Restaurants in Gehdistanz." }, { "slug": "park-avenue", @@ -741,7 +724,6 @@ "Meydan Avenue / MBR City", "Ruhigere Community-Logik in MBR City" ], - "data_confidence": "yellow", "overview_bedrooms": "STUDIO, 1 & 3 BEDROOMS", "official_headline": "EXPERIENCE URBAN LIVING AT ITS BEST", "official_description": "Like its Manhattan namesake, Park Avenue is contemporary, sleek, and offers all the conveniences of modern-day life. This unique residence also gives you the best of both worlds—immersive community living within a beautifully landscaped space located in the heart of city life. The natural design esthetic houses a wide range of facilities backed by the iconic Dubai skyline.", @@ -769,7 +751,6 @@ "Dubai Marina und JBR ca. 10 Minuten", "Pool, Gym, Sauna und Parking" ], - "data_confidence": "green", "official_headline": "VENTURE OUT ON A JOURNEY TO THE STARS", "official_description": "Embark on a journey of privacy at Star in Al-Furjan, where every element of a seamless life is just moments away, featuring a choice of 310 studios, 46 one-bedroom, and 102 two-bedroom apartments.", "official_description_de": "Star liegt im Al-Furjan-Cluster und bietet 310 Studios, 46 Ein-Zimmer- und 102 Zwei-Zimmer-Apartments. Eine Adresse mit konzentrierter Yield-Logik und etablierter Mietnachfrage." @@ -794,10 +775,9 @@ "Ground-Floor-Retail", "Bestand mit Vermietungslogik" ], - "data_confidence": "yellow", "official_headline": "THE CHARM OF NATURAL LIVING OR A REALM OF NATURAL WONDERS", - "official_description": "Discover the charm of natural living at Roy Mediterranean in Al-Furjan, and awaken your senses with an inspired nature-centric lifestyle and a choice of 224 studios & 47 one-bedroom apartments.", - "official_description_de": "Roy Mediterranean kombiniert in Al Furjan 224 Studios und 47 Ein-Zimmer-Apartments mit einem natur-orientierten Ambiente - klassisches Studio-Yield-Konzept in einer eingespielten Wohngegend." + "official_description": "Discover the charm of natural living at ROY Mediterranean in Al-Furjan, and awaken your senses with an inspired nature-centric lifestyle and a choice of 224 studios & 47 one-bedroom apartments.", + "official_description_de": "ROY Mediterranean kombiniert in Al Furjan 224 Studios und 47 Ein-Zimmer-Apartments mit einem naturorientierten Ambiente - klassisches Studio-Yield-Konzept in einer eingespielten Wohngegend." }, { "slug": "farishta", @@ -816,10 +796,8 @@ "marcel_take": "Farishta ist für Erstinvestoren interessant, weil hier wenig erklärt werden muss: fertig, angebunden, bestehender Mietmarkt.", "highlights": [ "Zwischen SZR und SMBZ Road", - "Route-2020-/Metro-Logik", - "SharePoint mit Completion Photos und Floor Plans" + "Route-2020-/Metro-Logik" ], - "data_confidence": "green", "official_headline": "EXPERIENCE THE UNCONVENTIONAL LIFESTYLE OF FARISHTA", "official_description": "It's time to embrace the modern lifestyle you deserve at Azizi Farishta. Explore our selection of high-end residential apartments, featuring 137 studios, 124 one-bedroom, and 23 two-bedroom options. Each unit embodies modern living with its contemporary design and craftsmanship, offering a luxurious yet comfortable living experience.", "official_description_de": "Azizi Farishta bietet 137 Studios, 124 Ein-Zimmer- und 23 Zwei-Zimmer-Apartments. Modernes Design und ausgewogene Ausstattung machen das Haus zu einer typischen Al-Furjan-Bestandsadresse mit etabliertem Mietmarkt." @@ -845,7 +823,6 @@ "Baufortschritt 57-67 Prozent in 2025-Updates", "Gym, zwei Pools, Kinderspielbereiche, BBQ" ], - "data_confidence": "yellow", "overview_bedrooms": "STUDIO, 1 & 2 BEDROOMS" }, { @@ -853,11 +830,11 @@ "title": "Beach Oasis", "category": "near-handover", "location": "Dubai Studio City", - "status": "Im Bau / Phase abhängig", + "status": "Im Bau / Phasenabhängig", "status_group": "construction", "buyer_profile": "Junge Investoren und lifestyle-orientierte Erstkäufer", "price_from": "From AED 881K", - "handover": "Phase abhängig", + "handover": "Phasenabhängig", "units": "1.416 Apartments", "image": "immobile/dubai/beach-oasis/overview-thumbnail/beach-oasis-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/studio-city/beach-oasis", @@ -870,7 +847,6 @@ "Dubai Studio City", "Lagoon-style Pool und man-made beach" ], - "data_confidence": "yellow", "overview_bedrooms": "STUDIO, 1 & 2 BEDROOMS", "official_headline": "WHERE BEACH-OASIS TRANQUILITY MEETS URBAN CHIC", "official_description": "Unveil serene living at Beach Oasis in Studio City, where the allure of a beach-inspired retreat seamlessly merges with the vibrancy of city life, offering a contemporary haven designed for modern living with the perfect blend of tranquility and urban chic", @@ -900,13 +876,12 @@ "Gebäudehöhe 2B+G+8", "Ergänzt den Beach-Oasis-Cluster" ], - "data_confidence": "green", "overview_bedrooms": "1 & 2 BEDROOMS", "official_headline": "LIVE AT THE FOREFRONT OF DUBAI’S EVOLUTION", "official_description": "A vista into the future, this residence in the heart of Dubai Studio City welcomes you. Get access to one of the capital’s fast-flourishing business hubs, a growing home for the creative industry, and the perfect haven for families and professionals who want to balance sleek serenity with connected living.", "official_unit_type": "1 & 2 BEDROOMS", "official_starting_price": "From AED 1.17M", - "official_description_de": "Azizi Vista liegt im Herzen der Dubai Studio City - einem stark wachsenden Business-Hub für Kreativ- und Medienindustrie. Der Cluster spricht Familien und Berufstätige an, die ruhige Wohnumgebung und gute Anbindung kombinieren wollen." + "official_description_de": "Azizi Vista liegt im Herzen der Dubai Studio City - einem stark wachsenden Business-Hub für Kreativ- und Medienindustrie. Der Cluster spricht Familien und Berufstätige an, die eine ruhige Wohnumgebung und gute Anbindung kombinieren wollen." }, { "slug": "monaco-mansions", @@ -917,7 +892,7 @@ "status_group": "offplan", "buyer_profile": "HNI-Käufer, Familien, Trophy-Asset-Investoren", "price_from": "From AED 45 M", - "handover": "Q4 2026, final prüfen", + "handover": "Q4 2026", "units": "109 Villas/Mansions im Azizi-Venice-Kontext", "image": "immobile/dubai/monaco-mansions/overview-thumbnail/monaco-mansions-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/dubai-south/monaco-mansions", @@ -926,11 +901,10 @@ "highlights": [ "Preis: From AED 45M", "109 Villas/Mansions im Venice-Kontext", - "6-, 7- und 8-Bedroom Mansions", + "6-, 7- und 8-Bedroom-Mansions", "Teil der Azizi-Venice-Community", "Dubai-South-Wachstumsthese" ], - "data_confidence": "yellow", "overview_bedrooms": "Villas", "official_headline": "MONACO MANSIONS", "official_description": "Introducing Monaco Mansions, where the narrative of lavishness is not merely told; it is vibrantly lived. Here, architectural grandeur marries the tranquil waves of the lagoon, crafting an existence where every moment is celebrated in royal splendour.", @@ -945,28 +919,26 @@ "location": "Jumeirah Village Circle", "status": "Residential / Projektübersicht", "status_group": "construction", - "buyer_profile": "Käufer mit Fokus auf etablierten Mietermarkt und JVC-Alltagslage", + "buyer_profile": "Käufer mit Fokus auf etablierten Mietmarkt und JVC-Alltagslage", "price_from": "From AED 592K", "handover": "Übergabe wird aktuell geprüft", "units": "260 Apartments", "image": "immobile/dubai/azizi-ruby/overview-thumbnail/azizi-ruby-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/jumeirah-village-circle/ruby", - "short": "JVC-Adresse mit breitem Mietermarkt im mittleren Dubai.", + "short": "JVC-Adresse mit breitem Mietmarkt im mittleren Dubai.", "marcel_take": "Ruby bringt JVC in die Auswahl. Das ist weniger Skyline-Erzählung und mehr Alltagsmarkt: ein etablierter Wohnkreis mit breiter Mietzielgruppe und guter Vergleichbarkeit.", "highlights": [ "Preis: From AED 592K", "260 Apartments", "Jumeirah Village Circle", - "Gebäudehöhe 3B+G+5P+14", - "Als eigener Standortfilter für JVC relevant" + "Gebäudehöhe 3B+G+5P+14" ], - "data_confidence": "green", "overview_bedrooms": "STUDIO, 1, 2 & 3 BEDROOMS", "official_headline": "A GRACEFUL PLACE TO CALL HOME", "official_description": "Ruby adds to the vibrancy of Dubai's renowned JVC community. This modern residence embodies all the richness of this booming residential hub, complemented by excellent amenities and exceptional convenience of living. The location along the metro line is an added benefit, making it more attractive to residents for easy commute while at a desirable distance from the city", "official_unit_type": "STUDIO, 1, 2 & 3 BEDROOMS", "official_starting_price": "From AED 592K", - "official_description_de": "Azizi Ruby liegt im etablierten Wohnkreis JVC mit guter Metro-Anbindung und breitem Mietermarkt - eine moderne Wohnadresse für klassische Yield-Strategien im mittleren Dubai." + "official_description_de": "Azizi Ruby liegt im etablierten Wohnkreis JVC mit guter Metro-Anbindung und breitem Mietmarkt - eine moderne Wohnadresse für klassische Yield-Strategien im mittleren Dubai." }, { "slug": "azizi-aura", @@ -990,7 +962,6 @@ "Gebäudehöhe B+G+2P+17", "Relevant für JAFZA-/Dubai-South-Achse" ], - "data_confidence": "green", "overview_bedrooms": "1 & 2 BEDROOMS", "official_headline": "MIX BUSINESS WITH LEISURE, ELEGANTLY", "official_description": "You split your life across two worlds and you need a home that helps you do so with finesse. Welcome to Aura—a game changer of a residence. This beacon of elevated living, nestled in the vibrant heart of Dubai’s JAFZA effortlessly combines comfort and adventure. With every corner echoing sophistication, Aura is more than a residence—it's the meeting point of work and leisure that ensures you thrive.", @@ -1012,7 +983,7 @@ "image": "immobile/dubai/azizi-arian/overview-thumbnail/azizi-arian-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/jebel-ali/arian", "short": "Größere Jebel-Ali-Adresse auf der Achse Richtung Dubai South.", - "marcel_take": "Arian ist im Vergleich zu Aura der größere Jebel-Ali-Case. Für B2in sollte hier besonders geprüft werden, welche Einheitstypen aktiv verfügbar sind und wie stark die Mietnachfrage aus JAFZA, Expo City und DWC wirkt.", + "marcel_take": "Arian ist im Vergleich zu Aura der größere Jebel-Ali-Case. Entscheidend ist hier, welche Einheitstypen aktiv verfügbar sind und wie stark die Mietnachfrage aus JAFZA, Expo City und DWC wirkt.", "highlights": [ "Preis: From AED 571K", "623 Apartments", @@ -1020,7 +991,6 @@ "Gebäudehöhe 3B+G+M+5P+17", "Südwestlicher Wachstumskorridor" ], - "data_confidence": "green", "overview_bedrooms": "STUDIO, 1, 2 & 3 BEDROOMS", "official_headline": "ASPIRATIONAL LIVING AMID DYNAMIC POSSIBILITIES", "official_description": "Welcome to Arian, where aspirational living meets endless possibilities in one of the few freehold residential properties within JAFZA. Strategically located in Jebel Ali, the UAE’s flagship integrated business hub, Arian places you at the heart of the world’s largest matured free zone and the Middle East’s biggest port. This unparalleled location offers seamless connectivity to Dubai’s prime business, leisure, and retail destinations, supported by outstanding highway and metro access.", @@ -1048,8 +1018,7 @@ "Ready to Move In", "Nahe Metro, MBZ Road, Jebel Ali, Dubai Marina, Expo City und Al Maktoum International Airport", "Portfolio-Logik für mehrere fertige Al-Furjan-Projekte" - ], - "data_confidence": "green" + ] }, { "slug": "azizi-venice", @@ -1073,7 +1042,6 @@ "Crystal Lagoon, Opera House, Retail Boulevard und Hotels", "Nahe Al Maktoum International Airport" ], - "data_confidence": "yellow", "overview_bedrooms": "STUDIO, 1, 2 & 3 BEDROOMS", "official_headline": "AN OASIS OF DREAMS", "official_description": "Dive into a world of unparalleled water-inspired living, unlike anything you've ever experienced, at Dubai's forthcoming legacy - a truly unparalleled luxury Crystal Lagoon community. Brace yourself to embark on a journey where opulence knows no boundaries, as you step into a haven of lavishness that stretches the limits of imagination. This is not just another destination it's an uncharted masterpiece, waiting to be discovered.", @@ -1090,7 +1058,7 @@ "status_group": "offplan", "buyer_profile": "Strategische Investoren und Portfoliodiversifikation", "price_from": "From AED 624K", - "handover": "Phase abhängig", + "handover": "Phasenabhängig", "units": "100 Buildings und 80.000 Apartments", "image": "immobile/dubai/azizi-milan/overview-thumbnail/azizi-milan-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/dubai-land/azizi-milan", @@ -1101,9 +1069,8 @@ "100 Buildings", "80.000 Apartments", "AED 75 Mrd. Masterplan", - "Mixed Use: Wohnen, Retail, Hospitality, Lifestyle" + "Mixed-Use: Wohnen, Retail, Hospitality, Lifestyle" ], - "data_confidence": "green", "overview_bedrooms": "STUDIO, 1, 2 & 3 BEDROOMS", "official_headline": "A STATEMENT OF STYLE AND AESTHETIC FLAIR", "official_description": "Immerse yourself in the enchanting Milanese charm of Dubai's most dynamic districts. Dive into a world where rich greenery and high fashion intertwine, creating a paradise where style harmonizes with nature. Experience a destination that captivates your senses with elegance, inviting you to embark on a chic lifestyle among retail boulevards and botanical gardens. Azizi Milan is not just a residence; it’s an everlasting splendor that enriches every moment.", @@ -1120,7 +1087,7 @@ "status_group": "offplan", "buyer_profile": "Off-Plan-Investoren mit Insel-These", "price_from": "From AED 1.68M", - "handover": "Q2 2027 bis Q1 2028 je Quelle, final prüfen", + "handover": "Q2 2027 bis Q1 2028", "units": "221 Apartments", "image": "immobile/dubai/azizi-wasel/overview-thumbnail/azizi-wasel-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/dubai-islands/azizi-wasel", @@ -1133,7 +1100,6 @@ "Dubai Islands / Deira Waterfront", "Studios bis 3BR und Penthouses" ], - "data_confidence": "yellow", "overview_bedrooms": "STUDIO, 1, 2, 3 BEDROOMS & PENTHOUSE", "official_headline": "AN OCEANIC RETREAT ALONG THE SHORES OF THE DUBAI ISLANDS", "official_description": "Azizi’s newest residential marvel, Azizi Wasel on Dubai Islands, offers breathtaking sea views paired with a glimpse of Dubai’s iconic skyline. Immerse yourself in the vibrant culture of the city while enjoying the serenity of waterfront living. Designed for modern comfort and convenience, Azizi Wasel combines elegance with seamless access to Dubai’s major attractions, creating a perfect balance of urban energy and coastal tranquility.", @@ -1155,16 +1121,15 @@ "image": "immobile/dubai/azizi-jaddaf-beach-oasis/overview-thumbnail/azizi-jaddaf-beach-oasis-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/dubai-healthcare-city/azizi-jaddaf-beach-oasis", "short": "Al-Jaddaf-Adresse mit eigenem Beach-Pool nahe Downtown Dubai.", - "marcel_take": "Jaddaf Beach Oasis setzt das Beach-Oasis-Lagunenkonzept im Creek-Cluster Al Jaddaf fort. Damit ein Lifestyle-Twist auf eine sonst zentral-urbane Lage. Verfügbarkeit und Eckdaten prüfe ich pro Einheit auf Anfrage.", + "marcel_take": "Jaddaf Beach Oasis setzt das Beach-Oasis-Lagunenkonzept im Creek-Cluster Al Jaddaf fort. Das bringt einen Lifestyle-Twist in eine sonst zentral-urbane Lage. Verfügbarkeit und Eckdaten prüfe ich pro Einheit auf Anfrage.", "highlights": [ "Preisangabe auf offizieller Übersicht noch offen", "New Release" ], - "data_confidence": "yellow", "official_headline": "CITY LIVING, BEACH FEELING", "official_description": "Azizi Jaddaf Beach Oasis – unlocks a prime address in Al Jaddaf for discerning buyers seeking to invest in one of the most sought-after locations in the city. A modern contemporary design with its own beach pool, nestled within an area rich with the heritage and legacy of old Dubai. A mesmerizing blend of access and exclusivity awaits in this hidden gem of a community, just moments from the business, commercial and leisure hub of Downtown Dubai.", "official_unit_type": "STUDIO, 1 BEDROOM & PENTHOUSES", - "official_description_de": "Jaddaf Beach Oasis bringt das Beach-Pool-Konzept ins zentrale Al Jaddaf - in Geh-Distanz zu Downtown Dubai. Modernes Design trifft auf eine traditionsreiche Lage; eine Adresse für Käufer, die zentrale Mietbarkeit mit Lifestyle-Twist suchen." + "official_description_de": "Jaddaf Beach Oasis bringt das Beach-Pool-Konzept ins zentrale Al Jaddaf - in Gehdistanz zu Downtown Dubai. Modernes Design trifft auf eine traditionsreiche Lage; eine Adresse für Käufer, die zentrale Vermietbarkeit mit Lifestyle-Twist suchen." }, { "slug": "azizi-rose", @@ -1179,18 +1144,17 @@ "units": "STUDIO & 1 BEDROOM", "image": "immobile/dubai/azizi-rose/overview-thumbnail/azizi-rose-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/jebel-ali/azizi-rose", - "short": "Studio- und 1-BR-Adresse im Downtown Jebel Ali nahe JAFZA.", - "marcel_take": "Rose ist eine Freehold-Position direkt an JAFZA, einer der größten Free Zones der Region. Damit klar an Business-Mieter und langfristige Connectivity-These adressiert. Phase und Einstiegspreis kommuniziere ich pro Einheit.", + "short": "Studio- und 1-BR-Adresse in Downtown Jebel Ali nahe JAFZA.", + "marcel_take": "Rose ist eine Freehold-Position direkt an JAFZA, einer der größten Free Zones der Region. Damit richtet sich das Projekt klar an Business-Mieter und eine langfristige Connectivity-These. Phase und Einstiegspreis kommuniziere ich pro Einheit.", "highlights": [ "Freehold direkt neben JAFZA", "Studio- und 1-BR-Schwerpunkt", "Sheikh Zayed Road und Metro nah" ], - "data_confidence": "yellow", "official_headline": "THE FOCAL POINT OF OPPORTUNITY", "official_description": "Azizi Rose is your gateway to the hyper-connected, thriving community of Downtown Jebel Ali, where leading global companies have strategically established themselves at the heart of Asia-Europe trade routes. It represents a rare freehold investment opportunity on the doorstep of the world’s largest free trade zone, JAFZA, and the Middle East’s busiest port. With Sheikh Zayed Road and the metro in close proximity, residents enjoy seamless access to Dubai’s foremost business, retail, and leisure destinations.", "official_unit_type": "STUDIO & 1 BEDROOM", - "official_description_de": "Azizi Rose liegt im Downtown Jebel Ali - direkt an JAFZA, einer der größten Free Zones weltweit, und am größten Hafen des Nahen Ostens. Eine Freehold-Position mit klarem Business-Mieter-Profil, gut angebunden an Sheikh Zayed Road und die Metro." + "official_description_de": "Azizi Rose liegt in Downtown Jebel Ali - direkt an JAFZA, einer der größten Free Zones weltweit, und am größten Hafen des Nahen Ostens. Eine Freehold-Position mit klarem Business-Mieter-Profil, gut angebunden an Sheikh Zayed Road und die Metro." }, { "slug": "azizi-farishta-ii", @@ -1212,7 +1176,6 @@ "Studio bis 1-BR plus Penthouses", "Metro- und Highway-Anbindung" ], - "data_confidence": "yellow", "official_headline": "TIMELESS LIVING, AT THE CENTER OF EVERYTHING.", "official_description": "Azizi Farishta II in Al Jaddaf defines elevated creekside living. Set where rich cultural heritage and traditions meet the city’s contemporary architectural prowess, just steps from the Dubai Creek, this sophisticated residential development offers effortless metro and highway connectivity, placing Downtown Dubai and the city’s iconic landmarks within easy reach. With a curated collection of premium residences, including stylish studios, one-bedroom apartments, and lavish penthouses, each home is crafted with meticulous attention to detail, offers panoramic views, and delivers a prestigious, unrivaled lifestyle.", "official_unit_type": "STUDIO, 1 BEDROOM & PENTHOUSES", @@ -1232,17 +1195,16 @@ "image": "immobile/dubai/azizi-gabriel/overview-thumbnail/azizi-gabriel-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/jebel-ali/azizi-gabriel", "short": "Downtown-Jebel-Ali-Adresse mit Studio bis 2-BR direkt an der JAFZA.", - "marcel_take": "Gabriel positioniert sich mit Studio- bis 2-BR-Apartments im Downtown Jebel Ali und damit für Business-Pendler und JAFZA-Mieter. Verfügbarkeit und Einstiegspreis aktuell auf Anfrage.", + "marcel_take": "Gabriel positioniert sich mit Studio- bis 2-BR-Apartments in Downtown Jebel Ali und damit für Business-Pendler und JAFZA-Mieter. Verfügbarkeit und Einstiegspreis aktuell auf Anfrage.", "highlights": [ "Studio bis 2-BR-Apartments", "Downtown Jebel Ali", "JAFZA und SZR direkt erreichbar" ], - "data_confidence": "yellow", "official_headline": "THE APEX OF AMBITION", "official_description": "Azizi Gabriel is an exciting new residential opportunity in the center of the vibrant and growing community of Downtown Jebel Ali, an unparalleled global business hub. Enjoy a freehold investment opportunity on the doorstep of the world’s largest free trade zone - JAFZA - and the biggest port in the Middle East. And with quick access to Sheik Zayed Road, the rest of Dubai’s business, retail, and leisure landmarks are within easy reach. Build your future in the center of a thriving community that gives you direct access to Dubai’s best business, retail and entertainment offerings. Unlock a life of modern elegance with a home that enables your potential with style. With easy access to Sheik Zayed Road and the metro, the whole city is on your doorstep.", "official_unit_type": "STUDIO, 1, 2 BEDROOMS", - "official_description_de": "Azizi Gabriel ist eine Freehold-Adresse im Downtown Jebel Ali, direkt am Eingang zur JAFZA. Mit guter Anbindung an die wichtigsten Achsen Dubais ein klassischer Yield-Case mit Business-Mieter-Profil." + "official_description_de": "Azizi Gabriel ist eine Freehold-Adresse in Downtown Jebel Ali, direkt am Eingang zur JAFZA. Mit guter Anbindung an die wichtigsten Achsen Dubais ein klassischer Yield-Case mit Business-Mieter-Profil." }, { "slug": "azizi-leily", @@ -1264,7 +1226,6 @@ "Creek-Cluster Al Jaddaf", "Einstieg ab AED 828K" ], - "data_confidence": "green", "official_headline": "TIMELESS ROOTS, MODERN HORIZONS", "official_description": "In the heart of Al Jaddaf, where the Dubai Creek shimmers beneath the skyline, Azizi Leily rises with distinction and grace. From chic studios and spacious one- and two-bedroom residences to two signature penthouses, every home embodies refined contemporary living.", "official_unit_type": "STUDIO, 1, 2 BEDROOMS & PENTHOUSE", @@ -1285,17 +1246,16 @@ "image": "immobile/dubai/azizi-lina/overview-thumbnail/azizi-lina-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/jebel-ali/azizi-lina", "short": "Jebel-Ali-Adresse direkt neben JAFZA ab AED 572K.", - "marcel_take": "Lina ist mit ab AED 572K eine der zugänglichsten Jebel-Ali-Optionen direkt neben JAFZA. Klares Yield-Profil mit Business-Mieterprofil. Phase und konkrete Einheiten prüfe ich auf Anfrage.", + "marcel_take": "Lina ist mit ab AED 572K eine der zugänglichsten Jebel-Ali-Optionen direkt neben JAFZA. Klares Yield-Profil für Business-Mieter. Phase und konkrete Einheiten prüfe ich auf Anfrage.", "highlights": [ "Einstieg ab AED 572K", "Lage direkt an JAFZA", "Yield-Case für Business-Mieter" ], - "data_confidence": "yellow", "official_headline": "WHERE CONNECTIVITY FUELS OPPORTUNITY", "official_description": "Azizi Lina rises in Downtown Jebel Ali, alongside the famed JAFZA — one of the world’s largest free zones and the Middle East’s biggest port. Effortless metro and highway connectivity, contemporary residences, thoughtfully designed amenities, and 100+ Fortune Global 500 companies in immediate vicinity bring global opportunity within reach, creating a lifestyle that perfectly balances ambition and comfort.", "official_starting_price": "From AED 572K", - "official_description_de": "Azizi Lina liegt im Downtown Jebel Ali, unmittelbar neben der JAFZA und dem größten Hafen des Nahen Ostens. Direkter Zugang zu Metro und Highway, moderne Wohnungen und mehr als 100 Fortune-Global-500-Unternehmen im direkten Umfeld machen das Haus zu einer Adresse für Berufstätige mit internationalem Geschäftsbezug." + "official_description_de": "Azizi Lina liegt in Downtown Jebel Ali, unmittelbar neben der JAFZA und dem größten Hafen des Nahen Ostens. Direkter Zugang zu Metro und Highway, moderne Wohnungen und mehr als 100 Fortune-Global-500-Unternehmen im direkten Umfeld machen das Haus zu einer Adresse für Berufstätige mit internationalem Geschäftsbezug." }, { "slug": "milan-heights", @@ -1317,7 +1277,6 @@ "Eigenes Lagunenkonzept", "Studio- bis 3-BR-Mix" ], - "data_confidence": "yellow", "official_headline": "THE PINNACLE OF ITALIAN-INSPIRED LIVING", "official_description": "Milan Heights, set within the famed Azizi Milan, epitomizes modern elegance infused with Milanese-Italian charm. Crafted as a refined sanctuary, it meets every lifestyle need with effortless grace. Boasting exceptional amenities and the allure of its signature blue lagoon, this enclave harmonizes sophistication with convenience.", "official_unit_type": "STUDIO, 1, 2, 3 BEDROOMS", @@ -1343,12 +1302,11 @@ "Einstieg ab AED 1,83M", "Direkter Vergleich zu Azizi Emerald" ], - "data_confidence": "green", "official_headline": "THE EMIRATE’S BUSINESS HUB OF CONNECTIVITY", "official_description": "Azizi Tower 1 is a modern commercial landmark in Al Jaddaf, offering flexible layouts and thoughtfully designed interiors that support productivity and growth. With a contemporary façade and direct links to the city’s key destinations, it provides an ideal address for businesses of every scale — from agile startups to established enterprises.", "official_unit_type": "COMMERCIAL SPACES", "official_starting_price": "From AED 1.83M", - "official_description_de": "Azizi Tower 1 ist ein modernes kommerzielles Gebäude in Al Jaddaf. Flexibel zuschneidbare Flächen und durchdachte Innenräume sprechen sowohl Startups als auch etablierte Unternehmen an - eine Office-Adresse mit guter Anbindung an die zentralen Achsen der Stadt." + "official_description_de": "Azizi Tower 1 ist ein modernes kommerzielles Gebäude in Al Jaddaf. Flexibel zuschneidbare Flächen und durchdachte Innenräume sprechen sowohl Start-ups als auch etablierte Unternehmen an - eine Office-Adresse mit guter Anbindung an die zentralen Achsen der Stadt." }, { "slug": "azizi-wares", @@ -1364,13 +1322,12 @@ "image": "immobile/dubai/azizi-wares/overview-thumbnail/azizi-wares-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/jebel-ali/azizi-wares", "short": "Freehold-Adresse in Jebel Ali mit Studio bis 3-BR.", - "marcel_take": "Wares deckt mit Studio- bis 3-BR den breiten Mix in Jebel Ali ab und ist damit weniger reiner Yield-Case als Lina oder Rose. Eignet sich auch für Eigennutzer mit Connectivity-Fokus. Eckdaten auf Anfrage.", + "marcel_take": "Wares deckt mit Studios bis 3-BR-Apartments den breiten Mix in Jebel Ali ab und ist damit weniger reiner Yield-Case als Lina oder Rose. Eignet sich auch für Eigennutzer mit Connectivity-Fokus. Eckdaten auf Anfrage.", "highlights": [ "Studio bis 3-BR-Mix", "Freehold-Position in Jebel Ali", "JAFZA und Metro nah" ], - "data_confidence": "yellow", "official_headline": "YOUR GATEWAY TO A WORLD OF OPPORTUNITY", "official_description": "Azizi Wares, a distinctive address beside JAFZA in Jebel Ali, combines contemporary elegance with unmatched connectivity. This exclusive freehold residence features meticulously designed studios and one-, two-, and three-bedroom apartments that elevate everyday living. With seamless access to Sheikh Zayed Road and the metro, Dubai’s key destinations are effortlessly within reach.", "official_unit_type": "STUDIO, 1, 2 & 3 BEDROOMS", @@ -1396,7 +1353,6 @@ "Creek-Lage in Al Jaddaf", "Eckdaten und Phase auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "WHERE HERITAGE SHAPES THE FUTURE", "official_description": "In the heart of Al Jaddaf, surrounded by culture, connected to opportunity, and framed by sweeping creek views, Azizi David rises as a celebration of a tradition-rich past, seamlessly woven with modernity. Offering an exceptional selection of residences — from elegant studios and stylish one- and two-bedroom apartments to opulent penthouses — it embodies contemporary living while honoring Dubai’s timeless legacy.", "official_unit_type": "STUDIO, 1, 2 BEDROOMS & PENTHOUSE", @@ -1422,7 +1378,6 @@ "Studio- bis 2-BR-Mix", "Aktiv vermarktet ab AED 586K" ], - "data_confidence": "green", "official_headline": "EMBRACE THE CONTEMPORARY LIFESTYLE", "official_description": "Azizi Sikander presents itself as a distinguished destination within Al Furjan community, boasting breathtaking city vistas and a refined architectural design. Residents are immersed in a lively atmosphere enriched with high-end amenities and convenient access to essential attractions. This exquisite building harmoniously blends contemporary living with the advantages of a well-connected neighborhood, making it the perfect place to call home.", "official_unit_type": "STUDIO, 1 & 2 BEDROOMS", @@ -1443,13 +1398,12 @@ "image": "immobile/dubai/azizi-amir/overview-thumbnail/azizi-amir-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/azizi-amir", "short": "Familienorientierte Al-Furjan-Adresse mit 1- bis 3-Zimmer-Apartments.", - "marcel_take": "Amir setzt auf größeres Wohnflächensegment in Al Furjan und richtet sich damit eher an Familienhaushalte als an Studio-Mieter. Preis und Verfügbarkeit aktuell auf Anfrage; Eckdaten gleiche ich gegen Sikander, Raffi und Zain individuell ab.", + "marcel_take": "Amir setzt auf ein größeres Wohnflächensegment in Al Furjan und richtet sich damit eher an Familienhaushalte als an Studio-Mieter. Preis und Verfügbarkeit aktuell auf Anfrage; Eckdaten gleiche ich gegen Sikander, Raffi und Zain individuell ab.", "highlights": [ "Family-Layouts mit 1- bis 3-BR", "Lage in der Al-Furjan-Community", "Verfügbarkeit auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "REDEFINE MODERN LIFESTYLE AT AZIZI AMIR", "official_description": "Located in the vibrant heart of Al Furjan, Azizi Amir is a remarkable addition to this flourishing community in Dubai. This stylish residence combines elegance with the energy of city living. Offering premium amenities and leisure activities tailored to your needs, Azizi Amir ensures an exceptional living experience. Its strategic location along the metro line provides convenient commuting, allowing you to enjoy the perfect balance of excitement and comfort in your luxurious new home.", "official_unit_type": "1, 2 & 3 BEDROOMS", @@ -1475,7 +1429,6 @@ "Einstieg ab AED 618K", "Lage entlang der Metro-Achse" ], - "data_confidence": "green", "official_headline": "A SEAMLESS BLEND OF ART AND ARCHITECTURE AWAITS YOU", "official_description": "Welcome to Azizi Raffi in Al Furjan, where modern design meets unparalleled convenience. This newly launched residential building offers contemporary living spaces crafted for comfort, complemented by a range of amenities that elevate urban life. Ideally located in Al Furjan, Azizi Raffi provides seamless access to key areas in Dubai, blending vibrant city life with the tranquillity of a well-connected community", "official_unit_type": "STUDIO, 1, 2 & 3 BEDROOMS", @@ -1502,7 +1455,6 @@ "Yield-Profil ab AED 1,26M", "Al-Furjan-Lage mit Metro-Nähe" ], - "data_confidence": "green", "official_headline": "YOUR DISTINCTIVE RESIDENCE AWAITS AT AZIZI NEILA", "official_description": "Revel in exceptional connectivity and find the perfect equilibrium between the dynamism of the city and serene tranquility at NEILA-Azizi's latest jewel in Al Furjan.", "official_unit_type": "STUDIO & 1 BEDROOM", @@ -1529,7 +1481,6 @@ "Familien-Adresse ab AED 1,72M", "Metro-Anbindung in Al Furjan" ], - "data_confidence": "green", "official_headline": "A GRACEFUL PLACE TO CALL HOME", "official_description": "Azizi Zain adds to the vibrancy of Dubai's renowned Al Furjan community. This modern residence embodies all the richness of this booming residential hub, complemented by excellent amenities and exceptional convenience of living. The location along the metro line is an added benefit, making it more attractive to residents for easy commute while at a desirable distance from the city", "official_unit_type": "1, 2 & 3 BEDROOMS", @@ -1549,14 +1500,13 @@ "units": "STUDIO, 1 & 2 BEDROOMS", "image": "immobile/dubai/beach-oasis-ii/overview-thumbnail/beach-oasis-ii-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/studio-city/beach-oasis-ii", - "short": "Lagunen-Erweiterung von Beach Oasis im Dubai Studio City ab AED 604K.", + "short": "Lagunen-Erweiterung von Beach Oasis in Dubai Studio City ab AED 604K.", "marcel_take": "Beach Oasis II ergänzt das ursprüngliche Beach-Oasis-Konzept in Studio City: zwei Gebäude um eine Lagunen-Pool-Anlage. Einstieg ab AED 604K macht es zur zugänglichsten Lifestyle-Option im Cluster.", "highlights": [ "Lagunen-Pool und künstlicher Strand", - "Zwei Gebäude rund um Innenhof", + "Zwei Gebäude rund um einen Innenhof", "Einstieg ab AED 604K" ], - "data_confidence": "green", "official_headline": "WHERE SERENITY MEETS VIBRANCY IN DUBAI STUDIO CITY", "official_description": "Experience a serene lifestyle amidst the vibrancy of Dubai Studio City. Beach Oasis II is an elegant urban neighbourhood comprising two buildings surrounding a lagoon-style pool and a man-made beach. Featuring spacious homes, it offers studio, 1 & 2-bedroom apartments. The captivating pool is surrounded by lush greenery, offering a tranquil ambiance complemented by a host of amenities, like gym and play areas. The location provides excellent connectivity to a range of sports & leisure options along with easy access to Dubai's largest highways. Here, life finds joy in full swing, offering the perfect work-life balance.", "official_unit_type": "STUDIO, 1 & 2 BEDROOMS", @@ -1583,7 +1533,6 @@ "Einstieg ab AED 1,01M", "Al-Furjan-Lage entlang der Metro" ], - "data_confidence": "green", "official_headline": "YOUR DISTINCTIVE RESIDENCE AWAITS AT AZIZI JEWEL", "official_description": "Step into Azizi Jewel, where the next generation of strategic urban connectivity is brought to life at Al-Furjan, with masterful craftsmanship, effortlessly blending chic aesthetics with functional design.", "official_unit_type": "STUDIO & 1 BEDROOM", @@ -1610,7 +1559,6 @@ "Familien-Profil ab AED 1,73M", "Lage entlang der Metro-Achse" ], - "data_confidence": "green", "official_headline": "DISCOVER CONTEMPORARY LIVING AT ITS FINEST", "official_description": "Experience the epitome of contemporary elegance at Azizi Central, an exquisite addition to the Al Furjan Community in new Dubai, nestled along the prestigious metro line. Central stands as a pinnacle among Azizi's distinguished residential projects, offering a haven for families seeking refined urban living with the dynamic vitality of the city.", "official_unit_type": "1, 2 & 3 BEDROOMS", @@ -1631,13 +1579,12 @@ "image": "immobile/dubai/amber/overview-thumbnail/amber-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/amber", "short": "Al-Furjan-Adresse mit 1- bis 3-Bedroom-Apartments ab AED 1,51M.", - "marcel_take": "Amber gehört zur jüngeren Welle Al-Furjan-Adressen mit Familien-Layouts. Ab AED 1,51M ein vergleichbar positioniertes Ticket wie Central. Verfügbarkeit und Phase pro Einheit prüfe ich auf Anfrage.", + "marcel_take": "Amber gehört zur jüngeren Welle von Al-Furjan-Adressen mit Familien-Layouts. Ab AED 1,51M ein vergleichbar positioniertes Ticket wie Central. Verfügbarkeit und Phase pro Einheit prüfe ich auf Anfrage.", "highlights": [ "1- bis 3-BR-Apartments", "Einstieg ab AED 1,51M", "Aktiv vermarktete Al-Furjan-Phase" ], - "data_confidence": "green", "official_headline": "YOUR DISTINCTIVE RESIDENCE AWAITS AT AMBER", "official_description": "Revel in exceptional connectivity and find the perfect equilibrium between the dynamism of the city and serene tranquility at Amber-Azizi's latest jewel in Al Furjan.", "official_unit_type": "1, 2 & 3 BEDROOMS", @@ -1658,13 +1605,12 @@ "image": "immobile/dubai/park-avenue-iii/overview-thumbnail/park-avenue-iii-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/meydan/park-avenue-iii", "short": "Dritte Phase der Park-Avenue-Boutique-Community in MBR City.", - "marcel_take": "Park Avenue III ist die jüngste Phase der Park-Avenue-Reihe in MBR City: 89 Wohneinheiten und 13 Premium-Retail. Damit kleinformatiger und exklusiver positioniert als die großen Riviera-Türme. Einstiegspreis und Phase auf Anfrage.", + "marcel_take": "Park Avenue III ist die jüngste Phase der Park-Avenue-Reihe in MBR City: 89 Wohneinheiten und 13 Premium-Retail-Flächen. Damit kleinformatiger und exklusiver positioniert als die großen Riviera-Türme. Einstiegspreis und Phase auf Anfrage.", "highlights": [ - "89 Wohneinheiten plus 13 Premium-Retail", + "89 Wohneinheiten plus 13 Premium-Retail-Flächen", "Kleinformatige MBR-City-Erweiterung", "Einstiegspreis auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "REIMAGINE URBAN LIVING", "official_description": "Park Avenue III is the newest addition to Azizi's success in developing superior craftsmanship and modern living, which is nestled in Medyan, a prestigious neighborhood in Dubai, offering the best of both worlds. Azizi Park Avenue III features 89 high-end residential units and 13 premium retail stores, making it an exclusive window into prime real estate. From refined luxury interiors to breathtaking landscaped outdoor areas—you'll get it all here.", "official_unit_type": "STUDIO, 1 & 3 BEDROOMS", @@ -1683,14 +1629,13 @@ "units": "1 BEDROOM", "image": "immobile/dubai/pearl/overview-thumbnail/pearl-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/pearl", - "short": "Studio-getriebene Al-Furjan-Residenz mit 192 Studios und 1-BR-Anteil.", + "short": "studiogetriebene Al-Furjan-Residenz mit 192 Studios und 1-BR-Anteil.", "marcel_take": "Pearl ist von der Einheitenstruktur klar studio-getrieben (192 Studios) und damit eine reine Yield-Adresse für Investoren mit Cashflow-Fokus. Einstieg ab AED 694K macht es zur zugänglichsten Al-Furjan-Variante.", "highlights": [ "192 Studios als Yield-Schwerpunkt", - "54 1-BR und 14 2-BR-Einheiten", + "54 1-BR- und 14 2-BR-Einheiten", "Einstieg ab AED 694K" ], - "data_confidence": "green", "official_headline": "PEARL RESIDENCES, AL-FURJAN'S CROWN JEWEL", "official_description": "Elevate your living experience to new heights at Pearl, the prestigious residential complex soaring gracefully across 7 floors with a selection of 192 studios, 54 lavish one-bedroom apartments, and 14 exquisite two-bedroom residences.", "official_unit_type": "1 BEDROOM", @@ -1717,7 +1662,6 @@ "Studio-, 1- und 3-BR-Mix", "Einstieg ab AED 1,74M" ], - "data_confidence": "green", "official_headline": "FOLLOW YOUR WANDER-MUST AT PARK AVENUE II", "official_description": "Every journey has its destination. And ours is one of a kind: Park Avenue II at Medyan, where exclusivity meets distinction! You're invited to join us in this remarkable journey. With impeccable design, a perfect mix of residential experiences, and unique amenities, experience life in a naturally relaxing environment surrounded by beautiful homes, lush greenery, and soothing water features. Choose from 1 & 2 bedroom apartments, each offering magnificent views. Experience the highest standard of cosmopolitan living that celebrates the beauty of our natural world", "official_unit_type": "STUDIO, 1 & 3 BEDROOMS", @@ -1744,7 +1688,6 @@ "Nähe Sheikh Zayed Road", "Bestand in Al Furjan" ], - "data_confidence": "yellow", "official_headline": "INTERTWINING URBAN HARMONY AT BERTON", "official_description": "Step into Berton, where the next generation of strategic urban connectivity is brought to life at Al-Furjan, with masterful craftsmanship, effortlessly blending chic aesthetics with functional design. Berton offers direct access to the Route 2020 metro line and Sheikh Mohammed bin Zayed Road.", "official_description_de": "Berton steht in Al Furjan für strategisch angebundenes Wohnen: präzises Design, durchdachte Grundrisse und der direkte Zugang zur Route-2020-Metrolinie sowie zur Sheikh Mohammed bin Zayed Road. Eine Adresse für Bewohner mit Pendelfokus." @@ -1768,8 +1711,7 @@ "Studio bis 2-BR-Apartments", "Creek-Cluster Al Jaddaf", "Off-Plan-Einstieg ab AED 1,14M" - ], - "data_confidence": "green" + ] }, { "slug": "samia", @@ -1791,7 +1733,6 @@ "Acht Duplex-Penthouses als USP", "14-stöckiges Bestandsobjekt" ], - "data_confidence": "yellow", "official_headline": "LIVE AT EASE AT SAMIA", "official_description": "Explore the exceptional lifestyle at Samia by Azizi – a sophisticated 14-storey residence nestled in the heart of Al Furjan. With 292 meticulously furnished apartments ranging from studios to spacious 2-bedroom layouts, alongside eight luxurious duplex penthouses, Samia seamlessly blends convenience with unmatched sophistication, setting a new standard for refined living in Al Furjan.", "official_description_de": "Samia ist eine 14-stöckige Wohnadresse im Herzen von Al Furjan. 292 möblierte Apartments von Studios bis 2-Zimmer-Layouts, ergänzt um acht Duplex-Penthouses, kombinieren Komfort mit gehobener Ausstattung in einem überschaubaren Gebäude." @@ -1810,13 +1751,12 @@ "image": "immobile/dubai/plaza/overview-thumbnail/plaza-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/plaza", "short": "Etablierte Al-Furjan-Adresse mit Studios, 1- und 2-BR-Apartments.", - "marcel_take": "Plaza ist ein Bestandsprojekt mit klassischer Al-Furjan-Logik: 286 Studios, 46 1-BR und 102 2-BR. Vermietungsstark, Resale-Markt etabliert. Wer Al Furjan auf Cashflow spielt, sollte Plaza neben Star und Roy Mediterranean kennen.", + "marcel_take": "Plaza ist ein Bestandsprojekt mit klassischer Al-Furjan-Logik: 286 Studios, 46 1-BR und 102 2-BR. Vermietungsstark, Resale-Markt etabliert. Wer Al Furjan auf Cashflow spielt, sollte Plaza neben Star und ROY Mediterranean kennen.", "highlights": [ "286 Studios, 46 1-BR und 102 2-BR", "Bestand mit etabliertem Mietmarkt", "Resale-Verfügbarkeit auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "LIVE LAVISHLY AT AZIZI PLAZA", "official_description": "Experience the essence of urban living at Azizi Plaza, where style seamlessly intertwine with convenience. Nestled in a well-connected urban enclave, a various collection of 286 studios, 46 one-bedroom apartments, and 102 two-bedroom apartments, embodying a fresh perspective on contemporary urban lifestyles.", "official_description_de": "Azizi Plaza liegt in einer gut angebundenen Al-Furjan-Lage und bietet 286 Studios, 46 Ein-Zimmer- und 102 Zwei-Zimmer-Apartments. Eine moderne, zeitgemäß geplante Wohnadresse für klassische urbane Lifestyles." @@ -1841,7 +1781,6 @@ "Etabliertes Al-Furjan-Bestandsobjekt", "Resale-Verfügbarkeit individuell" ], - "data_confidence": "yellow", "official_headline": "UNVEILING A CHAPTER OF REFINEMENT AT SHAISTA", "official_description": "A new chapter of refinement unfolds at Shaista, a place positioned conveniently in the heart of the Al-Furjan neighborhood, with a selection of 137 studios, 124 one-bedroom, and 23 two-bedroom apartments, crafting an enclave that encapsulates the essence of true living.", "official_description_de": "Shaista liegt zentral im Al-Furjan-Quartier und umfasst 137 Studios, 124 Ein-Zimmer- und 23 Zwei-Zimmer-Apartments. Eine Adresse, die kompakte Grundrisse mit ausgewogener Wohnqualität verbindet." @@ -1866,7 +1805,6 @@ "Reine Yield-Konfiguration", "Resale-Verfügbarkeit auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "MONTRELL TRANSCENDS THE ORDINARY", "official_description": "Montrell is a meticulously crafted mid-rise development, featuring 168 studios and 54 one-bedroom apartments, each a masterpiece of contemporary design and laid-back luxury, allowing you to embrace a lifestyle of your own creation.", "official_description_de": "Montrell ist eine sorgfältig geplante Mid-Rise-Adresse mit 168 Studios und 54 Ein-Zimmer-Apartments. Zeitgemäßes Design und entspannte Wohnatmosphäre prägen das Haus - klassische Al-Furjan-Yield-Logik." @@ -1891,7 +1829,6 @@ "Einstieg ab AED 1,33M", "Etablierter Al-Furjan-Cluster" ], - "data_confidence": "green", "official_headline": "ELEVATE YOUR LIFESTYLE AT ACACIA RESIDENCES", "official_description": "Discover a sanctuary where lavishness meets convenience. Azizi's Acacia Residences redefine living, providing you with a dream home that perfectly complements your aspirations. Explore more of what awaits you.", "official_unit_type": "STUDIO, 1 & 3 BEDROOMS", @@ -1918,7 +1855,6 @@ "160 Studios und 58 1-BR-Apartments", "Einstieg ab AED 1,71M" ], - "data_confidence": "green", "official_headline": "A HAVEN OF COMFORT & SOPHISTICATION", "official_description": "Explore the extraordinary that awaits you at Aster, where 160 studios, 58 one-bedroom apartments, and 9 two-bedroom apartments redefine living with meticulous designs that harmonize elegance with everyday convenience.", "official_unit_type": "1 BEDROOM", @@ -1945,7 +1881,6 @@ "Familienorientierte Al-Furjan-Adresse", "Verfügbarkeit auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "DWELL IN DISTINCTION AT AZIZI TULIP", "official_description": "Azizi Tulip stands as a housing gem, presenting a collection of one, two, and three-bedroom apartments that epitomize the essence of refined living. This haven is a sanctuary for families in search of a home that exudes distinction and sophistication, inviting you to indulge in a lifestyle of opulence", "official_description_de": "Azizi Tulip umfasst 1-, 2- und 3-Zimmer-Apartments und positioniert sich als Adresse für Familien und Bewohner mit höherem Flächenbedarf - klar familienorientiert statt reiner Yield-Adresse." @@ -1970,7 +1905,6 @@ "Etabliertes Al-Furjan-Bestandsobjekt", "Resale-Verfügbarkeit auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "YOUR ALL-YEAR GETAWAY TO SMART LIVING", "official_description": "Introducing Al Freesia, a residential haven nestled in the vibrant heart of Al Furjan–it sets the stage for a life of sophistication and ease in a prime location, with impeccable amenities and plush living spaces.", "official_description_de": "Al Freesia liegt mitten in Al Furjan und kombiniert hochwertige Annehmlichkeiten mit komfortablen Wohnflächen. Eine Adresse mit Fokus auf Ausstattung und Wohnqualität in einer eingespielten Lage." @@ -1995,7 +1929,6 @@ "Europäisch ausgestattete Küchen", "Resale-Verfügbarkeit auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "EMBARK ON NEW BEGINNINGS AT DAISY.", "official_description": "At Daisy, new beginnings intertwine seamlessly with the allure of nature, nestled in the serene embrace of Al Furjan, where you can choose from one, two, and three-bedroom apartments, each adorned with fully-fitted, European-style kitchens boasting high-end finishes.", "official_description_de": "Daisy in Al Furjan bietet 1-, 2- und 3-Zimmer-Apartments mit voll ausgestatteten Küchen im europäischen Stil und hochwertigen Materialien. Eine Adresse für Bewohner, die Wert auf Ausstattung und Wohnqualität legen." @@ -2020,7 +1953,6 @@ "Lifestyle-orientierte Al-Furjan-Adresse", "Verfügbarkeit auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "WHERE EVERY SUNRISE UNVEILS THE BEAUTY OF DUBAI MARINA", "official_description": "Imagine waking up to breathtaking views of Dubai Marina every day, while being surrounded by tasteful and elegant design. This is your chance to elevate your living standards and make a statement with Orchid. Invest in more than just a property, invest in a lifestyle that others will envy.", "official_description_de": "Orchid in Al Furjan bietet Sichtachsen Richtung Dubai Marina und kombiniert sie mit hochwertigem Design. Eine Adresse, die mehr Lifestyle-Charakter trägt als die reinen Yield-Häuser des Quartiers." @@ -2045,7 +1977,6 @@ "Etablierter Al-Furjan-Bestand", "Verfügbarkeit auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "YOUR IDEAL PLACE TO CALL HOME", "official_description": "Indulge in the real gem of Al-Furjan at Feirouz, where each family member will find their perfect sanctuary within our spacious apartments, surrounded by a myriad of amenities and breathtaking views that redefine everyday luxury.", "official_description_de": "Feirouz in Al Furjan ist eine familienorientierte Adresse mit großzügigen Apartments. Die Kombination aus zahlreichen Annehmlichkeiten und ausgewählten Sichtachsen positioniert das Haus als komfortable Wohnadresse für unterschiedliche Familiensituationen." @@ -2070,7 +2001,6 @@ "Mehrere Wohnungsgrößen vergleichbar", "Verfügbarkeit auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "TURNING YOUR NEEDS TO YASAMINE", "official_description": "At Yasamine, we understand that every resident has unique desires and needs. That's why we've designed our apartments to cater to a variety of lifestyles, with different sizes and layouts available to suit your preferences. And with stunning views from every apartment, you'll never tire of the breathtaking scenery. Experience the uniqueness of Yasamine for yourself and discover your perfect home.", "official_description_de": "Yasamine in Al Furjan setzt auf Layout-Vielfalt: unterschiedliche Wohnungsgrößen und Grundrisse, dazu ausgewählte Sichtachsen aus jedem Apartment. Eine Adresse, die unterschiedliche Wohnbedürfnisse innerhalb desselben Hauses abdeckt." @@ -2088,17 +2018,16 @@ "units": "Einheitentypen prüfen", "image": "immobile/dubai/iris/overview-thumbnail/iris-overview-thumbnail.webp", "official_url": "https://www.azizidevelopments.com/dubai/al-furjan/iris", - "short": "Al-Furjan-Adresse mit Apartments inklusive privater Terrasse oder Balkon.", + "short": "Al-Furjan-Adresse mit Apartments inklusive privater Terrasse oder privatem Balkon.", "marcel_take": "Iris hebt sich im Al-Furjan-Bestand durch private Terrassen oder Balkone in jeder Einheit ab. Das spricht eher Eigennutzer an als reine Yield-Investoren. Verfügbarkeit individuell prüfen.", "highlights": [ - "Apartments mit privater Terrasse oder Balkon", + "Apartments mit privater Terrasse oder privatem Balkon", "Eigennutzer-affines Profil", "Verfügbarkeit auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "DISCOVER THE SERENE LIFE OF IRIS", "official_description": "At Iris, your dreams become reality with an array of exquisite apartments, each featuring a private terrace or balcony providing a tranquil retreat with stunning city views for you to enjoy the convenience of coming home to your own private sanctuary without any stress.", - "official_description_de": "Iris in Al Furjan kombiniert exquisit ausgestattete Apartments mit privater Terrasse oder Balkon je Einheit - eine Adresse mit klarem Eigennutzer-Fokus innerhalb einer urbanen Lage." + "official_description_de": "Iris in Al Furjan kombiniert exquisit ausgestattete Apartments mit privater Terrasse oder privatem Balkon je Einheit - eine Adresse mit klarem Eigennutzer-Fokus innerhalb einer urbanen Lage." }, { "slug": "liatris", @@ -2120,7 +2049,6 @@ "Lifestyle-Charakter", "Verfügbarkeit auf Anfrage" ], - "data_confidence": "yellow", "official_headline": "INDULGE IN MESMERIZING PANORAMIC VIEWS", "official_description": "Discover a life of exquisite luxury at Azizi Liatris, where each residence offers enchanting vistas of the iconic Dubai Marina high-rises, elevating your way of living to new heights as you indulge in the epitome of sophistication with opulent interiors.", "official_description_de": "Azizi Liatris bietet aus jeder Wohnung Sichtachsen in Richtung Dubai-Marina-Skyline. Eine Adresse mit Lifestyle-Charakter und gehobener Ausstattung im Al-Furjan-Bestand." @@ -2158,7 +2086,7 @@ { "icon": "building-office-2", "title": "Projektqualität zählt", - "description": "Nicht \"Dubai\" entscheidet über Ihre Rendite, sondern Lage, Entwickler, Baufortschritt, Zahlungsplan und Exit-Strategie auf Einheitenebene. Genau dort setzt die persönliche Einordnung von Marcel an - statt einer austauschbaren Empfehlung." + "description": "Nicht „Dubai“ entscheidet über Ihre Rendite, sondern Lage, Entwickler, Baufortschritt, Zahlungsplan und Exit-Strategie auf Einheitenebene. Genau dort setzt die persönliche Einordnung von Marcel an - statt einer austauschbaren Empfehlung." } ] }, diff --git a/resources/lang/de/ui.php b/resources/lang/de/ui.php index dde54685..9eca7f52 100644 --- a/resources/lang/de/ui.php +++ b/resources/lang/de/ui.php @@ -16,16 +16,92 @@ return [ 'menu_close' => 'Menü schließen', 'menu_open' => 'Menü öffnen', + // Slideshow im Hero der Startseite (Nachtrag 23) + 'hero_slider' => [ + 'label' => 'Einblicke in unsere Marken', + 'dots' => 'Bild wählen', + 'dot' => 'Bild :n von :total: :label', + ], + // Welten-Wechsler (Interior / Immobilien) + 'worlds_label' => 'Bereich wechseln', + 'world_interior' => 'Interior', + 'world_immobilien' => 'Immobilien', + + 'display_feed_title' => 'Live-Ansicht des Showroom-Displays', + 'display_feed_enlarge' => 'Größer ansehen', + 'display_feed_fullscreen' => 'Vollbild', + 'display_feed_close' => 'Schließen', + 'opens_new_tab' => '(öffnet in neuem Tab)', + 'references_empty' => 'Die ersten Projekte erscheinen hier, sobald wir sie zeigen dürfen.', + + // Terminanfrage-Widget + 'appointment' => [ + 'name' => 'Name', + 'email' => 'E-Mail', + 'phone' => 'Telefon', + 'topic' => 'Anliegen', + 'topic_placeholder' => 'Bitte auswählen', + 'preferred_date' => 'Wunschtermin', + 'message' => 'Nachricht', + 'message_placeholder' => 'Worum geht es? Gern in zwei Sätzen.', + 'submit' => 'Anfrage senden', + 'sending' => 'Wird gesendet …', + 'success' => 'Vielen Dank! Wir melden uns zeitnah bei Ihnen und stimmen den Termin ab.', + 'new_request' => 'Weitere Anfrage', + 'date_in_past' => 'Bitte einen Termin ab heute wählen.', + 'whatsapp_intro' => 'Am schnellsten per WhatsApp – wir bereiten die Nachricht mit Ihren Angaben vor.', + 'or_form' => 'oder per Formular', + 'whatsapp_text' => 'Hallo B2in Interior, ich hätte gern einen Beratungstermin.', + 'whatsapp_note' => 'Öffnet WhatsApp mit vorbereitetem Text. Abgeschickt wird die Nachricht erst von Ihnen.', + ], + + // Kernmarken + 'all_brands_cta' => 'Alle Marken ansehen', + 'whatsapp' => 'Per WhatsApp schreiben', + 'all_brands' => 'Alle Marken', + 'brand_services' => 'Leistungen und Besonderheiten', + 'brand_cta_title' => 'Interesse an :name?', + 'brand_cta_text' => 'Vereinbaren Sie einen Termin – wir beraten Sie persönlich und unverbindlich.', + 'request_appointment' => 'Termin anfragen', + 'brand_website' => 'Zur Herstellerseite', + 'other_brands' => 'Unsere weiteren Kernmarken', + 'more_about' => 'Mehr zu :name', + + // Markengalerie – realisierte Projekte vs. Entwuerfe + 'brand_gallery_title' => 'Inspirationen und Entwürfe', + 'brand_gallery_intro' => 'Visualisierungen, die zeigen, was in einem Raum möglich ist – noch bevor das erste Möbel steht.', + // Varianten je Galerie-Inhalt (Nachtrag 19): nur Entwürfe / nur Projekte und Werkstatt / gemischt + 'brand_gallery_title_inspirations' => 'Inspirationen und Entwürfe', + 'brand_gallery_intro_inspirations' => 'Visualisierungen, die zeigen, was in einem Raum möglich ist – noch bevor das erste Möbel steht.', + 'brand_gallery_title_projects' => 'Referenzen', + 'brand_gallery_intro_projects' => 'Realisierte Projekte – so sieht es aus, wenn Planung und Handwerk fertig sind.', + 'brand_gallery_title_projects_company' => 'Referenzen und Einblicke', + 'brand_gallery_intro_projects_company' => 'Realisierte Projekte und ein Blick in die Werkstatt, in der sie entstehen.', + 'brand_gallery_title_mixed' => 'Projekte und Entwürfe', + 'brand_gallery_intro_mixed' => 'Umgesetzte Projekte und Visualisierungen, die zeigen, was in einem Raum möglich ist.', + 'brand_gallery_tab_projects' => 'Realisierte Projekte', + 'brand_gallery_tab_inspirations' => 'Inspirationen und Entwürfe', + 'brand_gallery_badge_project' => 'Realisiertes Projekt', + 'brand_gallery_badge_inspiration' => 'Visualisierung', + 'brand_gallery_badge_company' => 'Aus der Werkstatt', + 'brand_gallery_inspiration_note' => 'Entwürfe und Visualisierungen. Sie zeigen gestalterische Möglichkeiten, noch bevor das erste Möbel steht.', + 'previous' => 'Vorheriges Bild', + 'next' => 'Nächstes Bild', + // Footer 'founder_ceo' => 'Gründer & CEO', 'legal_notice' => 'Impressum', + 'privacy_policy' => 'Datenschutz', + 'terms_of_service' => 'AGB', + 'cookie_policy' => 'Cookie-Richtlinie', + 'faq' => 'Häufige Fragen', 'cookie_settings' => 'Cookie-Einstellungen', // Announcement Bar 'announcement_close' => 'Schließen', // Hero Slider - 'show_slide' => 'Slide :number anzeigen', + 'show_slide' => 'Bild :number anzeigen', 'previous_image' => 'Vorheriges Bild', 'next_image' => 'Nächstes Bild', @@ -34,20 +110,21 @@ return [ // Contact Form 'contact_form' => [ + 'subject_placeholder' => 'Wählen Sie einen Betreff', 'success_title' => 'Vielen Dank!', 'success_message' => 'Ihre Nachricht ist bei uns eingegangen. Wir melden uns schnellstmöglich bei Ihnen.', 'first_name' => 'Vorname *', 'last_name' => 'Nachname *', 'company' => 'Firma (optional)', - 'email' => 'Email *', + 'email' => 'E-Mail *', 'phone' => 'Telefon (optional)', 'subject' => 'Betreff *', 'message' => 'Nachricht *', - 'message_placeholder' => 'Ihre Nachricht...', + 'message_placeholder' => 'Ihre Nachricht …', 'privacy_prefix' => 'Ich habe die', 'privacy_suffix' => 'gelesen und stimme der Verarbeitung meiner Daten zu. *', 'send' => 'Senden', - 'sending' => 'Wird gesendet...', + 'sending' => 'Wird gesendet …', ], // Immobilien Contact Form @@ -55,7 +132,7 @@ return [ 'success_title' => 'Anfrage erfolgreich gesendet!', 'success_message' => 'Vielen Dank für Ihr Interesse. Wir melden uns so schnell wie möglich bei Ihnen.', 'interest' => 'Interesse', - 'please_select' => 'Bitte wählen...', + 'please_select' => 'Bitte wählen …', 'first_name' => 'Vorname *', 'first_name_placeholder' => 'Ihr Vorname', 'last_name' => 'Nachname *', @@ -64,11 +141,11 @@ return [ 'email_placeholder' => 'ihre@email.com', 'phone' => 'Telefon (optional)', 'message' => 'Nachricht (optional)', - 'message_placeholder' => 'Ihre Nachricht...', + 'message_placeholder' => 'Ihre Nachricht …', 'privacy_prefix' => 'Ich habe die', 'privacy_suffix' => 'gelesen und stimme der Verarbeitung meiner Daten zu. *', 'submit' => 'Exposé & Verfügbarkeit anfragen', - 'sending' => 'Wird gesendet...', + 'sending' => 'Wird gesendet …', ], // Portfolio diff --git a/resources/lang/en/b2in.php b/resources/lang/en/b2in.php index 858c0641..2987def0 100644 --- a/resources/lang/en/b2in.php +++ b/resources/lang/en/b2in.php @@ -5,638 +5,626 @@ return [ 'b2in' => [ 'announcement_bar' => [ 'enabled' => true, - 'id' => 'azizi-launch-2026', - 'badge' => 'NEW LAUNCH', - 'text' => 'Azizi Creek Views 4 – Exclusive Off-Market Project in Dubai '.\App\Helpers\PriceHelper::formatAed(1_125_000, 'from'), + 'id' => 'interior-rotpunkt-2026', + 'badge' => 'NEW', + 'text' => 'Rotpunkt Küchen now available at B2in Interior – book your consultation', + 'link_text' => 'Request an appointment', + 'link_url' => '/contact', + ], + 'announcement_bar_immobilien' => [ + 'enabled' => true, + 'id' => 'azizi-creek-views-4-2026', + 'badge' => 'NEW', + 'text' => 'Azizi Creek Views 4 – Off-Market Project in Dubai from AED 1,125,000', 'link_text' => 'View Exposé', 'link_url' => '/immobilien/azizi-creek-views-4', ], + 'appointment_widget' => [ + 'button_label' => 'Request an appointment', + 'title' => 'Request an appointment', + 'intro' => 'Tell us briefly what it is about – we will get back to you and arrange a date. Personal, without obligation.', + 'success' => 'Thank you! We will get back to you shortly to arrange the appointment.', + 'whatsapp_text' => 'Hello B2in Interior, I would like to arrange an appointment.', + ], + 'referenzen_hero' => [ + 'title' => 'Our references', + 'text' => 'Here we show projects we have actually carried out – no drafts and no visualisations. The section grows with every project we are allowed to show.', + 'image' => '', + 'image_alt' => 'B2in Interior – completed projects', + ], + 'reference_projects' => [ + 'title' => 'Completed projects', + 'text' => 'Work carried out for our clients, sorted by brand. Drafts and visualisations are deliberately kept separate, on the brand pages.', + 'empty' => 'The first projects are under way and will appear here as soon as we are allowed to show them. Until then, we are happy to look at what is possible for your rooms.', + ], + 'display_feed' => [ + 'title' => 'Live from our showroom', + 'text' => 'Whatever is currently running on the screen in the showroom is shown here live – the same view, the same state.', + 'note' => 'The content changes automatically.', + 'link_text' => 'See the references', + 'link_url' => '/referenzen', + 'iframe_title' => 'Live view of the showroom display', + 'display_id' => '', + ], + 'footer' => [ + 'claim' => 'Premium interiors. Personally delivered.', + 'byline' => 'Marcel Scheibe', + 'links' => [ + ['label' => 'FAQ', 'url' => '/faq'], + ['label' => 'Privacy Policy', 'url' => '/privacy'], + ['label' => 'Terms of Service', 'url' => '/terms'], + ['label' => 'Cookie Policy', 'url' => '/cookie-policy'], + ['label' => 'Legal Notice', 'url' => '/impressum'], + ], + ], 'header' => [ 'portal_login' => 'Partner Login', 'navigation' => [ ['label' => 'Home', 'url' => '/'], - ['label' => 'Real Estate', 'url' => '/immobilien'], - ['label' => 'Network', 'url' => '/netzwerk'], + ['label' => 'Brands', 'url' => '/marken'], + ['label' => 'References', 'url' => '/referenzen'], ['label' => 'Magazine', 'url' => '/magazin'], - ['label' => 'FAQ', 'url' => '/faq'], ['label' => 'About B2in', 'url' => '/about'], ], ], - 'hero' => [ - 'title' => 'B2in – Where Exclusive Real Estate Investments Meet Smart Interior Design.', - 'subtitle' => 'Your partner for high-yield international real estate and global supply chain management in the interior sector.', - 'image' => 'b2in/hero-room.jpg', - 'image_alt' => 'B2in – International Real Estate and Exclusive Interior Concepts', - 'cta1_text' => 'View Real Estate Projects', - 'cta1_link' => '/immobilien', - 'cta2_text' => 'Our Network', - 'cta2_link' => '/netzwerk', - 'stats' => [ - 'International Real Estate', - 'Exclusive Furnishing', - 'Personal Consulting', + 'header_immobilien' => [ + 'portal_login' => 'Partner Login', + 'navigation' => [ + ['label' => 'Real Estate', 'url' => '/immobilien'], + ['label' => 'Projects', 'url' => '/immobilien#projekte'], + ['label' => 'Magazine', 'url' => '/immobilien/magazin'], + ['label' => 'About B2in', 'url' => '/immobilien/ueber-b2in'], + ], + ], + 'hero' => [ + 'eyebrow' => 'B2in Interior', + 'title' => 'Spaces from a single source.
With strong brands and personal solutions.', + 'subtitle' => 'We bring together CABINET, Rotpunkt Küchen, Febrü and a network of regional experts to create individual interior solutions for your home or your project.', + 'image' => 'b2in/hero-room.jpg', + 'image_alt' => 'B2in Interior – Premium furnishing from strong brands', + 'cta1_text' => 'Discover our brands', + 'cta1_link' => '/marken', + 'stats' => [ + 'German manufacturers', + 'From planning to installation', + 'Two showrooms in Bielefeld', + ], + 'card_title' => 'B2in Interior', + 'card_text' => 'Interiors that last.', + 'interval' => 7, + 'slides' => [ + [ + 'image' => 'b2in/slideshow/rotpunkt-fenix-house.webp', + 'label' => 'B2in Interior', + 'caption' => 'A whole house, furnished throughout', + 'alt' => 'House cross-section furnished throughout with Rotpunkt – kitchen, living and dressing room', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/cabinet-ankleide-solitaer-eiche-tano.webp', + 'label' => 'CABINET', + 'caption' => 'Solitär dressing room in Eiche Tano', + 'alt' => 'Walk-in dressing room with a freestanding unit in Eiche Tano under a skylight', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/rotpunkt-kueche-mk06.webp', + 'label' => 'Rotpunkt Küchen', + 'caption' => 'Kitchen with wooden island and tall-unit wall', + 'alt' => 'Kitchen with a wooden island and a dark tall-unit wall', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/februe-active-2-0-buero.webp', + 'label' => 'Febrü', + 'caption' => 'Active 2.0 workstations in a loft office', + 'alt' => 'Loft office with Active 2.0 desks, mobile pedestals, stools and a lounge corner', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/cabinet-schlafzimmer-wandschrank-filo-cashmere.webp', + 'label' => 'CABINET', + 'caption' => 'Wardrobe in Filo Cashmere', + 'alt' => 'Bedroom with a floor-to-ceiling wardrobe in Filo Cashmere', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/rotpunkt-kueche-mk01.webp', + 'label' => 'Rotpunkt Küchen', + 'caption' => 'Light kitchen with cooking island', + 'alt' => 'Light kitchen with tall units and a wood-look island', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/cabinet-flur-schrank-eiche-tano.webp', + 'label' => 'CABINET', + 'caption' => 'Hallway wardrobe in Eiche Tano', + 'alt' => 'Hallway wardrobe in Eiche Tano with lit interior', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/rotpunkt-kueche-mk10.webp', + 'label' => 'Rotpunkt Küchen', + 'caption' => 'Open-plan kitchen with lit glass cabinets', + 'alt' => 'Open-plan kitchen with lit glass cabinets and dining table', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/februe-elements-soul-grossraum.webp', + 'label' => 'Febrü', + 'caption' => 'Lounge and meeting area with Elements Soul', + 'alt' => 'Atrium with an Elements Soul sofa landscape, bistro tables, armchairs and trees', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/cabinet-dachschraegenschrank-filo-cashmere.webp', + 'label' => 'CABINET', + 'caption' => 'Wardrobe under the sloping roof', + 'alt' => 'Wardrobe under a sloping roof in Filo Cashmere', + 'active' => true, + ], + [ + 'image' => 'b2in/slideshow/rotpunkt-bad-mk04.webp', + 'label' => 'Rotpunkt Küchen', + 'caption' => 'Bathroom with wooden vanity', + 'alt' => 'Bathroom with a wooden vanity, round mirror niche and freestanding tub', + 'active' => true, + ], ], - 'card_title' => 'B2in', - 'card_text' => 'Connecting Design and Property', ], 'founder_bar' => [ 'image' => 'b2in/marcel-scheibe.jpg', 'name' => 'Marcel Scheibe', 'title' => 'Founder & CEO, B2in', - 'statement' => 'B2in by Marcel Scheibe – Your personal partner for international real estate and exclusive interior concepts.', - ], - 'synergie_section' => [ - 'title' => 'Two Worlds. One Network.', - 'paragraphs' => [ - 'We connect real estate purchases with the perfect furnishing. Real estate investors benefit from our exclusive furniture network – project developers from our German contractual reliability in supply chain management.', - ], - 'image' => 'b2in/best-of-two-worlds.jpg', - 'image_alt' => 'The B2in Ecosystem – Real Estate and Interior', - 'image_caption' => 'The B2in Ecosystem', - ], - 'ecosystem_core' => [ - 'title' => 'One Ecosystem, Three Pillars', - 'subtitle' => '', - 'pillars' => [ - [ - 'icon' => 'building-office-2', - 'title' => 'Real Estate & Investments', - 'description' => 'Exclusive off-market projects & high-yield investment properties.', - 'link' => '/immobilien', - ], - [ - 'icon' => 'squares-2x2', - 'title' => 'Local-for-Local Marketplace', - 'description' => 'The network for regional furniture retailers and brokers.', - 'link' => '/netzwerk', - ], - [ - 'icon' => 'clipboard-document-check', - 'title' => 'Supply Chain Management', - 'description' => 'German contractual reliability for international property developers.', - 'link' => '/netzwerk', - ], - ], + 'statement' => 'B2in by Marcel Scheibe – Your personal partner for high-quality furnishing and strong brands.', ], 'vision_section' => [ - 'title' => 'Built on Expertise and Trust', + 'title' => 'Built on Expertise and Trust', 'paragraphs' => [ - 'B2in (Bridges2international) connects two worlds: international real estate and exclusive interior concepts. As your personal partner, I guide you through both areas – with expertise, network, and the commitment that every decision is based on trust.', - 'Whether an investment in Dubai, a villa in Lisbon, or the bespoke furnishing of your new home by local specialists – at B2in, everything comes together.', + 'B2in originally stood for Bridges to International. Today it stands just as much for Bridges to Interior: high-quality furnishing with a personal signature. As your contact, I connect selected manufacturers, regional specialists and a dependable network – so that rooms become places that last.', + 'Whether a bespoke fitted wardrobe, a new kitchen or the complete fit-out of a property: at B2in, everything comes together. And anyone thinking beyond the interior will also find access to international real estate here.', 'Locally rooted, internationally connected – that is B2in.', ], 'image' => 'b2in/marcel-scheibe-about.jpg', 'image_alt' => 'Marcel Scheibe, Founder and CEO of B2in', 'image_caption' => 'Marcel Scheibe, Founder & CEO', ], - 'brand_worlds' => [ - 'title' => 'Our Worlds:
Design, Real Estate, and International Trade', - 'subtitle' => 'From international real estate investments to exclusive interior concepts to transatlantic trade – B2in connects the worlds that belong together.', - 'worlds' => [ - [ - 'image' => 'b2in/stileigentum.jpg', - 'title' => 'Stileigentum', - 'description' => 'The premium segment: Exclusive and high-quality interior concepts for discerning clients who value quality and tradition.', - 'link' => env('DOMAIN_STILEIGENTUM_URL', 'https://stileigentum.test'), - 'logo' => 'img/logos/stileigentum-logo-positiv.svg', - 'logo_width' => 'w-35', - 'external' => true, - ], - [ - 'image' => 'b2in/style2own.jpg', - 'title' => 'Style2own', - 'description' => 'The lifestyle channel: Modern interior concepts for young professionals and trend-oriented clients – urban, flexible, inspiring.', - 'link' => env('DOMAIN_STYLE2OWN_URL', 'https://style2own.test'), - 'logo' => 'img/logos/style2own-logo-positiv.svg', - 'logo_width' => 'w-28', - 'external' => true, - ], - [ - 'image' => 'b2in/b2a.jpg', - 'title' => 'B2A', - 'description' => 'Our logistics powerhouse for transatlantic trade. We enable manufacturers direct access to international markets.', - 'link' => env('DOMAIN_B2A_URL', 'https://b2a.test'), - 'logo' => 'img/logos/b2a-logo-positiv.svg', - 'logo_width' => 'w-18', - 'external' => true, - ], - ], - ], - 'integriertes_modell_b2in' => [ - 'title' => 'The Best of Both Worlds:
Real Estate and Interior', - 'paragraphs' => [ - 'B2in connects what belongs together: Those who acquire property need the right furnishing. Those who want exclusive interiors will find the best local specialists through our network – complemented by the range of European manufacturers.', - 'The result: A seamless experience for the customer and new revenue streams for our partners – whether brokers, retailers, or developers.', - ], - 'image' => 'b2in/best-of-two-worlds.jpg', - 'image_alt' => 'The result for the customer – Property and interior from one source', - 'image_caption' => 'Property and interior – from one source', - ], - 'cta_section' => [ - 'title' => 'Your Next Step', - 'subtitle' => 'Whether real estate investment, supply chain partnership, or interior network – speak directly with us.', - 'button_text' => 'Get in Touch', - 'button_link' => '/contact', - ], - 'immobilien_hero' => [ - 'title' => 'Invest in the Future – Dubai, Lisbon & More.', - 'subtitle' => 'Exclusive off-market projects and high-yield investments. Personally curated and guided by Marcel Scheibe.', - 'features' => [ - [ - 'title' => 'Off-Market', - 'description' => 'Exclusive Projects', - 'icon' => 'lock-closed', - ], - [ - 'title' => 'High-Yield', - 'description' => 'High-Return Investments', - 'icon' => 'arrow-trending-up', - ], - [ - 'title' => 'Personal', - 'description' => 'Guidance by Marcel Scheibe', - 'icon' => 'user', - ], - [ - 'title' => 'International', - 'description' => 'Dubai, Lisbon & More', - 'icon' => 'globe-alt', - ], - ], - 'image' => 'b2in/hero-immobilien.jpg', - 'image_alt' => 'International Real Estate Investments', - 'card_title' => 'B2in Real Estate', - 'card_text' => 'Exclusive international investments', - 'hub' => [ - 'title' => 'B2in Real Estate', - 'subtitle' => 'Exclusive International Investments', - ], - 'stats' => [ - 'Off-Market Access', - 'Personal Guidance', - 'High-Yield Properties', - ], - ], - 'immobilien_projects' => [ - 'title' => 'Current Launches & Projects', - 'subtitle' => 'Discover our current real estate projects in international markets.', - 'projects' => [ - 'azizi-creek-views-4' => [ - 'slug' => 'azizi-creek-views-4', - 'title' => 'Azizi Developments: Creek Views 4', - 'location' => 'Al Jaddaf, Dubai', - 'status' => 'NEW LAUNCH', - 'launch_date' => '03.03.2026', - 'price_from' => \App\Helpers\PriceHelper::formatAed(1_125_000, 'from'), - 'image' => 'expose/a1/image-4.jpeg', - 'highlights' => [ - 'Prime Waterfront Views', - '1BR: '.\App\Helpers\PriceHelper::formatAed(1_125_000, 'from'), - 'Exclusive 3BR Penthouse (Single Inventory)', - 'High Rental Demand & Capital Appreciation', - ], - 'quick_facts' => [ - ['icon' => 'home-modern', 'label' => 'Types', 'value' => '1BR & 3BR Penthouse'], - ['icon' => 'squares-2x2', 'label' => 'Size', 'value' => '543 – 2,346 sqft'], - ['icon' => 'building-office-2', 'label' => 'Units', 'value' => 'Only 132 (Limited)'], - ['icon' => 'user', 'label' => 'Developer', 'value' => 'Azizi Developments'], - ], - 'investment_case' => [ - 'title' => 'Strong Investment, High Demand.', - 'text' => 'Creek Views 4 offers a strategic top location in Al Jaddaf. The combination of limited supply (only 132 units) and premium finishes makes this project the ideal choice for investors targeting capital appreciation and high rental demand.', - 'views' => [ - 'Road View', - 'Sitting & Play Area View', - 'Neighbour View', - ], - ], - 'gallery' => [ - 'expose/a1/image-4.jpeg', - 'expose/a1/image-3.jpeg', - 'expose/a1/image-2.jpeg', - 'expose/a1/image-5.jpeg', - 'expose/a1/image-6.jpeg', - 'expose/a1/image-7.jpeg', - ], - 'location_info' => [ - 'title' => 'Strategic Location: Al Jaddaf', - 'map_url' => 'https://maps.google.com/?q=Al+Jaddaf+Dubai', - 'points' => [ - 'Direct connection to Dubai Creek and Waterfront', - 'Just minutes to Downtown Dubai & Burj Khalifa', - 'Excellent infrastructure and growing district', - ], - ], - 'contact' => [ - 'title' => 'Secure one of the 132 units.', - 'subtitle' => 'Your contact: Marcel Scheibe', - 'options' => [ - '' => 'I am interested in...', - '1br' => '1 Bedroom Apartment', - '3br_penthouse' => '3BR Penthouse (Single Unit)', - 'general' => 'General Consultation', - ], - ], - ], - ], - 'cta_text' => 'Request Exposé & Availability Now', - 'cta_link' => '/contact', - ], - 'immobilien_moebel_vorteil' => [ - 'title' => 'Your Investment, Your Advantage', - 'text' => 'As a buyer of a B2in property, you receive exclusive insider access to our B2in furniture network. Furnish your property at unbeatable partner rates.', - 'button_text' => 'Learn More About the B2in Network', - 'button_link' => '/netzwerk', - ], - 'immobilien_trust' => [ - 'title' => 'Personal Guidance', - 'paragraphs' => [ - 'Behind every B2in investment stands Marcel Scheibe as your personal contact. No anonymous platform – but a face with expertise, network, and the commitment that your investment is in the best hands.', - ], - 'image' => 'b2in/marcel-scheibe-about.jpg', - 'image_alt' => 'Marcel Scheibe – Personal Investment Guidance', - 'image_caption' => 'Marcel Scheibe, Founder & CEO', - 'list' => [ - [ - 'icon' => 'calendar', - 'title' => 'Investor Evenings – Exclusive quarterly events in an intimate setting', - ], - [ - 'icon' => 'phone', - 'title' => 'Direct Line – Personal conversation and appointment scheduling', - ], - [ - 'icon' => 'shield-check', - 'title' => 'Transparency – Guided from market analysis to closing', - ], - ], - ], - // ============================================================ - // REAL ESTATE SOFT LAUNCH (v2) - New Sections - // ============================================================ - 'immobilien_hero_v2' => [ - 'title' => 'Investing in Global Dynamics. With German Reliability.', - 'subtitle' => 'Exclusive off-market projects, attractive returns, and guidance that goes far beyond the purchase contract. Discover the real estate market in Dubai.', - 'cta_text' => 'View Current Projects', - 'cta_link' => '#projekte', - 'image' => 'b2in/hero-immobilien.jpg', - 'image_alt' => 'Dubai Skyline – Premium Real Estate Investments', - ], - 'immobilien_warum_dubai' => [ - 'title' => 'Why an Investment in Dubai Is Worth It', - 'intro' => 'Dubai is not just a financial decision, but access to one of the world\'s fastest-growing markets. Investors value the clear legal structures and frameworks that are virtually unique worldwide:', - 'facts' => [ - [ - 'icon' => 'banknotes', - 'title' => '0% Taxes', - 'description' => 'No income tax on rental income, no capital gains tax on sale.', - ], - [ - 'icon' => 'arrow-trending-up', - 'title' => 'Strong Returns', - 'description' => 'Attractive rental yields of historically 6% to 9% annually.', - ], - [ - 'icon' => 'shield-check', - 'title' => 'High Security', - 'description' => 'A government-regulated market with a secure escrow trust system.', - ], - [ - 'icon' => 'currency-dollar', - 'title' => 'Stable Currency', - 'description' => 'The Dirham (AED) is pegged to the US Dollar.', - ], - [ - 'icon' => 'identification', - 'title' => 'Golden Visa', - 'description' => 'Secure residence permits through attractive investor programs.', - ], - [ - 'icon' => 'globe-alt', - 'title' => 'High Demand', - 'description' => 'International immigration and limited supply continuously drive housing demand upward.', - ], - ], - ], - 'immobilien_image_break' => [ - 'image' => 'b2in/hero-immobilien.jpg', - 'image_alt' => 'Dubai Skyline – Real Estate Investments', - 'quote' => 'Dubai has evolved into one of the most dynamic real estate markets in the world.', - 'author' => 'Marcel Scheibe', - ], - 'immobilien_kaufprozess' => [ - 'title' => 'Clearly Structured: The Purchase Process in Dubai', - 'intro' => 'The market in Dubai is faster, more digital, and organized by project. Every step is maximally secured through the government escrow system (trust accounts based on construction progress).', - 'steps' => [ - [ - 'number' => '1', - 'title' => 'Reservation (Booking Fee)', - 'description' => 'With a fee of approx. 3–10%, your desired unit is officially taken off the market and reserved for you.', - ], - [ - 'number' => '2', - 'title' => 'Down Payment & Contract (SPA)', - 'description' => 'After an initial down payment (usually 10%), the official Sales & Purchase Agreement (SPA) is drawn up.', - ], - [ - 'number' => '3', - 'title' => 'Government Registration (DLD)', - 'description' => 'By paying the registration fee (4%) to the Dubai Land Department, your ownership is officially recorded in the government register.', - ], - [ - 'number' => '4', - 'title' => 'Final Purchase Contract', - 'description' => 'Your ownership rights are officially secured. Further payments are made strictly according to construction progress into secure trust accounts.', - ], - ], - ], - 'immobilien_bruecke' => [ - 'title' => '"The market speaks for itself. My role is a different one."', - 'paragraphs' => [ - 'For many German investors, buying real estate in Dubai initially feels unfamiliar. In Germany, we are accustomed to notaries, land registries, and highly bureaucratic processes. Dubai is more dynamic.', - 'I am not here to sell you the market – the quality of the projects speaks for itself. My role is to be your bridge. As an investor who has bought in Dubai myself, I know the practice. I am regularly on-site, in permanent contact with developers, and I guide you through the entire process. I translate international speed into German reliability.', - ], - 'advantage_title' => 'Your B2in Advantage', - 'advantage_text' => 'My guidance doesn\'t end with the purchase. Planning lucrative short-term rentals (e.g., Airbnb)? Through our B2in network and my roots in the furniture industry, we realize complete interior concepts for you – for maximum returns with minimum effort.', - 'cta_text' => 'Schedule a Personal Consultation', - 'cta_link' => '/contact', - 'image' => 'b2in/marcel-scheibe-about.jpg', - 'image_alt' => 'Marcel Scheibe – Personal Investment Guidance', - 'image_caption' => 'Marcel Scheibe, Founder & CEO', - ], - 'immobilien_mindset' => [ - 'title' => 'Are You the Right Investor for Dubai?', - 'text_positive' => 'Dubai is for people who think internationally. The government prioritizes efficiency, economic development, and tremendous speed. If you believe in the shift of global economic centers and value a dynamic system, Dubai is the strategically perfect building block for your portfolio. Then you are in the right place with us.', - 'text_negative' => 'However, if you prefer a system built on slow decision-making and maximum bureaucracy, this market will not match your expectations.', - 'closing' => 'The step is smaller than you think. Let\'s find out together whether an investment in Dubai fits your strategy.', - 'cta_text' => 'Schedule a Non-Binding Consultation', - 'cta_link' => '/contact', - ], - - // ============================================================ - // NETWORK SOFT LAUNCH - Combined Teaser Page - // ============================================================ - 'netzwerk_hero' => [ - 'title' => 'The B2in Ecosystem – Real Estate Meets Interior.', - 'subtitle' => 'We are currently building the smartest local-for-local furnishing network. As a B2in real estate client, you will benefit exclusively from our closed shop in the future.', - 'image' => 'b2in/ecosystem-hero.jpg', - 'image_alt' => 'B2in Ecosystem – Interior and Real Estate', - ], - 'netzwerk_image_break' => [ - 'image' => 'b2in/ecosystem-hero.jpg', - 'image_alt' => 'B2in Ecosystem – Interior and Real Estate', - 'quote' => 'We connect what belongs together: real estate and interior.', - 'author' => 'Marcel Scheibe', - ], - 'netzwerk_teasers' => [ - 'title' => 'What We Are Building', + 'audience_switch' => [ + 'title' => 'For your home. For your project.', + 'subtitle' => 'Whether a single piece of furniture or a complete fit-out – we accompany you with the same brands, the same standards and one personal contact.', 'cards' => [ - [ - 'icon' => 'squares-2x2', - 'title' => 'Interior Network', - 'description' => 'Personal consultation by local specialists, curated European manufacturers, and exclusive rates for B2in real estate clients. Furnishing you can touch – not just order online.', - 'status' => 'In Development', - ], - [ - 'icon' => 'building-storefront', - 'title' => 'For Retailers & Specialists', - 'description' => 'Are you a local interior specialist looking to join a premium network? We connect you with clients who value personal consultation and quality.', - 'status' => 'Pre-Registration Available', - ], - [ - 'icon' => 'globe-alt', - 'title' => 'For Developers & Brands', - 'description' => 'German contractual reliability for international property developers. Supply chain management focused on schedule adherence, quality control, and enforcement.', - 'status' => 'Pre-Registration Available', - ], - ], - ], - 'netzwerk_cta' => [ - 'title' => 'Interested in a Partnership?', - 'text' => 'Whether as a specialist retailer, manufacturer, broker, or developer – contact us for pre-registration and be among the first to know when our network goes live.', - 'button_text' => 'Get in Touch', - 'button_link' => '/contact', - ], - 'netzwerk_cabinet_partner' => [ - 'badge' => 'Premium partner', - 'title' => 'Our premium partner: CABINET Built-In Wardrobes', - 'lead' => 'Bespoke excellence for the highest standards.', - 'paragraphs' => [ - 'In the B2in ecosystem, we focus on lasting quality. We are proud to feature CABINET as a premium partner in our network. The CABINET store in Bielefeld (our physical anchor) stands for bespoke built-in solutions that unite design, functionality, and craftsmanship.', - 'Whether walk-in wardrobes, smart room concepts, or exclusive interiors – CABINET delivers the premium standard our real estate investors and developers expect for high-end projects. This partnership reflects our philosophy: connecting international real estate with German interior excellence.', - ], - 'image' => 'b2in/cabinet_logo.png', - 'image_alt' => 'CABINET built-in wardrobes – B2in premium partner', - ], - 'netzwerk_immobilien_hint' => [ - 'title' => 'Already available: Real estate', - 'description' => 'Our real estate division is already active. Discover exclusive off-market projects in Dubai with personal guidance from Marcel Scheibe.', - 'button_text' => 'View real estate projects', - 'button_link' => '/immobilien', - ], - - 'interior_hero' => [ - 'title' => 'Exclusive Furnishing. Locally Conceived, Internationally Connected.', - 'subtitle' => 'The B2in interior network connects local expertise with international manufacturers – personal, tangible, and in your area.', - 'features' => [ - [ - 'title' => 'Local-for-Local', - 'description' => 'Your specialist retailer nearby', - 'icon' => 'map-pin', - ], - [ - 'title' => 'Premium Network', - 'description' => 'Curated manufacturers & brands', - 'icon' => 'star', - ], - [ - 'title' => 'Two Brands', - 'description' => 'stileigentum & style2own', - 'icon' => 'squares-2x2', - ], - [ - 'title' => 'Personal', - 'description' => 'Consultation over algorithms', - 'icon' => 'user', - ], - ], - 'image' => 'b2in/ecosystem-hero.jpg', - 'image_alt' => 'B2in Interior Network – Local-for-Local', - 'card_title' => 'B2in Interior', - 'card_text' => 'Local-for-Local Interior Network', - 'hub' => [ - 'title' => 'B2in Interior', - 'subtitle' => 'The Interior Network', - ], - 'stats' => [ - 'Local Specialists', - 'European Manufacturers', - 'Personal Consultation', - ], - ], - 'interior_concept' => [ - 'title' => 'What Does Local-for-Local Mean?', - 'paragraphs' => [ - 'Our interior network relies on what online cannot deliver: real consultation, real touch, real expertise. Instead of anonymous platforms, we facilitate direct contact with local specialist retailers – people who understand their craft and guide you personally.', - 'B2in connects these local experts with a curated network of European manufacturers. The result: Access to exclusive brands and collections that you won\'t find online – but with the consultation quality that only your local specialist can offer.', - ], - 'image' => 'b2in/ecosystem_result.jpg', - 'image_alt' => 'Local-for-Local – Personal consultation instead of anonymous platforms', - 'image_caption' => 'Personal interior consultation on-site', - ], - 'interior_brands' => [ - 'title' => 'Two Brands, One Network', - 'subtitle' => 'Depending on your style and standards, you can access our network through one of our two interior brands.', - 'brands' => [ - [ - 'name' => 'stileigentum', - 'tagline' => 'Premium Interior', - 'description' => 'Exclusive and high-quality interior concepts for discerning clients who value quality and tradition. Hand-selected manufacturers, timeless materials, individual consultation.', - 'audience' => 'For clients seeking the extraordinary.', - 'logo' => 'img/logos/stileigentum-logo-positiv.svg', - 'logo_width' => 'w-35', - 'link' => 'https://stileigentum.test', - ], - [ - 'name' => 'style2own', - 'tagline' => 'Design Lifestyle', - 'description' => 'Modern interior concepts for young professionals and trend-oriented clients – urban, flexible, inspiring. Current trends, smart solutions, fair prices.', - 'audience' => 'For everyone who loves design.', - 'logo' => 'img/logos/style2own-logo-positiv.svg', - 'logo_width' => 'w-28', - 'link' => 'https://style2own.test', - ], - ], - ], - 'interior_zielgruppen' => [ - 'title' => 'Who Is the Interior Network For?', - 'groups' => [ [ 'icon' => 'home', - 'title' => 'Private Individuals', - 'description' => 'Furnishing your new home and looking for personal consultation instead of endless online scrolling? Through our network, you\'ll find local specialists who understand your style.', + 'title' => 'Furnishing for your home', + 'description' => 'Single pieces, bespoke built-in solutions or a complete interior: our core brands and our specialist retail network accompany you from the first idea to installation. Visit our showrooms or arrange a personal consultation.', + 'button_text' => 'Request a consultation', + 'button_link' => '/contact', ], [ 'icon' => 'building-office-2', - 'title' => 'Real Estate Investors', - 'description' => 'Have you made an investment through B2in? As a property buyer, you receive exclusive access to partner rates for complete furnishing – all from one source.', - ], - [ - 'icon' => 'clipboard-document-check', - 'title' => 'Developers & Brokers', - 'description' => 'Need model furnishings, home staging, or turnkey outfitting for your projects? B2in coordinates from planning to delivery.', + 'title' => 'Fit-out for your project', + 'description' => 'Complete furnishing for properties, offices and developments. Coordinated from a single source, from the kitchen to the last flower. With a single German contract partner and an established manufacturer network.', + 'button_text' => 'Discuss your project', + 'button_link' => '/contact', ], ], ], - 'interior_process' => [ - 'title' => 'It\'s That Simple', + 'core_brands' => [ + 'title' => 'Our core brands', + 'subtitle' => 'We do not work with arbitrary catalogues, but with selected manufacturers we stand behind – each brand a specialist in its field.', + 'brands' => [ + [ + 'slug' => 'cabinet', + 'name' => 'CABINET', + 'tagline' => 'Fitted wardrobes made to measure.', + 'teaser' => 'Bespoke wardrobe solutions, planned to the millimetre – built for rooms where standard will not do. Experience the possibilities in our Bielefeld showroom.', + 'image' => '', + 'logo' => '', + 'link_text' => 'More about CABINET', + 'origin_city' => 'Cologne', + 'origin_distance' => 'about 200 km', + 'origin_role' => 'Made in the Cologne manufactory, advised and planned at the CABINET Store Bielefeld.', + ], + [ + 'slug' => 'rotpunkt', + 'name' => 'Rotpunkt Küchen', + 'tagline' => 'Kitchens with character.', + 'teaser' => 'Premium kitchens made in Germany – individually planned, sustainably conceived and built for the heart of your home. Consultation and planning in our kitchen studio.', + 'image' => '', + 'logo' => '', + 'link_text' => 'More about Rotpunkt', + 'origin_city' => 'Bünde', + 'origin_distance' => 'about 30 km', + 'origin_role' => 'Kitchens from their own production in Bünde – planned with us in the kitchen studio.', + ], + [ + 'slug' => 'februe', + 'name' => 'Febrü', + 'tagline' => 'Work where you like to be.', + 'teaser' => 'Furniture for focused work – from a well-considered home office to a complete office fit-out. Ergonomics and design for home and company alike.', + 'image' => '', + 'logo' => '', + 'link_text' => 'More about Febrü', + 'origin_city' => 'Herford', + 'origin_distance' => 'about 20 km', + 'origin_role' => 'Office and contract furniture from their own production in Herford.', + ], + [ + 'slug' => 'tischlerei', + 'name' => 'Otterpohl Möbelservice', + 'tagline' => 'Not easy click & buy. But still easy to get.', + 'teaser' => 'Bespoke furniture, doors, stairs, kitchens, wall cladding and contract work – up to complete interior fit-outs. Joinery from Rheda-Wiedenbrück.', + 'image' => '', + 'logo' => 'marken/otterpohl.png', + 'link_text' => 'More about Otterpohl', + 'origin_city' => 'Rheda-Wiedenbrück', + 'origin_distance' => 'about 35 km', + 'origin_role' => 'Joinery and interior fit-out from Rheda-Wiedenbrück – from a single piece to the whole room, installation included.', + ], + ], + ], + 'origin_section' => [ + 'title' => 'Made in the region', + 'subtitle' => 'Four German manufactories, three of them in East Westphalia. Short distances, people we know, and quality you can go and see.', + 'map_alt' => 'Schematic map: Bielefeld as the starting point, production in Bünde, Herford, Rheda-Wiedenbrück and Cologne', + 'region_label' => 'East Westphalia', + 'distance_suffix' => 'from Bielefeld', + 'hub' => [ + 'city' => 'Bielefeld', + 'role' => 'B2in Interior · consulting, planning, showrooms', + 'x' => 400, + 'y' => 175, + ], + 'link_text' => 'To the brand', + 'steps_title' => 'Made in Cologne, planned in Bielefeld', + 'steps_text' => 'Take CABINET: the furniture is made in Cologne. Consulting and planning happen with us at the CABINET Store Bielefeld; the exact measurements are taken at your home once you give the go-ahead. Assembly takes place on site – with the Otterpohl joinery, which on request also builds what the catalogue does not offer.', 'steps' => [ [ - 'number' => '01', - 'title' => 'Consultation', - 'description' => 'Contact us or visit one of our local partners. Together, we define your style, budget, and preferences.', + 'title' => 'Consulting and planning in Bielefeld', + 'description' => 'At the CABINET Store we plan with you down to the last detail and agree every front and interior layout – photos and rough measurements are enough to start. Once you give the go-ahead, we take exact measurements on site.', ], [ - 'number' => '02', - 'title' => 'Selection', - 'description' => 'Your specialist retailer shows you curated collections from European manufacturers – to touch, not just on a screen.', + 'title' => 'Production in Cologne', + 'description' => 'CABINET builds your wardrobe in its own manufactory – to the exact measurements taken on site.', ], [ - 'number' => '03', - 'title' => 'Delivery & Setup', - 'description' => 'B2in coordinates logistics and delivery. Your local partner accompanies the setup down to the last detail.', + 'title' => 'Assembly on site, special requests included', + 'description' => 'Otterpohl assembles and adds what the room needs beyond that: panels, connections, custom solutions.', ], ], ], - 'interior_trust' => [ - 'title' => 'Personal Instead of Anonymous', + 'brand_craft' => [ + 'title' => 'Planning plus craftsmanship', 'paragraphs' => [ - 'Behind the B2in interior network stands Marcel Scheibe with the conviction that great furnishing requires personal consultation. No algorithm replaces the conversation with an expert who knows materials, understands spaces, and matches your style.', + 'CABINET, Rotpunkt and Febrü already cover an enormous range of planning and design options. So this is explicitly not about custom-made pieces at any price.', + 'Still, there is always that one case where even an excellent system reaches its limit: the transition to the architecture, a special cladding, the wall that is still missing, or the last millimetre. That is where our collaboration with Otterpohl from Rheda-Wiedenbrück comes in – joinery, interior fit-out and installation from a single source.', + 'We weigh design value, technical necessity and economic sense honestly. In the end, your wishes decide – not our urge to sell you yet another special solution.', ], - 'image' => 'b2in/marcel-scheibe-about.jpg', - 'image_alt' => 'Marcel Scheibe – The face behind the interior network', - 'image_caption' => 'Marcel Scheibe, Founder & CEO', - 'list' => [ + 'detail' => [ + 'title' => 'When craftsmanship takes over the last millimetre', + 'paragraphs' => [ + 'Possible are, for example, precisely fitted alcove solutions, special claddings, full-height built-ins, transitions to adjoining furniture, individual lacquer finishes and real-wood veneers, or adaptations to the existing architecture.', + 'If needed, the concept does not end at the furniture. Drywall, wallpaper, flooring, wall design, lighting and further details can be included.', + ], + ], + 'claim' => 'The possibilities of a made-to-measure system. The flexibility of craftsmanship.', + 'link_text' => 'More about Otterpohl', + 'brand_slug' => 'tischlerei', + ], + 'sponsoring' => [ + 'title' => 'Rooted in the region', + 'subtitle' => 'We support clubs and organisations from our region – because being rooted is more than an address.', + 'logos' => [ [ - 'icon' => 'map-pin', - 'title' => 'Local Experts – Specialist retailers in your region who advise you personally', + 'name' => 'DSC Arminia Bielefeld', + 'image' => 'sponsoring/arminia-bielefeld.png', + 'text' => 'Traditional club from Bielefeld – rooted in the region and committed to club sport.', + 'url' => 'https://www.arminia.de', ], [ + 'name' => 'TC Bad Salzuflen', + 'image' => 'sponsoring/tc-bad-salzuflen.png', + 'text' => 'Tennis club from Bad Salzuflen – rooted in the region and committed to club sport.', + 'url' => 'https://www.tcbadsalzuflen.de/', + ], + [ + 'name' => 'TC Hiddenhausen', + 'image' => 'sponsoring/tc-hiddenhausen.png', + 'text' => 'Tennis club from Hiddenhausen – rooted in the region and committed to club sport.', + 'url' => 'https://tc-hiddenhausen.de/', + ], + [ + 'name' => 'TC Blau Weiss Halle', + 'image' => 'sponsoring/tc-blau-weiss-halle.jpg', + 'text' => 'Tennis club from Halle (Westphalia) – rooted in the region and committed to club sport.', + 'url' => 'https://www.tcbw-hallewestf.de/Home', + ], + ], + ], + 'immobilien_teaser' => [ + 'title' => 'Also: international real estate', + 'text' => 'Alongside interiors, we accompany selected international real estate projects – personally curated and with a clear eye for substance.', + 'link_text' => 'To the properties', + 'link_url' => '/immobilien', + ], + 'marken_hero' => [ + 'eyebrow' => 'B2in Interior', + 'title' => 'Our brands', + 'text' => 'We do not work with arbitrary catalogues, but with selected manufacturers we stand behind. Each brand is a specialist in its field – and each brings what good interiors are made of: visible quality and advice that listens.', + 'image' => 'b2in/b2a.jpg', + 'image_alt' => 'B2in Interior – our core brands', + 'stats' => [ + 'Bespoke craftsmanship', + 'Factory and showroom to experience', + 'Kitchen, built-ins, workspace', + ], + ], + // Bildpause zwischen Markenblöcken und Herkunft (07.10.2026): letztes Bild der Hero-Slideshow + 'marken_image_break' => [ + 'image' => 'b2in/slideshow/rotpunkt-bad-mk04.webp', + 'image_alt' => 'Bathroom with a wooden vanity, round mirror niche and freestanding tub', + 'quote' => 'I personally stand behind each of our brands. I know the factories and the people who work there.', + 'author' => 'Marcel Scheibe', + ], + 'marken_network' => [ + 'title' => 'More than brands: our network', + 'paragraphs' => [ + 'Good interiors do not end with the furniture. That is why we work with specialist firms and craftspeople from the region – from measuring up and installation to adjacent trades.', + 'For you that means one point of contact who keeps things together, instead of many separate conversations. And partners we know and whose work we stand behind.', + ], + 'points' => [ + [ + 'icon' => 'pencil-square', + 'title' => 'Planning & measuring', + 'description' => 'We plan together with you – first from photos and rough measurements. We take the exact measurements on site once you give the go-ahead.', + ], + [ + 'icon' => 'wrench-screwdriver', + 'title' => 'Installation by specialists', + 'description' => 'Craftspeople from the region whom we know personally.', + ], + [ + 'icon' => 'user', + 'title' => 'One point of contact', + 'description' => 'Coordinated from a single source, from first idea to handover.', + ], + ], + ], + 'marken_growth' => [ + 'enabled' => true, + 'title' => 'Our brand world is growing', + 'text' => 'We continuously extend our portfolio with manufacturers that match our standards. Missing a particular brand or have a specific wish? Talk to us – our network often turns up exactly the right thing.', + ], + 'marken_cta' => [ + 'title' => 'Get to know our brands', + 'text' => 'Ideally where you can touch them: in our showrooms. Arrange a no-obligation consultation – we take our time.', + 'button_text' => 'Request an appointment', + 'button_link' => '/contact', + 'whatsapp_text' => 'Message us on WhatsApp', + ], + 'cta_section' => [ + 'title' => 'Your Next Step', + 'subtitle' => 'Whether a single piece of furniture, a complete interior or a project fit-out – talk to us. Personal, straightforward, reliable.', + 'button_text' => 'Request an appointment', + 'button_link' => '/contact', + ], + 'cta_section_immobilien' => [ + 'title' => 'Your next step', + 'subtitle' => 'Exposé, purchase process or furnishing after the purchase – talk to us. Personal, straightforward, reliable.', + 'button_text' => 'Request a conversation', + 'button_link' => '/immobilien/kontakt', + ], + + 'magazin_list_immobilien' => [ + 'title' => 'B2in Real Estate Magazine', + 'subtitle' => 'Market analyses and practical knowledge about real estate investments in Dubai – purchase process, districts and the role of interiors for the return.', + 'read_more' => 'Read More', + ], + 'immobilien_about_hero' => [ + 'title' => 'B2in Real Estate: Our Mission', + 'quote' => '"My mission is to connect two worlds that belong together: international real estate and high-quality interiors. B2in accompanies investors personally through the purchase – and then furnishes the property from a single source.

We build bridges – between European design, international markets, and people\'s homes."', + 'founder_name' => 'Marcel Scheibe', + 'founder_title' => 'Founder & CEO, B2in', + 'image' => 'b2in/about-hero.jpg', + 'image_alt' => 'Marcel Scheibe, Founder and CEO of B2in', + 'card_title' => 'B2in Real Estate', + 'card_text' => 'Connecting Design and Property', + ], + 'immobilien_our_story' => [ + 'title' => 'Our Story', + 'timeline' => [ + [ + 'title' => 'The Idea', + 'description' => 'In 2024, we identified a crucial gap: property buyers are looking for seamless furnishing solutions, and local retailers need visibility. These two worlds belong together.', + 'icon' => 'light-bulb', + ], + [ + 'title' => 'The Foundation', + 'description' => 'We build B2in as a network: regional interior specialists, European manufacturers and real estate professionals – fair, transparent and with a personal point of contact.', + 'icon' => 'rocket-launch', + ], + [ + 'title' => 'The Expansion', + 'description' => '2025/2026 adds international real estate: selected projects in Dubai, reviewed from an investor\'s perspective and accompanied personally. Interiors remain the core – both areas complement each other.', + 'icon' => 'globe-alt', + ], + [ + 'title' => 'The Vision', + 'description' => 'B2in connects design and property – locally rooted, internationally connected. In every region, the reliable partner for real estate investments and exclusive interior concepts.', 'icon' => 'star', - 'title' => 'Curated Manufacturers – Only verified European quality brands', + ], + ], + 'summary' => 'What began as a vision to strengthen regional trade is today a network that connects real estate and interiors. B2in bridges the gap between international investments and local expertise – with Marcel Scheibe as the face and point of contact.', + ], + 'immobilien_about_image_break' => [ + 'image' => 'b2in/best-of-two-worlds.jpg', + 'image_alt' => 'B2in – Connecting Real Estate and Interior', + 'quote' => 'Locally rooted, internationally connected – that is B2in.', + 'author' => 'Marcel Scheibe', + ], + 'immobilien_our_values' => [ + 'title' => 'Our Values', + 'subtitle' => 'These six pillars guide our daily actions and define who we are as a company and what we stand for.', + 'values' => [ + [ + 'title' => 'Personal Guidance', + 'description' => 'From the first conversation through the purchase process to the furnished property: one point of contact who knows the markets from an investor\'s perspective.', + 'icon' => 'light-bulb', ], [ - 'icon' => 'shield-check', - 'title' => 'Transparent Pricing – Fair rates with no hidden markups', + 'title' => 'Connectivity', + 'description' => 'We connect international real estate markets with local expertise and European manufacturers with the people who value their products.', + 'icon' => 'globe-alt', + ], + [ + 'title' => 'Quality', + 'description' => 'Uncompromising standards – in the selection of projects, the review of developers and the curation of interiors.', + 'icon' => 'check-badge', + ], + [ + 'title' => 'Trust', + 'description' => 'Transparent models and reliable partnerships are our foundation. Behind B2in stands a face – and the promise that we deliver what we commit to.', + 'icon' => 'user-group', + ], + [ + 'title' => 'Reliability', + 'description' => 'German contractual certainty meets the dynamics of international markets: clear processes, vetted partners, secured payment routes.', + 'icon' => 'arrow-path', + ], + [ + 'title' => 'Design Excellence', + 'description' => 'Design is the core of our value creation – from international architecture to curated interiors that turn a property into a home.', + 'icon' => 'cube-transparent', + ], + ], + ], + 'contact_form_immobilien' => [ + 'hero' => [ + 'title' => 'Questions about a
project?', + 'subtitle' => 'Exposé, purchase process or furnishing after the purchase – write to us. Marcel Scheibe will get back to you personally.', + ], + ], + 'faq_immobilien' => [ + 'title' => 'Frequently Asked Questions about Real Estate', + 'subtitle' => 'Answers about investments in Dubai, the purchase process and how B2in accompanies you.', + 'questions' => [ + [ + 'question' => 'How does real estate investment through B2in work?', + 'answer' => 'We do not just broker, we accompany you. Marcel Scheibe is your personal advisor who knows the Dubai market from his own investor perspective. After a needs analysis, we present selected projects, for example by Azizi Developments. The purchase process itself is secured by the government escrow system in Dubai. Your advantage as a B2in client: afterwards we furnish your property turnkey and with the return in mind.', + 'category' => '', + ], + [ + 'question' => 'What makes B2in a trustworthy partner?', + 'answer' => 'Trust comes from transparency and first-hand market experience. B2in founder Marcel Scheibe invests in the markets we offer himself and is regularly on site to check construction progress. We combine the dynamics of international markets with German reliability and a personal contact who represents your interests.', + 'category' => '', + ], + [ + 'question' => 'Do I need to travel to Dubai personally for the property purchase?', + 'answer' => 'No, the entire purchase process can be completed digitally and legally binding from a distance. The Dubai Land Department provides secure processes for this. We do recommend that investors get a picture of the city on site – but your presence is not required for a legally secure purchase.', + 'category' => 'For Real Estate Investors', + ], + [ + 'question' => 'What happens after the property purchase? Do you help with furnishing?', + 'answer' => 'This is exactly where the B2in advantage lies. Our service does not end with the purchase contract. We help you furnish your property turnkey and with the return in mind using quality furniture – the basis for a successful rental.', + 'category' => 'For Real Estate Investors', + ], + [ + 'question' => 'What tax advantages does an investment in Dubai offer?', + 'answer' => 'Dubai offers a special economic environment: there is neither income tax on rental income nor capital gains tax on the sale of the property. Combined with the rental yields, this makes the location attractive for international investors. Please have your personal tax situation checked by a tax advisor.', + 'category' => 'For Real Estate Investors', + ], + ], + 'categories' => [ + [ + 'title' => 'For Real Estate Investors', + 'icon' => 'home-modern', ], ], ], 'faq' => [ 'title' => 'Frequently Asked Questions', - 'subtitle' => 'Here you will find answers to the most common questions about B2in and our ecosystem.', + 'subtitle' => 'Answers to the questions we are asked most often – about advice, bespoke furniture and fitting out projects.', 'questions' => [ [ - 'question' => 'What is B2in and what services do you offer?', - 'answer' => 'B2in is the bridge between international premium real estate and exclusive interior concepts. We offer real estate investors access to off-market projects (focus: Dubai) and guide them through the entire purchase process. At the same time, we provide developers with rigorous supply chain management for sourcing German quality furniture and are building an innovative interior network for local retailers.', + 'question' => 'What is B2in Interior and what do you offer?', + 'answer' => 'B2in Interior stands for high-quality interiors from strong brands – CABINET, Rotpunkt Küchen and Febrü – complemented by a network of regional specialists. We support private customers from a single bespoke piece to a complete interior, and fit out properties, offices and developments in full. In addition, we accompany selected international real estate projects.', + 'category' => '', ], [ - 'question' => 'What does supply chain management mean at B2in?', - 'answer' => 'For international property developers, we act as an extended arm in Germany. We take over the operational and strategic management of furniture and interior procurement. This means: We secure supply contracts, monitor milestones directly with manufacturers, and escalate immediately to management level in case of deviations. Our goal is absolute contractual reliability and on-time delivery without friction losses.', + 'question' => 'What does fitting out a project involve?', + 'answer' => 'For properties, offices and developments we take on the complete fit-out – coordinated from a single source, from the kitchen to the last flower. You have one central German contracting partner and a fixed point of contact who keeps planning, manufacturers and trades together. Behind this is a well-established network of manufacturers whose processes we know – so even a large project stays manageable.', + 'category' => '', ], [ - 'question' => 'How can I become a partner at B2in?', - 'answer' => 'Our network is aimed at property developers, brokers, and regional furniture retailers. If you are a developer seeking German procurement reliability or a retailer wanting to become part of our future "Local for Local" network to receive qualified leads from property buyers, simply use our contact form. We evaluate every partnership individually for quality and fit.', + 'question' => 'How can I become a partner?', + 'answer' => 'Our network covers specialist firms and craftspeople around interiors – from installation to adjacent trades. If you are interested, write to us using the contact form. We review every collaboration individually, because we stand behind the work of our partners.', + 'category' => '', ], [ - 'question' => 'How does real estate investment through B2in work?', - 'answer' => 'We don\'t just broker, we guide you. Marcel Scheibe is your personal advisor who knows the market (especially Dubai) from his own investor perspective. After a needs analysis, we present you with exclusive projects (e.g., from Azizi Developments). The purchase process itself is maximally secured through Dubai\'s government escrow system. Your special advantage: As a B2in client, you subsequently receive exclusive access to our network to furnish your investment turnkey and optimized for returns.', + 'question' => 'How does a consultation work?', + 'answer' => 'It starts with a conversation – in the showroom, by phone or, if you like, at your home. For a first plan, photos, a floor plan and rough measurements are usually all we need. With these we can develop ideas, refine the planning and prepare a quote. If you like the plan and accept our quote, we take the professional measurements on site once the deposit has been paid. Based on these exact measurements we complete the detailed planning and then release the furniture for production.', + 'category' => '', ], [ - 'question' => 'What makes B2in a trustworthy partner?', - 'answer' => 'Trust comes from transparency and personal market experience. B2in founder Marcel Scheibe invests himself in the markets we offer and is regularly on-site to check construction progress. We combine the immense dynamics of international markets (like Dubai) with German reliability, strict contract management, and a curated network of premium partners like CABINET. With us, you always have a personal contact who represents your interests.', + 'question' => 'What makes B2in Interior a reliable partner?', + 'answer' => 'We work with a manageable number of selected manufacturers instead of arbitrary catalogues – and we stand behind their work. Behind B2in Interior there is a face and a fixed point of contact in Marcel Scheibe, from the first conversation to after installation. For the trades around the interior we work with specialist firms from the region that we know.', + 'category' => '', + ], + [ + 'question' => 'Do I have to furnish the whole flat at once?', + 'answer' => 'No. Many projects start with a single piece – a fitted wardrobe under a sloping ceiling, a new kitchen, a workspace. Whether more follows is up to you. We plan in a way that lets a later addition fit in rather than look bolted on.', + 'category' => 'For your home', + ], + [ + 'question' => 'What does bespoke cost compared to off-the-shelf furniture?', + 'answer' => 'That depends on the room, the materials and the fittings. Based on photos, a floor plan and rough measurements we can already prepare a concrete plan and a matching quote. The professional measurement on site follows once the quote is accepted and the deposit paid, and serves the final detailed planning and production release; if relevant deviations show up on site, we agree any adjustments with you. Bespoke uses the space standard furniture leaves behind – slopes, niches, unusual heights. You pay for the space you would otherwise give away.', + 'category' => 'For your home', + ], + [ + 'question' => 'Do you handle installation as well?', + 'answer' => 'Yes. Delivery and installation run through us or through specialist firms from our network that we work with regularly. You have one point of contact who coordinates the appointments – including when several trades are involved.', + 'category' => 'For your home', + ], + [ + 'question' => 'Can I see the brands beforehand?', + 'answer' => 'Yes, in the showroom in Bielefeld you can take your time with surfaces, fronts and fittings. Photos and samples help with a pre-selection, but they do not replace the direct impression. It is best to arrange an appointment so we can take the time.', + 'category' => 'For your home', + ], + [ + 'question' => 'From what size is a project fit-out worthwhile?', + 'answer' => 'There is no fixed lower limit. Working together makes sense as soon as several units or several trades are involved and coordination becomes the actual effort – for office space, furnished residential units or fitting out an entire property.', + 'category' => 'For projects and properties', + ], + [ + 'question' => 'How do you ensure delivery dates are met?', + 'answer' => 'We work with binding supply contracts, track milestones directly with the manufacturer and report deviations as soon as they become visible – not just on the delivery date. Where several trades are involved, we handle the coordination between them so the sequence on site works.', + 'category' => 'For projects and properties', + ], + [ + 'question' => 'Do you work with architects and planning offices?', + 'answer' => 'Yes. We take on existing plans and implement them, or come in earlier when furniture and floor plan still need to be matched up. For special solutions we talk directly to the manufacturers.', + 'category' => 'For projects and properties', + ], + [ + 'question' => 'How do I join the regional network?', + 'answer' => 'Our network covers specialist firms and craftspeople around interiors – from installation to adjacent trades. If you are interested, write to us using the contact form. We review every collaboration individually, because we stand behind the work of our partners.', + 'category' => 'For projects and properties', ], ], - 'sections' => [ + 'categories' => [ [ - 'title' => 'Focus: Real Estate Investors (B2C)', + 'title' => 'For your home', 'icon' => 'home-modern', - 'questions' => [ - [ - 'question' => 'Do I need to travel to Dubai personally for the property purchase?', - 'answer' => 'No, the entire purchase process can be completed fully digitally and legally binding from abroad. The Dubai Land Department offers highly secure processes for this. While we do recommend our investors to visit and experience the city\'s dynamics firsthand, your physical presence is not strictly required for the legally secure acquisition.', - ], - [ - 'question' => 'What happens after the property purchase? Do you help with furnishing?', - 'answer' => 'This is exactly where the great advantage of the B2in ecosystem lies. Our service doesn\'t end with the purchase contract. As a B2in client, you receive exclusive access to our interior network. We support you in furnishing your property turnkey and optimized for returns with quality furniture – the perfect foundation for lucrative short-term rentals.', - ], - [ - 'question' => 'What tax advantages does an investment in Dubai offer?', - 'answer' => 'Dubai offers a globally unique economic environment. There is neither income tax on rental income nor capital gains tax on the sale of the property. Combined with the strong rental yields, this makes the location strategically valuable for international investors.', - ], - ], ], [ - 'title' => 'Focus: B2B Partners (Brokers & Retailers)', + 'title' => 'For projects and properties', 'icon' => 'briefcase', - 'questions' => [ - [ - 'question' => 'How do real estate brokers benefit from a partnership with B2in?', - 'answer' => 'B2in offers brokers an exclusive tool for client retention: You can present your property buyers with access to our closed interior network as an exclusive "closing gift." At the same time, as a broker, you benefit from our technical clearing system with a passive lifetime compensation on your clients\' furniture purchases.', - ], - [ - 'question' => 'What exactly is the "Local for Local" marketplace?', - 'answer' => 'Our "Local for Local" principle is the counter-concept to anonymous online furniture giants. We make the immediately available stock and showroom pieces of regional specialist retailers (the "Local Express" pillar) transparent to a closed customer base. This strengthens local trade on-site while offering buyers insider rates for premium furnishing.', - ], - [ - 'question' => 'Is the interior network publicly accessible to everyone?', - 'answer' => 'No. To protect the exclusive insider rates and discounts from our manufacturers and local retailers, the B2in furniture marketplace operates as a "closed shop." Access is exclusively through invitations – for example, through our partner brokers upon property acquisition.', - ], - ], ], ], ], 'contact_form' => [ 'hero' => [ + 'eyebrow' => 'Contact', 'title' => 'Send Us a
Message.', 'subtitle' => 'We look forward to your message and will get back to you as soon as possible.', ], @@ -650,14 +638,35 @@ return [ 'subject' => 'Subject *', 'message' => 'Your Message *', ], - 'subjects' => [ - '' => 'Select a subject', - 'immobilien' => 'International Real Estate', - 'supply_chain' => 'Supply Chain Management', - 'general' => 'General Inquiry', - 'partnership' => 'Partnership', - 'press' => 'Press', - 'career' => 'Career', + 'subject_placeholder' => 'Select a subject', + 'subject_groups' => [ + 'interior' => [ + 'label' => 'Interior', + 'subjects' => [ + 'beratung' => 'Consultation appointment', + 'massanfertigung' => 'Bespoke furniture for my home', + 'kueche' => 'Kitchen planning', + 'supply_chain' => 'Fitting out a project', + ], + ], + 'immobilien' => [ + 'label' => 'Real Estate', + 'subjects' => [ + 'immobilien' => 'Investment consultation', + 'expose' => 'Exposé and availability', + 'kaufprozess' => 'Questions about the purchase process', + 'einrichtung' => 'Furnishing after the purchase', + ], + ], + 'b2in' => [ + 'label' => 'B2in', + 'subjects' => [ + 'partnership' => 'Working together in the network', + 'general' => 'General Inquiry', + 'press' => 'Press', + 'career' => 'Career', + ], + ], ], 'placeholders' => [ 'message' => 'Your message...', @@ -690,796 +699,213 @@ return [ 'icon' => 'phone', ], ], - 'social_media' => [ - 'title' => 'Follow for
exclusives', - 'subtitle' => 'Stay up to date with exclusive offers and news.', - 'platforms' => [ - ['name' => 'Instagram', 'handle' => '@b2in_official', 'url' => 'https://instagram.com/b2in_official'], - ['name' => 'Youtube', 'handle' => 'B2IN Channel', 'url' => 'https://youtube.com/@b2in'], - ['name' => 'Pinterest', 'handle' => 'B2IN Inspiration', 'url' => 'https://pinterest.com/b2in'], - ['name' => 'Facebook', 'handle' => 'B2IN Deutschland', 'url' => 'https://facebook.com/b2in'], - ['name' => 'LinkedIn', 'handle' => 'B2IN Company', 'url' => 'https://linkedin.com/company/b2in'], - ], - ], ], 'about_hero' => [ - 'title' => 'About B2in: Our Mission', - 'quote' => '"My mission is to connect two worlds that belong together: international real estate and exclusive interior design. B2in gives the local specialist the digital tools and the property developer the operational partner on the ground.

We build bridges – between European design, international markets, and people\'s homes."', + 'eyebrow' => 'About B2in', + 'title' => 'Our Mission', + 'quote' => '"Good interiors are not created in a catalogue, but in conversation. That is why we work with a few selected manufacturers we know – and with specialist firms from the region whose work we stand behind.

My standard is simple: one point of contact, from the first conversation to after installation."', 'founder_name' => 'Marcel Scheibe', 'founder_title' => 'Founder & CEO, B2in', 'image' => 'b2in/about-hero.jpg', 'image_alt' => 'Marcel Scheibe, Founder and CEO of B2in', 'card_title' => 'B2in', - 'card_text' => 'Connecting Design and Property', + 'card_text' => 'Premium interiors. Made personal.', ], - 'broker_section' => [ - 'title' => 'Lifetime Compensation for Brokers', - 'subtitle' => 'Benefit from a revolutionary compensation model that goes beyond the one-time sale. Build long-term client relationships and generate continuous returns.', - 'card_title' => 'Lifetime Compensation', - 'compensation' => [ - 'initial_sale' => '3.5%', - 'follow_up' => '1.5%', - ], - 'compensation_text' => 'Continuous returns throughout the entire client relationship', - 'benefits' => [ - [ - 'title' => 'Lifetime Compensation Model', - 'description' => 'Continuous commissions through long-term client relationships and recurring business', - 'icon' => 'trending-up', - ], - [ - 'title' => 'Faster Marketing', - 'description' => 'Well-designed living concepts reduce sales time and increase success rates', - 'icon' => 'clock', - ], - [ - 'title' => 'Qualified Leads', - 'description' => 'Pre-filtered, interested clients through the B2in portal and premium memberships', - 'icon' => 'target', - ], - [ - 'title' => 'Premium Positioning', - 'description' => 'Exclusive marketing of high-quality living concepts for discerning target groups', - 'icon' => 'award', - ], - ], - ], - 'commitment_section' => [ - 'title' => 'The Trust of Our Partners', - 'subtitle' => 'Real opinions from real partners. Your success is our greatest motivation.', - 'testimonials' => [ - [ - 'image' => 'b2in/testo-1.jpg', - 'rating' => 5, - 'quote' => 'Working with B2in has exceeded our expectations. Professional, efficient, and always solution-oriented.', - 'author' => 'Max Mustermann', - 'author_title' => 'Furniture Manufacturer', - ], - [ - 'image' => 'b2in/testo-2.jpg', - 'rating' => 5, - 'quote' => 'Thanks to the B2in platform, we were able to significantly increase our reach and tap into new markets.', - 'author' => 'Erika Mustermann', - 'author_title' => 'Local Furniture Retailer', - ], - [ - 'image' => 'b2in/testo-3.jpg', - 'rating' => 5, - 'quote' => 'The B2in portal has revolutionized the way I market real estate. The staging enhances my properties, and the furniture commission is an extremely attractive additional income.', - 'author' => 'John Doe', - 'author_title' => 'Real Estate Broker', - ], - ], - ], - 'dark_stats_section' => [ - 'stats' => [ - ['number' => '17+', 'text' => 'Years of Experience'], - ['number' => '2M', 'text' => 'Happy Guests'], - ], - 'title' => 'Economically Sound and Well-
Friendly Service for
Families and Their
Precious Belongings', - 'description' => 'We understand that every family is unique, which is why we offer personalized services tailored to meet your specific needs. From luxury amenities to budget-friendly options, we ensure every guest feels valued and comfortable.', - 'features' => [ - ['title' => 'Top Consultation', 'subtitle' => 'Expert guidance'], - ['title' => 'Finest Meal', 'subtitle' => 'Gourmet dining'], - ['title' => 'Easy Tax Reduction', 'subtitle' => 'Cost-effective'], - ], - 'image' => 'b2in/accommodation-2.jpg', - 'image_alt' => 'Luxury interior design', - ], - 'ecosystem_hero' => [ - 'title' => 'How Our Ecosystem Generates Growth for All Partners', - 'subtitle' => 'An intelligent network that seamlessly connects property buyers, local specialists, international manufacturers, brokers, and developers – for extraordinary real estate and interior experiences.', - 'features' => [ - [ - 'title' => 'Real Estate', - 'description' => 'International Investments', - 'icon' => 'globe-alt', - ], - [ - 'title' => 'Interior', - 'description' => 'Local for Local', - 'icon' => 'cube-transparent', - ], - [ - 'title' => 'Supply Chain', - 'description' => 'Procurement & Control', - 'icon' => 'clipboard-document-check', - ], - [ - 'title' => 'Technology', - 'description' => 'Digital Core', - 'icon' => 'cpu-chip', - ], - ], - 'image' => 'b2in/ecosystem-hero.jpg', - 'image_alt' => 'Ecosystem Hero Image', - 'card_title' => 'B2in Portal', - 'card_text' => 'The technology behind it that enables the ecosystem', - 'hub' => [ - 'title' => 'B2in Portal', - 'subtitle' => 'The technology behind it that enables the ecosystem', - ], - 'stats' => [ - 'Exclusive Selection', - 'Personal Service', - 'Lasting Values', - ], - ], - 'ecosystem_stats' => [ - 'title' => 'Our Ecosystem in Numbers', - 'subtitle' => 'Numbers that reflect the strength and trust in our connected business model.', - 'stats' => [ - [ - 'number' => '1.7K+', - 'label' => 'Partners & Experts in the Network', - 'description' => 'Growing community of developers, brokers, retailers, and manufacturers', - ], - [ - 'number' => '510+', - 'label' => 'Completed Projects', - 'description' => 'Real estate and interior projects through our network', - ], - [ - 'number' => '98%', - 'label' => 'Partner Satisfaction', - 'description' => 'Satisfaction across all ecosystem participants', - ], - [ - 'number' => '24/7', - 'label' => 'Partner Support', - 'description' => 'Continuous availability of the digital infrastructure', - ], - ], - ], - 'ecosystem_start' => [ - 'title' => 'Everything Begins with the Moment of Need:', - 'paragraphs' => [ - 'Our ecosystem starts with the customer – exactly when they need it: at the property purchase.', - 'Through the broker, the customer gains access to the B2in ecosystem. Our brands style2own and stileigentum create the right framework – tailored to the target group and lifestyle.', - ], - 'image' => 'b2in/ecosystem_start.jpg', - 'image_alt' => 'The entry into the ecosystem – through the property purchase', - 'image_caption' => 'The Entry: Property Purchase as Trigger', - 'image_description' => 'A stylized graphic showing how the property purchase triggers entry into the B2in ecosystem.', - ], - 'ecosystem_hub' => [ - 'title' => 'In the Hub, Local for Local Meets International Expertise', - 'paragraphs' => [ - 'Once a customer selects their region, our platform plays to its strengths: The "Local First" logic prominently displays the offerings of local specialists.', - 'The range is complemented by European manufacturers. And for property developers, we deliver the operational procurement as well – from contract to quality control.', - ], - 'image' => 'b2in/ecosystem_hub.jpg', - 'image_alt' => 'Local for Local – Local expertise meets international procurement', - 'image_caption' => 'Local for Local: Local Expertise, International Reach', - 'image_description' => 'A clear infographic showing: [Local Offering] + [International Procurement] = The B2in Ecosystem.', - ], - 'ecosystem_result' => [ - 'title' => 'A Cycle Where Everyone Wins', - 'paragraphs' => [ - 'In this interplay, clear advantages emerge for every participant:', - ], - 'list' => [ - [ - 'icon' => 'globe-alt', - 'title' => 'The property developer receives a reliable partner for procurement and quality control in Germany – transparent and on schedule.', - ], - [ - 'icon' => 'building-storefront', - 'title' => 'The local retailer gains qualified customers they couldn\'t have reached on their own, strengthening their local position.', - ], - [ - 'icon' => 'home-modern', - 'title' => 'The broker offers their clients a unique added value after closing and benefits from attractive additional commissions.', - ], - ], - 'image' => 'b2in/ecosystem_result.jpg', - 'image_alt' => 'Your success and the partnership with B2in', - 'image_caption' => 'Your Success and the Partnership with B2in', - 'image_description' => 'A stylized graphic showing how your success and the partnership with B2in are interconnected.', - ], - 'end_customer_section' => [ - 'tag' => 'For End Customers', - 'title' => 'Exclusive Experiences for You', - 'subtitle' => 'With your personal login card, you gain access to a unique world of experiences, specially tailored to your living preferences and lifestyle. Discover curated properties and services that are otherwise unavailable.', - 'benefits' => [ - [ - 'title' => 'Exclusive Login Card', - 'description' => 'Personalized access to selected real estate experiences and premium services', - 'icon' => 'credit-card', - ], - [ - 'title' => 'Personalized Experience World', - 'description' => 'Tailored property offerings based on individual preferences and needs', - 'icon' => 'star', - ], - [ - 'title' => 'Curated Living Concepts', - 'description' => 'High-quality, well-designed property solutions from verified partners', - 'icon' => 'home', - ], - [ - 'title' => 'Quality Guarantee', - 'description' => 'Verified providers and standardized quality processes for maximum security', - 'icon' => 'shield', - ], - ], - 'image' => 'b2in/end-customer-section.jpg', - 'image_alt' => 'End Customer Section Image', - 'card_title' => 'Login Card', - 'card_text' => 'Your key to exclusive real estate experiences', - 'card' => [ - 'title' => 'Login Card', - 'subtitle' => 'Your key to exclusive real estate experiences', - 'member_number_label' => 'Member Number', - 'member_number' => 'B2IN-2024-VIP', - ], - ], - 'final_commitment' => [ - 'title' => 'We\'re committed to
your comfort and
satisfaction for
unforgettable
experiences', - 'author' => 'Robert Wilson', - 'author_title' => 'General Manager', - ], - 'digital_core' => [ - 'title' => 'The Technology That Enables This Cycle', - 'subtitle' => 'Our central platform is more than just technology. It is the digital core for transparent processes, data-driven decisions, and seamless collaboration across the entire ecosystem.', - 'features' => [ - [ - 'title' => 'Maximum Reliability', - 'description' => 'Our platform is accessible anytime, anywhere. It grows with your success and guarantees stable operations you can rely on.', - 'icon' => 'cloud', - 'icon_style' => 'solid', - ], - [ - 'title' => 'Uncompromising Security', - 'description' => 'Your data and your clients\' data are our highest priority. We protect them with state-of-the-art security architectures and guarantee complete data privacy.', - 'icon' => 'shield-check', - ], - [ - 'title' => 'Future-Proof Integration', - 'description' => 'The B2in portal is open for the future. It integrates seamlessly with other systems and is ready for future expansions and technologies.', - 'icon' => 'squares-2x2', - ], - [ - 'title' => 'Data-Driven Insights', - 'description' => 'Track your clients\' activities as a broker or your products\' performance as a supplier – all in real-time. Make better decisions based on valid data.', - 'icon' => 'chart-bar', - 'icon_style' => 'solid', - ], - [ - 'title' => 'Intelligent Personalization', - 'description' => 'Artificial intelligence supports you and your clients – from personalized interior suggestions to process automation for maximum efficiency.', - 'icon' => 'cpu-chip', - ], - [ - 'title' => 'Excellent User Experience', - 'description' => 'Our platform is optimized for maximum speed and offers intuitive, fluid navigation on every device – from desktop to smartphone.', - 'icon' => 'users', - 'icon_style' => 'solid', - ], - ], - ], 'magazin_detail' => [ 'back_to_magazine' => 'Back to Magazine', - 'share_article' => 'Share Article', - 'cta_title' => 'Discover more about real estate investments and the B2in ecosystem.', + 'cta_title' => 'Further insights into interiors, planning and projects can be found in the B2in Magazine.', 'cta_button' => 'Discover More Articles', ], 'magazin_list' => [ 'title' => 'B2in Magazine', - 'subtitle' => 'Insights, market analyses, and practical knowledge about real estate investments in Dubai, interior concepts, and the B2in ecosystem.', + 'subtitle' => 'Practical knowledge about interiors: custom-made furniture, kitchen planning, brands and the regional furniture trade.', 'read_more' => 'Read More', - 'load_more' => 'Load More Articles', ], 'our_story' => [ 'title' => 'Our Story', 'timeline' => [ [ 'title' => 'The Idea', - 'description' => 'In 2024, we identified a crucial gap: Local retailers need digital visibility, and property buyers are looking for seamless furnishing solutions. These two worlds belong together.', + 'description' => 'In 2024 the starting point was a simple observation: anyone wanting a high-quality interior finds plenty of catalogues online – but rarely someone who listens, measures up and stands behind the result.', 'icon' => 'light-bulb', ], [ 'title' => 'The Foundation', - 'description' => 'We are developing the B2in platform: an ecosystem that connects local interior specialists, European manufacturers, and real estate professionals on a shared platform – fair, transparent, and technology-driven.', + 'description' => 'We are building the network: selected manufacturers, specialist firms and craftspeople from the region – connected by the same conviction that quality and keeping your word belong together.', 'icon' => 'rocket-launch', ], [ 'title' => 'The Expansion', - 'description' => '2025/2026 sees B2in expanding its ecosystem: International real estate and supply chain management for developers become the dominant pillar. The local furniture marketplace remains as a strong complementary area.', + 'description' => 'In 2026 interiors move to the centre: CABINET, Rotpunkt Küchen, Febrü and Otterpohl Möbelservice form the core, complemented by a network of regional specialists. International real estate remains as a second area.', 'icon' => 'globe-alt', ], [ 'title' => 'The Vision', - 'description' => 'B2in becomes the central network for "Design & Property" – locally rooted, internationally connected. In every region, the reliable partner for real estate investments and exclusive interior concepts.', + 'description' => 'B2in Interior becomes the first address in the region for high-quality interiors – from a single fitted wardrobe to a complete fit-out. Locally rooted, internationally connected.', 'icon' => 'star', ], ], - 'summary' => 'What began as a vision to strengthen local trade is today a network that seamlessly connects real estate and interior. B2in bridges the gap between international investments and local expertise – with Marcel Scheibe as the face and point of contact.', + 'summary' => 'What began as an idea – to make high-quality interiors personal again – is today a network of strong brands and regional specialists, with Marcel Scheibe as the face and fixed point of contact.', ], 'about_image_break' => [ 'image' => 'b2in/best-of-two-worlds.jpg', - 'image_alt' => 'B2in – Connecting Real Estate and Interior', + 'image_alt' => 'Living space, half planning sketch, half fully furnished', 'quote' => 'Locally rooted, internationally connected – that is B2in.', 'author' => 'Marcel Scheibe', ], 'our_values' => [ 'title' => 'Our Values', - 'subtitle' => 'These six pillars guide our daily actions and define who we are as a company and what we stand for.', + 'subtitle' => 'Six principles we want to be measured by – in the consultation, in the planning and after installation.', 'values' => [ [ - 'title' => 'Innovation', - 'description' => 'We develop digital solutions that give real estate professionals and local interior specialists a genuine competitive advantage.', - 'icon' => 'light-bulb', + 'title' => 'Advice, not sales', + 'description' => 'We first ask how you use your rooms and only then suggest something. Sometimes the right answer is a smaller piece than expected.', + 'icon' => 'chat-bubble-left-right', ], [ - 'title' => 'Connectivity', - 'description' => 'We connect international real estate markets with local expertise and European manufacturers with the people who value their products.', - 'icon' => 'globe-alt', + 'title' => 'Bespoke work', + 'description' => 'Slopes, niches and unusual heights are not a problem but the reason for bespoke furniture. We plan the space that standard furniture leaves behind.', + 'icon' => 'cube-transparent', ], [ - 'title' => 'Quality', - 'description' => 'Uncompromising standards – in the selection of our partners, the curation of interiors, the monitoring of supply chains, and the technology that holds it all together.', + 'title' => 'Selected brands', + 'description' => 'A few manufacturers we know, rather than an arbitrary range. We stand behind the brands we carry.', 'icon' => 'check-badge', ], [ - 'title' => 'Trust', - 'description' => 'Transparent models and reliable partnerships are our foundation. Behind B2in stands a face – and the promise that we deliver what we commit to.', + 'title' => 'Regionally rooted', + 'description' => 'We work with specialist firms and craftspeople from the region – people we know and who are on site when it matters.', + 'icon' => 'map-pin', + ], + [ + 'title' => 'One point of contact', + 'description' => 'From the first conversation through measuring up to after installation, the contact stays the same – including when several trades are involved.', 'icon' => 'user-group', ], [ - 'title' => 'Sustainability', - 'description' => 'We strengthen local trade, optimize transport routes, and ensure that international procurement runs responsibly and efficiently.', - 'icon' => 'arrow-path', - ], - [ - 'title' => 'Design Excellence', - 'description' => 'Design is the core of our value creation – from international architecture to curated interiors to the intuitive design of our digital platform.', - 'icon' => 'cube-transparent', - ], - ], - ], - 'partner_benefits' => [ - 'title' => 'Why Become a Partner?', - 'subtitle' => 'Discover the advantages of a partnership with B2in and how you can benefit from our innovative ecosystem.', - 'broker' => [ - 'tag' => 'For Brokers', - 'title' => 'Revolutionary Commission Model', - 'benefits' => [ - [ - 'icon' => 'trending-up', - 'title' => 'Lifetime Commission Model', - 'description' => 'Benefit from continuous income through our innovative compensation system', - ], - [ - 'icon' => 'target', - 'title' => 'Faster Marketing', - 'description' => 'Well-designed living concepts shorten marketing times and increase your success rate', - ], - [ - 'icon' => 'award', - 'title' => 'Added Value for Your Clients', - 'description' => 'Offer your clients exclusive, curated real estate experiences', - ], - ], - 'highlight' => [ - 'value' => '3.5% - ∞', - 'text' => 'Initial commission to lifetime compensation', - ], - ], - 'supplier' => [ - 'tag' => 'For Suppliers', - 'title' => 'Global Market Opportunities', - 'benefits' => [ - [ - 'icon' => 'globe', - 'title' => 'Access to International Markets', - 'description' => 'Expand your reach across borders with our global network', - ], - [ - 'icon' => 'handshake', - 'title' => 'Fair Terms', - 'description' => 'Transparent and partnership-based business conditions for sustainable success', - ], - [ - 'icon' => 'settings', - 'title' => 'Easy Product Management', - 'description' => 'Intuitive platform for managing and presenting your products', - ], - ], - 'highlight' => [ - 'image' => 'b2in/accommodation-1.jpg', - 'alt' => 'Partner success visualization', - 'value' => '500+', - 'text' => 'Successful Partners', - ], - ], - ], - 'supply_chain_intro' => [ - 'title' => 'Supply Chain Management: Your Extended Arm in Germany.', - 'paragraphs' => [ - 'For property developers looking to source furniture or interior fittings from Germany, we act as your extended arm on the ground – with a clear focus on contractual reliability, schedule adherence, and enforcement.', - ], - 'list' => [ - [ - 'icon' => 'document-check', - 'title' => 'Contract Management – Drafting, structuring, and securing supply contracts', - ], - [ + 'title' => 'Reliability', + 'description' => 'We keep our commitments on dates and prices. If something shifts, we say so as soon as we know – not on the delivery date.', 'icon' => 'shield-check', - 'title' => 'Contract Enforcement – Milestone monitoring, escalation, follow-up', - ], - [ - 'icon' => 'magnifying-glass-circle', - 'title' => 'Tracking & Quality Control – Ongoing monitoring, personal inspection, on-time delivery', ], ], - 'image' => 'b2in/marcel-scheibe-about.jpg', - 'image_alt' => 'Marcel Scheibe – Supply Chain Management', - 'image_caption' => 'Marcel Scheibe, Founder & CEO', ], 'partner_cta' => [ 'title' => 'Grow With Us', 'subtitle' => 'Become part of the B2in network – whether as a property developer, interior specialist, manufacturer, or broker. We connect the worlds that belong together.', - 'stats' => [ - [ - 'number' => '500+', - 'label' => 'Active Partners', - ], - [ - 'number' => '98%', - 'label' => 'Satisfaction Rate', - ], - [ - 'number' => '24/7', - 'label' => 'Partner Support', - ], - ], 'button_text' => 'Become a B2in Partner', 'button_link' => '/contact', 'small_text' => 'Discover the benefits of a strategic partnership with B2in', ], - 'partner_hero' => [ - 'title' => 'For Developers & Partners', - 'subtitle' => 'Whether property developer, local interior specialist, European brand, or broker – B2in is the network that connects your business with the right partners and clients.', - 'partner_types' => [ - [ - 'title' => 'Property Developers', - 'description' => 'Supply chain management from Germany', - 'icon' => 'globe-alt', - ], - [ - 'title' => 'Manufacturers & Brands', - 'description' => 'Curated market access, intelligent logistics', - 'icon' => 'building-office-2', - ], - [ - 'title' => 'Local Retailers', - 'description' => 'Digital reach, exclusive product range', - 'icon' => 'building-storefront', - ], - [ - 'title' => 'Brokers & Developers', - 'description' => 'Added value for clients, additional income for you', - 'icon' => 'home-modern', - ], - ], - 'image' => 'b2in/partner-hero.jpg', - 'image_alt' => 'Partner Hero Image', - 'card_title' => 'Partner Network', - 'card_text' => 'Become Part of Our Ecosystem', - 'hub' => [ - 'title' => 'Partner Network', - 'subtitle' => 'Become Part of Our Ecosystem', - ], - 'connection_points' => [ - ['name' => 'Brokers', 'subtext' => 'Lifetime Model'], - ['name' => 'Suppliers', 'subtext' => 'Global Markets'], - ['name' => 'Success', 'subtext' => 'Measurable Goals'], - ['name' => 'Quality', 'subtext' => 'Premium Standards'], - ], - ], - 'partner_card_section' => [ - 'title' => 'What Partner Type Are You?', - 'subtitle' => 'Discover the benefits of a partnership with B2in – whether in real estate, interior, or supply chain.', - 'cards' => [ - [ - 'title' => 'For Property Developers', - 'description' => 'Operational management of your procurement from Germany – contract management, quality control, and on-time delivery.', - 'icon' => 'globe-alt', - 'button' => '#partner-benefits-developer', - 'button_text' => 'Your Benefits as a Developer', - ], - [ - 'title' => 'For Local Retailers & Specialists', - 'description' => 'Strengthen your local business. Gain access to online customers and an exclusive, supra-regional product range.', - 'icon' => 'building-storefront', - 'button' => '#partner-benefits-retailer', - 'button_text' => 'Your Benefits as a Retailer', - ], - [ - 'title' => 'For Manufacturers & European Brands', - 'description' => 'Open up new, curated distribution channels in regional markets and benefit from our intelligent logistics.', - 'icon' => 'building-office-2', - 'button' => '#partner-benefits-supplier', - 'button_text' => 'Your Benefits as a Manufacturer', - ], - [ - 'title' => 'For Real Estate Brokers & Developers', - 'description' => 'Offer your clients unique added value, accelerate marketing, and secure attractive additional commissions.', - 'icon' => 'home-modern', - 'button' => '#partner-benefits-broker', - 'button_text' => 'Your Benefits as a Broker', - ], - ], - ], - 'partner_benefits_developer' => [ - 'id' => 'partner-benefits-developer', - 'tag' => 'Your Benefits as a Property Developer', - 'tag_icon' => 'globe-alt', - 'tag_title' => 'Your Extended Arm in Germany.', - 'features' => [ - [ - 'title' => 'Contract Management', - 'description' => 'Support in drafting and structuring supply contracts. Definition of clear performance and quality parameters, securing payment and delivery terms.', - 'icon' => 'document-check', - ], - [ - 'title' => 'Contract Enforcement', - 'description' => 'Active monitoring of agreed milestones, escalation to management level in case of deviations, and consistent follow-up of open items.', - 'icon' => 'shield-check', - ], - [ - 'title' => 'Tracking & Quality Control', - 'description' => 'Ongoing production and delivery monitoring, personal inspection when needed, and ensuring on-time delivery.', - 'icon' => 'magnifying-glass-circle', - ], - [ - 'title' => 'Network & Market Knowledge', - 'description' => 'Direct connection to manufacturers and decision-makers in Germany. We ensure that agreements don\'t just exist on paper but are actually implemented.', - 'icon' => 'link', - ], - ], - 'highlight' => [ - 'value' => '100%', - 'text' => 'Transparency, reliability, and predictable delivery – without operational friction', - ], - 'image' => 'b2in/partner-benefits-developer.jpg', - 'image_alt' => 'Supply Chain Management for Property Developers', - ], - 'partner_benefits_retailer' => [ - 'id' => 'partner-benefits-retailer', - 'tag' => 'Your Benefits as a Local Retailer', - 'tag_icon' => 'building-storefront', - 'tag_title' => 'Become the Digital Champion in Your Region.', - 'features' => [ - [ - 'title' => 'Digital Reach', - 'description' => 'We bring you the online customers you can\'t reach on your own. Benefit from our high-reach consumer brands.', - 'icon' => 'signal', - ], - [ - 'title' => 'Product Range Extension', - 'description' => 'Complement your offering with exclusive manufacturer brands from our portfolio – without any inventory risk.', - 'icon' => 'squares-plus', - ], - [ - 'title' => 'Protection Against Online Giants', - 'description' => 'With "Local First," we specifically strengthen your market position. The customer always sees your offering first.', - 'icon' => 'shield-check', - ], - [ - 'title' => 'Fair Terms', - 'description' => 'Our commission model is transparent and designed so that we only earn when you do too.', - 'icon' => 'scale', - ], - ], - 'highlight' => [ - 'value' => '+35%', - 'text' => 'Digital reach in the first year (average of our partners)', - ], - 'image' => 'b2in/partner-benefits-retailer.jpg', - 'image_alt' => 'Partner Benefits Retailer', - ], - 'partner_benefits_supplier' => [ - 'id' => 'partner-benefits-supplier', - 'tag' => 'Your Benefits as a Manufacturer & Brand', - 'tag_icon' => 'building-office-2', - 'tag_title' => 'Open Up New Markets – Intelligently and Curated.', - 'features' => [ - [ - 'title' => 'Curated Distribution Channel', - 'description' => 'Instead of getting lost in the noise of large marketplaces, your brand is presented to design-savvy customers in affluent regions.', - 'icon' => 'eye', - ], - [ - 'title' => 'Efficient Logistics', - 'description' => 'Our bundled logistics reduce your distribution costs. We manage consolidated shipping and complete processing.', - 'icon' => 'truck', - ], - [ - 'title' => 'Direct Market Access', - 'description' => 'Skip the traditional wholesale and build a direct relationship with regional markets and end customers.', - 'icon' => 'map-pin', - ], - [ - 'title' => 'Scalable Growth', - 'description' => 'Start with us in one region and gradually expand into further European hubs.', - 'icon' => 'chart-bar-square', - ], - ], - 'highlight' => [ - 'value' => '> 20', - 'text' => 'Curated regional hubs as new distribution channels in Europe', - ], - 'image' => 'b2in/partner-benefits-supplier.jpg', - 'image_alt' => 'Partner Benefits Supplier', - ], - 'partner_benefits_broker' => [ - 'id' => 'partner-benefits-broker', - 'tag' => 'Your Benefits as a Broker & Real Estate Professional', - 'tag_icon' => 'home-modern', - 'tag_title' => 'Added Value for Your Clients – More Revenue for You.', - 'features' => [ - [ - 'title' => 'Faster Marketing Through Home Staging', - 'description' => 'Use our curated furniture packages (stileigentum & style2own) to professionally stage your properties. Accelerate the sales process and achieve higher prices.', - 'icon' => 'rocket-launch', - ], - [ - 'title' => 'Unique After-Closing Service', - 'description' => 'Offer your buyers or tenants direct access to a complete furnishing service through our exclusive login card after contract signing.', - 'icon' => 'gift', - ], - [ - 'title' => 'Attractive Commission Model', - 'description' => 'Benefit twice: In addition to your classic brokerage fee, you receive a fair, lifetime commission on all furniture sales your clients generate through the platform.', - 'icon' => 'currency-euro', - ], - [ - 'title' => 'Easy Handling', - 'description' => 'Our digital broker portal makes it easy: invite clients, track activities, and view commissions transparently.', - 'icon' => 'finger-print', - ], - ], - 'highlight' => [ - 'value' => '-25%', - 'text' => 'Shorter marketing time for properties staged with B2in', - ], - 'image' => 'b2in/partner-benefits-broker.jpg', - 'image_alt' => 'Partner Benefits Broker', - ], - 'partner_process' => [ - 'title' => 'How to Become a Partner', - 'subtitle' => 'In just three simple steps, you become part of the B2in ecosystem and can benefit from all the advantages of our partnership.', - 'steps' => [ - [ - 'step' => '1', - 'title' => 'Apply', - 'description' => 'Tell us your story. Fill out our short contact form and show us what sets your products or business apart.', - 'icon' => 'envelope', - 'image' => 'b2in/room-1.jpg', - ], - [ - 'step' => '2', - 'title' => 'Review', - 'description' => 'We review every application personally. Our goal is to build a high-quality, complementary network that benefits everyone.', - 'icon' => 'check-circle', - 'image' => 'b2in/room-2.jpg', - ], - [ - 'step' => '3', - 'title' => 'Onboarding', - 'description' => 'Welcome aboard! We personally train you on using our partner portal and ensure you are successful from day one.', - 'icon' => 'rocket-launch', - 'image' => 'b2in/room-3.jpg', - ], - ], - 'cta' => [ - 'title' => 'Ready for the Next Step?', - 'subtitle' => 'Become part of the B2in ecosystem today and benefit from innovative business models and sustainable success strategies.', - 'button_text' => 'Become a Partner Now', - 'button_link' => '/contact', - ], - ], - - 'supplier_section' => [ - 'tag' => 'For Suppliers', - 'title' => 'Curated Platform for Providers', - 'subtitle' => 'Become part of an exclusive network of high-quality providers. Present your products and services to a pre-qualified, affluent audience with the highest quality standards.', - 'benefits' => [ - [ - 'title' => 'Curated Distribution Channel', - 'description' => 'Access to an exclusive, pre-qualified customer base with high quality standards', - 'icon' => 'store', - ], - [ - 'title' => 'Self-Management', - 'description' => 'Full control over product presentation, pricing, and availability', - 'icon' => 'settings', - ], - [ - 'title' => 'Central Quality Assurance', - 'description' => 'Standardized processes and quality controls for maximum customer trust', - 'icon' => 'check-circle', - ], - [ - 'title' => 'Analytics & Insights', - 'description' => 'Detailed sales analytics and market insights for optimized business decisions', - 'icon' => 'bar-chart', - ], - ], - 'dashboard' => [ - 'title' => 'Provider Dashboard', - 'stats' => [ - [ - 'label' => 'Product Visibility', - 'value' => '94%', - ], - [ - 'label' => 'Quality Rating', - 'value' => '98%', - ], - ], - ], - ], - 'leadership_team' => [ - 'title' => 'The Leadership Team', - 'subtitle' => 'Our experienced team brings decades of expertise in technology, operations, and business development.', - 'team_tag' => 'B2IN TEAM', - 'team' => [ - [ - 'name' => 'Marcel Scheibe', - 'position' => 'Founder & CEO', - 'expertise' => 'Visionary for the digital future of local trade and strategic bridge-builder between the USA and Europe.', - 'image' => 'b2in/marcel-scheibe.jpg', - ], - [ - 'name' => 'Sarah Müller', - 'position' => 'Head of Operations', - 'expertise' => 'Expert in optimizing our Europe-wide logistics processes and operational excellence of our regional hubs.', - 'image' => 'b2in/sarah-mueller.jpg', - ], - [ - 'name' => 'Thomas Weber', - 'position' => 'Head of Technology', - 'expertise' => 'Technology leader focused on an intuitive, scalable platform architecture that seamlessly connects retailers and manufacturers.', - 'image' => 'b2in/thomas-weber.jpg', - ], - ], - ], // Additional components for b2in ], ], 'articles' => [ + 6 => [ + 'id' => 6, + 'slug' => 'massanfertigung-warum-der-millimeter-zaehlt', + 'title' => 'Made to measure instead of off the shelf:
Why the millimetre counts in the end – and rough measurements are enough to start', + 'subtitle' => 'Sloping ceilings, niches, unusual heights: where standard furniture reaches its limits, bespoke begins. And in the end, a few millimetres really do decide whether a solution fits the room perfectly.', + 'image' => 'b2in/stileigentum.jpg', + 'category' => 'Interiors', + 'date' => 'August 26, 2026', + 'readTime' => '5 min read', + 'author' => [ + 'name' => 'Marcel Scheibe', + 'bio' => 'Founder & CEO of B2in Interior. With roots in the furniture trade, he accompanies customers from planning to after installation.', + 'avatar' => 'b2in/marcel-scheibe.jpg', + ], + 'content' => [ + 'intro' => 'At the start, however, you do not need to know these millimetres yet. + +For a first consultation, a plan and a concrete quote, rough room dimensions, a floor plan or a few photos are usually all we need. With these we can already judge what is sensibly feasible, develop first ideas and plan your individual solution. + +The exact measurement comes later – and it is our job, not yours.', + 'sections' => [ + [ + 'title' => 'First the idea, then the millimetre', + 'content' => 'Nobody has to walk through their home with a laser measure before the first consultation. + +Approximate widths, heights and depths are perfectly sufficient for the first plan. Together we develop the right solution and settle materials, fittings, design and budget. + +On this basis you receive your plan and a matching quote from us. + +If you decide on the solution, accept the quote and the deposit has been paid, the next step follows: the professional measurement at your home. + +Because now, at the latest, every millimetre really counts. + +Walls are rarely perfectly straight, floors not always level, and especially in older buildings heights, angles and junctions can change noticeably across a room. + +We record these deviations precisely and take them into account in the final detailed planning. + +The process is deliberately simple: + +Rough measurements are enough for consultation and quote. We take care of the exact measurements once the order is placed. + +Production is then released and your individual furniture is ordered or made.', + ], + [ + 'title' => 'The space you would otherwise give away', + 'content' => 'The advantage of bespoke lies not only in its look, but above all in making the best possible use of the space available. + +A wardrobe that follows a sloping ceiling exactly uses areas that are often lost with standard furniture. The same applies to niches, awkward corners, unusual ceiling heights or individual floor plans. + +This creates storage where there was none before – and a solution that fits naturally into the room.', + ], + [ + 'title' => 'Bespoke where it makes sense', + 'content' => 'Bespoke is not automatically the best solution everywhere. + +With straight walls, usual ceiling heights and conventional requirements, good series furniture can be the more sensible choice. + +That is why our consultation does not start with the question of how much bespoke can be used, but with which solution is truly right for the room. + +And when bespoke makes sense, we make sure that in the end exactly what does not yet need to be right at the start is right: the last millimetre.', + ], + ], + ], + ], + 7 => [ + 'id' => 7, + 'slug' => 'kueche-planen-vom-wunsch-zum-grundriss', + 'title' => 'Planning a kitchen:
How wishes turn into a floor plan', + 'subtitle' => 'Before anyone talks about fronts and colours, a kitchen is decided by three questions – and at first they have little to do with design.', + 'image' => 'b2in/style2own.jpg', + 'category' => 'Kitchen', + 'date' => 'August 20, 2026', + 'readTime' => '6 min read', + 'author' => [ + 'name' => 'Marcel Scheibe', + 'bio' => 'Founder & CEO of B2in Interior. With roots in the furniture trade, he accompanies customers from planning to after installation.', + 'avatar' => 'b2in/marcel-scheibe.jpg', + ], + 'content' => [ + 'intro' => 'Most kitchen conversations start with the front: matt or gloss, light or dark, handle or handleless. Understandable, because that is what you see. Only nothing is decided at that point. Whether a kitchen works day to day depends on questions that can be settled before the first colour sample – and that are hard to correct later.', + 'sections' => [ + [ + 'title' => 'Question one: how do you actually cook?', + 'content' => 'Not how you would like to cook – how you really do. Anyone cooking fresh every day needs worktop beside the hob and short distances between fridge, sink and cooking zone. Anyone using the kitchen mainly as a meeting point plans differently: more room to stand, a surface where someone can sit while food is being made. Both are good kitchens, but they are not the same kitchen.', + ], + [ + 'title' => 'Question two: what does the room dictate?', + 'content' => 'Windows, doors, connections and load-bearing walls set the frame before anyone plans anything. Some of it can be moved, some cannot – and what that costs should be on the table before the planning builds on it. Ceiling height belongs here too: it decides whether wall units can run all the way up or whether a dust ledge is left above them.', + ], + [ + 'title' => 'Question three: what should still work in ten years?', + 'content' => 'A kitchen stays for a long time. In many systems fronts can be replaced later; carcass dimensions and the layout practically cannot. So it pays to focus on durability for drawers, fittings and the worktop, and to keep the appetite for fashion to the parts that can be swapped. The colour comes after that – and then it may well be bold.', + ], + ], + ], + ], 1 => [ 'id' => 1, 'title' => 'Security Over Bureaucracy:
Why Dubai\'s Escrow System Surprises German Investors', 'subtitle' => 'How the government-regulated trust system in Dubai consistently protects investor funds – and why it is far ahead of international standards.', 'image' => 'b2in/magazin-1.jpg', 'category' => 'Dubai Investment', + 'world' => 'immobilien', 'date' => 'March 10, 2026', 'readTime' => '6 min read', 'author' => [ @@ -1511,6 +937,7 @@ return [ 'subtitle' => 'Strategic waterfront location, high rental demand, and enormous potential for capital appreciation – Al Jaddaf is the hidden champion among Dubai\'s districts.', 'image' => 'b2in/magazin-2.jpg', 'category' => 'Dubai Investment', + 'world' => 'immobilien', 'date' => 'March 5, 2026', 'readTime' => '7 min read', 'author' => [ @@ -1542,6 +969,7 @@ return [ 'subtitle' => 'Why turnkey interior concepts make the difference between average and premium returns.', 'image' => 'b2in/magazin-3.jpg', 'category' => 'Returns & Interior', + 'world' => 'immobilien', 'date' => 'February 25, 2026', 'readTime' => '6 min read', 'author' => [ @@ -1569,6 +997,7 @@ return [ ], 4 => [ 'id' => 4, + 'published' => false, 'title' => 'Supply Chain Management for Developers:
Why Contractual Reliability Makes the Difference', 'subtitle' => 'How professional procurement management from Germany prevents construction delays and saves millions.', 'image' => 'b2in/magazin-4.jpg', @@ -1600,6 +1029,7 @@ return [ ], 5 => [ 'id' => 5, + 'published' => false, 'title' => 'Local for Local:
How Regional Furniture Retail Is Shaping the Future of Living', 'subtitle' => 'Why consumers are longing again for tactile experiences and personal consultation – and how digital marketplaces strengthen local specialist retail.', 'image' => 'b2in/magazin-5.jpg', diff --git a/resources/lang/en/b2in_legal.php b/resources/lang/en/b2in_legal.php index 8343db9e..7fc9cab7 100644 --- a/resources/lang/en/b2in_legal.php +++ b/resources/lang/en/b2in_legal.php @@ -24,7 +24,7 @@ return [

Contact

- Email: info@b2in.de
+ Email: info@b2in.eu
Phone: +49 (0) 5221 9255055

diff --git a/resources/lang/en/ui.php b/resources/lang/en/ui.php index 772c48d3..87afdd9c 100644 --- a/resources/lang/en/ui.php +++ b/resources/lang/en/ui.php @@ -16,9 +16,84 @@ return [ 'menu_close' => 'Close menu', 'menu_open' => 'Open menu', + // Slideshow in the home page hero (Nachtrag 23) + 'hero_slider' => [ + 'label' => 'Glimpses of our brands', + 'dots' => 'Choose image', + 'dot' => 'Image :n of :total: :label', + ], + // World switcher (Interior / Real estate) + 'worlds_label' => 'Switch area', + 'world_interior' => 'Interior', + 'world_immobilien' => 'Real estate', + + 'display_feed_title' => 'Live view of the showroom display', + 'display_feed_enlarge' => 'View larger', + 'display_feed_fullscreen' => 'Full screen', + 'display_feed_close' => 'Close', + 'opens_new_tab' => '(opens in a new tab)', + 'references_empty' => 'The first projects will appear here as soon as we are allowed to show them.', + + // Appointment widget + 'appointment' => [ + 'name' => 'Name', + 'email' => 'Email', + 'phone' => 'Phone', + 'topic' => 'Subject', + 'topic_placeholder' => 'Please choose', + 'preferred_date' => 'Preferred date', + 'message' => 'Message', + 'message_placeholder' => 'What is it about? Two sentences are enough.', + 'submit' => 'Send request', + 'sending' => 'Sending …', + 'success' => 'Thank you! We will get back to you shortly to arrange the appointment.', + 'new_request' => 'Another request', + 'date_in_past' => 'Please choose a date from today onwards.', + 'whatsapp_intro' => 'Fastest via WhatsApp – we prepare the message with your details.', + 'or_form' => 'or use the form', + 'whatsapp_text' => 'Hello B2in Interior, I would like to arrange an appointment.', + 'whatsapp_note' => 'Opens WhatsApp with a prepared text. You send the message yourself.', + ], + + // Kernmarken + 'all_brands_cta' => 'View all brands', + 'whatsapp' => 'Message us on WhatsApp', + 'all_brands' => 'All brands', + 'brand_services' => 'Services and specialities', + 'brand_cta_title' => 'Interested in :name?', + 'brand_cta_text' => 'Arrange an appointment – we advise you personally and without obligation.', + 'request_appointment' => 'Request an appointment', + 'brand_website' => 'Visit the manufacturer', + 'other_brands' => 'Our other core brands', + 'more_about' => 'More about :name', + + // Brand gallery – realised projects vs. drafts + 'brand_gallery_title' => 'Inspiration and drafts', + 'brand_gallery_intro' => 'Visualisations that show what is possible in a room – before the first piece of furniture is in place.', + 'brand_gallery_title_inspirations' => 'Inspiration and drafts', + 'brand_gallery_intro_inspirations' => 'Visualisations that show what is possible in a room – before the first piece of furniture is in place.', + 'brand_gallery_title_projects' => 'References', + 'brand_gallery_intro_projects' => 'Completed projects – this is what it looks like once planning and craft are done.', + 'brand_gallery_title_projects_company' => 'References and insights', + 'brand_gallery_intro_projects_company' => 'Completed projects and a look into the workshop where they are made.', + 'brand_gallery_title_mixed' => 'Projects and drafts', + 'brand_gallery_intro_mixed' => 'Completed projects and visualisations that show what is possible in a room.', + 'brand_gallery_tab_projects' => 'Completed projects', + 'brand_gallery_tab_inspirations' => 'Inspiration and drafts', + 'brand_gallery_badge_project' => 'Completed project', + 'brand_gallery_badge_inspiration' => 'Visualisation', + 'brand_gallery_badge_company' => 'From the workshop', + 'brand_gallery_inspiration_note' => 'Drafts and visualisations. They show design possibilities before the first piece of furniture is in place.', + 'previous' => 'Previous image', + 'next' => 'Next image', + // Footer 'founder_ceo' => 'Founder & CEO', 'legal_notice' => 'Legal Notice', + 'privacy_policy' => 'Privacy Policy', + 'terms_of_service' => 'Terms of Service', + 'cookie_policy' => 'Cookie Policy', + 'faq' => 'FAQ', 'cookie_settings' => 'Cookie Settings', // Announcement Bar @@ -34,6 +109,7 @@ return [ // Contact Form 'contact_form' => [ + 'subject_placeholder' => 'Select a subject', 'success_title' => 'Thank you!', 'success_message' => 'Your message has been received. We will get back to you as soon as possible.', 'first_name' => 'First Name *', diff --git a/resources/lang/vendor/cookie-consent/de/cookie-consent.php b/resources/lang/vendor/cookie-consent/de/cookie-consent.php new file mode 100644 index 00000000..96d1e713 --- /dev/null +++ b/resources/lang/vendor/cookie-consent/de/cookie-consent.php @@ -0,0 +1,23 @@ + [ + 'intro' => 'Diese Website nutzt Google Analytics, einen Webanalysedienst der Google Ireland Limited („Google“), Gordon House, Barrow Street, Dublin 4, Irland.', + + 'technical_details' => [ + 'ip_anonymization' => 'IP-Adressen', + 'ip_anonymization_value' => 'Werden in Google Analytics 4 nicht gespeichert', + ], + + 'ip_anonymization' => [ + 'title' => 'IP-Adressen', + 'text' => 'Wir setzen Google Analytics 4 ein. Dort werden IP-Adressen nicht protokolliert oder gespeichert; Google nutzt sie lediglich, um daraus grobe Standortdaten abzuleiten, und verwirft sie anschließend.', + ], + ], +]; diff --git a/resources/views/components/appointment-link.blade.php b/resources/views/components/appointment-link.blade.php new file mode 100644 index 00000000..6e5f1f06 --- /dev/null +++ b/resources/views/components/appointment-link.blade.php @@ -0,0 +1,17 @@ +{{-- Link zu einer Terminanfrage. + + Zeigt der Link auf eine Kontaktseite (/contact oder /immobilien/kontakt), oeffnet ein Klick + das schwebende Terminanfrage-Widget statt die Seite zu wechseln – `topic` belegt dabei das + Anliegen vor (z. B. der Marken-Slug auf einer Markenseite). Ohne JavaScript bleibt es ein + normaler Link. Zeigt der Link woandershin (vom CMS geaendert), ist es ein gewoehnlicher Link. + Das Abfangen steckt in resources/js/app.js, das Oeffnen im Widget selbst. --}} +@props(['href', 'topic' => null]) + +@php + $path = (string) (parse_url((string) $href, PHP_URL_PATH) ?? ''); + $opensWidget = in_array(rtrim($path, '/'), ['/contact', '/immobilien/kontakt'], true); +@endphp + +{{ $slot }} diff --git a/resources/views/components/layouts/app/sidebar.blade.php b/resources/views/components/layouts/app/sidebar.blade.php index e7c44b9d..ac1f3c3d 100644 --- a/resources/views/components/layouts/app/sidebar.blade.php +++ b/resources/views/components/layouts/app/sidebar.blade.php @@ -161,7 +161,7 @@ {{ __('Übersicht') }} @@ -169,8 +169,12 @@ {{ __('Inhalte') }} - {{ __('Projekte') }} + {{-- Immobilien-Projekte (cms.projects.index) sind nicht freigegeben und bewusst nicht verlinkt (Nachtrag 13). --}} + {{ __('Referenzen') }} + + {{ __('Marken') }} {{ __('Magazin') }} diff --git a/resources/views/components/monitoring/browser-errors.blade.php b/resources/views/components/monitoring/browser-errors.blade.php new file mode 100644 index 00000000..0b1b07b8 --- /dev/null +++ b/resources/views/components/monitoring/browser-errors.blade.php @@ -0,0 +1,14 @@ +@props(['build' => 'build', 'area' => 'web']) +{{-- Browserfehler an GlitchTip. Ohne SENTRY_BROWSER_DSN + wird nichts eingebunden; das SDK selbst lädt erst beim ersten Fehler. --}} +@if (filled(config('monitoring.browser.dsn'))) + + @vite(['resources/js/error-reporting.js'], $build) +@endif diff --git a/resources/views/components/web/hero-eyebrow.blade.php b/resources/views/components/web/hero-eyebrow.blade.php new file mode 100644 index 00000000..7c4d5ad7 --- /dev/null +++ b/resources/views/components/web/hero-eyebrow.blade.php @@ -0,0 +1,10 @@ +{{-- Zeile über der Hero-Überschrift (07.10.2026, Vorbild „Farbwelt und Stil“): leicht gesperrt, + mit kurzer Akzentlinie. Ohne Text bleibt sie weg. --}} +@props(['text' => null]) + +@if (filled($text)) +

class('flex items-center gap-4 text-sm font-medium tracking-wide text-muted-foreground') }} data-hero-eyebrow> + {{ $text }} + +

+@endif diff --git a/resources/views/components/web/hero-trust.blade.php b/resources/views/components/web/hero-trust.blade.php new file mode 100644 index 00000000..c7e08391 --- /dev/null +++ b/resources/views/components/web/hero-trust.blade.php @@ -0,0 +1,14 @@ +{{-- Vertrauenspunkte unten im Hero (Startseite, Marken): Häkchen in Akzentfarbe, getrennt durch + eine feine Linie vom Text darüber. Ohne Einträge bleibt die Leiste weg. --}} +@props(['items' => []]) + +@if (filled(array_filter((array) $items))) +
class('flex flex-wrap items-center gap-6 border-t border-border/80 pt-8 slide-right delay-300') }} data-hero-trust> + @foreach (array_filter((array) $items) as $item) +
+ @svg('heroicon-o-check-circle', 'w-6 h-6 text-secondary') + {{ $item }} +
+ @endforeach +
+@endif diff --git a/resources/views/flux/icon/book-open-text.blade.php b/resources/views/flux/icon/book-open-text.blade.php new file mode 100644 index 00000000..bff20a34 --- /dev/null +++ b/resources/views/flux/icon/book-open-text.blade.php @@ -0,0 +1,47 @@ +{{-- Credit: Lucide (https://lucide.dev) --}} + +@props([ + 'variant' => 'outline', +]) + +@php + if ($variant === 'solid') { + throw new \Exception('The "solid" variant is not supported in Lucide.'); + } + + $classes = Flux::classes('shrink-0')->add( + match ($variant) { + 'outline' => '[:where(&)]:size-6', + 'solid' => '[:where(&)]:size-6', + 'mini' => '[:where(&)]:size-5', + 'micro' => '[:where(&)]:size-4', + }, + ); + + $strokeWidth = match ($variant) { + 'outline' => 2, + 'mini' => 2.25, + 'micro' => 2.5, + }; +@endphp + +class($classes) }} + data-flux-icon + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + stroke-width="{{ $strokeWidth }}" + stroke-linecap="round" + stroke-linejoin="round" + aria-hidden="true" + data-slot="icon" +> + + + + + + + diff --git a/resources/views/flux/icon/chevrons-up-down.blade.php b/resources/views/flux/icon/chevrons-up-down.blade.php new file mode 100644 index 00000000..bf1ba2bd --- /dev/null +++ b/resources/views/flux/icon/chevrons-up-down.blade.php @@ -0,0 +1,43 @@ +{{-- Credit: Lucide (https://lucide.dev) --}} + +@props([ + 'variant' => 'outline', +]) + +@php + if ($variant === 'solid') { + throw new \Exception('The "solid" variant is not supported in Lucide.'); + } + + $classes = Flux::classes('shrink-0')->add( + match ($variant) { + 'outline' => '[:where(&)]:size-6', + 'solid' => '[:where(&)]:size-6', + 'mini' => '[:where(&)]:size-5', + 'micro' => '[:where(&)]:size-4', + }, + ); + + $strokeWidth = match ($variant) { + 'outline' => 2, + 'mini' => 2.25, + 'micro' => 2.5, + }; +@endphp + +class($classes) }} + data-flux-icon + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + stroke-width="{{ $strokeWidth }}" + stroke-linecap="round" + stroke-linejoin="round" + aria-hidden="true" + data-slot="icon" +> + + + diff --git a/resources/views/flux/icon/folder-git-2.blade.php b/resources/views/flux/icon/folder-git-2.blade.php new file mode 100644 index 00000000..292171b8 --- /dev/null +++ b/resources/views/flux/icon/folder-git-2.blade.php @@ -0,0 +1,45 @@ +{{-- Credit: Lucide (https://lucide.dev) --}} + +@props([ + 'variant' => 'outline', +]) + +@php + if ($variant === 'solid') { + throw new \Exception('The "solid" variant is not supported in Lucide.'); + } + + $classes = Flux::classes('shrink-0')->add( + match ($variant) { + 'outline' => '[:where(&)]:size-6', + 'solid' => '[:where(&)]:size-6', + 'mini' => '[:where(&)]:size-5', + 'micro' => '[:where(&)]:size-4', + }, + ); + + $strokeWidth = match ($variant) { + 'outline' => 2, + 'mini' => 2.25, + 'micro' => 2.5, + }; +@endphp + +class($classes) }} + data-flux-icon + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + stroke-width="{{ $strokeWidth }}" + stroke-linecap="round" + stroke-linejoin="round" + aria-hidden="true" + data-slot="icon" +> + + + + + diff --git a/resources/views/flux/icon/layout-grid.blade.php b/resources/views/flux/icon/layout-grid.blade.php new file mode 100644 index 00000000..88c56988 --- /dev/null +++ b/resources/views/flux/icon/layout-grid.blade.php @@ -0,0 +1,45 @@ +{{-- Credit: Lucide (https://lucide.dev) --}} + +@props([ + 'variant' => 'outline', +]) + +@php + if ($variant === 'solid') { + throw new \Exception('The "solid" variant is not supported in Lucide.'); + } + + $classes = Flux::classes('shrink-0')->add( + match ($variant) { + 'outline' => '[:where(&)]:size-6', + 'solid' => '[:where(&)]:size-6', + 'mini' => '[:where(&)]:size-5', + 'micro' => '[:where(&)]:size-4', + }, + ); + + $strokeWidth = match ($variant) { + 'outline' => 2, + 'mini' => 2.25, + 'micro' => 2.5, + }; +@endphp + +class($classes) }} + data-flux-icon + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + stroke-width="{{ $strokeWidth }}" + stroke-linecap="round" + stroke-linejoin="round" + aria-hidden="true" + data-slot="icon" +> + + + + + diff --git a/resources/views/livewire/admin/cms/articles-index.blade.php b/resources/views/livewire/admin/cms/articles-index.blade.php index ab2e74c9..9b908b22 100644 --- a/resources/views/livewire/admin/cms/articles-index.blade.php +++ b/resources/views/livewire/admin/cms/articles-index.blade.php @@ -17,6 +17,7 @@ state([ 'subtitle' => '', 'image' => '', 'category' => '', + 'world' => 'interior', 'date_label' => '', 'read_time' => '', 'authorName' => '', @@ -48,9 +49,10 @@ $articles = computed( $openCreate = function () { $this->editingId = null; - $this->reset(['slug', 'articleTitle', 'subtitle', 'image', 'category', 'date_label', 'read_time', 'authorName', 'authorBio', 'authorAvatar', 'intro', 'sections']); + $this->reset(['slug', 'articleTitle', 'subtitle', 'image', 'category', 'world', 'date_label', 'read_time', 'authorName', 'authorBio', 'authorAvatar', 'intro', 'sections']); $this->is_published = true; $this->order = 0; + $this->world = 'interior'; $this->sections = [['title' => '', 'content' => '']]; $this->showForm = true; }; @@ -65,6 +67,7 @@ $openEdit = function (int $id) { $this->slug = $article->slug; $this->image = $article->image ?? ''; $this->category = $article->category ?? ''; + $this->world = $article->world ?? 'interior'; $this->date_label = $article->date_label ?? ''; $this->read_time = $article->read_time ?? ''; $this->is_published = $article->is_published; @@ -114,6 +117,7 @@ $save = function () { 'subtitle' => $this->subtitle, 'image' => $this->image, 'category' => $this->category, + 'world' => $this->world, 'date_label' => $this->date_label, 'read_time' => $this->read_time, 'authorName' => $this->authorName, @@ -126,6 +130,7 @@ $save = function () { 'subtitle' => 'nullable|string|max:1000', 'image' => 'nullable|string|max:500', 'category' => 'nullable|string|max:255', + 'world' => 'required|in:interior,immobilien', 'date_label' => 'nullable|string|max:100', 'read_time' => 'nullable|string|max:50', 'authorName' => 'nullable|string|max:255', @@ -153,6 +158,7 @@ $save = function () { $article->image = $validated['image'] ?? null; $article->category = $validated['category'] ?? null; + $article->world = $validated['world']; $article->date_label = $validated['date_label'] ?? null; $article->read_time = $validated['read_time'] ?? null; $article->author = [ @@ -225,6 +231,12 @@ $cancelForm = function () {
+ {{-- Welt: entscheidet, in welcher Magazinliste der Beitrag steht (/magazin oder + /immobilien/magazin) und in welcher Farbwelt die Detailseite rendert. --}} + + Interior + Immobilien + @@ -337,6 +349,9 @@ $cancelForm = function () { @if ($article->category) {{ $article->category }} @endif + @if ($article->world === 'immobilien') + Immobilien + @endif @unless ($article->is_published) Entwurf @endunless diff --git a/resources/views/livewire/admin/cms/brands-index.blade.php b/resources/views/livewire/admin/cms/brands-index.blade.php new file mode 100644 index 00000000..eb5422cc --- /dev/null +++ b/resources/views/livewire/admin/cms/brands-index.blade.php @@ -0,0 +1,687 @@ + '', + 'showForm' => false, + 'editingId' => null, + 'editLocale' => 'de', + 'slug' => '', + 'brandName' => '', + 'tagline' => '', + 'teaser' => '', + 'summary' => '', + 'highlights' => [], + 'description' => '', + 'logo' => '', + 'image' => '', + 'services' => [], + 'sections' => [], + 'widgetLabel' => '', + 'ctaTitle' => '', + 'ctaText' => '', + 'gallery' => [], + 'website_url' => '', + 'showroom' => '', + 'originCity' => '', + 'originDistance' => '', + 'originRole' => '', + 'is_published' => true, + 'order' => 0, +]); + +on(['media-selected' => function ($mediaId, $url, $field) { + $media = $mediaId ? CmsMedia::find($mediaId) : null; + + if (! $media) { + return; + } + + if ($field === 'brand_logo') { + $this->logo = $media->filename; + } + + if ($field === 'brand_image') { + $this->image = $media->filename; + } + + if (str_starts_with($field, 'brand_gallery:')) { + $index = (int) substr($field, strlen('brand_gallery:')); + + if (isset($this->gallery[$index])) { + $this->gallery[$index]['image'] = $media->filename; + } + } +}]); + +$brands = computed( + fn () => CmsBrand::query() + ->when($this->search, fn ($q, $s) => $q->where('slug', 'like', "%{$s}%") + ->orWhereRaw("JSON_UNQUOTE(JSON_EXTRACT(name, '$.de')) LIKE ?", ["%{$s}%"])) + ->ordered() + ->get(), +); + +$openCreate = function () { + $this->editingId = null; + $this->reset(['slug', 'brandName', 'tagline', 'teaser', 'summary', 'description', 'logo', 'image', 'website_url', 'showroom', 'originCity', 'originDistance', 'originRole', 'widgetLabel', 'ctaTitle', 'ctaText']); + $this->sections = []; + $this->highlights = ['', '', '']; + $this->services = [['title' => '', 'description' => '']]; + $this->gallery = []; + $this->is_published = true; + $this->order = (CmsBrand::max('order') ?? 0) + 1; + $this->showForm = true; +}; + +$loadLocaleFields = function (CmsBrand $brand, string $locale) { + $this->brandName = $brand->getTranslation('name', $locale) ?? ''; + $this->tagline = $brand->getTranslation('tagline', $locale) ?? ''; + $this->teaser = $brand->getTranslation('teaser', $locale) ?? ''; + $this->summary = $brand->getTranslation('summary', $locale) ?? ''; + $this->description = CmsFluxEditorHtmlTransformer::toEditor((string) ($brand->getTranslation('description', $locale) ?? '')); + $this->widgetLabel = $brand->getTranslation('widget_label', $locale) ?? ''; + $this->ctaTitle = $brand->getTranslation('cta_title', $locale) ?? ''; + $this->ctaText = $brand->getTranslation('cta_text', $locale) ?? ''; + $this->originCity = $brand->getTranslation('origin_city', $locale) ?? ''; + $this->originDistance = $brand->getTranslation('origin_distance', $locale) ?? ''; + $this->originRole = $brand->getTranslation('origin_role', $locale) ?? ''; + + // Merkmale, Leistungen, Abschnitte, Showroom und Bildunterschriften: Deutsch aus den Spalten, + // andere Sprachen aus `field_translations` – ohne Übersetzung steht der deutsche Text als Vorlage da. + $this->showroom = (string) ($brand->localized('showroom', $locale) ?? ''); + $this->highlights = $brand->localized('highlights', $locale) ?: ['', '', '']; + $this->services = $brand->localized('services', $locale) ?: [['title' => '', 'description' => '']]; + $this->gallery = $brand->localizedGallery($locale); + // Absätze im Formular als Textblock: eine Leerzeile trennt sie. + $this->sections = collect(CmsBrand::normalizeSections($brand->localized('sections', $locale))) + ->map(fn (array $s) => [ + 'title' => $s['title'], + 'paragraphs' => implode("\n\n", $s['paragraphs']), + 'claim' => $s['claim'], + 'quote' => $s['quote'], + 'quote_author' => $s['quote_author'], + 'detail_title' => $s['detail']['title'] ?? '', + 'detail_paragraphs' => implode("\n\n", $s['detail']['paragraphs'] ?? []), + ]) + ->all(); +}; + +$openEdit = function (int $id) { + $brand = CmsBrand::find($id); + + if (! $brand) { + return; + } + + $this->editingId = $id; + $this->slug = $brand->slug; + $this->logo = $brand->logo ?? ''; + $this->image = $brand->image ?? ''; + $this->website_url = $brand->website_url ?? ''; + $this->is_published = $brand->is_published; + $this->order = $brand->order ?? 0; + + $this->loadLocaleFields($brand, $this->editLocale); + $this->showForm = true; +}; + +$switchLocale = function (string $locale) { + $this->editLocale = $locale; + + if ($this->editingId) { + $brand = CmsBrand::find($this->editingId); + + if ($brand) { + $this->loadLocaleFields($brand, $locale); + } + } +}; + +$addHighlight = fn () => $this->highlights[] = ''; + +$removeHighlight = function (int $index) { + unset($this->highlights[$index]); + $this->highlights = array_values($this->highlights); +}; + +$addService = fn () => $this->services[] = ['title' => '', 'description' => '']; + +$removeService = function (int $index) { + unset($this->services[$index]); + $this->services = array_values($this->services); +}; + +$addSection = fn () => $this->sections[] = [ + 'title' => '', 'paragraphs' => '', 'claim' => '', + 'quote' => '', 'quote_author' => '', 'detail_title' => '', 'detail_paragraphs' => '', +]; + +$removeSection = function (int $index) { + unset($this->sections[$index]); + $this->sections = array_values($this->sections); +}; + +$moveSection = function (int $index, int $direction) { + $target = $index + $direction; + + if (! isset($this->sections[$index], $this->sections[$target])) { + return; + } + + [$this->sections[$index], $this->sections[$target]] = [$this->sections[$target], $this->sections[$index]]; +}; + +$addGalleryImage = function (string $category = CmsBrand::GALLERY_PROJECT) { + $this->gallery[] = [ + 'image' => '', + 'category' => in_array($category, CmsBrand::GALLERY_CATEGORIES, true) ? $category : CmsBrand::GALLERY_INSPIRATION, + 'caption' => '', + ]; +}; + +$removeGalleryImage = function (int $index) { + unset($this->gallery[$index]); + $this->gallery = array_values($this->gallery); +}; + +$save = function () { + $validated = validator([ + 'slug' => $this->slug, + 'brandName' => $this->brandName, + 'tagline' => $this->tagline, + 'teaser' => $this->teaser, + 'summary' => $this->summary, + 'website_url' => $this->website_url, + 'showroom' => $this->showroom, + 'originCity' => $this->originCity, + 'originDistance' => $this->originDistance, + 'originRole' => $this->originRole, + 'is_published' => $this->is_published, + 'order' => $this->order, + ], [ + 'slug' => 'required|string|max:255|regex:/^[a-z0-9-]+$/', + 'brandName' => 'required|string|max:255', + 'tagline' => 'nullable|string|max:255', + 'teaser' => 'nullable|string|max:2000', + 'summary' => 'nullable|string|max:4000', + 'website_url' => 'nullable|url|max:500', + 'showroom' => 'nullable|string|max:255', + 'originCity' => 'nullable|string|max:255', + 'originDistance' => 'nullable|string|max:255', + 'originRole' => 'nullable|string|max:500', + 'is_published' => 'boolean', + 'order' => 'integer|min:0', + ], [ + 'slug.regex' => 'Der Slug darf nur Kleinbuchstaben, Ziffern und Bindestriche enthalten.', + 'website_url.url' => 'Bitte eine vollständige URL angeben (mit https://).', + ])->validate(); + + $duplicate = CmsBrand::query() + ->where('slug', $validated['slug']) + ->when($this->editingId, fn ($q) => $q->whereKeyNot($this->editingId)) + ->exists(); + + if ($duplicate) { + Flux::toast(variant: 'danger', heading: 'Slug vergeben', text: 'Es gibt bereits eine Marke mit diesem Slug.'); + + return; + } + + $brand = $this->editingId + ? CmsBrand::findOrFail($this->editingId) + : CmsBrand::query()->make(); + + $brand->slug = $validated['slug']; + $brand->setTranslation('name', $this->editLocale, $validated['brandName']); + $brand->setTranslation('tagline', $this->editLocale, $validated['tagline'] ?? ''); + $brand->setTranslation('teaser', $this->editLocale, $validated['teaser'] ?? ''); + $brand->setTranslation('summary', $this->editLocale, $validated['summary'] ?? ''); + $brand->setTranslation('description', $this->editLocale, CmsFluxEditorHtmlTransformer::fromEditor((string) $this->description)); + + $brand->logo = $this->logo ?: null; + $brand->image = $this->image ?: null; + $brand->website_url = $validated['website_url'] ?: null; + $brand->setLocalized('showroom', $this->editLocale, $validated['showroom'] ?: null); + + $brand->setLocalized('highlights', $this->editLocale, collect($this->highlights) + ->map(fn ($h) => trim((string) $h)) + ->filter() + ->values() + ->toArray()); + + $brand->setLocalized('services', $this->editLocale, collect($this->services) + ->filter(fn ($s) => ! empty($s['title']) || ! empty($s['description'])) + ->values() + ->toArray()); + + // Bilder und Rubriken gelten für alle Sprachen; die Unterschrift gehört zur bearbeiteten Sprache. + $gallery = CmsBrand::normalizeGallery($this->gallery); + $captions = collect($gallery)->mapWithKeys(fn (array $item) => [$item['image'] => $item['caption']])->all(); + + if ($this->editLocale !== CmsBrand::BASE_LOCALE) { + $baseCaptions = $brand->localized('gallery_captions', CmsBrand::BASE_LOCALE); + $gallery = array_map(fn (array $item) => [...$item, 'caption' => (string) ($baseCaptions[$item['image']] ?? '')], $gallery); + } + + $brand->gallery = $gallery; + $brand->setLocalized('gallery_captions', $this->editLocale, $captions); + + $brand->setTranslation('widget_label', $this->editLocale, trim((string) $this->widgetLabel)); + $brand->setTranslation('cta_title', $this->editLocale, trim((string) $this->ctaTitle)); + $brand->setTranslation('cta_text', $this->editLocale, trim((string) $this->ctaText)); + + // Herkunfts-Sektion: ohne Fertigungsort erscheint die Marke dort nicht. + $brand->setTranslation('origin_city', $this->editLocale, trim((string) ($validated['originCity'] ?? ''))); + $brand->setTranslation('origin_distance', $this->editLocale, trim((string) ($validated['originDistance'] ?? ''))); + $brand->setTranslation('origin_role', $this->editLocale, trim((string) ($validated['originRole'] ?? ''))); + + // normalizeSections() nimmt die Textblöcke entgegen und trennt sie an den Leerzeilen. + $brand->setLocalized('sections', $this->editLocale, CmsBrand::normalizeSections(collect($this->sections)->map(fn (array $s) => [ + 'title' => $s['title'] ?? '', + 'paragraphs' => $s['paragraphs'] ?? '', + 'claim' => $s['claim'] ?? '', + 'quote' => $s['quote'] ?? '', + 'quote_author' => $s['quote_author'] ?? '', + 'detail' => [ + 'title' => $s['detail_title'] ?? '', + 'paragraphs' => $s['detail_paragraphs'] ?? '', + ], + ])->all())); + + $brand->is_published = $validated['is_published']; + $brand->order = $validated['order']; + $brand->save(); + + $this->showForm = false; + $this->editingId = null; + + Flux::toast(variant: 'success', heading: 'Gespeichert', text: 'Marke wurde erfolgreich gespeichert.'); +}; + +$togglePublished = function (int $id) { + $brand = CmsBrand::findOrFail($id); + $brand->update(['is_published' => ! $brand->is_published]); + + Flux::toast(heading: 'Status geändert', text: $brand->is_published ? 'Veröffentlicht' : 'Entwurf'); +}; + +$deleteBrand = function (int $id) { + CmsBrand::findOrFail($id)->delete(); + + Flux::toast(variant: 'success', heading: 'Gelöscht', text: 'Marke wurde entfernt.'); +}; + +$cancelForm = function () { + $this->showForm = false; + $this->editingId = null; +}; + +?> + +
+
+ Kernmarken +
+ @foreach (config('flux-cms.locales', ['de' => 'DE', 'en' => 'EN']) as $code => $label) + {{ strtoupper($code) }} + @endforeach + Neue Marke +
+
+ + +
+ +
+ Die Marken erscheinen als Kacheln auf der Startseite unter „Unsere Kernmarken" und + bekommen jeweils eine eigene Detailseite unter /marken/<slug>. + Die Reihenfolge steuert das Feld „Sortierung". +
+
+
+ +
+ +
+ + @if ($showForm) + +
+ {{ $editingId ? 'Marke bearbeiten' : 'Neue Marke' }} +
+ @foreach (config('flux-cms.locales', ['de' => 'DE', 'en' => 'EN']) as $code => $label) + {{ strtoupper($code) }} + @endforeach +
+
+ +
+ + @error('slug') {{ $message }} @enderror + + + @error('brandName') {{ $message }} @enderror + +
+ +
+ + + + @error('website_url') {{ $message }} @enderror + + +
+ +
+ + + +
+ + {{-- Fertigungsort für „Aus der Region gefertigt“ (Startseite und /marken) --}} +
+ Fertigungsort + + Erscheint in der Sektion „Aus der Region gefertigt“ auf der Startseite und unter /marken. + Ohne Ort bleibt die Marke dort weg. Die Position in der Karte ist fest hinterlegt. + +
+ + +
+ +
+
+
+ + {{-- Drei Merkmale für die Übersichtsseite --}} +
+
+ Merkmale auf /marken ({{ strtoupper($editLocale) }}) + Merkmal hinzufügen +
+
+ @foreach ($highlights as $i => $highlight) +
+ + +
+ @endforeach +
+
+ + {{-- Bilder --}} +
+
+ +
+ @if ($logo) +
+ +
+ @endif +
+ +

{{ $logo ?: 'Kein Logo' }}

+
+
+
+ +
+ +
+ @if ($image) +
+ +
+ @endif +
+ +

{{ $image ?: 'Kein Bild' }}

+
+
+
+
+ + {{-- Einleitung --}} +
+ Einleitung ({{ strtoupper($editLocale) }}) + +
+ + {{-- Leistungen --}} +
+
+ Leistungen und Besonderheiten ({{ strtoupper($editLocale) }}) + Punkt hinzufügen +
+
+ @foreach ($services as $i => $service) +
+
+ Punkt {{ $i + 1 }} + @if (count($services) > 1) + + @endif +
+ + +
+ @endforeach +
+
+ + {{-- Abschnitte der Markenseite --}} +
+
+ Abschnitte der Markenseite ({{ strtoupper($editLocale) }}) + Abschnitt hinzufügen +
+ +
+ Die Abschnitte erscheinen auf der Detailseite unter der Einleitung, in dieser Reihenfolge. + Eine Leerzeile trennt zwei Absätze. Die Vertiefung wird auf + der Seite als aufklappbarer Bereich dargestellt – leer lassen, wenn es keine gibt. +
+ + @if (empty($sections)) +

Noch keine Abschnitte.

+ @else +
+ @foreach ($sections as $i => $section) +
+
+ Abschnitt {{ $i + 1 }} +
+ + + +
+
+ + + + + + + +
+
+ +
+ +
+ +
+

Vertiefung – erscheint aufklappbar

+ + +
+
+ @endforeach +
+ @endif +
+ + {{-- Abschlussblock und Beschriftung des Terminanfrage-Widgets --}} +
+ Abschluss und Terminanfrage + + +

+ Steht auf dem schwebenden Button, solange man auf dieser Markenseite ist. Leer lassen für die + allgemeine Beschriftung. +

+ + + +
+ + {{-- Galerie --}} +
+
+ Bildergalerie +
+ Projekt + Inspiration + Werkstatt +
+
+ +
+ Projekt = tatsächlich ausgeführter Auftrag (erscheint auch unter „Referenzen“, solange dort nichts gepflegt ist). + Werkstatt = Einblick in Fertigung oder Montage des Herstellers. + Inspiration = Entwurf, Rendering oder KI-Darstellung. + Auf der Seite trägt jedes Bild seine Beschriftung – bitte nichts vermischen. +
+ + @if (empty($gallery)) +

Noch keine Bilder.

+ @else +
+ @foreach ($gallery as $i => $item) +
+ @if (!empty($item['image'])) +
+ +
+ @endif + + + Realisiertes Projekt + Inspiration / Entwurf + Aus der Werkstatt + + + + +
+ + +
+ + +
+ @endforeach +
+ @endif +
+ +
+ +
+ +
+ Speichern + Abbrechen +
+
+ @endif + + +
+ @forelse ($this->brands as $brand) +
+
+ @if ($brand->image) +
+ +
+ @else +
+ +
+ @endif +
+
+ + {{ $brand->getTranslation('name', $editLocale) }} + + @unless ($brand->is_published) + Entwurf + @endunless +
+

+ {{ $brand->getTranslation('tagline', $editLocale) ?: '–' }} · /marken/{{ $brand->slug }} +

+
+
+
+ + + + +
+
+ @empty +
+ + Keine Marken + Lege die erste Kernmarke mit dem Button oben an. +
+ @endforelse +
+
+
diff --git a/resources/views/livewire/admin/cms/cabinet-info-tablet.blade.php b/resources/views/livewire/admin/cms/cabinet-info-tablet.blade.php index d7d3927a..41e89afa 100644 --- a/resources/views/livewire/admin/cms/cabinet-info-tablet.blade.php +++ b/resources/views/livewire/admin/cms/cabinet-info-tablet.blade.php @@ -40,10 +40,13 @@ @endif -
@foreach ([['label' => 'Montag', 'open' => 'hoursMondayOpen', 'close' => 'hoursMondayClose'], ['label' => 'Dienstag', 'open' => 'hoursTuesdayOpen', 'close' => 'hoursTuesdayClose'], ['label' => 'Mittwoch', 'open' => 'hoursWednesdayOpen', 'close' => 'hoursWednesdayClose'], ['label' => 'Donnerstag', 'open' => 'hoursThursdayOpen', 'close' => 'hoursThursdayClose'], ['label' => 'Freitag', 'open' => 'hoursFridayOpen', 'close' => 'hoursFridayClose'], ['label' => 'Samstag', 'open' => 'hoursSaturdayOpen', 'close' => 'hoursSaturdayClose'], ['label' => 'Sonntag', 'open' => 'hoursSundayOpen', 'close' => 'hoursSundayClose']] as $row) - @php - $isClosedDay = empty($this->{$row['open']}) && empty($this->{$row['close']}); - @endphp -
+ {{-- Geoeffnet/Geschlossen wird clientseitig gerechnet, damit die Anzeige + sofort auf das Leeren per X reagiert. wire:model.live wuerde bei jeder + Aenderung einen Roundtrip ausloesen, der geleerte Felder wieder mit dem + alten Serverwert ueberschreibt. --}} +
{{ $row['label'] }} -
- +
-
- +
- - {{ $isClosedDay ? 'Geschlossen' : 'Geöffnet' }} +
@endforeach diff --git a/resources/views/livewire/admin/cms/content-index.blade.php b/resources/views/livewire/admin/cms/content-index.blade.php index 25bc797e..4d818745 100644 --- a/resources/views/livewire/admin/cms/content-index.blade.php +++ b/resources/views/livewire/admin/cms/content-index.blade.php @@ -1,6 +1,8 @@ fieldLabel($field, $group, $key); + } +} + layout('components.layouts.app'); title('CMS Inhalte'); state([ 'selectedGroup' => null, + 'selectedKey' => null, + 'showPreview' => true, + 'previewVersion' => 0, 'search' => '', 'editingId' => null, 'editingField' => null, @@ -108,12 +124,21 @@ $groups = computed(fn () => CmsContent::query() ->pluck('count', 'group') ->toArray()); +$tree = computed(fn () => app(CmsPageTree::class)->pages()); + +$currentSection = computed(fn () => $this->selectedGroup && $this->selectedKey + ? app(CmsPageTree::class)->section($this->selectedGroup, $this->selectedKey) + : null); + +$previewUrl = computed(fn () => app(CmsPageTree::class)->previewUrl($this->currentSection, $this->previewVersion)); + $flatContents = computed(function () { if (! $this->selectedGroup) { return collect(); } $contents = CmsContent::forGroup($this->selectedGroup) + ->when($this->selectedKey, fn ($q, $key) => $q->where('key', $key)) ->orderBy('order') ->get(); @@ -182,8 +207,40 @@ $selectGroup = function (string $group) { $this->editMediaId = null; $this->editingFieldType = 'text'; $this->selectedGroup = $group; + $this->selectedKey = null; }; +$selectSection = function (string $group, string $key) { + $this->selectGroup($group); + $this->selectedKey = $key; +}; + +// Sektion aus der Registry, die noch nicht in der Datenbank liegt: aus der Lang-Datei anlegen. +$createSection = function (string $group, string $key) { + $themeKey = app(CmsPageTree::class)->themeKey($group, $key); + + if ($themeKey === null) { + Flux::toast(variant: 'danger', heading: 'Keine Vorlage', text: 'Für diese Sektion gibt es keine Vorlage in der Sprachdatei.'); + + return; + } + + $seeder = app(CmsContentSeeder::class); + $seeder->onlySections = [$themeKey]; + $seeder->run(); + + app(CmsContentService::class)->clearCache($group); + + $this->selectSection($group, $key); + $this->previewVersion++; + + Flux::toast(variant: 'success', heading: 'Angelegt', text: 'Die Sektion wurde mit den Texten der Website angelegt.'); +}; + +$togglePreview = fn () => $this->showPreview = ! $this->showPreview; + +$reloadPreview = fn () => $this->previewVersion++; + $startFieldEdit = function (int $contentId, ?string $fieldKey = null) { $content = CmsContent::find($contentId); if (! $content) { @@ -371,6 +428,7 @@ $saveEdit = function () { $this->editValue = ''; $this->editingFieldType = 'text'; $this->editMediaId = null; + $this->previewVersion++; Flux::toast(variant: 'success', heading: 'Gespeichert', text: 'Inhalt wurde erfolgreich aktualisiert.'); }; @@ -435,6 +493,7 @@ $saveJsonModal = function () { $this->editingId = null; $this->editingField = null; $this->jsonItems = []; + $this->previewVersion++; Flux::toast(variant: 'success', heading: 'Gespeichert', text: 'Inhalt wurde erfolgreich aktualisiert.'); }; @@ -457,9 +516,8 @@ $cancelJsonModal = function () { ?> @php - $cmsGroupLabels = [ - 'legal' => 'Rechtliches', - ]; + $section = $this->currentSection; + $pageTitle = $selectedGroup ? ($this->tree[$section['page'] ?? '']['title'] ?? $selectedGroup) : null; @endphp
@@ -470,30 +528,85 @@ $cancelJsonModal = function () {
-
-
- - Seiten / Gruppen -
- @foreach ($this->groups as $group => $count) - - @endforeach -
+
+ {{-- Seitenbaum: Seiten in Menü-Reihenfolge, Sektionen von oben nach unten (config/cms_pages.php) --}} +
+ + @foreach ($this->tree as $pageKey => $page) +
+
+ {{ $page['title'] }} + @if ($page['path']) + {{ $page['path'] }} + @endif +
+ + @if ($pageKey === \App\Services\CmsPageTree::UNLISTED) +
+ {{ count($page['sections']) }} Sektionen stillgelegter Seiten +
+ @foreach ($page['sections'] as $item) + + @endforeach +
+
+ @else +
+ @foreach ($page['sections'] as $index => $item) + @php $isActive = $selectedGroup === $item['group'] && $selectedKey === $item['key']; @endphp + @if ($item['content_id']) + + @else +
+ {{ $index + 1 }} + {{ $item['title'] }} + +
+ @endif + @endforeach +
+ @endif +
+ @endforeach
-
+ {{-- Editor --}} +
@if ($selectedGroup) -
- {{ $cmsGroupLabels[$selectedGroup] ?? $selectedGroup }} +
+
+ {{ $section['title'] ?? ($selectedKey ?? $selectedGroup) }} + @if (! empty($section['description'])) + {{ $section['description'] }} + @endif +
+ @if ($pageTitle && $pageTitle !== ($section['title'] ?? null)) + {{ $pageTitle }} + + @endif + {{ $selectedGroup }}{{ $selectedKey ? '/' . $selectedKey : '' }} +
+
- + @if (! $selectedKey) + + @endif
@foreach (config('flux-cms.locales', ['de' => 'DE', 'en' => 'EN']) as $code => $label) @endforeach
+ @if ($this->previewUrl) + {{ $showPreview ? 'Vorschau aus' : 'Vorschau' }} + @endif
@php $lastSection = null; @endphp
@forelse ($this->flatContents as $row) - @if ($row->section_key !== $lastSection) + @if (! $selectedKey && $row->section_key !== $lastSection) @php $lastSection = $row->section_key; @endphp
{{ $row->section_key }} @@ -522,18 +639,23 @@ $cancelJsonModal = function () { $editKey = $row->field_key !== null ? $row->content_id . ",'" . $row->field_key . "'" : $row->content_id . ',null'; + $fieldLabel = $row->field_key !== null + ? _cmsFieldLabel($row->field_key, $row->section_key ? $selectedGroup : null, $row->section_key) + : ($section['title'] ?? $row->section_key); @endphp
-
+
+ {{ $fieldLabel }} {{ $row->field_key ?? $row->section_key }} @php $typeColors = ['html' => 'amber', 'legal_html' => 'blue', 'image' => 'green', 'json' => 'violet', 'link' => 'rose']; + $typeLabels = ['html' => 'Formatierter Text', 'legal_html' => 'HTML', 'image' => 'Bild', 'json' => 'Liste', 'text' => 'Text']; $badgeColor = $typeColors[$row->type] ?? 'zinc'; @endphp - {{ $row->type }} + {{ $typeLabels[$row->type] ?? $row->type }}
- Seite auswählen - Wähle links eine Seite/Gruppe aus, um deren Inhalte zu bearbeiten. + Sektion auswählen + Links stehen die Seiten der Website mit ihren Abschnitten von oben nach unten. Wähle einen Abschnitt, um seine Texte und Bilder zu bearbeiten.
@endif
+ + {{-- Vorschau: die echte Website im Rahmen, springt zur gewählten Sektion und lädt nach dem Speichern neu --}} + @if ($selectedGroup && $showPreview && $this->previewUrl) +
+ +
+
+ Vorschau · {{ $section['path'] ?? '' }}{{ ! empty($section['anchor']) ? '#' . $section['anchor'] : '' }} +
+
+ + +
+
+ +
+
+ @endif
{{-- JSON-Editor: kein flux:modal — vermeidet ReferenceError fluxModal bei jedem Livewire-Render (z. B. bei legal_html). --}} @@ -664,8 +805,9 @@ $cancelJsonModal = function () { wire:click.stop >
- {{ $jsonEditingKey }} + {{ $section['title'] ?? $selectedGroup }}: {{ $editingField !== null ? _cmsFieldLabel($editingField, $selectedGroup, $selectedKey) : ($section['title'] ?? $jsonEditingKey) }} + {{ $jsonEditingKey }} · {{ $jsonIsStringArray ? 'Einfache Liste' : 'Strukturierte Einträge' }} ({{ count($jsonItems) }} Einträge) — {{ strtoupper($editLocale) }} @@ -707,7 +849,7 @@ $cancelJsonModal = function () {
— Kein Icon — @foreach ($this->availableIcons as $iconName) @@ -724,7 +866,7 @@ $cancelJsonModal = function () {
@elseif ($isImageField)
- +
@if (is_string($fieldValue) && $fieldValue !== '')
@@ -747,18 +889,18 @@ $cancelJsonModal = function () { @elseif ($isRichText)
@elseif ($isNestedJson)
@else + label="{{ _cmsFieldLabel($field, $selectedGroup, $selectedKey) }}" /> @endif @endforeach
diff --git a/resources/views/livewire/admin/cms/dashboard.blade.php b/resources/views/livewire/admin/cms/dashboard.blade.php index 42f08d31..685a6d0d 100644 --- a/resources/views/livewire/admin/cms/dashboard.blade.php +++ b/resources/views/livewire/admin/cms/dashboard.blade.php @@ -1,7 +1,8 @@ [ 'contents' => CmsContent::count(), 'groups' => CmsContent::distinct()->pluck('group')->count(), - 'projects' => CmsProject::count(), - 'projects_published' => CmsProject::published()->count(), + 'references' => CmsReference::count(), + 'references_published' => CmsReference::published()->count(), 'articles' => CmsArticle::count(), 'articles_published' => CmsArticle::published()->count(), + 'brands' => CmsBrand::count(), + 'brands_published' => CmsBrand::published()->count(), 'media' => CmsMedia::count(), ]); @@ -24,7 +27,7 @@ $stats = computed(fn () => [
CMS - Inhalte, Projekte und Medien verwalten. + Inhalte, Referenzen, Marken, Magazin und Medien verwalten.
@@ -40,13 +43,13 @@ $stats = computed(fn () => [ - +
- +
- {{ $this->stats['projects'] }} - Projekte ({{ $this->stats['projects_published'] }} veröffentlicht) + {{ $this->stats['references'] }} + Referenzen ({{ $this->stats['references_published'] }} veröffentlicht)
@@ -64,6 +67,18 @@ $stats = computed(fn () => [
+ + +
+ +
+ {{ $this->stats['brands'] }} + Kernmarken ({{ $this->stats['brands_published'] }} veröffentlicht) +
+
+
+
+
@@ -92,7 +107,7 @@ $stats = computed(fn () => [

  • Inhalte – Texte, Abschnitte und strukturierte Daten der Website (z. B. Startseite, Netzwerk, rechtliche Texte). Inhalte sind in Gruppen organisiert, sodass zusammengehörige Felder gebündelt bearbeitet werden können.
  • -
  • Projekte – Immobilien-Referenzobjekte mit Bildern, Preisen und Beschreibungen. Jedes Projekt kann als Entwurf angelegt und später veröffentlicht werden.
  • +
  • Referenzen – Realisierte Projekte für die Seite /referenzen mit Titelbild, weiteren Bildern und den beteiligten Marken. Nur ausgeführte Aufträge; Entwürfe gehören in die Galerie der Marke.
  • Magazin – Redaktionelle Artikel (z. B. über Dubai-Immobilien, Supply-Chain oder Einrichtung). Artikel unterstützen Kategorien, Autoren und Lesezeiten.
  • Medien – Zentrale Bild- und Dateiverwaltung. Alle Uploads landen hier und können in jedem Modul wiederverwendet werden.
diff --git a/resources/views/livewire/admin/cms/display-version-editor.blade.php b/resources/views/livewire/admin/cms/display-version-editor.blade.php index 6b7b4ba6..79c5bb45 100644 --- a/resources/views/livewire/admin/cms/display-version-editor.blade.php +++ b/resources/views/livewire/admin/cms/display-version-editor.blade.php @@ -190,8 +190,10 @@ @if($mediaType === 'image') - + + @error('mediaDuration') {{ $message }} @enderror @endif @endif diff --git a/resources/views/livewire/admin/cms/media-index.blade.php b/resources/views/livewire/admin/cms/media-index.blade.php index d097a7df..514bc32b 100644 --- a/resources/views/livewire/admin/cms/media-index.blade.php +++ b/resources/views/livewire/admin/cms/media-index.blade.php @@ -4,7 +4,10 @@ use Flux\Flux; use FluxCms\Core\Models\CmsMedia; use FluxCms\Core\Services\MediaConversionService; use Illuminate\Support\Facades\Storage; -use function Livewire\Volt\{layout, title, state, computed, on}; +use Livewire\WithPagination; +use function Livewire\Volt\{layout, title, state, computed, on, updated, uses}; + +uses([WithPagination::class]); layout('components.layouts.app'); title('Medienbibliothek'); @@ -40,6 +43,12 @@ $media = computed( ->paginate(48), ); +updated([ + 'search' => fn () => $this->resetPage(), + 'filterType' => fn () => $this->resetPage(), + 'filterCollection' => fn () => $this->resetPage(), +]); + $collections = computed(fn () => CmsMedia::query()->whereNotNull('collection')->where('collection', '!=', '')->distinct()->pluck('collection')->sort()->values()->toArray()); $profiles = computed(fn () => config('flux-cms.media.profiles', [])); diff --git a/resources/views/livewire/admin/cms/partials/version-editor-b2in.blade.php b/resources/views/livewire/admin/cms/partials/version-editor-b2in.blade.php index fde7dc72..f5347fc7 100644 --- a/resources/views/livewire/admin/cms/partials/version-editor-b2in.blade.php +++ b/resources/views/livewire/admin/cms/partials/version-editor-b2in.blade.php @@ -65,7 +65,7 @@
{{ $item->content['subline'] ?? '' }} @if(($item->content['media_type'] ?? 'image') === 'image') - {{ $item->content['duration_seconds'] ?? 10 }}s + {{ \App\Livewire\Admin\Cms\DisplayVersionEditor::formatDuration($item->content['duration_seconds'] ?? 10) }}s @endif @if($formatStatus = $this->displayMediaFormatStatus($item->content['media_url'] ?? '')) {{ $formatStatus['description'] }} diff --git a/resources/views/livewire/admin/cms/projects-index.blade.php b/resources/views/livewire/admin/cms/projects-index.blade.php index c39c53d9..a94eaa10 100644 --- a/resources/views/livewire/admin/cms/projects-index.blade.php +++ b/resources/views/livewire/admin/cms/projects-index.blade.php @@ -613,7 +613,7 @@ $setActiveTab = function (string $tab): void {
- +
diff --git a/resources/views/livewire/admin/cms/references-index.blade.php b/resources/views/livewire/admin/cms/references-index.blade.php new file mode 100644 index 00000000..1edcc5e1 --- /dev/null +++ b/resources/views/livewire/admin/cms/references-index.blade.php @@ -0,0 +1,387 @@ + '', + 'showForm' => false, + 'editingId' => null, + 'editLocale' => 'de', + 'referenceTitle' => '', + 'description' => '', + 'location' => '', + 'year' => '', + 'image' => '', + 'gallery' => [], + 'brandSlugs' => [], + 'is_published' => true, + 'order' => 0, + 'pageEnabled' => fn () => references_page_enabled(), +]); + +// Seite /referenzen samt Menüpunkt ein- oder ausblenden (Einstellung pages.referenzen_enabled). +updated(['pageEnabled' => function (bool $value) { + Setting::query()->updateOrCreate( + ['group' => 'pages', 'key' => 'referenzen_enabled'], + ['value' => $value ? '1' : '0', 'type' => 'boolean', 'description' => 'Seite /referenzen und Menüpunkt „Referenzen“ anzeigen'], + ); + + Flux::toast( + heading: $value ? 'Referenzen sichtbar' : 'Referenzen ausgeblendet', + text: $value ? 'Die Seite /referenzen und der Menüpunkt sind online.' : 'Die Seite /referenzen und der Menüpunkt sind offline.', + ); +}]); + +on(['media-selected' => function ($mediaId, $url, $field) { + $media = $mediaId ? CmsMedia::find($mediaId) : null; + + if (! $media) { + return; + } + + if ($field === 'reference_image') { + $this->image = $media->filename; + } + + if (str_starts_with($field, 'reference_gallery:')) { + $index = (int) substr($field, strlen('reference_gallery:')); + + if (isset($this->gallery[$index])) { + $this->gallery[$index]['image'] = $media->filename; + } + } +}]); + +$references = computed( + fn () => CmsReference::query() + ->when($this->search, fn ($q, $s) => $q->where('location', 'like', "%{$s}%") + ->orWhereRaw("JSON_UNQUOTE(JSON_EXTRACT(title, '$.de')) LIKE ?", ["%{$s}%"])) + ->ordered() + ->get(), +); + +$brands = computed(fn () => CmsBrand::query()->ordered()->get()); + +$openCreate = function () { + $this->editingId = null; + $this->reset(['referenceTitle', 'description', 'location', 'year', 'image']); + $this->gallery = []; + $this->brandSlugs = []; + $this->is_published = true; + $this->order = (CmsReference::max('order') ?? 0) + 1; + $this->showForm = true; +}; + +$loadLocaleFields = function (CmsReference $reference, string $locale) { + $this->referenceTitle = $reference->getTranslation('title', $locale) ?? ''; + $this->description = $reference->getTranslation('description', $locale) ?? ''; +}; + +$openEdit = function (int $id) { + $reference = CmsReference::find($id); + + if (! $reference) { + return; + } + + $this->editingId = $id; + $this->location = $reference->location ?? ''; + $this->year = $reference->year ?? ''; + $this->image = $reference->image ?? ''; + $this->gallery = CmsReference::normalizeGallery($reference->gallery); + $this->brandSlugs = array_values(array_map('strval', $reference->brand_slugs ?? [])); + $this->is_published = $reference->is_published; + $this->order = $reference->order ?? 0; + + $this->loadLocaleFields($reference, $this->editLocale); + $this->showForm = true; +}; + +$switchLocale = function (string $locale) { + $this->editLocale = $locale; + + if ($this->editingId) { + $reference = CmsReference::find($this->editingId); + + if ($reference) { + $this->loadLocaleFields($reference, $locale); + } + } +}; + +$addGalleryImage = fn () => $this->gallery[] = ['image' => '', 'caption' => '']; + +$removeGalleryImage = function (int $index) { + unset($this->gallery[$index]); + $this->gallery = array_values($this->gallery); +}; + +$moveGalleryImage = function (int $index, int $direction) { + $target = $index + $direction; + + if (! isset($this->gallery[$index], $this->gallery[$target])) { + return; + } + + [$this->gallery[$index], $this->gallery[$target]] = [$this->gallery[$target], $this->gallery[$index]]; +}; + +$save = function () { + $validated = validator([ + 'referenceTitle' => $this->referenceTitle, + 'description' => $this->description, + 'location' => $this->location, + 'year' => $this->year, + 'image' => $this->image, + 'brandSlugs' => $this->brandSlugs, + 'is_published' => $this->is_published, + 'order' => $this->order, + ], [ + 'referenceTitle' => 'required|string|max:255', + 'description' => 'nullable|string|max:4000', + 'location' => 'nullable|string|max:255', + 'year' => 'nullable|string|max:20', + 'image' => 'nullable|string|max:500', + 'brandSlugs' => 'array', + 'brandSlugs.*' => 'string|exists:cms_brands,slug', + 'is_published' => 'boolean', + 'order' => 'integer|min:0', + ], [ + 'referenceTitle.required' => 'Bitte einen Titel angeben.', + 'brandSlugs.*.exists' => 'Eine der gewählten Marken gibt es nicht mehr.', + ])->validate(); + + $reference = $this->editingId + ? CmsReference::findOrFail($this->editingId) + : CmsReference::query()->make(); + + $reference->setTranslation('title', $this->editLocale, trim($validated['referenceTitle'])); + $reference->setTranslation('description', $this->editLocale, trim((string) ($validated['description'] ?? ''))); + $reference->location = trim((string) ($validated['location'] ?? '')) ?: null; + $reference->year = trim((string) ($validated['year'] ?? '')) ?: null; + $reference->image = trim((string) ($validated['image'] ?? '')) ?: null; + $reference->gallery = CmsReference::normalizeGallery($this->gallery); + $reference->brand_slugs = array_values(array_unique($validated['brandSlugs'])); + $reference->is_published = $validated['is_published']; + $reference->order = $validated['order']; + $reference->save(); + + $this->showForm = false; + $this->editingId = null; + + Flux::toast(variant: 'success', heading: 'Gespeichert', text: 'Referenz wurde erfolgreich gespeichert.'); +}; + +$togglePublished = function (int $id) { + $reference = CmsReference::findOrFail($id); + $reference->update(['is_published' => ! $reference->is_published]); + + Flux::toast(heading: 'Status geändert', text: $reference->is_published ? 'Veröffentlicht' : 'Entwurf'); +}; + +$deleteReference = function (int $id) { + CmsReference::findOrFail($id)->delete(); + + Flux::toast(variant: 'success', heading: 'Gelöscht', text: 'Referenz wurde entfernt.'); +}; + +$cancelForm = function () { + $this->showForm = false; + $this->editingId = null; +}; + +?> + +
+
+
+ Referenzen + Realisierte Projekte für die Seite /referenzen. Nur ausgeführte Aufträge – Entwürfe und Visualisierungen gehören in die Galerie der jeweiligen Marke. +
+
+ @foreach (config('flux-cms.locales', ['de' => 'DE', 'en' => 'EN']) as $code => $label) + {{ strtoupper($code) }} + @endforeach + Neue Referenz +
+
+ + + + + +
+ +
+ + @if ($showForm) + +
+ {{ $editingId ? 'Referenz bearbeiten' : 'Neue Referenz' }} +
+ @foreach (config('flux-cms.locales', ['de' => 'DE', 'en' => 'EN']) as $code => $label) + {{ strtoupper($code) }} + @endforeach +
+
+ +
+
+ + @error('referenceTitle') {{ $message }} @enderror +
+ + +
+ +
+ +
+ + {{-- Beteiligte Marken --}} +
+ Beteiligte Marken + Jede gewählte Marke wird unter der Referenz genannt und auf ihre Markenseite verlinkt. +
+ @foreach ($this->brands as $brand) + + @endforeach +
+ @error('brandSlugs.*') {{ $message }} @enderror +
+ + {{-- Titelbild --}} +
+ +
+ @if ($image) +
+ +
+ @endif +
+ + +
+
+
+ + {{-- Weitere Bilder --}} +
+
+ Weitere Bilder + Bild hinzufügen +
+ + @if (empty($gallery)) +

Noch keine weiteren Bilder.

+ @else +
+ @foreach ($gallery as $i => $item) +
+ @if (!empty($item['image'])) +
+ +
+ @endif + + + +
+ +
+ + + +
+
+ + +
+ @endforeach +
+ @endif +
+ +
+ +
+ +
+ Speichern + Abbrechen +
+
+ @endif + + +
+ @forelse ($this->references as $reference) +
+
+ @if ($reference->image) +
+ +
+ @else +
+ +
+ @endif +
+
+ + {{ $reference->getTranslation('title', $editLocale) ?: $reference->getTranslation('title', 'de') }} + + @foreach ($reference->brand_slugs ?? [] as $slug) + {{ $slug }} + @endforeach + @unless ($reference->is_published) + Entwurf + @endunless +
+

+ {{ $reference->location ?: '–' }} · {{ $reference->year ?: '–' }} · {{ count(CmsReference::normalizeGallery($reference->gallery)) + ($reference->image ? 1 : 0) }} Bilder +

+
+
+
+ + + +
+
+ @empty +
+ + Keine Referenzen + Solange hier nichts steht, zeigt /referenzen die als „Realisiertes Projekt“ markierten Bilder aus den Markengalerien. +
+ @endforelse +
+
+
diff --git a/resources/views/livewire/admin/hubs/manage.blade.php b/resources/views/livewire/admin/hubs/manage.blade.php index 25aa71b5..62ec7ea9 100644 --- a/resources/views/livewire/admin/hubs/manage.blade.php +++ b/resources/views/livewire/admin/hubs/manage.blade.php @@ -1,6 +1,9 @@ null, @@ -23,6 +26,8 @@ state([ 'csvFile' => null, ]); +updated(['zipSearch' => fn () => $this->resetPage()]); + mount(function ($hubId = null) { if ($hubId) { $hub = \App\Models\Hub::findOrFail($hubId); diff --git a/resources/views/livewire/web/components/sections/about-hero.blade.php b/resources/views/livewire/web/components/sections/about-hero.blade.php index 05cecd8f..f6380e5d 100644 --- a/resources/views/livewire/web/components/sections/about-hero.blade.php +++ b/resources/views/livewire/web/components/sections/about-hero.blade.php @@ -1,7 +1,8 @@ -
-
+
+
+

{!! $content['title'] !!}

@@ -20,7 +21,7 @@
-
+
{{ $content['image_alt'] }} diff --git a/resources/views/livewire/web/components/sections/audience-switch.blade.php b/resources/views/livewire/web/components/sections/audience-switch.blade.php new file mode 100644 index 00000000..d89f5dfb --- /dev/null +++ b/resources/views/livewire/web/components/sections/audience-switch.blade.php @@ -0,0 +1,51 @@ +@php + if (!function_exists('renderHeroIcon')) { + function renderHeroIcon($iconName, $style = 'outline', $color = 'text-secondary') + { + $iconPath = public_path("heroicons/optimized/24/{$style}/{$iconName}.svg"); + $fallbackPath = public_path('heroicons/optimized/24/outline/sparkles.svg'); + + if (file_exists($iconPath)) { + return str_replace(' +
+
+

{!! $content['title'] ?? '' !!}

+ @if (!empty($content['subtitle'])) +

{{ $content['subtitle'] }}

+ @endif +
+ +
+ @foreach ($content['cards'] ?? [] as $index => $card) +
+
+ {!! renderHeroIcon($card['icon'] ?? 'home', 'outline', 'text-secondary-foreground') !!} +
+ +

{{ $card['title'] ?? '' }}

+

{!! $card['description'] ?? '' !!}

+ + @if (!empty($card['button_text'])) +
+ + {{ $card['button_text'] }} + +
+ @endif +
+ @endforeach +
+
+
diff --git a/resources/views/livewire/web/components/sections/brand-detail.blade.php b/resources/views/livewire/web/components/sections/brand-detail.blade.php new file mode 100644 index 00000000..4d085207 --- /dev/null +++ b/resources/views/livewire/web/components/sections/brand-detail.blade.php @@ -0,0 +1,363 @@ +{{-- Detailseiten-Vorlage laut umsetzung-inhalte.md §5: + Header (Logo + Claim + Stimmungsbild) → Einleitung → Leistungen → Galerie → CTA --}} +
+ {{-- 1. Header --}} +
+
+ + {{ __('ui.all_brands') }} + + +
+
+ {{-- Liegt ein Logo vor, steht es anstelle des Schriftzugs. Es sitzt im

, + damit die Ueberschrift erhalten bleibt – den Text liefert das alt-Attribut. + Feste Box statt fester Hoehe: die Logos haben sehr unterschiedliche + Seitenverhaeltnisse (Februe breit, Rotpunkt fast quadratisch). --}} + @if (!empty($brand['logo'])) +

+ {{ $brand['name'] }} +

+ @else +

{{ $brand['name'] }}

+ @endif + +

{{ $brand['tagline'] }}

+ + @if (!empty($brand['showroom'])) +

+ + {{ $brand['showroom'] }} +

+ @endif +
+ +
+ @if (!empty($brand['image'])) + {{ $brand['name'] }} + @else +
+ {{ $brand['name'] }} +
+ @endif +
+
+
+
+ + {{-- 2. Einleitung --}} + @if (!empty($brand['description'])) +
+
+
+ {!! $brand['description'] !!} +
+
+
+ @endif + + {{-- 2b. Abschnitte der Markenseite. Die als Vertiefung gelieferten Blöcke sind aufklappbar, + damit die Seite schnell erfassbar bleibt, ohne dass Inhalt verloren geht. --}} + @if (!empty($brand['sections'])) +
+
+ @foreach ($brand['sections'] as $index => $section) + + @endforeach +
+
+ @endif + + {{-- 3. Leistungen --}} + @if (!empty($brand['services'])) +
+
+

{{ __('ui.brand_services') }}

+ +
+ @foreach ($brand['services'] as $index => $service) +
+

{{ $service['title'] ?? '' }}

+

{{ $service['description'] ?? '' }}

+
+ @endforeach +
+
+
+ @endif + + {{-- 4. Galerie. Realisierte Projekte, Einblicke in die Werkstatt und Visualisierungen stehen in + einem Raster, unterschieden nur durch das Badge – der Rubrikwechsel ist ausgesetzt + (Abstimmung 22.09., Nachtrag 17). Reihenfolge: Projekte, Werkstatt, Visualisierungen. + Überschrift und Zeile darunter richten sich nach dem, was die Galerie enthält (Nachtrag 19): + nur Visualisierungen → „Inspirationen und Entwürfe“, nur Projekte → „Referenzen“, Projekte + und Werkstatt → „Referenzen und Einblicke“, mit Visualisierungen → „Projekte und Entwürfe“. --}} + @php + $galleryItems = array_merge($gallery['projects'] ?? [], $gallery['company'] ?? [], $gallery['inspirations'] ?? []); + + $galleryHasReal = ! empty($gallery['projects']) || ! empty($gallery['company']); + $galleryHasDrafts = ! empty($gallery['inspirations']); + $galleryVariant = match (true) { + ! $galleryHasReal => 'inspirations', + $galleryHasDrafts => 'mixed', + ! empty($gallery['company']) => 'projects_company', + default => 'projects', + }; + + $galleryLightbox = collect($galleryItems)->map(fn (array $item) => [ + 'src' => theme_image_url($item['image']), + 'caption' => $item['caption'] ?? '', + 'badge' => \App\Models\CmsBrand::galleryBadge($item['category']), + ])->values()->all(); + @endphp + + @if ($galleryItems) +
+
+
+

{{ __('ui.brand_gallery_title_'.$galleryVariant) }}

+

{{ __('ui.brand_gallery_intro_'.$galleryVariant) }}

+
+ +
+ @foreach ($galleryItems as $index => $item) +
+ + @if (!empty($item['caption'])) +
{{ $item['caption'] }}
+ @endif +
+ @endforeach +
+
+ + {{-- Lightbox: ins body geteleportet, damit keine Eltern-Constraints stören --}} + +
+ @endif + + {{-- 5. Abschluss. Der Block schliesst die Seite ab und traegt den Claim aus der Zulieferung. + Der durchgehende Verlauf steckt in `.cta-band` (shared-styles.css) – als Utility-Klassen + waere er nicht ueber alle Themes hinweg zu halten. --}} +
+
+ {{-- Haarlinie als Auftakt, laeuft zu beiden Seiten aus. --}} + + +

+ {{ $brand['cta_title'] ?: __('ui.brand_cta_title', ['name' => $brand['name']]) }} +

+

+ {{ $brand['cta_text'] ?: __('ui.brand_cta_text') }} +

+ +
+ {{-- Oeffnet das Widget mit dieser Marke als Anliegen. --}} + + {{ __('ui.request_appointment') }} + + + + @if (!empty($brand['website_url'])) + + {{ __('ui.brand_website') }} + + + @endif +
+ + @if (!empty($brand['showroom'])) +

+ + {{ $brand['showroom'] }} +

+ @endif +
+
+ + {{-- Weitere Marken --}} + @if (!empty($otherBrands)) +
+
+

{{ __('ui.other_brands') }}

+ + {{-- Drei weitere Marken: nebeneinander ab lg, darunter zweispaltig. --}} + +
+
+ @endif +
diff --git a/resources/views/livewire/web/components/sections/brand-overview.blade.php b/resources/views/livewire/web/components/sections/brand-overview.blade.php new file mode 100644 index 00000000..79c8b17c --- /dev/null +++ b/resources/views/livewire/web/components/sections/brand-overview.blade.php @@ -0,0 +1,62 @@ +{{-- Übersichtsseite /marken: je Marke Logo, Bild, Claim, Text, drei Merkmale und der Weg + zur Detailseite. Jede Marke steht in einem eigenen Rahmen, damit klar ist, was zusammengehört. + Abwechselnde Bildseite, damit die Liste nicht monoton wird. --}} +
+
+ @foreach ($brands as $index => $brand) +
+
+
+ @if (!empty($brand['image'])) + {{ $brand['name'] }} + @else + {{-- Platzhalter, solange die Bildmotive fehlen (offene Zulieferung). --}} +
+ {{ $brand['name'] }} +
+ @endif +
+ +
+ {{-- Feste Box statt fester Hoehe: die Markenlogos haben sehr unterschiedliche + Seitenverhaeltnisse und wirken sonst ungleich gross. Die optische Feinabstimmung + steckt in den Zeichenflaechen der Dateien, nicht hier – siehe BrandLogoSeeder. --}} + @if (!empty($brand['logo'])) + {{ $brand['name'] }} + @endif + +

{{ $brand['name'] }}

+

{{ $brand['tagline'] }}

+ + @foreach (preg_split('/\R{2,}/', trim((string) ($brand['summary'] ?: $brand['teaser']))) as $i => $paragraph) +

{!! nl2br(e($paragraph)) !!}

+ @endforeach + + @if (!empty($brand['highlights'])) +
    + @foreach ($brand['highlights'] as $i => $highlight) +
  • + + {{ is_array($highlight) ? ($highlight['title'] ?? '') : $highlight }} +
  • + @endforeach +
+ @endif + + @if (!empty($brand['has_detail_page'])) + + {{ __('ui.more_about', ['name' => $brand['name']]) }} + + @endif +
+
+
+ @endforeach +
+
diff --git a/resources/views/livewire/web/components/sections/c-t-a-section.blade.php b/resources/views/livewire/web/components/sections/c-t-a-section.blade.php index 4e661196..c1ad03c0 100644 --- a/resources/views/livewire/web/components/sections/c-t-a-section.blade.php +++ b/resources/views/livewire/web/components/sections/c-t-a-section.blade.php @@ -1,4 +1,4 @@ -
+

@@ -9,13 +9,19 @@ {{ $content['subtitle'] }}

+ {{-- Weisser Button wie auf den Markenseiten: der Block liegt standardmaessig auf dem + Abschlussband (`cta-band`), dort ginge ein Button im Hauptton unter. --}}

diff --git a/resources/views/livewire/web/components/sections/core-brands.blade.php b/resources/views/livewire/web/components/sections/core-brands.blade.php new file mode 100644 index 00000000..675261ee --- /dev/null +++ b/resources/views/livewire/web/components/sections/core-brands.blade.php @@ -0,0 +1,57 @@ +
+
+
+

{!! $content['title'] ?? '' !!}

+ @if (!empty($content['subtitle'])) +

{{ $content['subtitle'] }}

+ @endif +
+ + {{-- Vier Kernmarken als 2×2-Raster; vier nebeneinander wäre zu schmal (Abstimmung 15.09.). --}} +
+ @foreach ($brands as $brand) +
+ @if (!empty($brand['image'])) + {{ $brand['name'] }} + @else + {{-- Platzhalter, solange die Bildmotive fehlen (offene Zulieferung). --}} +
+ {{ $brand['name'] }} +
+ @endif + +
+ {{-- Feste Box statt fester Hoehe: die Markenlogos haben sehr unterschiedliche + Seitenverhaeltnisse und wirken sonst ungleich gross. Die optische Feinabstimmung + steckt in den Zeichenflaechen der Dateien, nicht hier – siehe BrandLogoSeeder. --}} + @if (!empty($brand['logo'])) + {{ $brand['name'] }} + @endif + +

{{ $brand['name'] }}

+

{{ $brand['tagline'] }}

+

{!! $brand['teaser'] !!}

+ + @if (!empty($brand['has_detail_page'])) + + {{ __('ui.more_about', ['name' => $brand['name']]) }} + + + @endif +
+
+ @endforeach +
+ + {{-- Die Startseite bleibt ein Teaser – die vollstaendige Darstellung steht auf /marken. --}} + +
+
diff --git a/resources/views/livewire/web/components/sections/display-feed.blade.php b/resources/views/livewire/web/components/sections/display-feed.blade.php new file mode 100644 index 00000000..94345942 --- /dev/null +++ b/resources/views/livewire/web/components/sections/display-feed.blade.php @@ -0,0 +1,87 @@ +{{-- Livewire braucht ein Wurzelelement. Solange kein Display veröffentlicht ist, bleibt es leer – + lieber gar keine Sektion als ein Rahmen mit ewigem Ladebalken. + Seit 07.10.2026 in einer weißen Box; „Größer ansehen“ öffnet das Display in einem Overlay über + die volle Fensterhöhe, dort lässt es sich (wo der Browser es kann) in den Vollbildmodus schalten. + Das große Display lädt erst beim Öffnen, damit nicht zwei Player parallel laufen. --}} +
+ @if ($displayId !== null) +
+
+
+
+

{!! $content['title'] ?? '' !!}

+

{{ $content['text'] ?? '' }}

+ + @if (!empty($content['note'])) +

{{ $content['note'] }}

+ @endif + + @if ($showLink && !empty($content['link_text'])) + + {{ $content['link_text'] }} + + @endif +
+ + {{-- 9:16 wie das physische Display im Showroom --}} +
+
+ +
+ +
+ + {{-- Overlay: Display über die volle Fensterhöhe im Format 9:16 --}} + +
+
+
+@endif +
diff --git a/resources/views/livewire/web/components/sections/f-a-q.blade.php b/resources/views/livewire/web/components/sections/f-a-q.blade.php index 665b18ad..02a29bb9 100644 --- a/resources/views/livewire/web/components/sections/f-a-q.blade.php +++ b/resources/views/livewire/web/components/sections/f-a-q.blade.php @@ -1,6 +1,6 @@ @php($faqCounter = 0)
-
+
{{-- Section Title --}}
@@ -16,108 +16,68 @@ {{-- FAQ Container --}}
- {{-- Allgemeine Fragen (ungrouped) --}} - @if(!empty($content['questions'])) -
- @foreach($content['questions'] as $faq) - @php($index = $faqCounter++) -
-
- -
-
-
-

- {{ $faq['answer'] }} -

-
-
-
- @endforeach -
- @endif - - {{-- Gruppierte Sektionen --}} - @if(!empty($content['sections'])) - @foreach($content['sections'] as $section) -
- {{-- Sektions-Header --}} + {{-- Allgemeine Fragen zuerst, dann je Bereich Überschrift und Fragen (FAQ::groups) --}} + @foreach($groups as $group) +
+ @if($group['title'] !== null)
- @svg('heroicon-o-' . ($section['icon'] ?? 'question-mark-circle'), 'w-5 h-5') + @svg('heroicon-o-' . $group['icon'], 'w-5 h-5')
-

{{ $section['title'] }}

+

{{ $group['title'] }}

+ @endif -
- @foreach($section['questions'] as $faq) - @php($index = $faqCounter++) -
-
- -
-
-
-

- {{ $faq['answer'] }} -

+
+ @foreach($group['questions'] as $faq) + @php($index = $faqCounter++) +
+
+ +
+ {{-- grid-template-rows 0fr → 1fr animiert die tatsaechliche Hoehe. Der + zugeklappte Zustand steht auch statisch im class-Attribut, damit vor + dem Start von Alpine nichts aufgeklappt aufblitzt. --}} +
+
+
+
+

+ {{ $faq['answer'] }} +

+
-
-
- @endforeach -
+
+ +
+ @endforeach
- @endforeach - @endif +
+ @endforeach - @if(empty($content['questions']) && empty($content['sections'])) + @if($groups === [])

Keine FAQ-Inhalte verfügbar.

diff --git a/resources/views/livewire/web/components/sections/founder-bar.blade.php b/resources/views/livewire/web/components/sections/founder-bar.blade.php index 123ff86a..aa3884fc 100644 --- a/resources/views/livewire/web/components/sections/founder-bar.blade.php +++ b/resources/views/livewire/web/components/sections/founder-bar.blade.php @@ -1,4 +1,4 @@ -
+
@if(isset($content['image'])) diff --git a/resources/views/livewire/web/components/sections/hero-slider.blade.php b/resources/views/livewire/web/components/sections/hero-slider.blade.php index 20656411..8cb6f486 100644 --- a/resources/views/livewire/web/components/sections/hero-slider.blade.php +++ b/resources/views/livewire/web/components/sections/hero-slider.blade.php @@ -1,5 +1,6 @@
+ @if (filled($content['title'] ?? null))
@@ -68,6 +69,7 @@ @endif
+ @endif
+ {{-- Gilt für alle Seiten: das Terminanfrage-Widget im Layout nutzt x-cloak, die einzelnen + Seiten bringen die Regel bisher nur teilweise selbst mit. --}} + + @stack('styles') - + {{-- GTM noscript (nur bei GTM-Nutzung) --}} - - - - {{-- TopBar (Backup: Sprachwechsel & Social Icons – folgt später) --}} - {{-- --}} + {{-- Ankündigungsleiste – global per B2IN_ANNOUNCEMENT_BAR, je Seite mit @section('announcement_bar', 'off') abschaltbar --}} + @unless ($hideAnnouncementBar) + + @endunless @yield('content') + {{-- Terminanfrage: schwebend unten rechts, auf allen Seiten --}} + + {{-- Cookie Consent Manager (vor Livewire-Scripts) --}} diff --git a/resources/views/web/magazin-detail.blade.php b/resources/views/web/magazin-detail.blade.php index a61f7314..149b5a85 100644 --- a/resources/views/web/magazin-detail.blade.php +++ b/resources/views/web/magazin-detail.blade.php @@ -1,13 +1,14 @@ @extends('web.layouts.web-master') @section('title', 'Magazin Artikel - B2in') +@section('meta_description', 'Beiträge aus dem B2in-Magazin – Einblicke zu Einrichtung, Marken und internationalen Immobilien.') @section('content')
- +
diff --git a/resources/views/web/magazin.blade.php b/resources/views/web/magazin.blade.php index f9571b38..4c550241 100644 --- a/resources/views/web/magazin.blade.php +++ b/resources/views/web/magazin.blade.php @@ -1,14 +1,24 @@ @extends('web.layouts.web-master') -@section('title', 'B2in Magazin - Insights & Trends') -@section('meta_description', 'Insights rund um Immobilien-Investments in Dubai, Einrichtungstrends & Supply-Chain-Strategien im B2in Magazin.') +@php + // Zwei getrennte Listen: /magazin (Interior) und /immobilien/magazin (Immobilien). + $world = $world ?? 'interior'; +@endphp + +@if ($world === 'immobilien') + @section('title', 'Magazin – Immobilien & Investments in Dubai | B2in') + @section('meta_description', 'Hintergründe zu Immobilien-Investments in Dubai: Kaufprozess, Escrow-System, Stadtteile und die Rolle der Einrichtung für die Rendite.') +@else + @section('title', 'Magazin – Einrichten, Planen, Wohnen | B2in Interior') + @section('meta_description', 'Beiträge zu Maßanfertigung, Küchenplanung und regionalem Möbelhandel.') +@endif @section('content')
- +
diff --git a/resources/views/web/marken-show.blade.php b/resources/views/web/marken-show.blade.php new file mode 100644 index 00000000..d8cd7b83 --- /dev/null +++ b/resources/views/web/marken-show.blade.php @@ -0,0 +1,24 @@ +@extends('web.layouts.web-master') + +@section('title', $brandTitle) +@section('meta_description', $brandDescription) + +@section('content') +
+ + +
+ +
+ + +
+@endsection + +@push('styles') + +@endpush diff --git a/resources/views/web/marken.blade.php b/resources/views/web/marken.blade.php new file mode 100644 index 00000000..280c7839 --- /dev/null +++ b/resources/views/web/marken.blade.php @@ -0,0 +1,23 @@ +@extends('web.layouts.web-master') + +@section('title', 'Unsere Marken – CABINET, Rotpunkt Küchen, Febrü & Otterpohl | B2in Interior') +@section('meta_description', 'Ausgewählte Hersteller statt beliebiger Kataloge: maßgefertigte Einbauschränke, Premium-Küchen und Möbel fürs Arbeiten – mit persönlicher Beratung in der Region.') + +@section('content') +
+ + +
+ + + + + + + + +
+ + +
+@endsection diff --git a/resources/views/web/privacy.blade.php b/resources/views/web/privacy.blade.php index 59290a9d..fe7aa55b 100644 --- a/resources/views/web/privacy.blade.php +++ b/resources/views/web/privacy.blade.php @@ -5,6 +5,7 @@ @endphp @section('title', $legal['meta_title'] . ' - ' . ($domainName ?? config('app.name'))) +@section('meta_description', 'Datenschutzerklärung von B2in Interior – wie wir mit Ihren Daten umgehen.') @section('content')
diff --git a/resources/views/web/referenzen.blade.php b/resources/views/web/referenzen.blade.php new file mode 100644 index 00000000..a31ced29 --- /dev/null +++ b/resources/views/web/referenzen.blade.php @@ -0,0 +1,19 @@ +@extends('web.layouts.web-master') + +@section('title', 'Referenzen – realisierte Projekte & Aktuelles aus dem Showroom | B2in Interior') +@section('meta_description', 'Ausgeführte Projekte aus unseren Aufträgen und der aktuelle Stand aus dem Showroom – klar getrennt von Entwürfen und Visualisierungen.') + +@section('content') +
+ + +
+ + + + +
+ + +
+@endsection diff --git a/resources/views/web/terms.blade.php b/resources/views/web/terms.blade.php index 977959ea..c7c35dfc 100644 --- a/resources/views/web/terms.blade.php +++ b/resources/views/web/terms.blade.php @@ -5,6 +5,7 @@ @endphp @section('title', $legal['meta_title'] . ' - ' . ($domainName ?? config('app.name'))) +@section('meta_description', 'Allgemeine Geschäftsbedingungen von B2in Interior.') @section('content')
diff --git a/routes/admin.php b/routes/admin.php index 7984a4d4..dcf639d8 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -91,6 +91,8 @@ Route::middleware(['auth', 'partner.setup'])->group(function () { Volt::route('admin/flux-cms/projects', 'admin.cms.projects-index')->name('cms.projects.index'); Volt::route('admin/flux-cms/media', 'admin.cms.media-index')->name('cms.media.index'); Volt::route('admin/flux-cms/articles', 'admin.cms.articles-index')->name('cms.articles.index'); + Volt::route('admin/flux-cms/brands', 'admin.cms.brands-index')->name('cms.brands.index'); + Volt::route('admin/flux-cms/references', 'admin.cms.references-index')->name('cms.references.index'); // Documentation Volt::route('admin/documentation', 'admin.documentation')->name('admin.documentation'); diff --git a/routes/console.php b/routes/console.php index db81cf62..b79e4ae4 100644 --- a/routes/console.php +++ b/routes/console.php @@ -1,5 +1,8 @@ comment(Inspiring::quote()); })->purpose('Display an inspiring quote'); -Schedule::command('cabinet:reset-overrides')->dailyAt('00:00'); +// Betriebs-Alert, wenn ein geplanter Task fehlschlägt – an JEDEN Task hängen +$alertOnFailure = fn (string $task) => function (Event $event) use ($task): void { + OperationalAlert::send("Geplanter Task fehlgeschlagen: {$task}", ['exit_code' => $event->exitCode]); +}; + +Schedule::command('cabinet:reset-overrides') + ->dailyAt('00:00') + ->withoutOverlapping(10) + ->onFailure($alertOnFailure('cabinet:reset-overrides')); + +// Herzschlag: fällt der Scheduler aus (Cron weg, Server hängt), greift kein +// onFailure mehr – dann meldet /health den fehlenden Herzschlag +Schedule::command(MonitoringHeartbeat::class) + ->everyMinute() + ->withoutOverlapping(2) + ->onFailure($alertOnFailure('monitoring:heartbeat')); + +// Fehlgeschlagene Jobs nach 30 Tagen entfernen +Schedule::command('queue:prune-failed', ['--hours=720']) + ->dailyAt('03:55') + ->withoutOverlapping(30) + ->onFailure($alertOnFailure('queue:prune-failed')); diff --git a/routes/domains.php b/routes/domains.php index 5759dde8..cceba969 100644 --- a/routes/domains.php +++ b/routes/domains.php @@ -34,8 +34,10 @@ Route::domain($domainPortal)->group(function () { // Admin-Routes laden require __DIR__.'/admin.php'; - // Test-Route laden - require __DIR__.'/test.php'; + // Test-Routen (E-Mail-Vorschauen, Login-Tests) nur lokal – sie zeigen echte Daten ohne Anmeldung. + if (app()->environment('local')) { + require __DIR__.'/test.php'; + } // Display-API-Route (öffentlich zugänglich) Route::get('/api/display/config', [\App\Http\Controllers\Api\DisplayConfigController::class, 'index']); diff --git a/routes/web.php b/routes/web.php index 99b4f765..1496a404 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,7 +1,6 @@ name('home'); -// Willkommensseite -Route::get('/welcome', function () { - return view('web.welcome'); -})->name('welcome'); - // Weitere gemeinsame Webseiten hier... Route::get('/about', function () { return view('web.about'); @@ -64,6 +57,24 @@ Route::get('/immobilien', function (Request $request) use ($isAziziSourcePreview return view('web.dev.immobilien-azizi', compact('content', 'dev', 'devQuery', 'overviewRouteName', 'detailRouteName')); })->name('immobilien'); +// Immobilien-Welt: eigenes Magazin, eigene Über-uns-Seite und eigene FAQ. Muessen vor der +// Projekt-Detailroute stehen, sonst wuerde diese die Pfade als Projekt-Slug lesen. +Route::get('/immobilien/magazin', function () { + return view('web.magazin', ['world' => 'immobilien']); +})->name('immobilien.magazin'); + +Route::get('/immobilien/ueber-b2in', function () { + return view('web.immobilien-about'); +})->name('immobilien.about'); + +Route::get('/immobilien/faq', function () { + return view('web.faq', ['section' => 'faq_immobilien']); +})->name('immobilien.faq'); + +Route::get('/immobilien/kontakt', function () { + return view('web.contact', ['world' => 'immobilien']); +})->name('immobilien.contact'); + Route::get('/immobilien/{slug}', function (Request $request, string $slug) use ($isAziziSourcePreview, $loadAziziContent) { $content = $loadAziziContent(); $dev = $isAziziSourcePreview($request); @@ -75,49 +86,81 @@ Route::get('/immobilien/{slug}', function (Request $request, string $slug) use ( return view('web.dev.immobilien-azizi-show', compact('content', 'project', 'dev', 'devQuery', 'overviewRouteName')); })->name('immobilien.show'); +// Die Netzwerk-Seite geht im Abschnitt "Mehr als Marken: unser Netzwerk" auf /marken auf. +// Alte Links und Rankings laufen per 301 dorthin; die View liegt seit 06.10.2026 in +// dev/2026-08-28/archiv-2026-10-06/. Route::get('/netzwerk', function () { - return view('web.netzwerk'); + return redirect('/marken', 301); })->name('netzwerk'); Route::get('/interior', function () { - return redirect('/netzwerk', 301); + return redirect('/marken', 301); })->name('interior'); -/*Route::get('/immobilien/{slug}', function (string $slug) { - $cmsProject = CmsProject::query()->published()->where('slug', $slug)->first(); - if ($cmsProject) { - $project = $cmsProject->toFrontendArray(); - - return view('web.immobilien-show', compact('project')); - } - - $theme = config('app.theme', 'b2in'); - $immobilienProjects = cms_theme_section('immobilien_projects', $theme); - $project = is_array($immobilienProjects) ? data_get($immobilienProjects, "projects.{$slug}") : null; - abort_unless($project, 404); - - return view('web.immobilien-show', compact('project')); - -})->name('immobilien.show'); - */ Route::get('/partner', function () { - return redirect('/netzwerk', 301); + return redirect('/marken', 301); })->name('partner'); Route::get('/magazin', function () { return view('web.magazin'); })->name('magazin'); -Route::get('/magazin/{id}', function ($id) { - return view('web.magazin-detail', compact('id')); +// Alte numerische Magazin-URLs (/magazin/1 … /magazin/5) dauerhaft auf den Slug umleiten. +// Muss vor der Slug-Route stehen, sonst wuerde diese die Ziffern selbst schlucken. +Route::get('/magazin/{id}', function (string $id) { + $slug = \App\Models\CmsArticle::slugForLegacyId($id); + abort_unless($slug !== null, 404); + + return redirect()->route('magazin.detail', ['slug' => $slug], 301); +})->whereNumber('id')->name('magazin.detail.legacy'); + +Route::get('/magazin/{slug}', function (string $slug) { + // Die Detailseite rendert in der Welt ihres Beitrags (Dubai-Themen bleiben blau). Die Welt + // muss vor dem Rendern feststehen, weil Kopf- und Fusszeile sie in mount() festhalten. + $article = \App\Models\CmsArticle::forFrontend()[$slug] ?? null; + abort_unless($article !== null, 404); + b2in_world_set($article['world'] ?? 'interior'); + + return view('web.magazin-detail', compact('slug')); })->name('magazin.detail'); +// Kernmarken: Uebersichtsseite und Detailseite je Marke. +Route::get('/marken', function () { + return view('web.marken'); +})->name('marken'); + +Route::get('/marken/{slug}', function (string $slug) { + $brands = \App\Models\CmsBrand::forFrontend(); + abort_unless(isset($brands[$slug]), 404); + + $brand = $brands[$slug]; + $brandTitle = $brand['name'].' – '.$brand['tagline'].' | B2in Interior'; + $brandDescription = trim(strip_tags((string) $brand['teaser'])); + + return view('web.marken-show', compact('slug', 'brandTitle', 'brandDescription')); +})->name('marken.show'); + +// Referenzen: realisierte Projekte aus den Markengalerien plus der Showroom-Feed. +// Lässt sich im CMS-Modul „Referenzen“ ausblenden – dann 404 und kein Menüpunkt. +Route::get('/referenzen', function () { + abort_unless(references_page_enabled(), 404); + + return view('web.referenzen'); +})->name('referenzen'); + +// Schreibgeschuetzte Einbettung eines Displays (nur veroeffentlichte Playlists, kein Token). +Route::get('/embed/display/{display}', [\App\Http\Controllers\DisplayEmbedController::class, 'show']) + ->name('display.embed'); + Route::get('/contact', function () { return view('web.contact'); })->name('contact'); +// Verwaiste Seiten: ihre Content-Sektionen (hero_image, content_section_left/right, portfolio) +// existieren in keiner Lang-Datei mehr und die Seiten liefern seitdem 500. Sie werden wie die +// anderen stillgelegten Seiten dauerhaft umgeleitet; die Views liegen in dev/2026-08-28/archiv-2026-10-06/. Route::get('/service', function () { - return view('web.service'); + return redirect('/marken', 301); })->name('service'); Route::get('/portfolio', function () { - return view('web.portfolio'); + return redirect('/immobilien', 301); })->name('portfolio'); Route::get('/faq', function () { @@ -143,10 +186,9 @@ Route::get('/theme-demo', function () { return view('web.theme-demo'); })->name('theme-demo'); -// Dev: Sitemap & Archiv-Versionen +// Dev: Sitemap und Quellvorschau der Immobilien-Seite Route::prefix('dev')->group(function () use ($loadAziziContent) { Route::get('/sitemap', fn () => view('web.dev.sitemap'))->name('dev.sitemap'); - Route::get('/immobilien-v1', fn () => view('web.dev.immobilien-v1'))->name('dev.immobilien-v1'); Route::get('/immobilien-azizi', function () use ($loadAziziContent) { $content = $loadAziziContent(); $dev = true; @@ -166,8 +208,6 @@ Route::prefix('dev')->group(function () use ($loadAziziContent) { return view('web.dev.immobilien-azizi-show', compact('content', 'project', 'dev', 'devQuery', 'overviewRouteName')); })->name('dev.immobilien-azizi.show'); - Route::get('/interior-v1', fn () => view('web.dev.interior-v1'))->name('dev.interior-v1'); - Route::get('/partner-v1', fn () => view('web.dev.partner-v1'))->name('dev.partner-v1'); }); // Pfad-basierte Theme-Routen für lokale Entwicklung wurden entfernt diff --git a/tests/Feature/AboutPageTextTest.php b/tests/Feature/AboutPageTextTest.php new file mode 100644 index 00000000..a3ed9cad --- /dev/null +++ b/tests/Feature/AboutPageTextTest.php @@ -0,0 +1,54 @@ +get('/about')->assertSuccessful()->getContent(); + + expect($html)->toContain('aufmisst und am Ende auch dafür geradesteht.') + ->toContain('mit wenigen ausgewählten Herstellern') + ->toContain('„Gute Einrichtung entsteht') + ->toContain('Zu Qualität gehört, Wort zu halten.') + ->toContain('Febrü und Otterpohl Möbelservice bilden die Kernmarken') + ->toContain('den ein Standardmöbel ungenutzt lässt.') + ->toContain('Werden Sie B2in-Partner') + ->not->toContain('am Ende geradesteht.') + ->not->toContain('liegen lässt'); +}); + +it('corrects the texts stored in the CMS and leaves everything else alone', function () { + $row = CmsContent::create([ + 'group' => 'about', + 'key' => 'our_story', + 'type' => 'json', + 'value' => [ + 'de' => ['title' => 'Eigener Titel', 'timeline' => [['description' => 'Wer hochwertig einrichten will, findet selten jemanden, der zuhört, aufmisst und am Ende geradesteht.']]], + 'en' => ['timeline' => [['description' => 'In 2026 interiors move to the centre: CABINET, Rotpunkt Küchen and Febrü form the core, complemented by a network of regional specialists. International real estate remains as a complementary area.']]], + ], + 'order' => 0, + ]); + + $this->seed(AboutPageTextSeeder::class); + $this->seed(AboutPageTextSeeder::class); + + $value = $row->refresh()->getTranslations('value'); + + expect($value['de']['title'])->toBe('Eigener Titel') + ->and($value['de']['timeline'][0]['description'])->toBe('Wer hochwertig einrichten will, findet selten jemanden, der zuhört, aufmisst und am Ende auch dafür geradesteht.') + ->and($value['en']['timeline'][0]['description'])->toContain('Febrü and Otterpohl Möbelservice form the core'); +}); + +it('does nothing when the about sections are not in the CMS', function () { + $this->seed(AboutPageTextSeeder::class); + + expect(CmsContent::where('group', 'about')->exists())->toBeFalse(); +}); diff --git a/tests/Feature/Admin/Cms/CmsBrandsIndexTest.php b/tests/Feature/Admin/Cms/CmsBrandsIndexTest.php new file mode 100644 index 00000000..74926b6f --- /dev/null +++ b/tests/Feature/Admin/Cms/CmsBrandsIndexTest.php @@ -0,0 +1,395 @@ +forceRootUrl('https://'.config('domains.domain_portal')); +}); + +it('requires authentication', function () { + $this->get(route('cms.brands.index'))->assertRedirect('/login'); +}); + +it('renders for authenticated users', function () { + $this->actingAs(User::factory()->create()) + ->get(route('cms.brands.index')) + ->assertSuccessful() + ->assertSee('Kernmarken'); +}); + +it('creates a brand', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'neue-marke') + ->set('brandName', 'Neue Marke') + ->set('tagline', 'Ein Claim.') + ->set('teaser', 'Kurztext für die Kachel.') + ->call('save') + ->assertHasNoErrors(); + + $brand = CmsBrand::where('slug', 'neue-marke')->firstOrFail(); + + expect($brand->getTranslation('name', 'de'))->toBe('Neue Marke'); + expect($brand->getTranslation('tagline', 'de'))->toBe('Ein Claim.'); + expect($brand->is_published)->toBeTrue(); +}); + +it('rejects a slug that is already taken', function () { + CmsBrand::factory()->create(['slug' => 'cabinet']); + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'cabinet') + ->set('brandName', 'Zweite CABINET') + ->call('save'); + + expect(CmsBrand::where('slug', 'cabinet')->count())->toBe(1); +}); + +it('rejects a slug with invalid characters', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'Nicht Erlaubt!') + ->set('brandName', 'Test') + ->call('save') + ->assertHasErrors(['slug']); +}); + +it('requires a name', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'ohne-namen') + ->set('brandName', '') + ->call('save') + ->assertHasErrors(['brandName']); +}); + +it('edits an existing brand', function () { + $brand = CmsBrand::factory()->create(['slug' => 'cabinet', 'name' => ['de' => 'CABINET']]); + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openEdit', $brand->id) + ->assertSet('slug', 'cabinet') + ->set('tagline', 'Neuer Claim.') + ->call('save') + ->assertHasNoErrors(); + + expect($brand->fresh()->getTranslation('tagline', 'de'))->toBe('Neuer Claim.'); +}); + +it('keeps both languages side by side', function () { + $brand = CmsBrand::factory()->create(['slug' => 'cabinet', 'name' => ['de' => 'CABINET', 'en' => 'CABINET']]); + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openEdit', $brand->id) + ->set('tagline', 'Deutscher Claim') + ->call('save') + ->call('openEdit', $brand->id) + ->call('switchLocale', 'en') + ->set('tagline', 'English claim') + ->call('save'); + + expect($brand->fresh()->getTranslation('tagline', 'de'))->toBe('Deutscher Claim'); + expect($brand->fresh()->getTranslation('tagline', 'en'))->toBe('English claim'); +}); + +it('drops empty service rows on save', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'mit-leistungen') + ->set('brandName', 'Mit Leistungen') + ->set('services', [ + ['title' => 'Aufmaß', 'description' => 'Vor Ort.'], + ['title' => '', 'description' => ''], + ]) + ->call('save'); + + expect(CmsBrand::where('slug', 'mit-leistungen')->firstOrFail()->services)->toHaveCount(1); +}); + +it('toggles the published state', function () { + $brand = CmsBrand::factory()->create(['is_published' => true]); + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index')->call('togglePublished', $brand->id); + + expect($brand->fresh()->is_published)->toBeFalse(); +}); + +it('deletes a brand', function () { + $brand = CmsBrand::factory()->create(); + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index')->call('deleteBrand', $brand->id); + + expect(CmsBrand::find($brand->id))->toBeNull(); +}); + +it('saves the overview text and the highlights', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'mit-merkmalen') + ->set('brandName', 'Mit Merkmalen') + ->set('summary', "Erster Absatz.\n\nZweiter Absatz.") + ->set('highlights', ['Erstes Merkmal', '', 'Zweites Merkmal']) + ->call('save') + ->assertHasNoErrors(); + + $brand = CmsBrand::where('slug', 'mit-merkmalen')->firstOrFail(); + + expect($brand->getTranslation('summary', 'de'))->toBe("Erster Absatz.\n\nZweiter Absatz."); + expect($brand->highlights)->toBe(['Erstes Merkmal', 'Zweites Merkmal']); +}); + +it('shows a brand added in the admin on the overview page', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'ganz-neue-marke') + ->set('brandName', 'Ganz neue Marke') + ->set('tagline', 'Frisch dabei.') + ->set('summary', 'Beschreibung für die Übersicht.') + ->set('highlights', ['Ein Merkmal']) + ->call('save'); + + $this->get('/marken') + ->assertSuccessful() + ->assertSee('Ganz neue Marke') + ->assertSee('Beschreibung für die Übersicht.', false) + ->assertSee('Ein Merkmal') + ->assertSee('/marken/ganz-neue-marke'); +}); + +// ======================================== +// Galerie +// ======================================== + +it('adds gallery entries with the category that was chosen', function () { + $this->actingAs(User::factory()->create()); + + $component = Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->call('addGalleryImage', 'project') + ->call('addGalleryImage', 'inspiration'); + + expect($component->get('gallery')[0]['category'])->toBe('project') + ->and($component->get('gallery')[1]['category'])->toBe('inspiration'); +}); + +it('saves the gallery with category and caption', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'mit-galerie') + ->set('brandName', 'Mit Galerie') + ->set('gallery', [ + ['image' => 'projekt.webp', 'category' => 'project', 'caption' => 'Ankleide in Bielefeld'], + ['image' => 'entwurf.webp', 'category' => 'inspiration', 'caption' => ''], + ]) + ->call('save') + ->assertHasNoErrors(); + + $gallery = CmsBrand::where('slug', 'mit-galerie')->firstOrFail()->gallery; + + expect($gallery)->toBe([ + ['image' => 'projekt.webp', 'category' => 'project', 'caption' => 'Ankleide in Bielefeld'], + ['image' => 'entwurf.webp', 'category' => 'inspiration', 'caption' => ''], + ]); +}); + +it('does not let an unknown category slip through as a completed project', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'geschummelt') + ->set('brandName', 'Geschummelt') + ->set('gallery', [['image' => 'a.webp', 'category' => 'referenz']]) + ->call('save'); + + expect(CmsBrand::where('slug', 'geschummelt')->firstOrFail()->gallery[0]['category']) + ->toBe(CmsBrand::GALLERY_INSPIRATION); +}); + +it('removes a gallery entry', function () { + $brand = CmsBrand::factory()->withGallery(projects: 2, inspirations: 1)->create(['slug' => 'mit-bildern']); + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openEdit', $brand->id) + ->call('removeGalleryImage', 0) + ->call('save'); + + expect($brand->fresh()->gallery)->toHaveCount(2); +}); + +// ======================================== +// Abschnitte der Markenseite +// ======================================== + +it('saves sections with a deepening', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'mit-abschnitten') + ->set('brandName', 'Mit Abschnitten') + ->call('addSection') + ->set('sections.0.title', 'Aus Ostwestfalen') + ->set('sections.0.paragraphs', "Erster Absatz.\n\nZweiter Absatz.") + ->set('sections.0.claim', 'Eine Schlusszeile.') + ->set('sections.0.detail_title', 'Vertiefung') + ->set('sections.0.detail_paragraphs', 'Mehr dazu.') + ->call('save') + ->assertHasNoErrors(); + + $sections = CmsBrand::where('slug', 'mit-abschnitten')->firstOrFail()->sections; + + expect($sections)->toHaveCount(1) + ->and($sections[0]['paragraphs'])->toBe(['Erster Absatz.', 'Zweiter Absatz.']) + ->and($sections[0]['claim'])->toBe('Eine Schlusszeile.') + ->and($sections[0]['detail']['title'])->toBe('Vertiefung') + ->and($sections[0]['detail']['paragraphs'])->toBe(['Mehr dazu.']); +}); + +it('reorders sections', function () { + $brand = CmsBrand::factory()->create([ + 'slug' => 'sortieren', + 'sections' => [ + ['title' => 'Erster', 'paragraphs' => ['A']], + ['title' => 'Zweiter', 'paragraphs' => ['B']], + ], + ]); + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openEdit', $brand->id) + ->call('moveSection', 1, -1) + ->call('save'); + + expect($brand->fresh()->sections[0]['title'])->toBe('Zweiter'); +}); + +it('does not move a section beyond the ends', function () { + $brand = CmsBrand::factory()->create([ + 'slug' => 'raender', + 'sections' => [['title' => 'Einziger', 'paragraphs' => ['A']]], + ]); + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openEdit', $brand->id) + ->call('moveSection', 0, -1) + ->call('moveSection', 0, 1) + ->call('save'); + + expect($brand->fresh()->sections)->toHaveCount(1); +}); + +it('saves the widget label and the closing block', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'mit-cta') + ->set('brandName', 'Mit CTA') + ->set('widgetLabel', 'Persönliche Küchenberatung vereinbaren') + ->set('ctaTitle', 'Ihre Küche. Persönlich geplant.') + ->set('ctaText', 'Jeder Raum ist anders.') + ->call('save') + ->assertHasNoErrors(); + + $brand = CmsBrand::where('slug', 'mit-cta')->firstOrFail(); + + expect($brand->getTranslation('widget_label', 'de'))->toBe('Persönliche Küchenberatung vereinbaren') + ->and($brand->getTranslation('cta_title', 'de'))->toBe('Ihre Küche. Persönlich geplant.') + ->and($brand->getTranslation('cta_text', 'de'))->toBe('Jeder Raum ist anders.'); +}); + +// ======================================== +// Fertigungsort für „Aus der Region gefertigt“ (Nachtrag 11) +// ======================================== + +it('saves the origin of a brand per language', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.brands-index') + ->call('openCreate') + ->set('slug', 'mit-herkunft') + ->set('brandName', 'Mit Herkunft') + ->set('originCity', 'Bünde') + ->set('originDistance', 'rund 30 km') + ->set('originRole', 'Küchen aus eigener Fertigung.') + ->call('save') + ->assertHasNoErrors(); + + $brand = CmsBrand::where('slug', 'mit-herkunft')->firstOrFail(); + + expect($brand->getTranslation('origin_city', 'de'))->toBe('Bünde') + ->and($brand->getTranslation('origin_distance', 'de'))->toBe('rund 30 km') + ->and($brand->getTranslation('origin_role', 'de'))->toBe('Küchen aus eigener Fertigung.'); + + Volt::test('admin.cms.brands-index') + ->call('openEdit', $brand->id) + ->assertSet('originCity', 'Bünde') + ->call('switchLocale', 'en') + ->assertSet('originCity', '') + ->set('brandName', 'With origin') + ->set('originCity', 'Buende') + ->call('save') + ->assertHasNoErrors(); + + $brand->refresh(); + + expect($brand->getTranslation('origin_city', 'de'))->toBe('Bünde') + ->and($brand->getTranslation('origin_city', 'en'))->toBe('Buende'); +}); + +it('clears the origin when the city is emptied', function () { + $this->actingAs(User::factory()->create()); + $brand = CmsBrand::factory()->create(['origin_city' => ['de' => 'Herford']]); + + Volt::test('admin.cms.brands-index') + ->call('openEdit', $brand->id) + ->set('originCity', '') + ->call('save') + ->assertHasNoErrors(); + + expect($brand->fresh()->getTranslation('origin_city', 'de', false))->toBe(''); +}); + +it('is reachable from the sidebar for admins', function () { + \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Admin']); + $user = User::factory()->create(); + $user->assignRole('Admin'); + + $html = $this->actingAs($user) + ->get(route('cms.brands.index')) + ->assertSuccessful() + ->getContent(); + + expect($html)->toContain(route('cms.brands.index')) + ->toMatch('#data-content>\s*Marken\s*
#'); +}); diff --git a/tests/Feature/Admin/Cms/CmsReferencesIndexTest.php b/tests/Feature/Admin/Cms/CmsReferencesIndexTest.php new file mode 100644 index 00000000..619f7077 --- /dev/null +++ b/tests/Feature/Admin/Cms/CmsReferencesIndexTest.php @@ -0,0 +1,144 @@ +forceRootUrl('https://'.config('domains.domain_portal')); +}); + +it('requires authentication', function () { + $this->get(route('cms.references.index'))->assertRedirect('/login'); +}); + +it('renders for authenticated users', function () { + $this->actingAs(User::factory()->create()) + ->get(route('cms.references.index')) + ->assertSuccessful() + ->assertSee('Referenzen') + ->assertSee('Keine Referenzen'); +}); + +it('creates a reference with brands, cover and gallery', function () { + $this->seed(\Database\Seeders\CmsBrandSeeder::class); + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.references-index') + ->call('openCreate') + ->set('referenceTitle', 'Ankleide unter der Dachschräge') + ->set('location', 'Bielefeld') + ->set('year', '2025') + ->set('description', 'Maßschrank bis unter den First.') + ->set('image', 'referenzen/ankleide.webp') + ->set('brandSlugs', ['cabinet', 'tischlerei']) + ->call('addGalleryImage') + ->set('gallery.0.image', 'referenzen/ankleide-2.webp') + ->set('gallery.0.caption', 'Innenausbau') + ->call('addGalleryImage') + ->call('save') + ->assertHasNoErrors(); + + $reference = CmsReference::firstOrFail(); + + expect($reference->getTranslation('title', 'de'))->toBe('Ankleide unter der Dachschräge') + ->and($reference->location)->toBe('Bielefeld') + ->and($reference->year)->toBe('2025') + ->and($reference->image)->toBe('referenzen/ankleide.webp') + ->and($reference->brand_slugs)->toBe(['cabinet', 'tischlerei']) + ->and($reference->gallery)->toBe([['image' => 'referenzen/ankleide-2.webp', 'caption' => 'Innenausbau']]) + ->and($reference->is_published)->toBeTrue(); +}); + +it('requires a title', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.references-index') + ->call('openCreate') + ->set('referenceTitle', '') + ->call('save') + ->assertHasErrors(['referenceTitle']); + + expect(CmsReference::count())->toBe(0); +}); + +it('rejects a brand slug that does not exist', function () { + $this->actingAs(User::factory()->create()); + + Volt::test('admin.cms.references-index') + ->call('openCreate') + ->set('referenceTitle', 'Test') + ->set('brandSlugs', ['gibt-es-nicht']) + ->call('save') + ->assertHasErrors(['brandSlugs.0']); +}); + +it('edits an existing reference and keeps both languages', function () { + $this->actingAs(User::factory()->create()); + $reference = CmsReference::factory()->create(['title' => ['de' => 'Küche', 'en' => 'Kitchen']]); + + Volt::test('admin.cms.references-index') + ->call('openEdit', $reference->id) + ->assertSet('referenceTitle', 'Küche') + ->set('referenceTitle', 'Küche in Hiddenhausen') + ->call('save') + ->assertHasNoErrors(); + + $reference->refresh(); + + expect($reference->getTranslation('title', 'de'))->toBe('Küche in Hiddenhausen') + ->and($reference->getTranslation('title', 'en'))->toBe('Kitchen'); +}); + +it('reorders and removes gallery images', function () { + $this->actingAs(User::factory()->create()); + $reference = CmsReference::factory()->withGallery(3)->create(); + + Volt::test('admin.cms.references-index') + ->call('openEdit', $reference->id) + ->call('moveGalleryImage', 2, -1) + ->call('moveGalleryImage', 0, -1) + ->call('removeGalleryImage', 2) + ->call('save') + ->assertHasNoErrors(); + + expect(array_column($reference->fresh()->gallery, 'image')) + ->toBe(['referenzen/bild-1.webp', 'referenzen/bild-3.webp']); +}); + +it('toggles the published state and deletes', function () { + $this->actingAs(User::factory()->create()); + $reference = CmsReference::factory()->create(); + + Volt::test('admin.cms.references-index') + ->call('togglePublished', $reference->id); + + expect($reference->fresh()->is_published)->toBeFalse(); + + Volt::test('admin.cms.references-index') + ->call('deleteReference', $reference->id); + + expect(CmsReference::count())->toBe(0); +}); + +it('is linked from the sidebar while the real estate projects are not', function () { + \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Admin']); + $user = User::factory()->create(); + $user->assignRole('Admin'); + + $html = $this->actingAs($user) + ->get(route('cms.references.index')) + ->assertSuccessful() + ->getContent(); + + expect($html)->toMatch('#data-content>\s*Referenzen\s*
#') + ->not->toContain(route('cms.projects.index')); +}); diff --git a/tests/Feature/AnnouncementBarTest.php b/tests/Feature/AnnouncementBarTest.php index 888bff46..4ca281b8 100644 --- a/tests/Feature/AnnouncementBarTest.php +++ b/tests/Feature/AnnouncementBarTest.php @@ -2,21 +2,121 @@ declare(strict_types=1); +use App\Livewire\Web\Components\Ui\AnnouncementBar; +use Livewire\Livewire; + +// Seit 01.10.2026 standardmäßig aus (B2IN_ANNOUNCEMENT_BAR) – hier geht es um die Leiste selbst. +beforeEach(function () { + config(['app.announcement_bar' => true]); +}); + it('announcement bar is visible on homepage', function () { $this->get('/') ->assertSuccessful() - ->assertSee('Azizi Creek Views 4') - ->assertSee('NEW LAUNCH'); + ->assertSee('Rotpunkt Küchen', false) + ->assertSee('NEU'); }); it('announcement bar is visible on immobilien page', function () { $this->get('/immobilien') ->assertSuccessful() - ->assertSee('Off-Market-Projekt'); + ->assertSee('id="topbar"', false); }); -it('announcement bar links to project expose', function () { +// ======================================== +// Eine Meldung je Welt +// ======================================== + +it('carries the real estate topic in the real estate world and the interior topic elsewhere', function () { + $this->get('/immobilien') + ->assertSuccessful() + ->assertSee('Azizi Creek Views 4') + ->assertSee('/immobilien/azizi-creek-views-4') + ->assertDontSee('Rotpunkt Küchen neu bei B2in Interior', false); + $this->get('/') ->assertSuccessful() - ->assertSee('/immobilien/azizi-creek-views-4'); + ->assertSee('Rotpunkt Küchen neu bei B2in Interior', false) + ->assertDontSee('Azizi Creek Views 4'); +}); + +it('shows the real estate topic on the real estate magazine and about pages too', function (string $path) { + $this->get($path)->assertSuccessful()->assertSee('Azizi Creek Views 4'); +})->with(['/immobilien/magazin', '/immobilien/ueber-b2in', '/immobilien/faq']); + +it('uses a separate dismiss key per world so closing one bar keeps the other visible', function () { + $interior = Livewire::test(AnnouncementBar::class)->get('dismissKey'); + + b2in_world_set('immobilien'); + $immobilien = Livewire::test(AnnouncementBar::class)->get('dismissKey'); + + expect($immobilien)->not->toBe($interior); +}); + +it('takes the real estate bar from the CMS when one is stored', function () { + \FluxCms\Core\Models\CmsContent::create([ + 'group' => 'global', + 'key' => 'announcement_bar_immobilien', + 'type' => 'json', + 'value' => ['de' => ['enabled' => true, 'id' => 'cms', 'text' => 'Neues Projekt aus dem CMS', 'link_text' => 'Mehr', 'link_url' => '/immobilien']], + 'order' => 0, + ]); + + $this->get('/immobilien')->assertSuccessful()->assertSee('Neues Projekt aus dem CMS'); + $this->get('/')->assertSuccessful()->assertDontSee('Neues Projekt aus dem CMS'); +}); + +it('announcement bar carries an interior topic, not a dubai launch', function () { + $this->get('/') + ->assertSuccessful() + ->assertSee('Termin anfragen') + ->assertDontSee('Azizi Creek Views 4') + ->assertDontSee('NEW LAUNCH'); +}); + +// ======================================== +// Dismiss-Key +// ======================================== + +it('derives the dismiss key from the content, not just the id', function () { + // Gleiche id, anderer Text: Wiederkehrer muessen die neue Meldung wieder zu sehen bekommen. + $old = new \App\Livewire\Web\Components\Ui\AnnouncementBar; + $old->content = ['id' => 'launch', 'badge' => 'NEU', 'text' => 'Alter Text', 'link_url' => '/a']; + + $new = new \App\Livewire\Web\Components\Ui\AnnouncementBar; + $new->content = ['id' => 'launch', 'badge' => 'NEU', 'text' => 'Neuer Text', 'link_url' => '/a']; + + expect($old->dismissKey)->not->toBe($new->dismissKey); +}); + +it('keeps the dismiss key stable while the content is unchanged', function () { + $content = ['id' => 'launch', 'badge' => 'NEU', 'text' => 'Gleicher Text', 'link_url' => '/a']; + + $first = new \App\Livewire\Web\Components\Ui\AnnouncementBar; + $first->content = $content; + + $second = new \App\Livewire\Web\Components\Ui\AnnouncementBar; + $second->content = $content; + + expect($first->dismissKey)->toBe($second->dismissKey); +}); + +it('does not hide itself behind x-cloak', function () { + // Livewire setzt global [x-cloak]{display:none!important}. Mit x-cloak an der Leiste + // haengt ihre Sichtbarkeit daran, dass Alpine das Attribut entfernt – tut es das nicht, + // ist die Leiste dauerhaft weg. Ohne Alpine muss sie sichtbar bleiben. + $html = $this->get('/')->assertSuccessful()->getContent(); + + $start = strpos($html, 'id="topbar"'); + expect($start)->not->toBeFalse(); + + $barMarkup = substr($html, max(0, $start - 900), 900); + expect($barMarkup)->not->toContain('x-cloak'); +}); + +it('survives a browser that blocks localStorage', function () { + // Ein Wurf im x-data wuerde die ganze Komponente lahmlegen. + $html = $this->get('/')->assertSuccessful()->getContent(); + + expect($html)->toContain('try { dismissed = localStorage.getItem(key)'); }); diff --git a/tests/Feature/AppointmentTriggerTest.php b/tests/Feature/AppointmentTriggerTest.php new file mode 100644 index 00000000..bc740801 --- /dev/null +++ b/tests/Feature/AppointmentTriggerTest.php @@ -0,0 +1,87 @@ +: Kontakt-Links oeffnen das Widget +// ======================================== + +it('marks links to the contact pages as widget triggers', function (string $href) { + $html = Blade::render('Termin', ['href' => $href]); + + expect($html)->toContain('data-open-appointment') + ->toContain('href="'.$href.'"') + ->toContain('class="btn"'); +})->with([ + 'interior' => '/contact', + 'immobilien' => '/immobilien/kontakt', + 'absolute' => 'https://b2in.test/contact', +]); + +it('leaves links to other pages as plain links', function () { + $html = Blade::render('Marken'); + + expect($html)->not->toContain('data-open-appointment') + ->toContain('href="/marken"'); +}); + +it('hands over the topic that should be preselected', function () { + $html = Blade::render('Termin'); + + expect($html)->toContain('data-appointment-topic="cabinet"'); +}); + +// ======================================== +// Sektionen auf der Seite +// ======================================== + +it('opens the widget from the appointment buttons of the homepage', function () { + $html = $this->get('/')->assertSuccessful()->getContent(); + + // Weiche (beide Karten) und Abschluss-CTA – der zweite Hero-Button entfällt seit 01.10.2026. + expect(substr_count($html, 'data-open-appointment'))->toBeGreaterThanOrEqual(3); +}); + +it('preselects the brand when the widget is opened from a brand page', function () { + $html = $this->get('/marken/cabinet')->assertSuccessful()->getContent(); + + expect($html)->toContain('data-appointment-topic="cabinet"'); +}); + +it('opens the widget from the real estate calls to action too', function () { + $html = $this->get('/immobilien')->assertSuccessful()->getContent(); + + expect($html)->toContain('data-open-appointment'); +}); + +it('keeps the contact button in the header as a link to the contact page', function () { + $html = $this->get('/')->assertSuccessful()->getContent(); + $header = substr($html, (int) strpos($html, '') - (int) strpos($html, 'toContain('href="'.route('contact').'"') + ->not->toContain('data-open-appointment'); +}); + +it('listens for the open event in the widget and intercepts the links in the frontend script', function () { + expect($this->get('/')->assertSuccessful()->getContent())->toContain('open-appointment.window'); + expect(file_get_contents(resource_path('js/app.js')))->toContain('a[data-open-appointment]') + ->toContain("new CustomEvent('open-appointment'"); +}); + +// ======================================== +// Formularfelder +// ======================================== + +it('styles the selects of the widget and the contact page with the shared field classes', function () { + expect($this->get('/')->assertSuccessful()->getContent())->toMatch('/]*id="appointment-topic"[^>]*class="form-field form-select"/'); + expect($this->get('/contact')->assertSuccessful()->getContent())->toMatch('/]*id="subject"[^>]*class="form-field form-select"/'); + + $css = file_get_contents(resource_path('css/web/shared-styles.css')); + + expect($css)->toContain('.form-field')->toContain('.form-select'); +}); diff --git a/tests/Feature/AppointmentWidgetTest.php b/tests/Feature/AppointmentWidgetTest.php new file mode 100644 index 00000000..b9846872 --- /dev/null +++ b/tests/Feature/AppointmentWidgetTest.php @@ -0,0 +1,251 @@ + 'global', + 'key' => 'contact', + 'type' => 'json', + 'value' => ['de' => ['whatsapp' => '+49 151 51002992']], + 'order' => 0, + ]); +} + +beforeEach(function () { + $this->seed(\Database\Seeders\CmsBrandSeeder::class); + config()->set('contact-form.recipient', 'termine@b2in.test'); +}); + +// ======================================== +// Einbindung +// ======================================== + +it('sits on every page, not only on the homepage', function (string $url) { + $this->get($url) + ->assertSuccessful() + ->assertSeeLivewire(AppointmentWidget::class); +})->with(['/', '/marken', '/marken/cabinet', '/magazin', '/contact']); + +it('offers the maintained brands plus the fixed topics', function () { + $topics = Livewire::test(AppointmentWidget::class)->get('topics'); + + expect($topics)->toHaveKey('cabinet') + ->and($topics)->toHaveKey('rotpunkt') + ->and($topics)->toHaveKey('februe') + ->and($topics['projektausstattung'])->toBe('Projektausstattung') + ->and($topics['sonstiges'])->toBe('Sonstiges'); +}); + +it('picks up a brand that was added in the CMS', function () { + CmsBrand::factory()->create(['slug' => 'neue-marke', 'name' => ['de' => 'Neue Marke', 'en' => 'New Brand']]); + + expect(Livewire::test(AppointmentWidget::class)->get('topics'))->toHaveKey('neue-marke'); +}); + +// ======================================== +// Validierung +// ======================================== + +it('requires name, email and the privacy consent', function () { + Livewire::test(AppointmentWidget::class) + ->call('submit') + ->assertHasErrors(['name' => 'required', 'email' => 'required', 'privacy' => 'accepted']); +}); + +it('rejects a malformed email', function () { + Livewire::test(AppointmentWidget::class) + ->set('name', 'Max Muster') + ->set('email', 'keine-adresse') + ->set('privacy', true) + ->call('submit') + ->assertHasErrors(['email' => 'email']); +}); + +it('rejects a preferred date in the past', function () { + Livewire::test(AppointmentWidget::class) + ->set('name', 'Max Muster') + ->set('email', 'max@example.com') + ->set('preferredDate', now()->subDay()->toDateString()) + ->set('privacy', true) + ->call('submit') + ->assertHasErrors(['preferredDate']); +}); + +it('accepts a request without phone, date and message', function () { + Mail::fake(); + + $service = $this->mock(ContactFormService::class); + $service->shouldReceive('handle')->once(); + + Livewire::test(AppointmentWidget::class) + ->set('name', 'Max Muster') + ->set('email', 'max@example.com') + ->set('privacy', true) + ->call('submit') + ->assertHasNoErrors() + ->assertSet('success', true); +}); + +// ======================================== +// Versand +// ======================================== + +it('names the chosen brand in the mail subject and hands over the request', function () { + Mail::fake(); + + $service = $this->mock(ContactFormService::class); + $service->shouldReceive('handle') + ->once() + ->withArgs(function (array $payload, string $subject, string $logContext) { + return $subject === 'Terminanfrage B2in Interior: CABINET' + && $logContext === 'appointment-widget' + && $payload['topic'] === 'CABINET' + && $payload['email'] === 'max@example.com'; + }); + + Livewire::test(AppointmentWidget::class) + ->set('name', 'Max Muster') + ->set('email', 'max@example.com') + ->set('topic', 'cabinet') + ->set('privacy', true) + ->call('submit') + ->assertHasNoErrors(); +}); + +it('clears the form after a successful request', function () { + Mail::fake(); + $this->mock(ContactFormService::class)->shouldReceive('handle')->once(); + + Livewire::test(AppointmentWidget::class) + ->set('name', 'Max Muster') + ->set('email', 'max@example.com') + ->set('message', 'Bitte um Rückruf.') + ->set('privacy', true) + ->call('submit') + ->assertSet('name', '') + ->assertSet('email', '') + ->assertSet('message', '') + ->assertSet('privacy', false); +}); + +it('lets the visitor start a second request', function () { + Mail::fake(); + $this->mock(ContactFormService::class)->shouldReceive('handle')->once(); + + Livewire::test(AppointmentWidget::class) + ->set('name', 'Max Muster') + ->set('email', 'max@example.com') + ->set('privacy', true) + ->call('submit') + ->assertSet('success', true) + ->call('startOver') + ->assertSet('success', false); +}); + +it('swallows a filled honeypot instead of mailing it', function () { + Mail::fake(); + $this->mock(ContactFormService::class)->shouldReceive('handle')->once(); + + Livewire::test(AppointmentWidget::class) + ->set('name', 'Bot') + ->set('email', 'bot@example.com') + ->set('website', '') + ->set('privacy', true) + ->call('submit') + ->assertHasNoErrors(); + + // Honeypot leer → regulärer Versand. Gegenprobe: gefülltes Feld fällt in der Validierung durch. + Livewire::test(AppointmentWidget::class) + ->set('name', 'Bot') + ->set('email', 'bot@example.com') + ->set('website', 'http://spam.example') + ->set('privacy', true) + ->call('submit') + ->assertHasErrors(['website']); +}); + +// ======================================== +// WhatsApp +// ======================================== + +it('hides the whatsapp button while no number is stored', function () { + $this->get('/') + ->assertSuccessful() + ->assertDontSee('wa.me'); +}); + +it('shows the whatsapp button once a number is stored', function () { + storeWhatsappNumber(); + + $html = $this->get('/')->assertSuccessful()->getContent(); + + // Die Basis-URL steht in den Alpine-Daten, dort escaped @js die Schrägstriche. + expect($html)->toContain('wa.me') + ->and($html)->toContain('4915151002992'); +}); + +it('prepares the whatsapp message from what is already filled in', function () { + storeWhatsappNumber(); + + $html = $this->get('/')->assertSuccessful()->getContent(); + + // Der Text wird im Browser aus dem Formularstand zusammengesetzt. + expect($html)->toContain('whatsappHref') + ->and($html)->toContain('Hallo B2in Interior') + ->and($html)->toContain('Wunschtermin: '); +}); + +it('says plainly that the visitor sends the whatsapp message themselves', function () { + storeWhatsappNumber(); + + $this->get('/') + ->assertSuccessful() + ->assertSee('Abgeschickt wird die Nachricht erst von Ihnen', false); +}); + +it('offers the brand labels to the whatsapp text, not the slugs', function () { + storeWhatsappNumber(); + + $html = $this->get('/')->assertSuccessful()->getContent(); + + expect($html)->toContain('topicLabels'); +}); + +it('puts the whatsapp button above the form', function () { + storeWhatsappNumber(); + + $html = $this->get('/')->assertSuccessful()->getContent(); + $whatsapp = strpos($html, 'data-appointment-whatsapp'); + $form = strpos($html, 'wire:submit="submit"'); + + expect($whatsapp)->not->toBeFalse() + ->and($form)->not->toBeFalse() + ->and($whatsapp < $form)->toBeTrue('WhatsApp-Block muss vor dem Formular stehen'); + + expect($html)->toContain('oder per Formular') + ->toContain('Am schnellsten per WhatsApp'); +}); + +it('shows no separator line while there is no whatsapp number', function () { + $this->get('/') + ->assertSuccessful() + ->assertDontSee('oder per Formular'); +}); + +it('uses the light blue of the theme for the floating button', function () { + $this->get('/') + ->assertSuccessful() + ->assertSee('btn-secondary-accent flex items-center gap-2 rounded-full'); +}); diff --git a/tests/Feature/BrandFeedbackTest.php b/tests/Feature/BrandFeedbackTest.php new file mode 100644 index 00000000..f1416359 --- /dev/null +++ b/tests/Feature/BrandFeedbackTest.php @@ -0,0 +1,172 @@ +seed(CmsBrandSeeder::class); + $this->seed(BrandPageTextSeeder::class); +}); + +function brandPageBody(string $html): string +{ + $html = preg_replace('/wire:snapshot="[^"]*"/', '', $html) ?? $html; + + return substr($html, (int) strpos($html, 'get('/marken/cabinet') + ->assertSuccessful() + ->assertSee('Am Anfang reicht das grobe Maß. Am Ende entscheidet der Millimeter.', false) + ->assertSee('ein konkretes Angebot', false) + ->assertSee('Aufmaß bei Ihnen vor Ort', false) + ->assertSee('Foto / Grundriss + grobe Maße → Beratung → Planung & Angebot → Angebotsannahme → Anzahlung → professionelles Aufmaß → Feinplanung / Fertigungsfreigabe → Bestellung / Fertigung', false) + ->assertDontSee('valides Angebot') + ->assertDontSee('zu Ihnen nach Hause') + ->assertDontSee('Aufmaß vor Ort statt Schätzung am Telefon'); +}); + +it('lists the things one does not need every day in the CABINET questions', function () { + $this->get('/marken/cabinet') + ->assertSuccessful() + ->assertSee('Karnevalskostüme oder besondere Sportsachen', false) + ->assertDontSee('die man aus Prinzip nicht wegwirft'); +}); + +// ======================================== +// Febrü +// ======================================== + +it('uses the agreed Febrü passages and keeps the rest', function () { + $html = brandPageBody($this->get('/marken/februe')->assertSuccessful()->getContent()); + + expect($html)->toContain('Ob Privatkunde oder Unternehmen: Für uns gibt es zunächst einmal Kunden') + ->toContain('Fünfzig Arbeitsplätze werden anders kalkuliert') + ->not->toContain('B2B und B2C sind Begriffe') + ->toContain('Eine sehr hohe Fertigungstiefe') + ->not->toContain('95 Prozent') + ->toContain('Menschen, die Beruf und Familie miteinander organisieren') + ->not->toContain('teilzeitbeschäftigten Müttern') + ->toContain('Nicht drei Marken. Ein durchgängiger Raum.') + ->toContain('Das Wir und das Ich') + ->toContain('Ja, ja – das könnte man unter dem üblichen Verkaufs-Blabla abheften'); +}); + +it('shows the Febrü closing sentence only once', function () { + $html = brandPageBody($this->get('/marken/februe')->assertSuccessful()->getContent()); + + expect(substr_count($html, 'Ob im Kleinen oder im Großen – die Detailtreue entscheidet.'))->toBe(1); +}); + +// ======================================== +// Rotpunkt +// ======================================== + +it('replaces the Rotpunkt section "Mehr als Küchen"', function () { + $this->get('/marken/rotpunkt') + ->assertSuccessful() + ->assertSee('Hauswirtschaftsräume, Badezimmer, Sideboards, Wohnmöbel', false) + ->assertSee('statt in jedem Raum wieder ganz von vorne anzufangen', false) + ->assertSee('der letzten Blume', false) + ->assertDontSee('Küchenstudio plus Handwerk'); +}); + +// ======================================== +// Gemeinsamer Handwerk-Abschluss +// ======================================== + +it('closes every brand page with the shared craft section linking to Otterpohl', function () { + foreach (['cabinet', 'rotpunkt', 'februe'] as $slug) { + $html = brandPageBody($this->get('/marken/'.$slug)->assertSuccessful()->getContent()); + + expect($html)->toContain('id="handwerk"') + ->toContain('Planung plus Handwerk') + ->toContain('Zusammenarbeit mit Otterpohl aus Rheda-Wiedenbrück') + ->toContain('href="'.route('marken.show', ['slug' => 'tischlerei']).'"') + ->toContain('Mehr zu Otterpohl'); + + // Als letzter Abschnitt vor den Leistungen. + $craft = strpos($html, 'id="handwerk"'); + $services = strpos($html, __('ui.brand_services')); + expect($services)->toBeGreaterThan($craft); + expect(substr_count($html, 'Planung plus Handwerk'))->toBe(1); + } +}); + +it('does not repeat the craft section on the Otterpohl page itself', function () { + $this->get('/marken/tischlerei') + ->assertSuccessful() + ->assertDontSee('id="handwerk"', false) + ->assertDontSee('Planung plus Handwerk'); +}); + +it('drops the craft link when Otterpohl is unpublished but keeps the section', function () { + CmsBrand::query()->where('slug', 'tischlerei')->update(['is_published' => false]); + + $html = brandPageBody($this->get('/marken/cabinet')->assertSuccessful()->getContent()); + + expect($html)->toContain('Planung plus Handwerk') + ->not->toContain('Mehr zu Otterpohl'); +}); + +it('prefers the CMS content for the craft section', function () { + CmsContent::create([ + 'group' => 'marken', + 'key' => 'craft', + 'type' => 'json', + 'value' => ['de' => [ + 'title' => 'Handwerk aus dem CMS', + 'paragraphs' => ['Ein Absatz.'], + 'brand_slug' => 'tischlerei', + 'link_text' => 'Zur Werkstatt', + ]], + 'order' => 0, + ]); + + $this->get('/marken/rotpunkt') + ->assertSuccessful() + ->assertSee('Handwerk aus dem CMS') + ->assertSee('Zur Werkstatt') + ->assertDontSee('Planung plus Handwerk'); +}); + +// ======================================== +// Otterpohl-Seeder +// ======================================== + +it('updates an existing placeholder brand with the Otterpohl texts but keeps a maintained logo', function () { + CmsBrand::query()->where('slug', 'tischlerei')->update([ + 'name' => ['de' => 'Tischlerei'], + 'logo' => 'marken/eigenes-logo.png', + 'image' => 'marken/stimmung.jpg', + 'order' => 7, + ]); + + $this->seed(\Database\Seeders\OtterpohlBrandSeeder::class); + + $brand = CmsBrand::query()->where('slug', 'tischlerei')->firstOrFail(); + + expect($brand->getTranslation('name', 'de'))->toBe('Otterpohl Möbelservice') + ->and($brand->logo)->toBe('marken/eigenes-logo.png') + ->and($brand->image)->toBe('marken/stimmung.jpg') + ->and($brand->order)->toBe(7) + ->and($brand->getTranslation('origin_role', 'de'))->toContain('Rheda-Wiedenbrück') + ->and($brand->services)->toHaveCount(8) + ->and($brand->getTranslation('cta_title', 'de'))->toBe('Das Ganze statt nur das Einzelne'); +}); diff --git a/tests/Feature/BrandImageSeederTest.php b/tests/Feature/BrandImageSeederTest.php new file mode 100644 index 00000000..66587bcf --- /dev/null +++ b/tests/Feature/BrandImageSeederTest.php @@ -0,0 +1,144 @@ +seed(CmsBrandSeeder::class); +}); + +it('sets the title image and fills the gallery with visualisations', function () { + $this->seed(BrandImageSeeder::class); + + $cabinet = CmsBrand::where('slug', 'cabinet')->firstOrFail(); + $rotpunkt = CmsBrand::where('slug', 'rotpunkt')->firstOrFail(); + $februe = CmsBrand::where('slug', 'februe')->firstOrFail(); + + expect($cabinet->image)->toBe('marken/cabinet/ankleide-solitaer-eiche-tano.webp') + ->and($cabinet->gallery)->toHaveCount(11) + ->and($rotpunkt->image)->toBe('marken/rotpunkt/kueche-01.webp') + ->and($rotpunkt->gallery)->toHaveCount(13) + ->and($februe->image)->toBe('marken/februe/base-thekenloesung.webp') + ->and($februe->gallery)->toHaveCount(15); + + foreach (array_merge($cabinet->gallery, $rotpunkt->gallery, $februe->gallery) as $item) { + expect($item['category'])->toBe(CmsBrand::GALLERY_INSPIRATION) + ->and($item['caption'])->not->toBe(''); + } + +}); + +it('fills the Otterpohl gallery with references and workshop insights, never visualisations', function () { + $this->seed(BrandImageSeeder::class); + + $brand = CmsBrand::where('slug', 'tischlerei')->firstOrFail(); + $grouped = CmsBrand::groupGallery($brand->gallery); + + expect($brand->image)->toBe('marken/otterpohl/titel-treppe.webp') + ->and($brand->gallery)->toHaveCount(12) + ->and($grouped['projects'])->toHaveCount(7) + ->and($grouped['company'])->toHaveCount(5) + ->and($grouped['inspirations'])->toBeEmpty(); + + // Kundennamen aus den Dateinamen der Zulieferung stehen nicht in den Unterschriften. + foreach ($brand->gallery as $item) { + expect($item['caption'])->not->toBe('') + ->not->toContain('Lücke') + ->not->toContain('Berkemeier') + ->not->toContain('Neugebauer') + ->not->toContain('Dziuballe'); + } +}); + +it('labels the Otterpohl gallery as references and insights with both badges', function () { + $this->seed(BrandImageSeeder::class); + + $html = $this->get('/marken/tischlerei')->assertSuccessful()->getContent(); + + expect($html)->toContain('Referenzen und Einblicke') + ->toContain(__('ui.brand_gallery_badge_project')) + ->toContain(__('ui.brand_gallery_badge_company')) + ->not->toContain(__('ui.brand_gallery_badge_inspiration')) + ->not->toContain('Inspirationen und Entwürfe'); + + // Projekte zuerst, dann die Werkstatt. + $project = strpos($html, 'referenz-dziuballe-treppe.webp'); + $workshop = strpos($html, 'werkstatt-02.webp'); + expect($project)->not->toBeFalse()->and($workshop)->not->toBeFalse()->and($project < $workshop)->toBeTrue(); + + // Die Herstellerseiten mit reinen Visualisierungen behalten ihre Überschrift. + $this->get('/marken/cabinet')->assertSuccessful()->assertSee('Inspirationen und Entwürfe', false); +}); + +it('offers the Otterpohl references on the references page while no own entries exist', function () { + $this->seed(BrandImageSeeder::class); + + $this->get('/referenzen')->assertSuccessful() + ->assertSee('referenz-neugebauer.webp') + ->assertDontSee('werkstatt-02.webp'); +}); + +it('ships every referenced file as an optimised asset', function () { + $this->seed(BrandImageSeeder::class); + + foreach (CmsBrand::whereIn('slug', ['cabinet', 'rotpunkt', 'februe', 'tischlerei'])->get() as $brand) { + $files = array_merge([$brand->image], array_column($brand->gallery, 'image')); + + foreach ($files as $file) { + $path = public_path('img/assets/'.$file); + + expect(file_exists($path))->toBeTrue("Datei fehlt: {$file}"); + expect(filesize($path))->toBeLessThan(400 * 1024, "Datei zu groß: {$file}"); + + [$width, $height] = getimagesize($path); + expect(max($width, $height))->toBeLessThanOrEqual(1920, "Datei zu breit: {$file}"); + } + } +}); + +it('keeps a maintained title image and existing gallery entries on a second run', function () { + CmsBrand::where('slug', 'cabinet')->update([ + 'image' => 'marken/cabinet/eigenes-titelbild.webp', + 'gallery' => [ + ['image' => 'marken/cabinet/drehtuerenschrank-marmor.webp', 'category' => 'project', 'caption' => 'Bei Familie Müller'], + ['image' => 'eigenes-projekt.webp', 'category' => 'project', 'caption' => 'Eigenes Projekt'], + ], + ]); + + $this->seed(BrandImageSeeder::class); + $this->seed(BrandImageSeeder::class); + + $cabinet = CmsBrand::where('slug', 'cabinet')->firstOrFail(); + + expect($cabinet->image)->toBe('marken/cabinet/eigenes-titelbild.webp') + ->and($cabinet->gallery)->toHaveCount(12) + ->and($cabinet->gallery[0])->toBe(['image' => 'marken/cabinet/drehtuerenschrank-marmor.webp', 'category' => 'project', 'caption' => 'Bei Familie Müller']) + ->and($cabinet->gallery[1]['image'])->toBe('eigenes-projekt.webp'); +}); + +it('shows the title image on the homepage tile, the brand overview and the brand page', function () { + $this->seed(BrandImageSeeder::class); + + $this->get('/')->assertSuccessful()->assertSee('marken/cabinet/ankleide-solitaer-eiche-tano.webp'); + $this->get('/marken')->assertSuccessful() + ->assertSee('marken/rotpunkt/kueche-01.webp') + ->assertSee('marken/februe/base-thekenloesung.webp'); + + $this->get('/marken/cabinet') + ->assertSuccessful() + ->assertSee('marken/cabinet/ankleide-solitaer-eiche-tano.webp') + ->assertSee('Dachschrägenschrank in Filo Cashmere', false) + ->assertSee(__('ui.brand_gallery_badge_inspiration')); + + // Visualisierungen sind keine Referenzen. + $this->get('/referenzen')->assertSuccessful()->assertDontSee('kueche-02.webp'); +}); diff --git a/tests/Feature/BrandPageSectionsTest.php b/tests/Feature/BrandPageSectionsTest.php new file mode 100644 index 00000000..84fd6b5f --- /dev/null +++ b/tests/Feature/BrandPageSectionsTest.php @@ -0,0 +1,245 @@ +seed(\Database\Seeders\CmsBrandSeeder::class); + $this->seed(\Database\Seeders\BrandPageTextSeeder::class); +}); + +// ======================================== +// Abschnitte aus der Zulieferung +// ======================================== + +it('renders the delivered sections on the rotpunkt page', function () { + $this->get('/marken/rotpunkt') + ->assertSuccessful() + ->assertSee('Aus Ostwestfalen. Für Ihr Zuhause.', false) + ->assertSee('Gestaltungsfreiheit bis ins Detail') + ->assertSee('Nachhaltigkeit mit konkreter Substanz') + ->assertSee('Mehr als Küchen', false) + ->assertSee('Planung plus Handwerk', false); +}); + +it('renders the cabinet sections written to the same pattern', function () { + $this->get('/marken/cabinet') + ->assertSuccessful() + ->assertSee('Millimeter statt Standardmaß', false) + ->assertSee('Ein Bild und ein grobes Maß reichen für den Anfang', false) + ->assertSee('Warum CABINET bei uns?') + ->assertSee('Ihr Raum. Persönlich geplant.', false); +}); + +it('renders the delivered sections on the februe page', function () { + $this->get('/marken/februe') + ->assertSuccessful() + ->assertSee('Aus Herford. Für moderne Arbeitswelten.', false) + ->assertSee('Nicht drei Marken. Ein durchgängiger Raum.', false) + ->assertSee('Ergonomie, die im Alltag funktioniert'); +}); + +it('turns every marked deepening into a collapsible area', function () { + $html = $this->get('/marken/rotpunkt')->assertSuccessful()->getContent(); + + // Rotpunkt bringt vier Vertiefungen mit. + expect(substr_count($html, 'aria-controls="detail-'))->toBe(4) + ->and($html)->toContain('FENIX und authentische Holzoptiken') + ->and($html)->toContain('NEW DIMENSIONS'); +}); + +it('renders every deepening collapsed and animates its height', function () { + $html = $this->get('/marken/rotpunkt')->assertSuccessful()->getContent(); + + // Der zugeklappte Zustand muss im statischen class-Attribut stehen, sonst blitzt der Inhalt + // vor dem Start von Alpine aufgeklappt auf. + expect(substr_count($html, 'grid grid-rows-[0fr] opacity-0 transition-all'))->toBe(4) + // grid-template-rows animiert die tatsaechliche Hoehe – die alte Bewegung blendete den + // Inhalt nur ein und sprang dabei auf die volle Hoehe. + ->and($html)->not->toContain('x-transition:enter-start="opacity-0 -translate-y-2"') + ->and($html)->toContain("'grid-rows-[1fr] opacity-100': open"); +}); + +it('uses no full-surface hover on the accordion buttons', function () { + foreach (['/marken/rotpunkt', '/faq'] as $path) { + $html = $this->get($path)->assertSuccessful()->getContent(); + + expect($html)->not->toContain('hover:bg-muted/30'); + } +}); + +it('merges the two sustainability sections as the corrected version requires', function () { + $html = $this->get('/marken/rotpunkt')->assertSuccessful()->getContent(); + + expect($html)->not->toContain('Greenline hält dem Vergleich stand') + ->and($html)->toContain('ohne Verkaufsnebel') + // Der doppelte Satz steht nur noch einmal auf der Seite. + ->and(substr_count($html, 'Nachhaltigkeit braucht keine großen Versprechen'))->toBe(1); +}); + +it('keeps the blauer engel claim tied to the listed product groups', function () { + $this->get('/marken/februe') + ->assertSuccessful() + ->assertSee('Ausgewählte Febrü-Tischsysteme und Stauraummöbel tragen den Blauen Engel.', false); +}); + +it('shows the pull quote from marcel on the februe page', function () { + $this->get('/marken/februe') + ->assertSuccessful() + ->assertSee('Mein Arzt sagt, ich solle weniger sitzen.', false) + ->assertSee('Marcel Scheibe, Geschäftsführer von B2in', false); +}); + +it('shows the closing claims of a section', function () { + $this->get('/marken/februe') + ->assertSuccessful() + ->assertSee('Made in Herford. Geplant in Bielefeld.') + ->assertSee('Ob im Kleinen oder im Großen', false); +}); + +it('never publishes the internal source notes', function () { + foreach (['rotpunkt', 'februe'] as $slug) { + $html = $this->get('/marken/'.$slug)->assertSuccessful()->getContent(); + + expect($html)->not->toContain('QUELLENHINWEISE') + ->and($html)->not->toContain('NICHT VERÖFFENTLICHEN') + ->and($html)->not->toContain('UMSETZUNGSHINWEIS'); + } +}); + +// ======================================== +// Abschlussblock +// ======================================== + +it('uses the brand specific closing block instead of the generic one', function () { + $this->get('/marken/rotpunkt') + ->assertSuccessful() + ->assertSee('Ihre Küche. Persönlich geplant.', false) + ->assertSee('Rathausstraße 11 in Bielefeld', false) + ->assertDontSee('Interesse an Rotpunkt Küchen?', false); +}); + +it('falls back to the generic closing block for a brand without one', function () { + // Beide Sprachen leeren: bei nur geleertem Deutsch greift die Uebersetzungs-Fallbackkette. + CmsBrand::where('slug', 'cabinet')->firstOrFail()->update(['cta_title' => [], 'cta_text' => []]); + + $this->get('/marken/cabinet') + ->assertSuccessful() + ->assertSee('Interesse an CABINET?'); +}); + +it('closes the page with a gradient band across the full width', function () { + $html = $this->get('/marken/rotpunkt')->assertSuccessful()->getContent(); + + expect($html)->toContain('cta-band') + // Die weichen Kreise setzten sichtbare Flecken in die Ecken statt eines Verlaufs. + ->and($html)->not->toContain('blur-3xl'); +}); + +it('exempts the closing band from the glass-flow section background', function () { + // `.variante-glass-flow section` faerbt jede Sektion hell ein und ist spezifischer als + // `.cta-band` – ohne diese Ausnahme steht der Abschluss hellgrau mit weisser Schrift da. + // `/marken/{slug}` haengt in genau diesem Wrapper. + expect(file_get_contents(resource_path('views/web/marken-show.blade.php'))) + ->toContain('variante-glass-flow'); + + expect(file_get_contents(resource_path('css/web/shared-styles.css'))) + ->toContain('section.cta-band'); +}); + +// ======================================== +// Beschriftung des Terminanfrage-Widgets +// ======================================== + +it('labels the widget for the brand of the page', function (string $slug, string $label) { + $this->get('/marken/'.$slug) + ->assertSuccessful() + ->assertSee($label, false); +})->with([ + 'rotpunkt' => ['rotpunkt', 'Persönliche Küchenberatung vereinbaren'], + 'februe' => ['februe', 'Persönliche Arbeitsplatzberatung vereinbaren'], + 'cabinet' => ['cabinet', 'Persönliche Schrankplanung vereinbaren'], +]); + +it('keeps the general label outside the brand pages', function () { + $this->get('/') + ->assertSuccessful() + ->assertSee('Termin anfragen') + ->assertDontSee('Persönliche Küchenberatung', false); +}); + +it('adds no second cta button, only the label changes', function () { + // Die Zulieferung verlangt ausdruecklich keinen zweiten Button. + $html = $this->get('/marken/rotpunkt')->assertSuccessful()->getContent(); + + expect(substr_count($html, 'Persönliche Küchenberatung vereinbaren'))->toBe(1); +}); + +it('leaves the label untouched for a brand without its own', function () { + $label = Livewire::test(AppointmentWidget::class)->get('content')['button_label'] ?? ''; + + expect($label)->toBe('Termin anfragen'); +}); + +// ======================================== +// Datenform +// ======================================== + +it('normalises sections into a fixed shape', function () { + $sections = CmsBrand::normalizeSections([ + ['title' => ' Titel ', 'paragraphs' => [' Erster ', '', 'Zweiter']], + ['title' => '', 'paragraphs' => []], + 'kein Array', + ]); + + expect($sections)->toHaveCount(1) + ->and($sections[0]['title'])->toBe('Titel') + ->and($sections[0]['paragraphs'])->toBe(['Erster', 'Zweiter']) + ->and($sections[0]['detail'])->toBeNull(); +}); + +it('keeps a deepening only when it has content', function () { + $sections = CmsBrand::normalizeSections([ + ['title' => 'A', 'detail' => ['title' => '', 'paragraphs' => []]], + ['title' => 'B', 'detail' => ['title' => 'Vertiefung', 'paragraphs' => ['Text']]], + ]); + + expect($sections[0]['detail'])->toBeNull() + ->and($sections[1]['detail']['title'])->toBe('Vertiefung'); +}); + +it('accepts a text block instead of a paragraph list', function () { + $sections = CmsBrand::normalizeSections([ + ['title' => 'A', 'paragraphs' => "Erster Absatz.\n\nZweiter Absatz."], + ]); + + expect($sections[0]['paragraphs'])->toBe(['Erster Absatz.', 'Zweiter Absatz.']); +}); + +// ======================================== +// Redaktionsschutz des Seeders +// ======================================== + +it('leaves images, gallery and services untouched', function () { + $brand = CmsBrand::where('slug', 'rotpunkt')->firstOrFail(); + $brand->update([ + 'image' => 'gepflegt.webp', + 'gallery' => [['image' => 'projekt.webp', 'category' => 'project', 'caption' => 'Küche']], + 'order' => 42, + ]); + + $this->seed(\Database\Seeders\BrandPageTextSeeder::class); + + $brand->refresh(); + + expect($brand->image)->toBe('gepflegt.webp') + ->and($brand->gallery)->toHaveCount(1) + ->and($brand->order)->toBe(42) + ->and($brand->services)->not->toBeEmpty(); +}); diff --git a/tests/Feature/BrandPageTest.php b/tests/Feature/BrandPageTest.php new file mode 100644 index 00000000..08a5fc33 --- /dev/null +++ b/tests/Feature/BrandPageTest.php @@ -0,0 +1,313 @@ +seed(\Database\Seeders\CmsBrandSeeder::class); +}); + +// ======================================== +// Kacheln auf der Startseite +// ======================================== + +it('shows the maintained brands on the homepage', function () { + $this->get('/') + ->assertSuccessful() + ->assertSee('CABINET') + ->assertSee('Rotpunkt Küchen', false) + ->assertSee('Febrü', false); +}); + +it('links each tile to its detail page', function () { + $this->get('/') + ->assertSuccessful() + ->assertSee('/marken/cabinet') + ->assertSee('/marken/rotpunkt') + ->assertSee('/marken/februe'); +}); + +it('hides unpublished brands from the homepage', function () { + CmsBrand::where('slug', 'februe')->update(['is_published' => false]); + + $this->get('/') + ->assertSuccessful() + ->assertSee('CABINET') + ->assertDontSee('/marken/februe'); +}); + +// ======================================== +// Detailseite +// ======================================== + +it('serves a detail page for every brand', function () { + foreach (['cabinet', 'rotpunkt', 'februe'] as $slug) { + $this->get('/marken/'.$slug)->assertSuccessful(); + } +}); + +it('renders the template sections from the concept', function () { + $this->get('/marken/cabinet') + ->assertSuccessful() + ->assertSee('CABINET') // Header + ->assertSee('Einbauschränke nach Maß', false) // Claim + ->assertSee('Showroom Bielefeld') + ->assertSee('Leistungen und Besonderheiten') // Leistungen + ->assertSee('Aufmaß vor Ort', false) + ->assertSee('Termin anfragen'); // CTA +}); + +it('links to the other brands from a detail page', function () { + $this->get('/marken/cabinet') + ->assertSuccessful() + ->assertSee('/marken/rotpunkt') + ->assertSee('/marken/februe'); +}); + +it('returns 404 for an unknown brand', function () { + $this->get('/marken/gibt-es-nicht')->assertNotFound(); +}); + +it('returns 404 for an unpublished brand', function () { + CmsBrand::where('slug', 'februe')->update(['is_published' => false]); + + $this->get('/marken/februe')->assertNotFound(); +}); + +it('carries a brand specific title and description', function () { + $this->get('/marken/cabinet') + ->assertSuccessful() + ->assertSee('CABINET – Einbauschränke nach Maß. | B2in Interior', false) + ->assertDontSee('Connecting Design and Property'); +}); + +// ======================================== +// CMS-Anbindung +// ======================================== + +it('renders what is maintained in the CMS', function () { + $cabinet = CmsBrand::where('slug', 'cabinet')->firstOrFail(); + $cabinet->setTranslation('tagline', 'de', 'Im CMS geänderter Claim'); + $cabinet->save(); + + $this->get('/')->assertSuccessful()->assertSee('Im CMS geänderter Claim'); + $this->get('/marken/cabinet')->assertSuccessful()->assertSee('Im CMS geänderter Claim'); +}); + +it('picks up a brand that was added in the CMS, without a code change', function () { + CmsBrand::factory()->create([ + 'slug' => 'neue-marke', + 'name' => ['de' => 'Neue Marke', 'en' => 'New Brand'], + 'order' => 9, + ]); + + $this->get('/')->assertSuccessful()->assertSee('Neue Marke'); + $this->get('/marken/neue-marke')->assertSuccessful()->assertSee('Neue Marke'); +}); + +// ======================================== +// Galerie: ein Raster, Badge je Bild (Rubrikwechsel ausgesetzt, Nachtrag 17) +// ======================================== + +it('shows no gallery section while no images are maintained', function () { + $this->get('/marken/cabinet') + ->assertSuccessful() + ->assertDontSee('id="galerie"', false) + ->assertDontSee('Inspirationen und Entwürfe', false); +}); + +it('shows projects and visualisations in one grid with a badge each and projects first', function () { + CmsBrand::where('slug', 'cabinet')->firstOrFail()->update([ + 'gallery' => [ + ['image' => 'entwurf.webp', 'category' => 'inspiration', 'caption' => 'Entwurf Garderobe'], + ['image' => 'projekt.webp', 'category' => 'project', 'caption' => 'Ankleide in Bielefeld'], + ], + ]); + + $html = $this->get('/marken/cabinet')->assertSuccessful()->getContent(); + + // Gemischte Galerie: Überschrift nennt beides (Nachtrag 19). + expect($html)->toContain('Projekte und Entwürfe') + ->toContain('was in einem Raum möglich ist') + ->not->toContain('Inspirationen und Entwürfe') + ->toContain('Realisiertes Projekt') + ->toContain('Visualisierung') + ->toContain('Ankleide in Bielefeld') + ->toContain('Entwurf Garderobe') + ->not->toContain('role="tablist"') + ->not->toContain('Realisierte Projekte'); + + // Ohne Livewire-Snapshot vergleichen: er trägt die Galerie in Datenreihenfolge. + $visible = preg_replace('/wire:snapshot="[^"]*"/', '', $html) ?? $html; + expect(strpos($visible, 'Ankleide in Bielefeld'))->toBeLessThan((int) strpos($visible, 'Entwurf Garderobe')); +}); + +it('shows exactly one line below the gallery title', function () { + CmsBrand::where('slug', 'cabinet')->firstOrFail()->update([ + 'gallery' => [['image' => 'entwurf.webp', 'category' => 'inspiration', 'caption' => 'Entwurf']], + ]); + + $html = $this->get('/marken/cabinet')->assertSuccessful()->getContent(); + $section = substr($html, (int) strpos($html, 'id="galerie"')); + $section = substr($section, 0, (int) strpos($section, '