diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..996a246 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,21 @@ + + + + \ No newline at end of file diff --git a/app/Actions/Fortify/CreateNewUser.php b/app/Actions/Fortify/CreateNewUser.php deleted file mode 100644 index 7bf18d0..0000000 --- a/app/Actions/Fortify/CreateNewUser.php +++ /dev/null @@ -1,40 +0,0 @@ - $input - */ - public function create(array $input): User - { - Validator::make($input, [ - 'name' => ['required', 'string', 'max:255'], - 'email' => [ - 'required', - 'string', - 'email', - 'max:255', - Rule::unique(User::class), - ], - 'password' => $this->passwordRules(), - ])->validate(); - - return User::create([ - 'name' => $input['name'], - 'email' => $input['email'], - 'password' => Hash::make($input['password']), - ]); - } -} diff --git a/app/Actions/Fortify/PasswordValidationRules.php b/app/Actions/Fortify/PasswordValidationRules.php deleted file mode 100644 index 76b19d3..0000000 --- a/app/Actions/Fortify/PasswordValidationRules.php +++ /dev/null @@ -1,18 +0,0 @@ -|string> - */ - protected function passwordRules(): array - { - return ['required', 'string', Password::default(), 'confirmed']; - } -} diff --git a/app/Actions/Fortify/ResetUserPassword.php b/app/Actions/Fortify/ResetUserPassword.php deleted file mode 100644 index 7a57c50..0000000 --- a/app/Actions/Fortify/ResetUserPassword.php +++ /dev/null @@ -1,29 +0,0 @@ - $input - */ - public function reset(User $user, array $input): void - { - Validator::make($input, [ - 'password' => $this->passwordRules(), - ])->validate(); - - $user->forceFill([ - 'password' => Hash::make($input['password']), - ])->save(); - } -} diff --git a/app/Console/Commands/GenerateSitemap.php b/app/Console/Commands/GenerateSitemap.php index 41c2cc5..af71b7a 100644 --- a/app/Console/Commands/GenerateSitemap.php +++ b/app/Console/Commands/GenerateSitemap.php @@ -2,24 +2,23 @@ namespace App\Console\Commands; -use App\Enums\EducationalProgramStatus; -use App\Enums\PostStatus; -use App\Models\AcademicJournal; -use App\Models\AdditionalEducation; -use App\Models\Department; -use App\Models\Division; -use App\Models\EducationalProgram; -use App\Models\Event; -use App\Models\Faculty; -use App\Models\LibraryNews; -use App\Models\Page; -use App\Models\Post; -use App\Models\User; -use App\Models\VirtualExhibition; -use Illuminate\Console\Command; +use App\Containers\AdditionalEducation\Models\AdditionalEducation; +use App\Containers\AppStructure\Models\Page; +use App\Containers\Article\Enums\PostStatus; +use App\Containers\Article\Models\Post; +use App\Containers\Education\Models\EducationalProgram; +use App\Containers\Event\Models\Event; +use App\Containers\InstituteStructure\Models\Department; +use App\Containers\InstituteStructure\Models\Division; +use App\Containers\InstituteStructure\Models\Faculty; +use App\Containers\User\Models\User; +use App\Ship\Enums\Education\EducationalProgramStatus; use Spatie\Sitemap\Sitemap; use Spatie\Sitemap\Tags\Url; +use Illuminate\Console\Command; + + class GenerateSitemap extends Command { diff --git a/app/Console/Commands/RegisterRoutes.php b/app/Console/Commands/RegisterRoutes.php index ef5cc3c..594516a 100644 --- a/app/Console/Commands/RegisterRoutes.php +++ b/app/Console/Commands/RegisterRoutes.php @@ -2,9 +2,10 @@ namespace App\Console\Commands; -use Illuminate\Console\Command; +use App\Containers\AppStructure\Models\Page; use Illuminate\Support\Facades\Route; -use App\Models\Page; +use Illuminate\Console\Command; + class RegisterRoutes extends Command diff --git a/app/Http/Resources/AdditionalEducationCategoryPreviewResource.php b/app/Containers/AdditionalEducation/Data/Resources/AdditionalEducationCategoryPreviewResource.php similarity index 88% rename from app/Http/Resources/AdditionalEducationCategoryPreviewResource.php rename to app/Containers/AdditionalEducation/Data/Resources/AdditionalEducationCategoryPreviewResource.php index 927c82c..96b88e1 100644 --- a/app/Http/Resources/AdditionalEducationCategoryPreviewResource.php +++ b/app/Containers/AdditionalEducation/Data/Resources/AdditionalEducationCategoryPreviewResource.php @@ -1,6 +1,6 @@ FormEducation::class, ]; - public function category() + public function category(): BelongsTo { return $this->belongsTo(AdditionalEducationCategory::class, 'category_id', 'id'); } - public function seo() + public function seo(): MorphOne { return $this->morphOne(Seo::class, 'seoable'); } - - } diff --git a/app/Models/AdditionalEducationCategory.php b/app/Containers/AdditionalEducation/Models/AdditionalEducationCategory.php similarity index 61% rename from app/Models/AdditionalEducationCategory.php rename to app/Containers/AdditionalEducation/Models/AdditionalEducationCategory.php index 84c5030..71fe0fe 100644 --- a/app/Models/AdditionalEducationCategory.php +++ b/app/Containers/AdditionalEducation/Models/AdditionalEducationCategory.php @@ -1,10 +1,12 @@ with(['additionalEducations' => function ($query) { $query->where('is_active', true); }]); } - public function additionalEducations() + public function additionalEducations(): HasMany { return $this->hasMany(AdditionalEducation::class, 'category_id', 'id'); } - public function direction() + public function direction(): BelongsTo { return $this->belongsTo(DirectionAdditionalEducation::class, 'dir_addit_educat_id', 'id'); } - - } diff --git a/app/Models/DirectionAdditionalEducation.php b/app/Containers/AdditionalEducation/Models/DirectionAdditionalEducation.php similarity index 59% rename from app/Models/DirectionAdditionalEducation.php rename to app/Containers/AdditionalEducation/Models/DirectionAdditionalEducation.php index 563b9d0..797ebaf 100644 --- a/app/Models/DirectionAdditionalEducation.php +++ b/app/Containers/AdditionalEducation/Models/DirectionAdditionalEducation.php @@ -1,9 +1,10 @@ hasMany(AdditionalEducationCategory::class, 'dir_addit_educat_id', 'id'); } diff --git a/app/Policies/AdditionalEducationCategoryPolicy.php b/app/Containers/AdditionalEducation/Policies/AdditionalEducationCategoryPolicy.php similarity index 94% rename from app/Policies/AdditionalEducationCategoryPolicy.php rename to app/Containers/AdditionalEducation/Policies/AdditionalEducationCategoryPolicy.php index 04da077..dbb76fa 100644 --- a/app/Policies/AdditionalEducationCategoryPolicy.php +++ b/app/Containers/AdditionalEducation/Policies/AdditionalEducationCategoryPolicy.php @@ -1,9 +1,9 @@ group(function () { + Route::get('/additional-education/{slug}', [ClientAdditionalEducationController::class, 'show'])->name('client.additionalEducation.show'); + Route::get('/additional-education/', [ClientAdditionalEducationController::class, 'index'])->name('client.additionalEducation.index'); +}); + + diff --git a/app/Containers/AppStructure/Loaders/AliasesLoader.php b/app/Containers/AppStructure/Loaders/AliasesLoader.php new file mode 100644 index 0000000..0223bfa --- /dev/null +++ b/app/Containers/AppStructure/Loaders/AliasesLoader.php @@ -0,0 +1,11 @@ +hasMany(SubSection::class); } diff --git a/app/Models/Page.php b/app/Containers/AppStructure/Models/Page.php similarity index 72% rename from app/Models/Page.php rename to app/Containers/AppStructure/Models/Page.php index 274fbb4..bf78c2a 100644 --- a/app/Models/Page.php +++ b/app/Containers/AppStructure/Models/Page.php @@ -1,11 +1,12 @@ belongsTo(SubSection::class, 'sub_section_id'); } - public function seo() + public function seo(): MorphOne { return $this->morphOne(Seo::class, 'seoable'); } @@ -27,5 +28,4 @@ class Page extends Model 'content' => 'array', 'settings' => 'array', ]; - } diff --git a/app/Models/SubSection.php b/app/Containers/AppStructure/Models/SubSection.php similarity index 86% rename from app/Models/SubSection.php rename to app/Containers/AppStructure/Models/SubSection.php index fab7dab..cf9aeae 100644 --- a/app/Models/SubSection.php +++ b/app/Containers/AppStructure/Models/SubSection.php @@ -1,9 +1,9 @@ orderBy('sort', 'asc')->get()); + } +} diff --git a/app/Containers/AppStructure/UI/API/Routes/api.php b/app/Containers/AppStructure/UI/API/Routes/api.php new file mode 100644 index 0000000..a8bffa2 --- /dev/null +++ b/app/Containers/AppStructure/UI/API/Routes/api.php @@ -0,0 +1,11 @@ +group(function () { + Route::get('/getNavigation', [NavigateController::class, 'index'])->name('client.main.navigate'); +}); + + diff --git a/app/Containers/AppStructure/UI/API/Transformers/NavigationResource.php b/app/Containers/AppStructure/UI/API/Transformers/NavigationResource.php new file mode 100644 index 0000000..89ebba3 --- /dev/null +++ b/app/Containers/AppStructure/UI/API/Transformers/NavigationResource.php @@ -0,0 +1,23 @@ + + */ + public function toArray($request): array + { + return [ + 'id' => $this->id, + 'title' => $this->title, + 'slug' => $this->slug, + 'subSections' => SubSectionNavigateResource::collection($this->whenLoaded('subSections')->sortBy('sort')), + ]; + } +} diff --git a/app/Http/Resources/ClientPageNavigateResource.php b/app/Containers/AppStructure/UI/API/Transformers/PageNavigateResource.php similarity index 63% rename from app/Http/Resources/ClientPageNavigateResource.php rename to app/Containers/AppStructure/UI/API/Transformers/PageNavigateResource.php index 1057cb4..b7480a6 100644 --- a/app/Http/Resources/ClientPageNavigateResource.php +++ b/app/Containers/AppStructure/UI/API/Transformers/PageNavigateResource.php @@ -1,18 +1,18 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Containers/AppStructure/UI/API/Transformers/SubSectionNavigateResource.php b/app/Containers/AppStructure/UI/API/Transformers/SubSectionNavigateResource.php new file mode 100644 index 0000000..f203598 --- /dev/null +++ b/app/Containers/AppStructure/UI/API/Transformers/SubSectionNavigateResource.php @@ -0,0 +1,25 @@ + + */ + public function toArray($request): array + { + return [ + 'id' => $this->id, + 'title' => $this->title, + 'slug' => $this->slug, + 'pages' => PageNavigateResource::collection($this->whenLoaded('pages')), + ]; + } +} diff --git a/app/Http/Controllers/GenerateSitemapController.php b/app/Containers/AppStructure/UI/CLI/Commands/GenerateSitemap.php similarity index 83% rename from app/Http/Controllers/GenerateSitemapController.php rename to app/Containers/AppStructure/UI/CLI/Commands/GenerateSitemap.php index cf278cb..e4a0641 100644 --- a/app/Http/Controllers/GenerateSitemapController.php +++ b/app/Containers/AppStructure/UI/CLI/Commands/GenerateSitemap.php @@ -1,24 +1,44 @@ writeToFile(public_path('sitemap.xml')); - - return 'Sitemap generated successfully!'; } protected function generatePages(Sitemap $sitemap) @@ -44,6 +62,10 @@ class GenerateSitemapController extends Controller $pages = Page::query() ->where('is_visible', true) ->where('code', 200) + ->where('path', '!=', null) + ->where('is_url', false) + ->where('title', '!=', null) + ->where('searchable', true) ->get(); $this->addUrlsToSitemap($sitemap, $pages, function($page) { @@ -198,4 +220,4 @@ class GenerateSitemapController extends Controller ->setPriority($urlData['priority'])); } } -} \ No newline at end of file +} diff --git a/app/Containers/AppStructure/UI/CLI/Commands/RegisterRoutes.php b/app/Containers/AppStructure/UI/CLI/Commands/RegisterRoutes.php new file mode 100644 index 0000000..8061ec6 --- /dev/null +++ b/app/Containers/AppStructure/UI/CLI/Commands/RegisterRoutes.php @@ -0,0 +1,53 @@ +uri)->where('is_registered', '=', true)->exists()) { + // Если не существует, создаем новую запись + Page::create([ + 'path' => $route->uri, + 'is_registered' => true, + 'is_url' => false, + 'searchable' => false, + 'code' => 200, + ]); + + $this->info("Маршрут зарегистрирован: " . $route->uri); + } else { + $this->info("Маршрут уже существует: " . $route->uri); + } + } + + $this->info('Все маршруты успешно проверены.'); + } +} diff --git a/app/Http/Controllers/PageController.php b/app/Containers/AppStructure/UI/WEB/Controllers/PageController.php similarity index 54% rename from app/Http/Controllers/PageController.php rename to app/Containers/AppStructure/UI/WEB/Controllers/PageController.php index b22d828..a4a7a8e 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Containers/AppStructure/UI/WEB/Controllers/PageController.php @@ -1,29 +1,17 @@ first(); }); - if ($page === null) { abort(404); } @@ -45,6 +32,7 @@ class PageController extends Controller $seo = $this->seoPageProvider->getSeoForModel($page); + $page = new PageResource($page); @@ -52,7 +40,10 @@ class PageController extends Controller abort($page->code); } - - return Inertia::render('Page', compact('page', 'subSectionPages', 'seo')); + return inertia()->render('Page', [ + 'page' => $page, + 'subSectionPages' => $subSectionPages, + 'seo' => $seo, + ]); } } diff --git a/app/Http/Resources/PageResource.php b/app/Containers/AppStructure/UI/WEB/Transformers/PageResource.php similarity index 70% rename from app/Http/Resources/PageResource.php rename to app/Containers/AppStructure/UI/WEB/Transformers/PageResource.php index fba6e66..f244157 100644 --- a/app/Http/Resources/PageResource.php +++ b/app/Containers/AppStructure/UI/WEB/Transformers/PageResource.php @@ -1,18 +1,18 @@ + * @param \App\Ship\Requests\Request $request + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ - public function toArray(Request $request): array + public function toArray($request) { return [ 'id' => $this->id, diff --git a/app/Containers/Article/Actions/ListPostsAction.php b/app/Containers/Article/Actions/ListPostsAction.php new file mode 100644 index 0000000..a658878 --- /dev/null +++ b/app/Containers/Article/Actions/ListPostsAction.php @@ -0,0 +1,39 @@ +getPostsTask->run($filters); + $categories = $this->getCategoriesTask->run(); + $tags = $this->getTagsTask->run(); + $filtersData = $this->buildFiltersTask->run($filters); + $seo = $this->seoPageProvider->getSeoForCurrentPage(); + + return [ + 'posts' => inertia()->deepMerge(fn() => PostListResource::collection($posts->items())), + 'posts_pagination' => $posts->toArray(), + 'filters' => $filtersData, + 'categories' => $categories, + 'tags' => $tags, + 'seo' => $seo, + ]; + } +} \ No newline at end of file diff --git a/app/Containers/Article/Actions/ViewPostAction.php b/app/Containers/Article/Actions/ViewPostAction.php new file mode 100644 index 0000000..aeabfd2 --- /dev/null +++ b/app/Containers/Article/Actions/ViewPostAction.php @@ -0,0 +1,8 @@ +belongsTo(Category::class); + } + + public function author() : BelongsTo + { + return $this->belongsTo(User::class, 'user_id'); + } + + public function slide(): MorphOne + { + return $this->morphOne(Slide::class, 'slidable'); + } + + protected $casts = [ + 'content' => 'array', + 'authors' => 'array', + 'status' => PostStatus::class, + 'images' => 'array' + ]; +} diff --git a/app/Models/Tag.php b/app/Containers/Article/Models/Tag.php similarity index 62% rename from app/Models/Tag.php rename to app/Containers/Article/Models/Tag.php index 6b7af87..27ec426 100644 --- a/app/Models/Tag.php +++ b/app/Containers/Article/Models/Tag.php @@ -1,9 +1,9 @@ filterBuilder->reset(); + + // 1. Поисковый фильтр + $this->filterBuilder->add( + key: 'search_filter', + type: 'search', + value: $filters['search'] ?? null, + param: 'search' + ); + + + // 2. Категории + + $categoriesContent = []; + if (!empty($filters['category'])) { + $categoriesSlugs = Arr::wrap($filters['category']); + foreach ($categoriesSlugs as $item) { + $cacheKey = 'category_content_' . $item; + $categoriesContent[$item] = Cache::remember($cacheKey, now()->addHours(1), function () use ($item) { + return new CategoryResource(Category::where('slug', $item)->first()); + }); + } + } + $this->filterBuilder->add( + key: 'category_filter', + type: 'category', + value: $categoriesSlugs ?? null, + param: 'category', + content: $categoriesContent + ); + + + // 3. Теги + + $tagsContent = []; + if (!empty($filters['tag'])) { + $tagsSlugs = Arr::wrap($filters['tag']); + foreach ($tagsSlugs as $item) { + $cacheKey = 'tag_content_' . $item; + $tagsContent[$item] = Cache::remember($cacheKey, now()->addHours(1), function () use ($item) { + return new TagResource(DB::table('tags') + ->where(DB::raw("JSON_UNQUOTE(JSON_EXTRACT(slug, '$.ru'))"), $item) + ->first()); + }); + } + } + $this->filterBuilder->add( + key: 'tag_filter', + type: 'tag', + value: $tagsSlugs ?? null, + param: 'tag', + content: $tagsContent + ); + + + // 4. Сортировка + $this->filterBuilder->add( + key: 'sortingBy_filter', + type: 'sort', + value: $filters['sort'] ?? null, + param: 'sort' + ); + + + return $this->filterBuilder->get(); + } +} \ No newline at end of file diff --git a/app/Containers/Article/Tasks/GetCategoriesTask.php b/app/Containers/Article/Tasks/GetCategoriesTask.php new file mode 100644 index 0000000..3b7c1b9 --- /dev/null +++ b/app/Containers/Article/Tasks/GetCategoriesTask.php @@ -0,0 +1,18 @@ +addHours(48), function () { + return CategoryResource::collection(Category::has('posts')->get()); + }); + } +} \ No newline at end of file diff --git a/app/Containers/Article/Tasks/GetPostsTask.php b/app/Containers/Article/Tasks/GetPostsTask.php new file mode 100644 index 0000000..fc05738 --- /dev/null +++ b/app/Containers/Article/Tasks/GetPostsTask.php @@ -0,0 +1,45 @@ +addHours(1), function () use ($filters) { + $query = Post::query() + ->with('category') + ->select('title', 'slug', 'authors', 'category_id', 'preview', 'search_data', 'publish_at') + ->where('status', 'published') + ->where('publish_at', '<', Carbon::now()) + ->when(!empty($filters['tag']), function ($query) use ($filters) { + if (is_array($filters['tag'])) { + return $query->withAnyTags($filters['tag']); + } + + $slugsArray = explode(',', $filters['tag']); + return $query->withAnyTags($slugsArray); + }) + ->when(!empty($filters['category']), function ($query) use ($filters) { + if (is_array($filters['category'])) { + $query->whereHas('category', function ($query) use ($filters) { + $query->whereIn('slug', $filters['category']); + }); + } + }) + ->when(!empty($filters['search']), function ($query) use ($filters) { + $query->whereRaw('LOWER(title) like ?', ["%".strtolower($filters['search'])."%"]); + }); + + $sort = $filters['sort'] ?? 'desc'; + return $query->orderBy('publish_at', $sort)->paginate(9)->withQueryString(); + }); + } +} \ No newline at end of file diff --git a/app/Containers/Article/Tasks/GetTagsTask.php b/app/Containers/Article/Tasks/GetTagsTask.php new file mode 100644 index 0000000..ff0f289 --- /dev/null +++ b/app/Containers/Article/Tasks/GetTagsTask.php @@ -0,0 +1,25 @@ +addHours(1), function () { + $tagIds = DB::table('taggables') + ->distinct() + ->select('tag_id') + ->where('taggable_type', Post::class) + ->get() + ->pluck('tag_id'); + + return Tag::whereIn('id', $tagIds)->get(); + }); + } +} \ No newline at end of file diff --git a/app/Containers/Article/UI/WEB/Controllers/IndexPostController.php b/app/Containers/Article/UI/WEB/Controllers/IndexPostController.php new file mode 100644 index 0000000..3d48f10 --- /dev/null +++ b/app/Containers/Article/UI/WEB/Controllers/IndexPostController.php @@ -0,0 +1,23 @@ +only(['search', 'category', 'tag', 'sort', 'page']); + + $data = $this->listPostsAction->run($filters); + + return inertia()->render('Client/Posts/Index', $data); + } +} \ No newline at end of file diff --git a/app/Containers/Article/UI/WEB/Controllers/ShowPostController.php b/app/Containers/Article/UI/WEB/Controllers/ShowPostController.php new file mode 100644 index 0000000..7718a60 --- /dev/null +++ b/app/Containers/Article/UI/WEB/Controllers/ShowPostController.php @@ -0,0 +1,40 @@ +value . $slug, + now()->addHours(1), + fn() => Post::where('slug', $slug) + ->where('publish_at', '<', Carbon::now()) + ->firstOrFail() + ); + + $seo = Cache::remember( + CacheKeys::POST_PREFIX->value . 'seo_' . $slug, + now()->addHours(1), + fn() => $this->seoPageProvider->getSeoForModel($postData) + ); + + return inertia()->render('Client/Posts/Show', [ + 'post' => new PostItemResource($postData), + 'seo' => $seo, + ]); + } +} \ No newline at end of file diff --git a/app/Containers/Article/UI/WEB/Routes/web.php b/app/Containers/Article/UI/WEB/Routes/web.php new file mode 100644 index 0000000..e176c69 --- /dev/null +++ b/app/Containers/Article/UI/WEB/Routes/web.php @@ -0,0 +1,14 @@ +group(function () { + Route::get('/news', IndexPostController::class)->name('client.post.index'); + Route::get('/news/{slug}', ShowPostController::class)->name('client.post.show'); +}); + + + diff --git a/app/Http/Resources/CategoryResource.php b/app/Containers/Article/UI/WEB/Transformers/CategoryResource.php similarity index 52% rename from app/Http/Resources/CategoryResource.php rename to app/Containers/Article/UI/WEB/Transformers/CategoryResource.php index b9436d2..180dad7 100644 --- a/app/Http/Resources/CategoryResource.php +++ b/app/Containers/Article/UI/WEB/Transformers/CategoryResource.php @@ -1,18 +1,21 @@ + * @param \App\Ship\Requests\Request $request + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/PostResource.php b/app/Containers/Article/UI/WEB/Transformers/PostItemResource.php similarity index 61% rename from app/Http/Resources/PostResource.php rename to app/Containers/Article/UI/WEB/Transformers/PostItemResource.php index 8031684..f7ec139 100644 --- a/app/Http/Resources/PostResource.php +++ b/app/Containers/Article/UI/WEB/Transformers/PostItemResource.php @@ -1,19 +1,19 @@ + * @param \App\Ship\Requests\Request $request + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ - public function toArray(Request $request): array + public function toArray($request) { return [ 'id' => $this->id, @@ -22,7 +22,7 @@ class PostResource extends JsonResource 'content' => $this->content, 'is_published' => $this->is_published, 'category' => $this->category, - 'tags' => ClientTagResource::collection($this->tags()->get()), + 'tags' => TagResource::collection($this->tags()->get()), 'authors' => $this->authors, 'gallery' => $this->images, 'reading_time' => $this->reading_time, diff --git a/app/Http/Resources/ClientPostListResource.php b/app/Containers/Article/UI/WEB/Transformers/PostListResource.php similarity index 66% rename from app/Http/Resources/ClientPostListResource.php rename to app/Containers/Article/UI/WEB/Transformers/PostListResource.php index a56dfa3..d645ec6 100644 --- a/app/Http/Resources/ClientPostListResource.php +++ b/app/Containers/Article/UI/WEB/Transformers/PostListResource.php @@ -1,19 +1,19 @@ + * @param \App\Ship\Requests\Request $request + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ - public function toArray(Request $request): array + public function toArray($request) { return [ 'id' => $this->id, diff --git a/app/Containers/Article/UI/WEB/Transformers/TagResource.php b/app/Containers/Article/UI/WEB/Transformers/TagResource.php new file mode 100644 index 0000000..2e1120e --- /dev/null +++ b/app/Containers/Article/UI/WEB/Transformers/TagResource.php @@ -0,0 +1,26 @@ + $this->id, + 'name' => $this->name, + 'slug' => $this->slug, + ]; + } +} diff --git a/app/Enums/TypeExam.php b/app/Containers/Education/Enums/TypeExam.php similarity index 96% rename from app/Enums/TypeExam.php rename to app/Containers/Education/Enums/TypeExam.php index 741a9a4..51daf0f 100644 --- a/app/Enums/TypeExam.php +++ b/app/Containers/Education/Enums/TypeExam.php @@ -1,6 +1,6 @@ 'array' ]; - public function degrees() - { - return $this->hasMany(CampaignDegree::class); - } - public function admission_plans() + public function admission_plans(): HasMany { return $this->hasMany(AdmissionPlan::class, 'admission_campaigns_id', 'id'); } - public function educationalPrograms() + public function educationalPrograms(): HasManyThrough { return $this->hasManyThrough( EducationalProgram::class, diff --git a/app/Models/AdmissionPlan.php b/app/Containers/Education/Models/AdmissionPlan.php similarity index 66% rename from app/Models/AdmissionPlan.php rename to app/Containers/Education/Models/AdmissionPlan.php index 5de646e..0396af8 100644 --- a/app/Models/AdmissionPlan.php +++ b/app/Containers/Education/Models/AdmissionPlan.php @@ -1,9 +1,10 @@ 'array' ]; - public function educationalProgram() + public function educationalProgram(): BelongsTo { return $this->belongsTo(EducationalProgram::class, 'educational_programs_id', 'id'); } - public function admissionCampaign() + public function admissionCampaign(): BelongsTo { return $this->belongsTo(AdmissionCampaign::class, 'admission_campaigns_id', 'id'); } diff --git a/app/Models/DirectionStudy.php b/app/Containers/Education/Models/DirectionStudy.php similarity index 72% rename from app/Models/DirectionStudy.php rename to app/Containers/Education/Models/DirectionStudy.php index 92e1fbb..fcc264d 100644 --- a/app/Models/DirectionStudy.php +++ b/app/Containers/Education/Models/DirectionStudy.php @@ -1,11 +1,12 @@ LevelEducational::class, ]; - public function degree() - { - return $this->belongsTo(CampaignDegree::class, 'campaign_degree_id', 'id'); - } - - public function programs() + public function programs(): HasMany { return $this->hasMany(EducationalProgram::class); } - public function scopeWithActivePrograms(Builder $query) + public function scopeWithActivePrograms(Builder $query): Builder { return $query->with(['programs' => function ($query) { $query->whereHas('admission_plans.admissionCampaign', function ($q) { @@ -37,31 +33,31 @@ class DirectionStudy extends Model }]); } - public function scopeWithActiveAdmissionCampaign(Builder $query) + public function scopeWithActiveAdmissionCampaign(Builder $query): Builder { return $query->whereHas('programs.admission_plans.admissionCampaign', function ($q) { $q->where('status', 1); }); } - public function scopeWithAdmissionCampaignByYear(Builder $query, string $year) + public function scopeWithAdmissionCampaignByYear(Builder $query, string $year): Builder { return $query->whereHas('programs.admission_plans.admissionCampaign', function ($q) use ($year) { $q->where('status', 1)->where('academic_year', $year); }); } - public function scopeForBachelorLevel(Builder $query) + public function scopeForBachelorLevel(Builder $query): Builder { return $query->where('lvl_edu', LevelEducational::BACHELOR); } - public function scopeForMiddleLevel(Builder $query) + public function scopeForMiddleLevel(Builder $query): Builder { return $query->whereIn('lvl_edu', [LevelEducational::MIDDLE_LEVEL_SPECIALIST_TRAINING, LevelEducational::PREPARATION_OF_QUALIFIED_WORKERS]); } - public function scopeForMasterLevel(Builder $query) + public function scopeForMasterLevel(Builder $query): Builder { return $query->where('lvl_edu', LevelEducational::MASTER); } diff --git a/app/Models/EducationalProgram.php b/app/Containers/Education/Models/EducationalProgram.php similarity index 52% rename from app/Models/EducationalProgram.php rename to app/Containers/Education/Models/EducationalProgram.php index 1635362..970f531 100644 --- a/app/Models/EducationalProgram.php +++ b/app/Containers/Education/Models/EducationalProgram.php @@ -1,14 +1,19 @@ LevelEducational::class, ]; - public function directionStudy() + public function directionStudy(): BelongsTo { return $this->belongsTo(DirectionStudy::class); } - public function departments() + public function departments(): BelongsToMany { return $this->belongsToMany(Department::class, 'program_department'); } - public function admission_plans() + public function admission_plans(): HasMany { return $this->hasMany(AdmissionPlan::class, 'educational_programs_id', 'id'); } - - public function seo() - { - return $this->morphOne(Seo::class, 'seoable'); - } } diff --git a/app/Policies/AdmissionCampaignPolicy.php b/app/Containers/Education/Policies/AdmissionCampaignPolicy.php similarity index 95% rename from app/Policies/AdmissionCampaignPolicy.php rename to app/Containers/Education/Policies/AdmissionCampaignPolicy.php index 9d1c390..465e2b6 100644 --- a/app/Policies/AdmissionCampaignPolicy.php +++ b/app/Containers/Education/Policies/AdmissionCampaignPolicy.php @@ -1,9 +1,9 @@ where('status', 1)->firstOrFail(); + return $activeCampaign->academic_year; + } +} diff --git a/app/Http/Controllers/UpdateAdmissionPlansDataApiController.php b/app/Containers/Education/UI/API/Controllers/UpdateAdmissionPlansDataApiController.php similarity index 84% rename from app/Http/Controllers/UpdateAdmissionPlansDataApiController.php rename to app/Containers/Education/UI/API/Controllers/UpdateAdmissionPlansDataApiController.php index 6e62c22..8210854 100644 --- a/app/Http/Controllers/UpdateAdmissionPlansDataApiController.php +++ b/app/Containers/Education/UI/API/Controllers/UpdateAdmissionPlansDataApiController.php @@ -1,7 +1,8 @@ name('academic.year'); + +Route::middleware(['auth', 'superadmin'])->group(function () { + Route::get('/get-edu-program-data', [UpdateEduDataApiController::class, 'index']); + Route::get('/get-admission-plans-data', [UpdateAdmissionPlansDataApiController::class, 'index']); +}); \ No newline at end of file diff --git a/app/Http/Controllers/ClientProgramController.php b/app/Containers/Education/UI/WEB/Controllers/ClientProgramController.php similarity index 89% rename from app/Http/Controllers/ClientProgramController.php rename to app/Containers/Education/UI/WEB/Controllers/ClientProgramController.php index eba06ac..0e6a177 100644 --- a/app/Http/Controllers/ClientProgramController.php +++ b/app/Containers/Education/UI/WEB/Controllers/ClientProgramController.php @@ -1,26 +1,27 @@ seoPageProvider->getSeoForModel($programModel); }); - $program = new EducationalProgramFullResource($programModel); + $program = new EducationalProgramResource($programModel); return Inertia::render('Client/Programs/Show', compact('program', 'formsEdu', 'seo')); } diff --git a/app/Containers/Education/UI/WEB/Routes/web.php b/app/Containers/Education/UI/WEB/Routes/web.php new file mode 100644 index 0000000..03e2f25 --- /dev/null +++ b/app/Containers/Education/UI/WEB/Routes/web.php @@ -0,0 +1,12 @@ +group(function () { + Route::get('/programs/', [ClientProgramController::class, 'index'])->name('client.program.index'); + Route::get('/program/{slug}', [ClientProgramController::class, 'show'])->name('client.program.show'); +}); + + diff --git a/app/Containers/Education/UI/WEB/Transformers/DirectionStudyResource.php b/app/Containers/Education/UI/WEB/Transformers/DirectionStudyResource.php new file mode 100644 index 0000000..a599898 --- /dev/null +++ b/app/Containers/Education/UI/WEB/Transformers/DirectionStudyResource.php @@ -0,0 +1,18 @@ + $this->id, + 'name' => $this->name, + 'code' => $this->code, + 'programs' => EducationalProgramBasicResource::collection($this->programs), + ]; + } +} diff --git a/app/Http/Resources/EducationalProgramResource.php b/app/Containers/Education/UI/WEB/Transformers/EducationalProgramBasicResource.php similarity index 77% rename from app/Http/Resources/EducationalProgramResource.php rename to app/Containers/Education/UI/WEB/Transformers/EducationalProgramBasicResource.php index 223a483..d3803db 100644 --- a/app/Http/Resources/EducationalProgramResource.php +++ b/app/Containers/Education/UI/WEB/Transformers/EducationalProgramBasicResource.php @@ -1,11 +1,11 @@ - */ - public function toArray(Request $request): array + + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Containers/Event/Loaders/AliasesLoader.php b/app/Containers/Event/Loaders/AliasesLoader.php new file mode 100644 index 0000000..de27fae --- /dev/null +++ b/app/Containers/Event/Loaders/AliasesLoader.php @@ -0,0 +1,11 @@ + 'array', ]; - public function seo() - { - return $this->morphOne(Seo::class, 'seoable'); - } public function category() : BelongsTo { diff --git a/app/Models/EventCategory.php b/app/Containers/Event/Models/EventCategory.php similarity index 83% rename from app/Models/EventCategory.php rename to app/Containers/Event/Models/EventCategory.php index 8d42c41..64a8cef 100644 --- a/app/Models/EventCategory.php +++ b/app/Containers/Event/Models/EventCategory.php @@ -1,9 +1,9 @@ value . 'categories', now()->addDay(), - fn() => ClientEventCategoryResource::collection(EventCategory::has('events')->get()) + fn() => EventCategoryResource::collection(EventCategory::has('events')->get()) ); $filters = $this->getFilters(); @@ -82,7 +77,7 @@ class ClientEventController extends Controller } ); - $event = new ClientEventFullResource($eventModel); + $event = new EventResource($eventModel); return Inertia::render('Client/Events/Show', compact( @@ -104,7 +99,7 @@ class ClientEventController extends Controller $categories = Cache::remember( CacheKeys::EVENTS_PREFIX->value . 'categories', now()->addDay(), - fn() => ClientEventCategoryResource::collection(EventCategory::has('events')->get()) + fn() => EventCategoryResource::collection(EventCategory::has('events')->get()) ); $filters = $this->getFilters(); @@ -149,7 +144,7 @@ class ClientEventController extends Controller private function getEvents(array $currentDate) { - return ClientEventResource::collection(Event::select('title', 'slug', 'event_date_start', 'event_time_start', 'address', 'is_online', 'category_id') + return EventPreviewResource::collection(Event::select('title', 'slug', 'event_date_start', 'event_time_start', 'address', 'is_online', 'category_id') ->whereDate('event_date_start', '=', $currentDate['fullDate']) ->with('category') ->when(request()->input('is_online'), function ($query, $value) { @@ -172,7 +167,7 @@ class ClientEventController extends Controller private function getEventsArchive() { - return ClientEventResource::collection(Event::select('title', 'slug', 'event_date_start', 'event_time_start', 'address', 'is_online', 'category_id') + return EventPreviewResource::collection(Event::select('title', 'slug', 'event_date_start', 'event_time_start', 'address', 'is_online', 'category_id') ->whereDate('event_date_start', '<', now()) ->with('category') ->when(request()->input('is_online'), function ($query, $value) { @@ -223,8 +218,6 @@ class ClientEventController extends Controller // Получаем массив без ключей - - // Извлекаем уникальные даты из событий return $events->map(function ($event) { $date = new DateTime($event->event_date_start); @@ -252,7 +245,7 @@ class ClientEventController extends Controller $categoriesContent = []; if (request()->input('category')) { foreach (request()->input('category') as $item) { - $categoriesContent[$item] = new ClientEventCategoryResource(EventCategory::where('slug', $item)->first()); + $categoriesContent[$item] = new EventCategoryResource(EventCategory::where('slug', $item)->first()); } } diff --git a/app/Containers/Event/UI/WEB/Routes/web.php b/app/Containers/Event/UI/WEB/Routes/web.php new file mode 100644 index 0000000..b1e784e --- /dev/null +++ b/app/Containers/Event/UI/WEB/Routes/web.php @@ -0,0 +1,13 @@ +group(function () { + Route::get('/events', [ClientEventController::class, 'index'])->name('client.event.index'); + Route::get('/events/archive', [ClientEventController::class, 'archive'])->name('client.event.archive'); // Доделать builder + Route::get('/events/{slug}', [ClientEventController::class, 'show'])->name('client.event.show'); +}); + + diff --git a/app/Http/Resources/EventCategoryResource.php b/app/Containers/Event/UI/WEB/Transformers/EventCategoryResource.php similarity index 57% rename from app/Http/Resources/EventCategoryResource.php rename to app/Containers/Event/UI/WEB/Transformers/EventCategoryResource.php index 5252a05..d48b360 100644 --- a/app/Http/Resources/EventCategoryResource.php +++ b/app/Containers/Event/UI/WEB/Transformers/EventCategoryResource.php @@ -1,9 +1,9 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return parent::toArray($request); } diff --git a/app/Http/Resources/ClientEventResource.php b/app/Containers/Event/UI/WEB/Transformers/EventPreviewResource.php similarity index 73% rename from app/Http/Resources/ClientEventResource.php rename to app/Containers/Event/UI/WEB/Transformers/EventPreviewResource.php index ec3178c..abbcba3 100644 --- a/app/Http/Resources/ClientEventResource.php +++ b/app/Containers/Event/UI/WEB/Transformers/EventPreviewResource.php @@ -1,19 +1,18 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/ClientEventFullResource.php b/app/Containers/Event/UI/WEB/Transformers/EventResource.php similarity index 71% rename from app/Http/Resources/ClientEventFullResource.php rename to app/Containers/Event/UI/WEB/Transformers/EventResource.php index 680687e..56293d7 100644 --- a/app/Http/Resources/ClientEventFullResource.php +++ b/app/Containers/Event/UI/WEB/Transformers/EventResource.php @@ -1,13 +1,11 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/EventThumbnailResource.php b/app/Containers/Event/UI/WEB/Transformers/EventThumbnailResource.php similarity index 81% rename from app/Http/Resources/EventThumbnailResource.php rename to app/Containers/Event/UI/WEB/Transformers/EventThumbnailResource.php index fec971d..d71c275 100644 --- a/app/Http/Resources/EventThumbnailResource.php +++ b/app/Containers/Event/UI/WEB/Transformers/EventThumbnailResource.php @@ -1,10 +1,9 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Containers/InstituteStructure/Loaders/AliasesLoader.php b/app/Containers/InstituteStructure/Loaders/AliasesLoader.php new file mode 100644 index 0000000..b3136f0 --- /dev/null +++ b/app/Containers/InstituteStructure/Loaders/AliasesLoader.php @@ -0,0 +1,11 @@ + 'array', ]; - public function seo() - { - return $this->morphOne(Seo::class, 'seoable'); - } - - public function faculty() + public function faculty(): BelongsTo { return $this->belongsTo(Faculty::class); } - public function workers() + public function workers(): BelongsToMany { return $this->belongsToMany(User::class, 'workers_departments')->withPivot(['position', 'sort', 'service_email', 'service_phone', 'cabinet']); } - public function programs() + public function programs(): BelongsToMany { return $this->belongsToMany(EducationalProgram::class, 'program_department'); } - public function teachers() + public function teachers(): BelongsToMany { return $this->belongsToMany(User::class, 'teachers_departments')->withPivot(['teaching_position', 'sort', 'service_email', 'service_phone', 'cabinet']); } diff --git a/app/Models/Division.php b/app/Containers/InstituteStructure/Models/Division.php similarity index 70% rename from app/Models/Division.php rename to app/Containers/InstituteStructure/Models/Division.php index fca6cd0..051e3c5 100644 --- a/app/Models/Division.php +++ b/app/Containers/InstituteStructure/Models/Division.php @@ -1,14 +1,16 @@ 'array', ]; - public function seo() - { - return $this->morphOne(Seo::class, 'seoable'); - } - public function workers() { return $this->belongsToMany(User::class, 'division_user')->withPivot(['administrativePosition', 'sort', 'service_email', 'service_phone', 'cabinet']); diff --git a/app/Models/Faculty.php b/app/Containers/InstituteStructure/Models/Faculty.php similarity index 54% rename from app/Models/Faculty.php rename to app/Containers/InstituteStructure/Models/Faculty.php index 9ba8eb8..8157531 100644 --- a/app/Models/Faculty.php +++ b/app/Containers/InstituteStructure/Models/Faculty.php @@ -1,13 +1,17 @@ 'array', ]; - public function seo() - { - return $this->morphOne(Seo::class, 'seoable'); - } - - public function departments() + public function departments(): HasMany { return $this->hasMany(Department::class); } - public function workers() + public function workers(): BelongsToMany { return $this->belongsToMany(User::class, 'workers_faculties')->withPivot(['position', 'sort', 'service_email', 'service_phone', 'cabinet'])->whereHas('userDetail'); } - - - } diff --git a/app/Policies/DepartmentPolicy.php b/app/Containers/InstituteStructure/Policies/DepartmentPolicy.php similarity index 94% rename from app/Policies/DepartmentPolicy.php rename to app/Containers/InstituteStructure/Policies/DepartmentPolicy.php index 67cc91d..373a87c 100644 --- a/app/Policies/DepartmentPolicy.php +++ b/app/Containers/InstituteStructure/Policies/DepartmentPolicy.php @@ -1,9 +1,9 @@ value . 'active_' . $faculty->id, now()->addDay(), function () use ($faculty) { - return ClientDepartmentPreviewResource::collection( + return DepartmentPreviewResource::collection( Department::query() ->where('is_active', true) ->where('faculty_id', $faculty->id) @@ -96,12 +95,11 @@ class ClientDepartmentController extends Controller } - private function groupProgramsByDirection(Collection $programs) + private function groupProgramsByDirection(Collection $programs): Collection { // Группируем программы по имени направления - $grouped = $programs->groupBy(function ($program) { + return $programs->groupBy(function ($program) { return $program->directionStudy->code . " " . $program->directionStudy->name; // Используем имя направления как ключ }); - return $grouped; } } diff --git a/app/Http/Controllers/ClientDivisionController.php b/app/Containers/InstituteStructure/UI/WEB/Controllers/ClientDivisionController.php similarity index 79% rename from app/Http/Controllers/ClientDivisionController.php rename to app/Containers/InstituteStructure/UI/WEB/Controllers/ClientDivisionController.php index c0e16af..35873c0 100644 --- a/app/Http/Controllers/ClientDivisionController.php +++ b/app/Containers/InstituteStructure/UI/WEB/Controllers/ClientDivisionController.php @@ -1,19 +1,18 @@ value . 'active_list', now()->addDay(), // Кешируем на 1 день function () { - return FacultyResource::collection( + return FacultyPreviewResource::collection( Faculty::query() ->where('is_active', true) ->get() @@ -44,7 +46,7 @@ class ClientFacultyController extends Controller CacheKeys::FACULTIES_PREFIX->value . 'active_list', now()->addDay(), function () { - return FacultyResource::collection( + return FacultyPreviewResource::collection( Faculty::query() ->where('is_active', true) ->get() @@ -59,7 +61,7 @@ class ClientFacultyController extends Controller function () use ($slug) { return Faculty::where('slug', $slug) ->where('is_active', true) - ->with(['departments.faculty', 'workers.userDetail', 'seo']) + ->with(['departments.faculty', 'workers', 'seo']) ->firstOrFail(); } ); @@ -72,7 +74,7 @@ class ClientFacultyController extends Controller } ); - $faculty = new FullFacultyResource($faculty); + $faculty = new FacultyResource($faculty); diff --git a/app/Containers/InstituteStructure/UI/WEB/Routes/web.php b/app/Containers/InstituteStructure/UI/WEB/Routes/web.php new file mode 100644 index 0000000..4759c14 --- /dev/null +++ b/app/Containers/InstituteStructure/UI/WEB/Routes/web.php @@ -0,0 +1,21 @@ +group(function () { + // Факультеты и кафедры + Route::get('/faculties', [ClientFacultyController::class, 'index'])->name('client.faculty.index'); + Route::get('/faculties/{slug}', [ClientFacultyController::class, 'show'])->name('client.faculty.show'); + Route::get('/faculties/{facultySlug}/{departmentSlug}', [ClientDepartmentController::class, 'show'])->name('client.department.show'); + + // Подразделения института + Route::get('/divisions', [ClientDivisionController::class, 'index'])->name('client.division.index'); + Route::get('/divisions/{slug}', [ClientDivisionController::class, 'show'])->name('client.division.show'); +}); + + diff --git a/app/Http/Resources/DepartmentPreviewResource.php b/app/Containers/InstituteStructure/UI/WEB/Transformers/DepartmentPreviewResource.php similarity index 60% rename from app/Http/Resources/DepartmentPreviewResource.php rename to app/Containers/InstituteStructure/UI/WEB/Transformers/DepartmentPreviewResource.php index a87713e..c2a1ca8 100644 --- a/app/Http/Resources/DepartmentPreviewResource.php +++ b/app/Containers/InstituteStructure/UI/WEB/Transformers/DepartmentPreviewResource.php @@ -1,9 +1,9 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, 'title' => $this->title, - 'faculty' => $this->faculty, 'slug' => $this->slug, ]; } diff --git a/app/Containers/InstituteStructure/UI/WEB/Transformers/DepartmentResource.php b/app/Containers/InstituteStructure/UI/WEB/Transformers/DepartmentResource.php new file mode 100644 index 0000000..a7dbba8 --- /dev/null +++ b/app/Containers/InstituteStructure/UI/WEB/Transformers/DepartmentResource.php @@ -0,0 +1,29 @@ + + */ + public function toArray($request): array + { + return [ + 'id' => $this->id, + 'title' => $this->title, + 'content' => $this->content, + 'faculty' => $this->faculty, + 'slug' => $this->slug, + 'workers' => PersonDepartmentPreviewResource::collection($this->workers), + 'teachers' => PersonDepartmentTeachPreviewResource::collection($this->teachers), + ]; + } +} diff --git a/app/Http/Resources/DivisionResource.php b/app/Containers/InstituteStructure/UI/WEB/Transformers/DivisionResource.php similarity index 52% rename from app/Http/Resources/DivisionResource.php rename to app/Containers/InstituteStructure/UI/WEB/Transformers/DivisionResource.php index 47d95a3..6289d9c 100644 --- a/app/Http/Resources/DivisionResource.php +++ b/app/Containers/InstituteStructure/UI/WEB/Transformers/DivisionResource.php @@ -1,9 +1,9 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, 'title' => $this->title, 'slug' => $this->slug, - 'workers' => ClientPersonDivisionPreviewResource::collection($this->whenLoaded('workers')), + 'workers' => PersonDivisionPreviewResource::collection($this->whenLoaded('workers')), 'description' => $this->description, ]; } diff --git a/app/Http/Resources/FacultyResource.php b/app/Containers/InstituteStructure/UI/WEB/Transformers/FacultyPreviewResource.php similarity index 60% rename from app/Http/Resources/FacultyResource.php rename to app/Containers/InstituteStructure/UI/WEB/Transformers/FacultyPreviewResource.php index e7589a9..e305bf8 100644 --- a/app/Http/Resources/FacultyResource.php +++ b/app/Containers/InstituteStructure/UI/WEB/Transformers/FacultyPreviewResource.php @@ -1,18 +1,18 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/FullFacultyResource.php b/app/Containers/InstituteStructure/UI/WEB/Transformers/FacultyResource.php similarity index 55% rename from app/Http/Resources/FullFacultyResource.php rename to app/Containers/InstituteStructure/UI/WEB/Transformers/FacultyResource.php index a6024f5..913f79a 100644 --- a/app/Http/Resources/FullFacultyResource.php +++ b/app/Containers/InstituteStructure/UI/WEB/Transformers/FacultyResource.php @@ -1,18 +1,19 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, @@ -20,7 +21,7 @@ class FullFacultyResource extends JsonResource 'content' => $this->content, 'shortTitle' => $this->abbreviation, 'slug' => $this->slug, - 'workers' => ClientPersonFacultyPreviewResource::collection($this->workers), + 'workers' => PersonFacultyPreviewResource::collection($this->workers), 'departments' => DepartmentPreviewResource::collection($this->departments) ]; } diff --git a/app/Containers/Post/Models/Post.php b/app/Containers/Post/Models/Post.php deleted file mode 100644 index 9c047bf..0000000 --- a/app/Containers/Post/Models/Post.php +++ /dev/null @@ -1,64 +0,0 @@ -id); - Cache::forget('posts_' . $post->category_id . '_*'); // Очистка кеша для всех постов в категории - }); - - static::deleted(function ($post) { - Cache::forget('post_' . $post->id); - Cache::forget('posts_' . $post->category_id . '_*'); // Очистка кеша для всех постов в категории - }); - } - - public function category() : BelongsTo - { - return $this->belongsTo(Category::class); - } - - public function author() : BelongsTo - { - return $this->belongsTo(User::class, 'user_id'); - } - - public function seo() - { - return $this->morphOne(Seo::class, 'seoable'); - } - - public function mainSlider() - { - return $this->morphOne(MainSlider::class, 'slidable'); - } - - protected $casts = [ - 'content' => 'array', - 'authors' => 'array', - 'status' => PostStatus::class, - 'images' => 'array' - ]; -} diff --git a/app/Containers/Schedule/Loaders/AliasesLoader.php b/app/Containers/Schedule/Loaders/AliasesLoader.php new file mode 100644 index 0000000..51e03a0 --- /dev/null +++ b/app/Containers/Schedule/Loaders/AliasesLoader.php @@ -0,0 +1,11 @@ +belongsTo(Faculty::class); + } + public function schedules(): \Illuminate\Database\Eloquent\Relations\HasMany + { + return $this->hasMany(Schedule::class); + } +} diff --git a/app/Models/Schedule.php b/app/Containers/Schedule/Models/Schedule.php similarity index 70% rename from app/Models/Schedule.php rename to app/Containers/Schedule/Models/Schedule.php index 69fcc1a..ed56f8c 100644 --- a/app/Models/Schedule.php +++ b/app/Containers/Schedule/Models/Schedule.php @@ -1,9 +1,10 @@ 'array', ]; - public function faculty() - { - return $this->belongsTo(Faculty::class); - } - public function educationalGroup(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(EducationalGroup::class); } - - } diff --git a/app/Policies/EducationalGroupPolicy.php b/app/Containers/Schedule/Policies/EducationalGroupPolicy.php similarity index 95% rename from app/Policies/EducationalGroupPolicy.php rename to app/Containers/Schedule/Policies/EducationalGroupPolicy.php index a7e22ce..24ccffa 100644 --- a/app/Policies/EducationalGroupPolicy.php +++ b/app/Containers/Schedule/Policies/EducationalGroupPolicy.php @@ -1,9 +1,9 @@ has('schedules') ->when(request()->input('search'), function ($query, $search) { $query->whereRaw('LOWER(title) like ?', ["%".strtolower($search)."%"]); @@ -32,11 +29,16 @@ class ClientScheduleController extends Controller $query->where('education_form_id', FormEducation::fromName($form)->value); }) - ->with('schedules') ->with('faculty') + ->orderBy('faculty_id') ->orderBy('title') - ->get()); + ->paginate(10); + + $schedulesPaginate = $educationalGroups->toArray(); + unset($schedulesPaginate['data']); + $educationalGroups = EducationalGroupResource::collection($educationalGroups->items()); + $schedulesByFaculty = $educationalGroups->groupBy(function ($group) { return $group->faculty->title; @@ -44,8 +46,6 @@ class ClientScheduleController extends Controller $schedulesByFaculty = $schedulesByFaculty->toArray(); - - $forms_education = []; foreach (FormEducation::cases() as $case) { $forms_education[$case->name] = $case->getLabel(); @@ -71,13 +71,23 @@ class ClientScheduleController extends Controller $seo = $this->seoPageProvider->getSeoForCurrentPage(); + return inertia()->render( + 'Client/Schedules/Index', + [ + 'filters' => $filters, + 'forms_education' => $forms_education, + 'schedulesByFaculty' => inertia()->deepMerge(fn() => $schedulesByFaculty), + 'schedules_paginator' => $schedulesPaginate, + 'seo' => $seo, + ] + ); + // Возвращаем данные в представление - return Inertia::render('Client/Schedules/Index', compact('educationalGroups', 'filters', 'forms_education', 'schedulesByFaculty', 'seo')); } - public function show($id) - { - $schedule = Schedule::find($id); - return Inertia::render('Client/Schedules/Show', compact('schedule')); - } +// public function show($id) +// { +// $schedule = Schedule::find($id); +// return Inertia::render('Client/Schedules/Show', compact('schedule')); +// } } diff --git a/app/Containers/Schedule/UI/WEB/Routes/web.php b/app/Containers/Schedule/UI/WEB/Routes/web.php new file mode 100644 index 0000000..bfc756f --- /dev/null +++ b/app/Containers/Schedule/UI/WEB/Routes/web.php @@ -0,0 +1,15 @@ +group(function () { + // Расписание занятий + Route::get('/schedule', [ClientScheduleController::class, 'index'])->name('client.schedule.index'); + Route::get('/schedule/{id}', [ClientScheduleController::class, 'show'])->name('client.schedule.show'); +}); + + + diff --git a/app/Containers/Schedule/UI/WEB/Transformers/EducationalGroupResource.php b/app/Containers/Schedule/UI/WEB/Transformers/EducationalGroupResource.php new file mode 100644 index 0000000..f3675cd --- /dev/null +++ b/app/Containers/Schedule/UI/WEB/Transformers/EducationalGroupResource.php @@ -0,0 +1,25 @@ + + */ + public function toArray($request): array + { + return [ + 'id' => $this->id, + 'title' => $this->title, + 'schedules' => ScheduleGroupResource::collection($this->schedules), + 'faculty' => $this->faculty->title, + ]; + } +} diff --git a/app/Http/Resources/ClientScheduleSearchResource.php b/app/Containers/Schedule/UI/WEB/Transformers/ScheduleGroupResource.php similarity index 50% rename from app/Http/Resources/ClientScheduleSearchResource.php rename to app/Containers/Schedule/UI/WEB/Transformers/ScheduleGroupResource.php index 6fee7ae..871d444 100644 --- a/app/Http/Resources/ClientScheduleSearchResource.php +++ b/app/Containers/Schedule/UI/WEB/Transformers/ScheduleGroupResource.php @@ -1,18 +1,18 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Containers/Science/Loaders/AliasesLoader.php b/app/Containers/Science/Loaders/AliasesLoader.php new file mode 100644 index 0000000..dd90b99 --- /dev/null +++ b/app/Containers/Science/Loaders/AliasesLoader.php @@ -0,0 +1,11 @@ + 'array', ]; - public function journals() + public function journals(): HasMany { return $this->hasMany(JournalIssue::class); } - public function seo() - { - return $this->morphOne(Seo::class, 'seoable'); - } - public function getSeoDescription(): array { return $this->main_info; diff --git a/app/Models/JournalIssue.php b/app/Containers/Science/Models/JournalIssue.php similarity index 69% rename from app/Models/JournalIssue.php rename to app/Containers/Science/Models/JournalIssue.php index b1d5023..aeced35 100644 --- a/app/Models/JournalIssue.php +++ b/app/Containers/Science/Models/JournalIssue.php @@ -1,9 +1,9 @@ value . 'list', now()->addWeek(), function () { - return ClientAcademicJournalListResource::collection( + return AcademicJournalResource::collection( AcademicJournal::query()->get() ); } @@ -52,7 +52,7 @@ class ClientAcademicJournalController extends Controller } ); - $journal = new ClientAcademicJournalListResource($journalData); + $journal = new AcademicJournalResource($journalData); diff --git a/app/Containers/Science/UI/WEB/Routes/web.php b/app/Containers/Science/UI/WEB/Routes/web.php new file mode 100644 index 0000000..47480a0 --- /dev/null +++ b/app/Containers/Science/UI/WEB/Routes/web.php @@ -0,0 +1,12 @@ +group(function () { + Route::get('/academic-journals/', [ClientAcademicJournalController::class, 'index'])->name('client.academicJournals.index'); + Route::get('/academic-journals/{slug}', [ClientAcademicJournalController::class, 'show'])->name('client.academicJournals.show'); +}); + + diff --git a/app/Http/Resources/ClientContactWidgetResource.php b/app/Containers/Science/UI/WEB/Transformers/AcademicJournalResource.php similarity index 74% rename from app/Http/Resources/ClientContactWidgetResource.php rename to app/Containers/Science/UI/WEB/Transformers/AcademicJournalResource.php index 1477d59..1868124 100644 --- a/app/Http/Resources/ClientContactWidgetResource.php +++ b/app/Containers/Science/UI/WEB/Transformers/AcademicJournalResource.php @@ -1,11 +1,11 @@ getBreadcrumb($html); + } + + private function getBreadcrumb(string $html): ?string + { + $document = new Document($html); + $breadcrumbs = $document->first('ol.breadcrumb')?->find('li') ?? []; + + foreach ($breadcrumbs as $index => $breadcrumb) { + if ($index === 2) { // Индексация с 0 → третий элемент = 2 + return $breadcrumb->text(); + } + } + + return null; + } + + +} \ No newline at end of file diff --git a/app/Containers/Search/Services/CategoryFinderService.php b/app/Containers/Search/Services/CategoryFinderService.php new file mode 100644 index 0000000..73d962d --- /dev/null +++ b/app/Containers/Search/Services/CategoryFinderService.php @@ -0,0 +1,36 @@ +first('ul.dropdown-menu'); + $links = $dropdownMenu->find('a'); + $categories = []; + + foreach ($links as $link) { + $category = trim($link->text()); + $categories[] = $category; + } + + return $categories; + } + + +} \ No newline at end of file diff --git a/app/Containers/Search/Services/HtmlContentExtractorService.php b/app/Containers/Search/Services/HtmlContentExtractorService.php new file mode 100644 index 0000000..4b72212 --- /dev/null +++ b/app/Containers/Search/Services/HtmlContentExtractorService.php @@ -0,0 +1,20 @@ +first('.vikon-content'); + $breadcrumb = $content->first('.row'); + $content->firstInDocument('.row')->remove(); + + return [$content->html(), $breadcrumb->html()] ?? null; + } + + +} \ No newline at end of file diff --git a/app/Containers/Search/Services/StaticFileSearch.php b/app/Containers/Search/Services/StaticFileSearch.php new file mode 100644 index 0000000..ffd9928 --- /dev/null +++ b/app/Containers/Search/Services/StaticFileSearch.php @@ -0,0 +1,218 @@ +input('search'); + $category = $request->input('category'); + $page = request()->input('page', 1); + + + if ($query === null) { + return [ + 'data' => [] + ]; + } + + try { + $index = $this->getIndex(); + $results = []; + $normalizedQuery = $this->normalizeText(Str::lower($query)); + + foreach ($index as $filePath => $content) { + if (stripos($content['content'], $normalizedQuery) !== false) { + $relativePath = str_replace(public_path() . '/', '', $filePath); + $results[] = [ + 'file' => $relativePath, + 'content' => $content['title'], + 'category' => trim($content['category']), + ]; + } + } + + $categories = array_values(array_unique(array_filter(array_column($results, 'category')))); + + + if ($category !== null) { + $results = array_filter($results, function($item) use ($category) { + return $item['category'] === $category; + }); + + // Переиндексировать массив + $results = array_values($results); + } + + + return $this->paginateResults($results, $page, $categories); + } catch (\Exception $e) { + Log::error('Search error: ' . $e->getMessage()); + return [ + 'data' => [], + 'meta' => [ + 'current_page' => 1, + 'total' => 0, + 'per_page' => self::PER_PAGE, + 'last_page' => 1 + ] + ]; + } + } + + protected function paginateResults(array $results, int $page, ?array $categories): array + { + $total = count($results); + $lastPage = max(1, ceil($total / self::PER_PAGE)); + $page = max(1, min($page, $lastPage)); + + $offset = ($page - 1) * self::PER_PAGE; + $paginatedResults = array_slice($results, $offset, self::PER_PAGE); + + return [ + 'data' => $paginatedResults, + 'meta' => [ + 'current_page' => $page, + 'total' => $total, + 'per_page' => self::PER_PAGE, + 'last_page' => $lastPage + ], + 'categories' => $categories + ]; + } + + protected function getIndex(): array + { + return Cache::remember(self::CACHE_KEY, self::CACHE_TTL, function() { + try { + $index = []; + $directory = public_path(self::FILES_DIR); + + if (!is_dir($directory)) { + Log::error("Directory not found: {$directory}"); + return []; + } + + $iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS), + RecursiveIteratorIterator::SELF_FIRST + ); + + foreach ($iterator as $file) { + if ($file->isFile() && $this->isHtmlFile($file)) { + $html = file_get_contents($file->getPathname()); + [$content, $breadcrumb] = app(HtmlContentExtractorService::class)->getContent($html); + if ($content !== false) { + $breadcrumb = app(BreadcrumbFinderService::class)->isSameCategory($breadcrumb); + $text = $this->normalizeText(strip_tags($content)); + $index[$file->getPathname()] = [ + 'title' => $this->getFirstH1Content($content), + 'content' => $text, + 'category' => $breadcrumb ?? null, + ]; + } + } + } + + return $index; + } catch (\Exception $e) { + Log::error('Index creation error: ' . $e->getMessage()); + return []; + } + }); + } + + protected function isHtmlFile(\SplFileInfo $file): bool + { + $extension = strtolower($file->getExtension()); + return in_array($extension, ['html', 'htm']); + } + + protected function normalizeText(string $text): string + { + $text = html_entity_decode($text, ENT_QUOTES | ENT_HTML5, 'UTF-8'); + $text = preg_replace('/\s+/u', ' ', $text); + $text = trim($text); + return Str::lower($text); + } + + protected function findMatches(string $content, string $query): array + { + $matches = []; + $offset = 0; + $query = Str::lower($query); + $content = Str::lower($content); + $queryLength = mb_strlen($query, 'UTF-8'); + + while (($offset = mb_strpos($content, $query, $offset, 'UTF-8')) !== false) { + $start = max(0, $offset - 50); + $length = min(150, mb_strlen($content) - $start); + $excerpt = mb_substr($content, $start, $length, 'UTF-8'); + + $matches[] = str_replace( + $query, + '[[HIGHLIGHT]]'.$query.'[[/HIGHLIGHT]]', + $excerpt + ); + + $offset += $queryLength; + } + + return $matches; + } + + public function clearCache(): bool + { + try { + Cache::forget(self::CACHE_KEY); + return true; + } catch (\Exception $e) { + Log::error('Cache clear error: ' . $e->getMessage()); + return false; + } + } + + public function rebuildIndex(): array + { + $this->clearCache(); + return $this->getIndex(); + } + + public function getCacheStatus(): array + { + return [ + 'exists' => Cache::has(self::CACHE_KEY), + 'ttl' => Cache::get(self::CACHE_KEY.'_ttl', null), + 'driver' => config('cache.default'), + 'path' => public_path(self::FILES_DIR), + 'directory_exists' => is_dir(public_path(self::FILES_DIR)) + ]; + } + + public function getFirstH1Content(string $content): ?string + { + try { + if (preg_match('/]*>(.*?)<\/h1>/is', $content, $matches)) { + return $this->normalizeText($matches[1]); + } + + return null; + } catch (\Exception $e) { + Log::error('Failed to get H1: ' . $e->getMessage()); + return null; + } + } +} \ No newline at end of file diff --git a/app/Http/Controllers/SearchController.php b/app/Containers/Search/UI/API/Controllers/SearchController.php similarity index 85% rename from app/Http/Controllers/SearchController.php rename to app/Containers/Search/UI/API/Controllers/SearchController.php index 8cfcbe1..3a0188c 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Containers/Search/UI/API/Controllers/SearchController.php @@ -1,28 +1,28 @@ ignoreCase(true) ->search("$req"); + $resourceMap = $this->resourceMap; $resources = collect($results)->map(function ($result) use ($resourceMap) { $resourceClass = $resourceMap[get_class($result)] ?? null; diff --git a/app/Http/Controllers/StaticSearchController.php b/app/Containers/Search/UI/API/Controllers/StaticSearchController.php similarity index 70% rename from app/Http/Controllers/StaticSearchController.php rename to app/Containers/Search/UI/API/Controllers/StaticSearchController.php index 7398a6a..b712e87 100644 --- a/app/Http/Controllers/StaticSearchController.php +++ b/app/Containers/Search/UI/API/Controllers/StaticSearchController.php @@ -1,9 +1,10 @@ name('client.search.index'); + +Route::get('/static/search', [StaticSearchController::class, 'search'])->name('client.search.static'); +Route::get('/static/categories', [StaticSearchController::class, 'getCategories'])->name('client.categories.static'); diff --git a/app/Http/Resources/AdditionalEducationSearchResource.php b/app/Containers/Search/UI/API/Transformers/AdditionalEducationSearchResource.php similarity index 66% rename from app/Http/Resources/AdditionalEducationSearchResource.php rename to app/Containers/Search/UI/API/Transformers/AdditionalEducationSearchResource.php index b5c26a0..c8ed194 100644 --- a/app/Http/Resources/AdditionalEducationSearchResource.php +++ b/app/Containers/Search/UI/API/Transformers/AdditionalEducationSearchResource.php @@ -1,9 +1,9 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Containers/Search/UI/API/Transformers/EducationGroupSearchResource.php b/app/Containers/Search/UI/API/Transformers/EducationGroupSearchResource.php new file mode 100644 index 0000000..9b928e3 --- /dev/null +++ b/app/Containers/Search/UI/API/Transformers/EducationGroupSearchResource.php @@ -0,0 +1,24 @@ + + */ + public function toArray($request): array + { + return [ + 'id' => $this->id, + 'title' => $this->title, + 'schedules' => ScheduleGroupResource::collection($this->whenLoaded('schedules')), + ]; + } +} diff --git a/app/Http/Resources/EducationalProgramSearchResource.php b/app/Containers/Search/UI/API/Transformers/EducationalProgramSearchResource.php similarity index 66% rename from app/Http/Resources/EducationalProgramSearchResource.php rename to app/Containers/Search/UI/API/Transformers/EducationalProgramSearchResource.php index 6bcdcc8..2b05218 100644 --- a/app/Http/Resources/EducationalProgramSearchResource.php +++ b/app/Containers/Search/UI/API/Transformers/EducationalProgramSearchResource.php @@ -1,9 +1,9 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/EventSearchResource.php b/app/Containers/Search/UI/API/Transformers/EventSearchResource.php similarity index 72% rename from app/Http/Resources/EventSearchResource.php rename to app/Containers/Search/UI/API/Transformers/EventSearchResource.php index 8fece5d..d5b3bb0 100644 --- a/app/Http/Resources/EventSearchResource.php +++ b/app/Containers/Search/UI/API/Transformers/EventSearchResource.php @@ -1,9 +1,9 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/FacultySearchResource.php b/app/Containers/Search/UI/API/Transformers/FacultySearchResource.php similarity index 65% rename from app/Http/Resources/FacultySearchResource.php rename to app/Containers/Search/UI/API/Transformers/FacultySearchResource.php index eccc9ff..473c23e 100644 --- a/app/Http/Resources/FacultySearchResource.php +++ b/app/Containers/Search/UI/API/Transformers/FacultySearchResource.php @@ -1,9 +1,9 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/PageSearchResource.php b/app/Containers/Search/UI/API/Transformers/PageSearchResource.php similarity index 72% rename from app/Http/Resources/PageSearchResource.php rename to app/Containers/Search/UI/API/Transformers/PageSearchResource.php index 0a2476b..1425f2e 100644 --- a/app/Http/Resources/PageSearchResource.php +++ b/app/Containers/Search/UI/API/Transformers/PageSearchResource.php @@ -1,9 +1,9 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/PostSearchResource.php b/app/Containers/Search/UI/API/Transformers/PostSearchResource.php similarity index 71% rename from app/Http/Resources/PostSearchResource.php rename to app/Containers/Search/UI/API/Transformers/PostSearchResource.php index c0f9f63..e89608c 100644 --- a/app/Http/Resources/PostSearchResource.php +++ b/app/Containers/Search/UI/API/Transformers/PostSearchResource.php @@ -1,10 +1,10 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/UserSearchResource.php b/app/Containers/Search/UI/API/Transformers/UserSearchResource.php similarity index 65% rename from app/Http/Resources/UserSearchResource.php rename to app/Containers/Search/UI/API/Transformers/UserSearchResource.php index 325b065..6620242 100644 --- a/app/Http/Resources/UserSearchResource.php +++ b/app/Containers/Search/UI/API/Transformers/UserSearchResource.php @@ -1,9 +1,9 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Containers/User/Loaders/AliasesLoader.php b/app/Containers/User/Loaders/AliasesLoader.php new file mode 100644 index 0000000..089cc84 --- /dev/null +++ b/app/Containers/User/Loaders/AliasesLoader.php @@ -0,0 +1,11 @@ +belongsTo(User::class, 'sender_id'); } - public function receiver() + public function receiver(): BelongsTo { return $this->belongsTo(User::class, 'receiver_id'); } diff --git a/app/Models/Invitation.php b/app/Containers/User/Models/Invitation.php similarity index 83% rename from app/Models/Invitation.php rename to app/Containers/User/Models/Invitation.php index e6568f0..6ca7f94 100644 --- a/app/Models/Invitation.php +++ b/app/Containers/User/Models/Invitation.php @@ -1,6 +1,6 @@ 'hashed', ]; - public function userDetail() + public function userDetail(): HasOne { return $this->hasOne(UserDetail::class, 'user_id'); } - public function departments_work() + public function departments_work(): BelongsToMany { return $this->belongsToMany(Department::class, 'workers_departments')->withPivot(['position']); } - public function departments_teach() + public function departments_teach(): BelongsToMany { return $this->belongsToMany(Department::class, 'teachers_departments')->withPivot(['teaching_position']); } - public function divisions() + public function divisions(): BelongsToMany { return $this->belongsToMany(Division::class, 'division_user')->withPivot(['administrativePosition']); } - public function faculties() + public function faculties(): BelongsToMany { return $this->belongsToMany(Faculty::class, 'workers_faculties')->withPivot(['position']); } // Отношение к отправленным приглашениям - public function sentInvitations() + public function sentInvitations(): HasMany { return $this->hasMany(AcceptedInvitation::class, 'sender_id'); } // Отношение к полученным приглашениям - public function receivedInvitation() + public function receivedInvitation(): HasOne { return $this->hasOne(AcceptedInvitation::class, 'receiver_id'); } @@ -105,15 +109,12 @@ class User extends Authenticatable implements FilamentUser } public function canAccessPanel(Panel|\Filament\Panel $panel): bool { - switch ($panel->getId()) { - case "admin": - return $this->hasRole(Utils::getSuperAdminName()); - case "dashboard": - return $this->hasRole(config('filament-shield.dashboard_user.name', 'dashboard_user')) - || $this->hasRole(Utils::getSuperAdminName()) - || $this->hasRole(config('filament-shield.invited_user.name', 'invited_user')); - default: - return false; - } + return match ($panel->getId()) { + "admin" => $this->hasRole(Utils::getSuperAdminName()), + "dashboard" => $this->hasRole(config('filament-shield.dashboard_user.name', 'dashboard_user')) + || $this->hasRole(Utils::getSuperAdminName()) + || $this->hasRole(config('filament-shield.invited_user.name', 'invited_user')), + default => false, + }; } } diff --git a/app/Models/UserDetail.php b/app/Containers/User/Models/UserDetail.php similarity index 91% rename from app/Models/UserDetail.php rename to app/Containers/User/Models/UserDetail.php index 2419516..8225e11 100644 --- a/app/Models/UserDetail.php +++ b/app/Containers/User/Models/UserDetail.php @@ -1,9 +1,9 @@ group(function () { + + Route::get('/login/vk', [VkAuthService::class, 'redirectToProvider'])->name('vk.login'); + Route::get('/login/vk/callback', [VkAuthService::class, 'handleProviderCallback'])->name('vk.callback'); + Route::get('/vk-get-token', [VkAuthService::class, 'getToken'])->name('vk.getToken'); + Route::get('/vk-refresh-token', [VkAuthService::class, 'refresh'])->name('vk.refreshToken'); + Route::get('/vk-logout', [VkAuthService::class, 'logout'])->name('vk.logout'); +}); \ No newline at end of file diff --git a/app/Http/Controllers/PersonController.php b/app/Containers/User/UI/WEB/Controllers/PersonController.php similarity index 66% rename from app/Http/Controllers/PersonController.php rename to app/Containers/User/UI/WEB/Controllers/PersonController.php index af3e20e..c408b6a 100644 --- a/app/Http/Controllers/PersonController.php +++ b/app/Containers/User/UI/WEB/Controllers/PersonController.php @@ -1,21 +1,21 @@ value . md5($slug); $personData = Cache::remember( CacheKeys::USER_PREFIX->value . $slug, @@ -31,7 +31,7 @@ class PersonController extends Controller fn() => $this->seoPageProvider->getSeoForModel($personData) ); - $person = new ClientFullInfoPersonResource($personData); + $person = new FullInfoPersonResource($personData); diff --git a/app/Containers/User/UI/WEB/Routes/web.php b/app/Containers/User/UI/WEB/Routes/web.php new file mode 100644 index 0000000..5aa48e3 --- /dev/null +++ b/app/Containers/User/UI/WEB/Routes/web.php @@ -0,0 +1,15 @@ +get('invitation/{invitation}/accept', \App\Livewire\AcceptInvitation::class) + ->name('invitation.accept'); + + +Route::middleware('access-check')->group(function () { + Route::get('/persons/{slug}', [PersonController::class, 'show'])->name('client.person.show'); +}); + diff --git a/app/Containers/User/UI/WEB/Transformers/FullInfoPersonResource.php b/app/Containers/User/UI/WEB/Transformers/FullInfoPersonResource.php new file mode 100644 index 0000000..05bc07f --- /dev/null +++ b/app/Containers/User/UI/WEB/Transformers/FullInfoPersonResource.php @@ -0,0 +1,26 @@ + + */ + public function toArray($request): array + { + return [ + 'id' => $this->id, + 'name' => $this->name, + 'details' => new PersonDetailResource($this->whenLoaded('userDetail')), + 'departments_work' => PersonDepartmentsWorkResource::collection($this->whenLoaded('departments_work')), + 'departments_teach' => PersonDepartmentsTeachResource::collection($this->whenLoaded('departments_teach')), + 'divisions_works' => PersonDivisionsWorkResource::collection($this->whenLoaded('divisions')), + 'faculties_works' => PersonFacultiesWorkResource::collection($this->whenLoaded('faculties')) + ]; + } +} diff --git a/app/Http/Resources/ClientPersonDepartmentPreviewResource.php b/app/Containers/User/UI/WEB/Transformers/PersonDepartmentPreviewResource.php similarity index 72% rename from app/Http/Resources/ClientPersonDepartmentPreviewResource.php rename to app/Containers/User/UI/WEB/Transformers/PersonDepartmentPreviewResource.php index 97ffa85..53c7a71 100644 --- a/app/Http/Resources/ClientPersonDepartmentPreviewResource.php +++ b/app/Containers/User/UI/WEB/Transformers/PersonDepartmentPreviewResource.php @@ -1,18 +1,18 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/ClientPersonDepartmentTeachPreviewResource.php b/app/Containers/User/UI/WEB/Transformers/PersonDepartmentTeachPreviewResource.php similarity index 72% rename from app/Http/Resources/ClientPersonDepartmentTeachPreviewResource.php rename to app/Containers/User/UI/WEB/Transformers/PersonDepartmentTeachPreviewResource.php index 57e31aa..789dcdc 100644 --- a/app/Http/Resources/ClientPersonDepartmentTeachPreviewResource.php +++ b/app/Containers/User/UI/WEB/Transformers/PersonDepartmentTeachPreviewResource.php @@ -1,18 +1,17 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/ClientPersonDepartmentsTeachResource.php b/app/Containers/User/UI/WEB/Transformers/PersonDepartmentsTeachResource.php similarity index 65% rename from app/Http/Resources/ClientPersonDepartmentsTeachResource.php rename to app/Containers/User/UI/WEB/Transformers/PersonDepartmentsTeachResource.php index 5d2c9b7..7e7a372 100644 --- a/app/Http/Resources/ClientPersonDepartmentsTeachResource.php +++ b/app/Containers/User/UI/WEB/Transformers/PersonDepartmentsTeachResource.php @@ -1,18 +1,18 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id_department' => $this->id, diff --git a/app/Http/Resources/ClientPersonDepartmentsWorkResource.php b/app/Containers/User/UI/WEB/Transformers/PersonDepartmentsWorkResource.php similarity index 65% rename from app/Http/Resources/ClientPersonDepartmentsWorkResource.php rename to app/Containers/User/UI/WEB/Transformers/PersonDepartmentsWorkResource.php index 43e382d..47252f7 100644 --- a/app/Http/Resources/ClientPersonDepartmentsWorkResource.php +++ b/app/Containers/User/UI/WEB/Transformers/PersonDepartmentsWorkResource.php @@ -1,18 +1,19 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id_department' => $this->id, diff --git a/app/Containers/User/UI/WEB/Transformers/PersonDetailResource.php b/app/Containers/User/UI/WEB/Transformers/PersonDetailResource.php new file mode 100644 index 0000000..b4fea11 --- /dev/null +++ b/app/Containers/User/UI/WEB/Transformers/PersonDetailResource.php @@ -0,0 +1,19 @@ + + */ + public function toArray($request): array + { + return parent::toArray($request); + } +} diff --git a/app/Http/Resources/ClientPersonDivisionPreviewResource.php b/app/Containers/User/UI/WEB/Transformers/PersonDivisionPreviewResource.php similarity index 75% rename from app/Http/Resources/ClientPersonDivisionPreviewResource.php rename to app/Containers/User/UI/WEB/Transformers/PersonDivisionPreviewResource.php index 7108aa7..76c108e 100644 --- a/app/Http/Resources/ClientPersonDivisionPreviewResource.php +++ b/app/Containers/User/UI/WEB/Transformers/PersonDivisionPreviewResource.php @@ -1,18 +1,18 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Http/Resources/ClientPersonDivisionsWorkResource.php b/app/Containers/User/UI/WEB/Transformers/PersonDivisionsWorkResource.php similarity index 60% rename from app/Http/Resources/ClientPersonDivisionsWorkResource.php rename to app/Containers/User/UI/WEB/Transformers/PersonDivisionsWorkResource.php index f59fb72..1d1519d 100644 --- a/app/Http/Resources/ClientPersonDivisionsWorkResource.php +++ b/app/Containers/User/UI/WEB/Transformers/PersonDivisionsWorkResource.php @@ -1,18 +1,17 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id_division' => $this->id, diff --git a/app/Http/Resources/ClientPersonFacultiesWorkResource.php b/app/Containers/User/UI/WEB/Transformers/PersonFacultiesWorkResource.php similarity index 58% rename from app/Http/Resources/ClientPersonFacultiesWorkResource.php rename to app/Containers/User/UI/WEB/Transformers/PersonFacultiesWorkResource.php index 4f81b53..9c47909 100644 --- a/app/Http/Resources/ClientPersonFacultiesWorkResource.php +++ b/app/Containers/User/UI/WEB/Transformers/PersonFacultiesWorkResource.php @@ -1,18 +1,17 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id_faculty' => $this->id, diff --git a/app/Http/Resources/ClientPersonFacultyPreviewResource.php b/app/Containers/User/UI/WEB/Transformers/PersonFacultyPreviewResource.php similarity index 72% rename from app/Http/Resources/ClientPersonFacultyPreviewResource.php rename to app/Containers/User/UI/WEB/Transformers/PersonFacultyPreviewResource.php index 0f85878..339492a 100644 --- a/app/Http/Resources/ClientPersonFacultyPreviewResource.php +++ b/app/Containers/User/UI/WEB/Transformers/PersonFacultyPreviewResource.php @@ -1,18 +1,18 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Rules/UniqueJsonField.php b/app/Containers/Widget/Data/Rules/UniqueJsonField.php similarity index 93% rename from app/Rules/UniqueJsonField.php rename to app/Containers/Widget/Data/Rules/UniqueJsonField.php index fa886ff..0a09bbc 100644 --- a/app/Rules/UniqueJsonField.php +++ b/app/Containers/Widget/Data/Rules/UniqueJsonField.php @@ -1,10 +1,8 @@ value . $slug, now()->addHours(12), // Кешируем на 12 часов function () use ($slug) { - return new ClientContactWidgetResource( + return new ContactWidgetResource( ContactWidget::query() ->where('slug', $slug) ->firstOrFail() diff --git a/app/Http/Controllers/ClientWidgetEducationalProgramController.php b/app/Containers/Widget/UI/API/Controllers/ClientWidgetEducationalProgramController.php similarity index 68% rename from app/Http/Controllers/ClientWidgetEducationalProgramController.php rename to app/Containers/Widget/UI/API/Controllers/ClientWidgetEducationalProgramController.php index c549b9c..3658e0a 100644 --- a/app/Http/Controllers/ClientWidgetEducationalProgramController.php +++ b/app/Containers/Widget/UI/API/Controllers/ClientWidgetEducationalProgramController.php @@ -1,12 +1,12 @@ where('status', CustomFormStatus::PUBLISHED)->where('form_id', $id)->firstOrFail()); + return new FormResource(CustomForm::query()->where('status', CustomFormStatus::PUBLISHED)->where('form_id', $id)->firstOrFail()); } public function submit(int $id, Request $request) diff --git a/app/Http/Controllers/ClientWidgetPageController.php b/app/Containers/Widget/UI/API/Controllers/ClientWidgetPageController.php similarity index 79% rename from app/Http/Controllers/ClientWidgetPageController.php rename to app/Containers/Widget/UI/API/Controllers/ClientWidgetPageController.php index 1e9b918..dfb0e80 100644 --- a/app/Http/Controllers/ClientWidgetPageController.php +++ b/app/Containers/Widget/UI/API/Controllers/ClientWidgetPageController.php @@ -1,11 +1,10 @@ json([ 'data' => [ - 'page' => new ClientPageNavigateResource($page), + 'page' => new PageNavigateResource($page), 'breadcrumbs' => $breadcrumbs ], ], 200); diff --git a/app/Http/Controllers/ClientWidgetPageReferenceListController.php b/app/Containers/Widget/UI/API/Controllers/ClientWidgetPageReferenceListController.php similarity index 67% rename from app/Http/Controllers/ClientWidgetPageReferenceListController.php rename to app/Containers/Widget/UI/API/Controllers/ClientWidgetPageReferenceListController.php index 755c5cf..9902a99 100644 --- a/app/Http/Controllers/ClientWidgetPageReferenceListController.php +++ b/app/Containers/Widget/UI/API/Controllers/ClientWidgetPageReferenceListController.php @@ -1,11 +1,11 @@ value . $slug, now()->addWeek(), // Кешируем на неделю, так как справочники меняются редко function () use ($slug) { - return new ClientPageReferenceListResource( + return new PageReferenceListResource( PageReferenceList::query() ->where('slug', $slug) ->firstOrFail() diff --git a/app/Http/Controllers/ClientWidgetPostController.php b/app/Containers/Widget/UI/API/Controllers/ClientWidgetPostController.php similarity index 83% rename from app/Http/Controllers/ClientWidgetPostController.php rename to app/Containers/Widget/UI/API/Controllers/ClientWidgetPostController.php index 6779aee..a8b1537 100644 --- a/app/Http/Controllers/ClientWidgetPostController.php +++ b/app/Containers/Widget/UI/API/Controllers/ClientWidgetPostController.php @@ -1,12 +1,11 @@ name('client.widget.post.index'); + +Route::get('/widget/get-posts/{id}', [ClientWidgetPostController::class, 'single'])->name('client.widget.post.single'); + +Route::get('/widget/get-additional-programs', [ClientWidgetAdditionalEducationalProgramController::class, 'index'])->name('client.widget.additional.program.index'); + +Route::get('/widget/get-educational-programs', [ClientWidgetEducationalProgramController::class, 'index'])->name('client.widget.educational.program.index'); + +Route::get('/widget/get-page-resource/{id}', [ClientWidgetPageReferenceListController::class, 'show'])->name('client.widget.page.resource.show'); + +Route::get('/widget/get-contact-widget/{id}', [ClientWidgetContactController::class, 'show'])->name('client.widget.contact.show'); + +Route::get('/widget/get-page/{path}', [ClientWidgetPageController::class, 'single'])->name('client.widget.page.single'); + +Route::get('/widget/get-form/{id}', [ClientWidgetFormController::class, 'single'])->middleware('rate.limited.check')->name('client.widget.form.single'); + +Route::post('/widget/get-form/{id}/submit', [ClientWidgetFormController::class, 'submit'])->middleware(['rate.limited.counter', 'rate.limited.check', 'form.time.period'])->name('client.widget.form.submit'); + +Route::get('/widget/get-slider/{slug}', [ClientWidgetSliderController::class, 'show'])->name('client.widget.slider.show'); \ No newline at end of file diff --git a/app/Containers/Widget/UI/API/Transformers/ContactWidgetResource.php b/app/Containers/Widget/UI/API/Transformers/ContactWidgetResource.php new file mode 100644 index 0000000..8e3f185 --- /dev/null +++ b/app/Containers/Widget/UI/API/Transformers/ContactWidgetResource.php @@ -0,0 +1,18 @@ + + */ + public function toArray($request): array + { + return parent::toArray($request); + } +} diff --git a/app/Containers/Widget/UI/API/Transformers/FormResource.php b/app/Containers/Widget/UI/API/Transformers/FormResource.php new file mode 100644 index 0000000..23292e5 --- /dev/null +++ b/app/Containers/Widget/UI/API/Transformers/FormResource.php @@ -0,0 +1,19 @@ + + */ + public function toArray($request): array + { + return parent::toArray($request); + } +} diff --git a/app/Containers/Widget/UI/API/Transformers/PageNavigateResource.php b/app/Containers/Widget/UI/API/Transformers/PageNavigateResource.php new file mode 100644 index 0000000..3de64ae --- /dev/null +++ b/app/Containers/Widget/UI/API/Transformers/PageNavigateResource.php @@ -0,0 +1,26 @@ + + */ + public function toArray($request): array + { + return [ + 'id' => $this->id, + 'title' => $this->title, + 'slug' => $this->slug, + 'path' => $this->path, + 'is_url' => $this->is_url, + 'icon' => $this->icon + ]; + } +} diff --git a/app/Containers/Widget/UI/API/Transformers/PageReferenceListResource.php b/app/Containers/Widget/UI/API/Transformers/PageReferenceListResource.php new file mode 100644 index 0000000..dfbcf35 --- /dev/null +++ b/app/Containers/Widget/UI/API/Transformers/PageReferenceListResource.php @@ -0,0 +1,19 @@ + + */ + public function toArray($request): array + { + return parent::toArray($request); + } +} diff --git a/app/Http/Resources/PostThumbnailResource.php b/app/Containers/Widget/UI/API/Transformers/PostThumbnailResource.php similarity index 78% rename from app/Http/Resources/PostThumbnailResource.php rename to app/Containers/Widget/UI/API/Transformers/PostThumbnailResource.php index 068791b..41eb878 100644 --- a/app/Http/Resources/PostThumbnailResource.php +++ b/app/Containers/Widget/UI/API/Transformers/PostThumbnailResource.php @@ -1,10 +1,9 @@ */ - public function toArray(Request $request): array + public function toArray($request): array { return [ 'id' => $this->id, diff --git a/app/Facades/ByteConverterFacade.php b/app/Facades/ByteConverterFacade.php deleted file mode 100644 index 649c429..0000000 --- a/app/Facades/ByteConverterFacade.php +++ /dev/null @@ -1,13 +0,0 @@ -description('Настройте автоматическую публикацию новости в указанное время') ->collapsible() ->schema([ Grid::make(2) ->schema([ Toggle::make('publish_setting.publish_after') - ->label('Включить отложенную публикацию') + ->label('Включить публикацию по времени') ->inline(false) ->default(false) + ->disabled(fn (Forms\Get $get) => $get('publish_setting.publish_at')) ->live() ->helperText('Активируйте для публикации в указанное время'), DateTimePicker::make('publish_setting.publish_at') @@ -119,6 +106,13 @@ class PostForm ->required(fn (Forms\Get $get) => $get('publish_setting.publish_after')) ->disabled(fn (Forms\Get $get) => !$get('publish_setting.publish_after')) ->native(true) + ->minDate(function (string $context, $state) { + if ($context === 'edit' && $state) { + return $state; + } else { + return now()->ceilHour()->subHour(); + } + }) ->maxDate(now()->addMonth()), ]), ]), diff --git a/app/Filament/Components/Forms/UserDetailForm.php b/app/Filament/Components/Forms/UserDetailForm.php index 19aac0b..a0c6942 100644 --- a/app/Filament/Components/Forms/UserDetailForm.php +++ b/app/Filament/Components/Forms/UserDetailForm.php @@ -2,31 +2,11 @@ namespace App\Filament\Components\Forms; -use App\Enums\CustomFormStatus; -use App\Enums\PostStatus; use App\Filament\Components\Forms\ItemForm\Pages\ContentBuilderItem; -use App\Helpers\ByteConverter; -use App\Models\Category; -use App\Models\CustomForm; -use App\Models\Page; -use App\Models\Post; use Filament\Forms; -use Filament\Forms\Components\Builder; -use Filament\Forms\Components\FileUpload; -use Filament\Forms\Components\Hidden; -use Filament\Forms\Components\RichEditor; -use Filament\Forms\Components\Section; -use Filament\Forms\Components\Select; use Filament\Forms\Components\Tabs; -use Filament\Forms\Components\TextInput; -use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Components\Tab; -use Illuminate\Support\Carbon; -use Illuminate\Support\Str; -use Livewire\Features\SupportFileUploads\TemporaryUploadedFile; -use Mohamedsabil83\FilamentFormsTinyeditor\Components\TinyEditor; -use Symfony\Component\Finder\Finder; class UserDetailForm { diff --git a/app/Filament/Exports/CustomFormExporter.php b/app/Filament/Exports/CustomFormExporter.php index 50829f9..6c37814 100644 --- a/app/Filament/Exports/CustomFormExporter.php +++ b/app/Filament/Exports/CustomFormExporter.php @@ -2,8 +2,7 @@ namespace App\Filament\Exports; -use App\Models\CustomForm; -use App\Models\CustomFormResponse; +use App\Containers\Widget\Models\CustomForm; use Filament\Actions\Exports\ExportColumn; use Filament\Actions\Exports\Exporter; use Filament\Actions\Exports\Models\Export; diff --git a/app/Filament/Pages/CheckpointSettingsPage.php b/app/Filament/Pages/CheckpointSettingsPage.php deleted file mode 100644 index d3dc60d..0000000 --- a/app/Filament/Pages/CheckpointSettingsPage.php +++ /dev/null @@ -1,103 +0,0 @@ -schema([ - Grid::make() - ->columns([ - 'default' => 1, - ]) - ->columnSpan(2) - ->schema([ - TextInput::make('max_attempts') - ->required() - ->integer() - ->minValue(1) - ->label('Максимальное количество попыток') // Метка для поля - ->helperText('Введите максимальное количество попыток входа.') // Подсказка - ->suffix('попытки'), - TextInput::make('lockout_duration') - ->required() - ->integer() - ->minValue(1) - ->label('Продолжительность блокировки (в секундах)') // Метка для поля - ->helperText('Введите время блокировки в секундах.') // Подсказка - ->suffix('секунд'), - ]), - Grid::make() - ->schema([ - Section::make() - ->columns([ - 'default' => 2, - ]) - ->columnSpan(2) - ->schema([ - Toggle::make('notify_on_lockout') - ->live() - ->columnSpan(2) - ->default(false) - ->label('Уведомлять при блокировке'), // Метка для переключателя - TextInput::make('notification_emails') - ->required() - ->email() - ->hidden(fn (Get $get): bool => ! $get('notify_on_lockout')) - ->helperText('Введите адреса электронной почты для уведомлений.') // Подсказка - ->label('Электронная почта для уведомлений'), // Метка для поля - TextInput::make('notify_after_lockouts') - ->required() - ->hidden(fn (Get $get): bool => ! $get('notify_on_lockout')) - ->label('Уведомлять после блокировок') // Метка для поля - ->helperText('Введите количество блокировок, после которых отправляется уведомление.') // Подсказка - ->suffix('блокировок'), - TextInput::make('notification_time_frame') - ->required() - ->hidden(fn (Get $get): bool => ! $get('notify_on_lockout')) - ->label('Временной интервал уведомлений (в секундах)') // Метка для поля - ->helperText('Введите временной интервал для уведомлений в секундах.') // Подсказка - ->suffix('секунд') - ]), - ]), - ]); - } -} \ No newline at end of file diff --git a/app/Filament/Resources/AcademicJournalResource.php b/app/Filament/Resources/AcademicJournalResource.php index 6fdb5c9..3342588 100644 --- a/app/Filament/Resources/AcademicJournalResource.php +++ b/app/Filament/Resources/AcademicJournalResource.php @@ -2,38 +2,22 @@ namespace App\Filament\Resources; -use App\Enums\CustomFormStatus; -use App\Enums\PostStatus; + +use App\Containers\Science\Models\AcademicJournal; use App\Filament\Components\Forms\ItemForm\Pages\ContentBuilderItem; use App\Filament\Resources\AcademicJournalResource\Pages; -use App\Filament\Resources\AcademicJournalResource\RelationManagers; use App\Filament\Resources\AcademicJournalResource\RelationManagers\JournalsRelationManager; -use App\Helpers\ByteConverter; -use App\Models\AcademicJournal; -use App\Models\Category; -use App\Models\CustomForm; -use App\Models\Page; -use App\Models\Post; use Filament\Forms; use Filament\Forms\Components\Actions\Action; -use Filament\Forms\Components\Builder; -use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\Grid; -use Filament\Forms\Components\Hidden; -use Filament\Forms\Components\RichEditor; use Filament\Forms\Components\Section; -use Filament\Forms\Components\Select; use Filament\Forms\Components\Tabs; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\SoftDeletingScope; -use Illuminate\Support\Carbon; use Illuminate\Support\Str; -use Livewire\Features\SupportFileUploads\TemporaryUploadedFile; -use Mohamedsabil83\FilamentFormsTinyeditor\Components\TinyEditor; class AcademicJournalResource extends Resource { diff --git a/app/Filament/Resources/AcademicJournalResource/Pages/CreateAcademicJournal.php b/app/Filament/Resources/AcademicJournalResource/Pages/CreateAcademicJournal.php index f7e1a3d..4100e88 100644 --- a/app/Filament/Resources/AcademicJournalResource/Pages/CreateAcademicJournal.php +++ b/app/Filament/Resources/AcademicJournalResource/Pages/CreateAcademicJournal.php @@ -4,9 +4,7 @@ namespace App\Filament\Resources\AcademicJournalResource\Pages; use App\Filament\Resources\AcademicJournalResource; use App\Services\Filament\Traits\SeoGenerate; -use Filament\Actions; use Filament\Resources\Pages\CreateRecord; -use Illuminate\Support\Str; class CreateAcademicJournal extends CreateRecord { diff --git a/app/Filament/Resources/AcademicJournalResource/Pages/EditAcademicJournal.php b/app/Filament/Resources/AcademicJournalResource/Pages/EditAcademicJournal.php index a849a71..cd0f03e 100644 --- a/app/Filament/Resources/AcademicJournalResource/Pages/EditAcademicJournal.php +++ b/app/Filament/Resources/AcademicJournalResource/Pages/EditAcademicJournal.php @@ -6,7 +6,6 @@ use App\Filament\Resources\AcademicJournalResource; use App\Services\Filament\Traits\SeoGenerate; use Filament\Actions; use Filament\Resources\Pages\EditRecord; -use Illuminate\Support\Str; class EditAcademicJournal extends EditRecord { diff --git a/app/Filament/Resources/AcademicJournalResource/RelationManagers/JournalsRelationManager.php b/app/Filament/Resources/AcademicJournalResource/RelationManagers/JournalsRelationManager.php index 4591ec9..f4de947 100644 --- a/app/Filament/Resources/AcademicJournalResource/RelationManagers/JournalsRelationManager.php +++ b/app/Filament/Resources/AcademicJournalResource/RelationManagers/JournalsRelationManager.php @@ -2,9 +2,6 @@ namespace App\Filament\Resources\AcademicJournalResource\RelationManagers; -use App\Models\AcademicJournal; -use Filament\Forms; -use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; @@ -13,7 +10,6 @@ use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; class JournalsRelationManager extends RelationManager { diff --git a/app/Filament/Resources/AcceptedInvitationResource.php b/app/Filament/Resources/AcceptedInvitationResource.php index 12471ed..bc1b1fa 100644 --- a/app/Filament/Resources/AcceptedInvitationResource.php +++ b/app/Filament/Resources/AcceptedInvitationResource.php @@ -2,18 +2,14 @@ namespace App\Filament\Resources; +use App\Containers\User\Models\AcceptedInvitation; use App\Filament\Resources\AcceptedInvitationResource\Pages; -use App\Filament\Resources\AcceptedInvitationResource\RelationManagers; -use App\Models\AcceptedInvitation; use BezhanSalleh\FilamentShield\Contracts\HasShieldPermissions; -use Filament\Forms; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Columns\TextInputColumn; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; class AcceptedInvitationResource extends Resource implements HasShieldPermissions { diff --git a/app/Filament/Resources/AcceptedInvitationResource/Pages/ListAcceptedInvitations.php b/app/Filament/Resources/AcceptedInvitationResource/Pages/ListAcceptedInvitations.php index 0f8e7d3..9039763 100644 --- a/app/Filament/Resources/AcceptedInvitationResource/Pages/ListAcceptedInvitations.php +++ b/app/Filament/Resources/AcceptedInvitationResource/Pages/ListAcceptedInvitations.php @@ -2,11 +2,10 @@ namespace App\Filament\Resources\AcceptedInvitationResource\Pages; +use App\Containers\User\Mails\InvitationMail; +use App\Containers\User\Models\Invitation; use App\Filament\Resources\AcceptedInvitationResource; -use App\Mail\InvitationMail; -use App\Models\Invitation; -use App\Models\User; -use BezhanSalleh\FilamentShield\Contracts\HasShieldPermissions; +use App\Containers\User\Models\User; use Filament\Actions; use Filament\Forms\Components\TextInput; use Filament\Notifications\Notification; diff --git a/app/Filament/Resources/AdditionalEducationCategoryResource.php b/app/Filament/Resources/AdditionalEducationCategoryResource.php index 15311fa..547c94e 100644 --- a/app/Filament/Resources/AdditionalEducationCategoryResource.php +++ b/app/Filament/Resources/AdditionalEducationCategoryResource.php @@ -2,9 +2,9 @@ namespace App\Filament\Resources; +use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory; +use App\Containers\AdditionalEducation\Models\DirectionAdditionalEducation; use App\Filament\Resources\AdditionalEducationCategoryResource\Pages; -use App\Models\AdditionalEducationCategory; -use App\Models\DirectionAdditionalEducation; use Filament\Forms; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Section; diff --git a/app/Filament/Resources/AdditionalEducationResource.php b/app/Filament/Resources/AdditionalEducationResource.php index 22919f7..0902fd4 100644 --- a/app/Filament/Resources/AdditionalEducationResource.php +++ b/app/Filament/Resources/AdditionalEducationResource.php @@ -2,11 +2,11 @@ namespace App\Filament\Resources; -use App\Enums\FormEducation; +use App\Containers\AdditionalEducation\Models\AdditionalEducation; +use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory; use App\Filament\Components\Forms\ItemForm\Pages\ContentBuilderItem; use App\Filament\Resources\AdditionalEducationResource\Pages; -use App\Models\AdditionalEducation; -use App\Models\AdditionalEducationCategory; +use App\Ship\Enums\Education\FormEducation; use Filament\Forms; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Section; diff --git a/app/Filament/Resources/AdmissionCampaignResource.php b/app/Filament/Resources/AdmissionCampaignResource.php index a81c0a0..3a2bce7 100644 --- a/app/Filament/Resources/AdmissionCampaignResource.php +++ b/app/Filament/Resources/AdmissionCampaignResource.php @@ -2,11 +2,10 @@ namespace App\Filament\Resources; -use App\Enums\AdmissionCampaignStatus; -use App\Enums\LevelEducational; +use App\Containers\Education\Models\AdmissionCampaign; use App\Filament\Resources\AdmissionCampaignResource\Pages; -use App\Models\AdmissionCampaign; -use Filament\Forms; +use App\Ship\Enums\Education\AdmissionCampaignStatus; +use App\Ship\Enums\Education\LevelEducational; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Repeater; use Filament\Forms\Components\Section; diff --git a/app/Filament/Resources/AdmissionPlanResource.php b/app/Filament/Resources/AdmissionPlanResource.php index 8eeb072..97cd693 100644 --- a/app/Filament/Resources/AdmissionPlanResource.php +++ b/app/Filament/Resources/AdmissionPlanResource.php @@ -2,14 +2,14 @@ namespace App\Filament\Resources; -use App\Enums\BudgetEducation; -use App\Enums\EducationalProgramStatus; -use App\Enums\FormEducation; -use App\Enums\TypeExam; +use App\Containers\Education\Enums\TypeExam; +use App\Containers\Education\Models\AdmissionCampaign; +use App\Containers\Education\Models\AdmissionPlan; +use App\Containers\Education\Models\EducationalProgram; use App\Filament\Resources\AdmissionPlanResource\Pages; -use App\Models\AdmissionCampaign; -use App\Models\AdmissionPlan; -use App\Models\EducationalProgram; +use App\Ship\Enums\Education\BudgetEducation; +use App\Ship\Enums\Education\EducationalProgramStatus; +use App\Ship\Enums\Education\FormEducation; use Filament\Forms\Components\Repeater; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; diff --git a/app/Filament/Resources/CategoryResource.php b/app/Filament/Resources/CategoryResource.php index 6a414c4..4a9ef97 100644 --- a/app/Filament/Resources/CategoryResource.php +++ b/app/Filament/Resources/CategoryResource.php @@ -2,9 +2,8 @@ namespace App\Filament\Resources; +use App\Containers\Article\Models\Category; use App\Filament\Resources\CategoryResource\Pages; -use App\Filament\Resources\CategoryResource\RelationManagers; -use App\Models\Category; use Filament\Forms; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; @@ -13,8 +12,6 @@ use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Str; class CategoryResource extends Resource diff --git a/app/Filament/Resources/ContactWidgetResource.php b/app/Filament/Resources/ContactWidgetResource.php index 8ff6c40..c407ea5 100644 --- a/app/Filament/Resources/ContactWidgetResource.php +++ b/app/Filament/Resources/ContactWidgetResource.php @@ -2,10 +2,8 @@ namespace App\Filament\Resources; +use App\Containers\Widget\Models\ContactWidget; use App\Filament\Resources\ContactWidgetResource\Pages; -use App\Filament\Resources\ContactWidgetResource\RelationManagers; -use App\Models\ContactWidget; -use App\Models\Page; use Filament\Forms; use Filament\Forms\Components\Repeater; use Filament\Forms\Components\Tabs; @@ -16,8 +14,6 @@ use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Str; class ContactWidgetResource extends Resource diff --git a/app/Filament/Resources/CustomFormResource.php b/app/Filament/Resources/CustomFormResource.php index ad93ab1..52467a3 100644 --- a/app/Filament/Resources/CustomFormResource.php +++ b/app/Filament/Resources/CustomFormResource.php @@ -2,37 +2,14 @@ namespace App\Filament\Resources; -use App\Enums\CustomFormStatus; -use App\Enums\PostStatus; +use App\Containers\Widget\Models\CustomForm; use App\Filament\Components\Forms\CustomFormForm; -use App\Filament\Exports\CustomFormExporter; use App\Filament\Resources\CustomFormResource\Pages; -use App\Filament\Resources\CustomFormResource\RelationManagers; use App\Filament\Resources\CustomFormResource\RelationManagers\ResponsesRelationManager; -use App\Models\Category; -use App\Models\CustomForm; -use App\Models\Page; -use App\Models\Post; -use Filament\Forms; -use Filament\Forms\Components\Builder; -use Filament\Forms\Components\FileUpload; -use Filament\Forms\Components\RichEditor; -use Filament\Forms\Components\Section; -use Filament\Forms\Components\Select; -use Filament\Forms\Components\SpatieTagsInput; -use Filament\Forms\Components\Tabs; -use Filament\Forms\Components\TextInput; -use Filament\Forms\Components\Toggle; use Filament\Forms\Form; -use Filament\Forms\Get; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\SoftDeletingScope; -use Illuminate\Support\Carbon; -use Illuminate\Support\Str; -use Mohamedsabil83\FilamentFormsTinyeditor\Components\TinyEditor; -use PhpParser\Node\Stmt\Block; class CustomFormResource extends Resource { diff --git a/app/Filament/Resources/CustomFormResource/RelationManagers/ResponsesRelationManager.php b/app/Filament/Resources/CustomFormResource/RelationManagers/ResponsesRelationManager.php index 363c166..5e4ceed 100644 --- a/app/Filament/Resources/CustomFormResource/RelationManagers/ResponsesRelationManager.php +++ b/app/Filament/Resources/CustomFormResource/RelationManagers/ResponsesRelationManager.php @@ -2,18 +2,12 @@ namespace App\Filament\Resources\CustomFormResource\RelationManagers; -use App\Filament\Exports\CustomFormExporter; -use App\Models\CustomFormResponse; use Filament\Forms; use Filament\Forms\Form; -use Filament\Infolists\Components\Section; use Filament\Infolists\Components\TextEntry; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables; -use Filament\Tables\Columns\ViewColumn; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; use pxlrbt\FilamentExcel\Actions\Tables\ExportAction; use pxlrbt\FilamentExcel\Actions\Tables\ExportBulkAction; use pxlrbt\FilamentExcel\Columns\Column; diff --git a/app/Filament/Resources/CustomFormResponseResource.php b/app/Filament/Resources/CustomFormResponseResource.php index 20f3e4e..ab8f9d7 100644 --- a/app/Filament/Resources/CustomFormResponseResource.php +++ b/app/Filament/Resources/CustomFormResponseResource.php @@ -2,16 +2,12 @@ namespace App\Filament\Resources; +use App\Containers\Widget\Models\CustomFormResponse; use App\Filament\Resources\CustomFormResponseResource\Pages; -use App\Filament\Resources\CustomFormResponseResource\RelationManagers; -use App\Models\CustomFormResponse; -use Filament\Forms; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; class CustomFormResponseResource extends Resource { diff --git a/app/Filament/Resources/DepartmentResource.php b/app/Filament/Resources/DepartmentResource.php index 0c0421f..6aeddf2 100644 --- a/app/Filament/Resources/DepartmentResource.php +++ b/app/Filament/Resources/DepartmentResource.php @@ -2,11 +2,11 @@ namespace App\Filament\Resources; +use App\Containers\InstituteStructure\Models\Department; +use App\Containers\InstituteStructure\Models\Faculty; use App\Filament\Components\Forms\ItemForm\Pages\ContentBuilderItem; use App\Filament\Resources\DepartmentResource\Pages; use App\Filament\Resources\DepartmentResource\RelationManagers; -use App\Models\Department; -use App\Models\Faculty; use Filament\Forms; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; diff --git a/app/Filament/Resources/DepartmentResource/RelationManagers/ProgramsRelationManager.php b/app/Filament/Resources/DepartmentResource/RelationManagers/ProgramsRelationManager.php index b09e89e..4108aa3 100644 --- a/app/Filament/Resources/DepartmentResource/RelationManagers/ProgramsRelationManager.php +++ b/app/Filament/Resources/DepartmentResource/RelationManagers/ProgramsRelationManager.php @@ -2,7 +2,7 @@ namespace App\Filament\Resources\DepartmentResource\RelationManagers; -use App\Enums\EducationalProgramStatus; +use App\Ship\Enums\Education\EducationalProgramStatus; use Filament\Forms; use Filament\Forms\Form; use Filament\Resources\RelationManagers\RelationManager; @@ -10,7 +10,6 @@ use Filament\Tables; use Filament\Tables\Actions\AttachAction; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; class ProgramsRelationManager extends RelationManager { diff --git a/app/Filament/Resources/DirectionAdditionalEducationResource.php b/app/Filament/Resources/DirectionAdditionalEducationResource.php index 152d6e8..84557dc 100644 --- a/app/Filament/Resources/DirectionAdditionalEducationResource.php +++ b/app/Filament/Resources/DirectionAdditionalEducationResource.php @@ -2,8 +2,8 @@ namespace App\Filament\Resources; +use App\Containers\AdditionalEducation\Models\DirectionAdditionalEducation; use App\Filament\Resources\DirectionAdditionalEducationResource\Pages; -use App\Models\DirectionAdditionalEducation; use Filament\Forms; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Section; diff --git a/app/Filament/Resources/DirectionStudyResource.php b/app/Filament/Resources/DirectionStudyResource.php index 8041efc..420ca00 100644 --- a/app/Filament/Resources/DirectionStudyResource.php +++ b/app/Filament/Resources/DirectionStudyResource.php @@ -2,9 +2,9 @@ namespace App\Filament\Resources; -use App\Enums\LevelEducational; +use App\Containers\Education\Models\DirectionStudy; use App\Filament\Resources\DirectionStudyResource\Pages; -use App\Models\DirectionStudy; +use App\Ship\Enums\Education\LevelEducational; use Filament\Forms; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Section; diff --git a/app/Filament/Resources/DivisionResource.php b/app/Filament/Resources/DivisionResource.php index 5ddb5f3..f130f87 100644 --- a/app/Filament/Resources/DivisionResource.php +++ b/app/Filament/Resources/DivisionResource.php @@ -2,13 +2,12 @@ namespace App\Filament\Resources; +use App\Containers\InstituteStructure\Models\Division; use App\Filament\Components\Forms\ItemForm\Pages\ContentBuilderItem; use App\Filament\Resources\DivisionResource\Pages; use App\Filament\Resources\DivisionResource\RelationManagers; -use App\Models\Division; use Filament\Forms; use Filament\Forms\Components\Actions\Action; -use Filament\Forms\Components\Builder; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Filament\Forms\Components\Section; use Filament\Forms\Components\Tabs; diff --git a/app/Filament/Resources/EducationalGroupResource.php b/app/Filament/Resources/EducationalGroupResource.php index fa72cb4..02a6a15 100644 --- a/app/Filament/Resources/EducationalGroupResource.php +++ b/app/Filament/Resources/EducationalGroupResource.php @@ -2,11 +2,10 @@ namespace App\Filament\Resources; -use App\Enums\FormEducation; +use App\Containers\InstituteStructure\Models\Faculty; +use App\Containers\Schedule\Models\EducationalGroup; use App\Filament\Resources\EducationalGroupResource\Pages; -use App\Models\EducationalGroup; -use App\Models\Faculty; -use Filament\Forms; +use App\Ship\Enums\Education\FormEducation; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; @@ -14,7 +13,6 @@ use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; -use Filament\Tables\Columns\BadgeColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; diff --git a/app/Filament/Resources/EducationalProgramResource.php b/app/Filament/Resources/EducationalProgramResource.php index f5f17b6..031ed68 100644 --- a/app/Filament/Resources/EducationalProgramResource.php +++ b/app/Filament/Resources/EducationalProgramResource.php @@ -2,19 +2,14 @@ namespace App\Filament\Resources; -use App\Enums\EducationalProgramStatus; -use App\Enums\LevelEducational; +use App\Containers\Education\Models\EducationalProgram; use App\Filament\Components\Forms\ItemForm\Pages\ContentBuilderItem; use App\Filament\Resources\EducationalProgramResource\Pages; use App\Filament\Resources\EducationalProgramResource\RelationManagers\AdmissionPlansRelationManager; -use App\Models\EducationalProgram; -use Filament\Forms; +use App\Ship\Enums\Education\EducationalProgramStatus; +use App\Ship\Enums\Education\LevelEducational; use Filament\Forms\Components\Builder; -use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\Grid; -use Filament\Forms\Components\Hidden; -use Filament\Forms\Components\RichEditor; -use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\Tabs; use Filament\Forms\Components\TextInput; diff --git a/app/Filament/Resources/EducationalProgramResource/Pages/EditEducationalProgram.php b/app/Filament/Resources/EducationalProgramResource/Pages/EditEducationalProgram.php index 2d9cbc8..608baca 100644 --- a/app/Filament/Resources/EducationalProgramResource/Pages/EditEducationalProgram.php +++ b/app/Filament/Resources/EducationalProgramResource/Pages/EditEducationalProgram.php @@ -2,9 +2,7 @@ namespace App\Filament\Resources\EducationalProgramResource\Pages; -use App\Enums\PostStatus; use App\Filament\Resources\EducationalProgramResource; -use Carbon\Carbon; use Filament\Actions; use Filament\Resources\Pages\EditRecord; use Illuminate\Support\Str; diff --git a/app/Filament/Resources/EducationalProgramResource/Pages/ListEducationalPrograms.php b/app/Filament/Resources/EducationalProgramResource/Pages/ListEducationalPrograms.php index d2c4bad..32fea08 100644 --- a/app/Filament/Resources/EducationalProgramResource/Pages/ListEducationalPrograms.php +++ b/app/Filament/Resources/EducationalProgramResource/Pages/ListEducationalPrograms.php @@ -2,10 +2,9 @@ namespace App\Filament\Resources\EducationalProgramResource\Pages; -use App\Enums\EducationalProgramStatus; -use App\Enums\PostStatus; +use App\Containers\Education\Models\EducationalProgram; use App\Filament\Resources\EducationalProgramResource; -use App\Models\EducationalProgram; +use App\Ship\Enums\Education\EducationalProgramStatus; use Filament\Actions; use Filament\Resources\Components\Tab; use Filament\Resources\Pages\ListRecords; diff --git a/app/Filament/Resources/EducationalProgramResource/RelationManagers/AdmissionPlansRelationManager.php b/app/Filament/Resources/EducationalProgramResource/RelationManagers/AdmissionPlansRelationManager.php index 0f7170b..1510c2d 100644 --- a/app/Filament/Resources/EducationalProgramResource/RelationManagers/AdmissionPlansRelationManager.php +++ b/app/Filament/Resources/EducationalProgramResource/RelationManagers/AdmissionPlansRelationManager.php @@ -2,11 +2,9 @@ namespace App\Filament\Resources\EducationalProgramResource\RelationManagers; -use App\Enums\BudgetEducation; -use App\Enums\FormEducation; -use App\Models\AdmissionCampaign; -use Filament\Forms; -use Filament\Forms\Components\Grid; +use App\Containers\Education\Models\AdmissionCampaign; +use App\Ship\Enums\Education\BudgetEducation; +use App\Ship\Enums\Education\FormEducation; use Filament\Forms\Components\Repeater; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; diff --git a/app/Filament/Resources/EventCategoryResource.php b/app/Filament/Resources/EventCategoryResource.php index 82ee2ed..fed0257 100644 --- a/app/Filament/Resources/EventCategoryResource.php +++ b/app/Filament/Resources/EventCategoryResource.php @@ -2,9 +2,8 @@ namespace App\Filament\Resources; +use App\Containers\Event\Models\EventCategory; use App\Filament\Resources\EventCategoryResource\Pages; -use App\Filament\Resources\EventCategoryResource\RelationManagers; -use App\Models\EventCategory; use Filament\Forms; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; @@ -12,8 +11,6 @@ use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Str; class EventCategoryResource extends Resource diff --git a/app/Filament/Resources/EventResource.php b/app/Filament/Resources/EventResource.php index 961b1ad..6c82809 100644 --- a/app/Filament/Resources/EventResource.php +++ b/app/Filament/Resources/EventResource.php @@ -2,15 +2,14 @@ namespace App\Filament\Resources; +use App\Containers\Event\Models\Event; +use App\Containers\Event\Models\EventCategory; use App\Filament\Components\Forms\ItemForm\Pages\ContentBuilderItem; use App\Filament\Resources\EventResource\Pages; -use App\Models\Event; -use App\Models\EventCategory; use Filament\Forms; use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Grid; -use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\SpatieTagsInput; use Filament\Forms\Components\Tabs; diff --git a/app/Filament/Resources/FacultyResource.php b/app/Filament/Resources/FacultyResource.php index 1d7eadd..43ec6cf 100644 --- a/app/Filament/Resources/FacultyResource.php +++ b/app/Filament/Resources/FacultyResource.php @@ -2,24 +2,14 @@ namespace App\Filament\Resources; -use App\Enums\CustomFormStatus; -use App\Enums\PostStatus; +use App\Containers\InstituteStructure\Models\Faculty; use App\Filament\Components\Forms\ItemForm\Pages\ContentBuilderItem; use App\Filament\Resources\FacultyResource\Pages; use App\Filament\Resources\FacultyResource\RelationManagers\DepartmentsRelationManager; use App\Filament\Resources\FacultyResource\RelationManagers\WorkersRelationManager; -use App\Models\Category; -use App\Models\CustomForm; -use App\Models\Faculty; -use App\Models\Page; -use App\Models\PageReferenceList; -use App\Models\Post; use Filament\Forms; use Filament\Forms\Components\Actions\Action; -use Filament\Forms\Components\Builder; -use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\Section; -use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; use Filament\Forms\Form; diff --git a/app/Filament/Resources/JournalIssueResource.php b/app/Filament/Resources/JournalIssueResource.php index 18a75a3..7ea67b0 100644 --- a/app/Filament/Resources/JournalIssueResource.php +++ b/app/Filament/Resources/JournalIssueResource.php @@ -2,10 +2,9 @@ namespace App\Filament\Resources; +use App\Containers\Science\Models\AcademicJournal; +use App\Containers\Science\Models\JournalIssue; use App\Filament\Resources\JournalIssueResource\Pages; -use App\Filament\Resources\JournalIssueResource\RelationManagers; -use App\Models\AcademicJournal; -use App\Models\JournalIssue; use Filament\Forms; use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\Toggle; @@ -13,8 +12,6 @@ use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; class JournalIssueResource extends Resource { diff --git a/app/Filament/Resources/MainSectionResource.php b/app/Filament/Resources/MainSectionResource.php index 2578566..05282f3 100644 --- a/app/Filament/Resources/MainSectionResource.php +++ b/app/Filament/Resources/MainSectionResource.php @@ -2,20 +2,15 @@ namespace App\Filament\Resources; +use App\Containers\AppStructure\Models\MainSection; use App\Filament\Resources\MainSectionResource\Pages; use App\Filament\Resources\MainSectionResource\RelationManagers; -use App\Models\MainSection; -use App\Models\SubSection; -use App\Services\Filament\Icon\ArrayToCollectionService; use Filament\Forms; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; -use Guava\FilamentIconPicker\Forms\IconPicker; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Str; class MainSectionResource extends Resource diff --git a/app/Filament/Resources/MainSectionResource/Pages/CreateMainSection.php b/app/Filament/Resources/MainSectionResource/Pages/CreateMainSection.php index ca14b67..b94fc4e 100644 --- a/app/Filament/Resources/MainSectionResource/Pages/CreateMainSection.php +++ b/app/Filament/Resources/MainSectionResource/Pages/CreateMainSection.php @@ -3,9 +3,6 @@ namespace App\Filament\Resources\MainSectionResource\Pages; use App\Filament\Resources\MainSectionResource; -use App\Models\MainSection; -use App\Models\SubSection; -use Filament\Actions; use Filament\Resources\Pages\CreateRecord; class CreateMainSection extends CreateRecord diff --git a/app/Filament/Resources/MainSectionResource/Pages/EditMainSection.php b/app/Filament/Resources/MainSectionResource/Pages/EditMainSection.php index 2859a5e..d4ec230 100644 --- a/app/Filament/Resources/MainSectionResource/Pages/EditMainSection.php +++ b/app/Filament/Resources/MainSectionResource/Pages/EditMainSection.php @@ -2,8 +2,8 @@ namespace App\Filament\Resources\MainSectionResource\Pages; +use App\Containers\AppStructure\Models\SubSection; use App\Filament\Resources\MainSectionResource; -use App\Models\SubSection; use Filament\Actions; use Filament\Resources\Pages\EditRecord; diff --git a/app/Filament/Resources/MainSectionResource/RelationManagers/SubSectionsRelationManager.php b/app/Filament/Resources/MainSectionResource/RelationManagers/SubSectionsRelationManager.php index 2b9e645..cbf511c 100644 --- a/app/Filament/Resources/MainSectionResource/RelationManagers/SubSectionsRelationManager.php +++ b/app/Filament/Resources/MainSectionResource/RelationManagers/SubSectionsRelationManager.php @@ -2,15 +2,13 @@ namespace App\Filament\Resources\MainSectionResource\RelationManagers; -use App\Models\SubSection; +use App\Containers\AppStructure\Models\SubSection; use Filament\Forms; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Str; class SubSectionsRelationManager extends RelationManager diff --git a/app/Filament/Resources/PageReferenceListResource.php b/app/Filament/Resources/PageReferenceListResource.php index 816f733..622d796 100644 --- a/app/Filament/Resources/PageReferenceListResource.php +++ b/app/Filament/Resources/PageReferenceListResource.php @@ -2,14 +2,9 @@ namespace App\Filament\Resources; +use App\Containers\Widget\Models\PageReferenceList; use App\Filament\Resources\PageReferenceListResource\Pages; -use App\Filament\Resources\PageReferenceListResource\RelationManagers; -use App\Models\Event; -use App\Models\Page; -use App\Models\PageReferenceList; -use App\Models\Post; use Filament\Forms; -use Filament\Forms\Components\ColorPicker; use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\Repeater; use Filament\Forms\Components\Tabs; @@ -20,8 +15,7 @@ use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; + use Illuminate\Support\Str; class PageReferenceListResource extends Resource diff --git a/app/Filament/Resources/PageResource.php b/app/Filament/Resources/PageResource.php index 46fbff1..dac4412 100644 --- a/app/Filament/Resources/PageResource.php +++ b/app/Filament/Resources/PageResource.php @@ -2,39 +2,15 @@ namespace App\Filament\Resources; -use App\Enums\CustomFormStatus; -use App\Enums\PostStatus; + +use App\Containers\AppStructure\Models\Page; use App\Filament\Components\Forms\PageForm; use App\Filament\Resources\PageResource\Pages; use App\Filament\Resources\PageResource\RelationManagers\SectionRelationManager; -use App\Helpers\ByteConverter; -use App\Models\Category; -use App\Models\CustomForm; -use App\Models\MainSection; -use App\Models\Page; -use App\Models\Post; -use App\Models\SubSection; -use Filament\Forms\Components\Builder; -use Filament\Forms; -use Filament\Forms\Components\FileUpload; -use Filament\Forms\Components\Hidden; -use Filament\Forms\Components\RichEditor; -use Filament\Forms\Components\Section; -use Filament\Forms\Components\Select; -use Filament\Forms\Components\SpatieTagsInput; -use Filament\Forms\Components\TextInput; -use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\SoftDeletingScope; -use Illuminate\Support\Carbon; -use Illuminate\Support\Facades\File; -use Illuminate\Support\Str; -use Livewire\Features\SupportFileUploads\TemporaryUploadedFile; -use Mohamedsabil83\FilamentFormsTinyeditor\Components\TinyEditor; -use Symfony\Component\Finder\Finder; class PageResource extends Resource { diff --git a/app/Filament/Resources/PageResource/Pages/CreatePage.php b/app/Filament/Resources/PageResource/Pages/CreatePage.php index 68b7e1a..d792193 100644 --- a/app/Filament/Resources/PageResource/Pages/CreatePage.php +++ b/app/Filament/Resources/PageResource/Pages/CreatePage.php @@ -2,13 +2,10 @@ namespace App\Filament\Resources\PageResource\Pages; +use App\Containers\AppStructure\Models\SubSection; use App\Filament\Resources\PageResource; -use App\Models\SubSection; -use App\Services\Filament\Domain\Seo\SeoGeneratorService; use App\Services\Filament\Traits\SeoGenerate; -use Filament\Actions; use Filament\Resources\Pages\CreateRecord; -use Illuminate\Support\Str; class CreatePage extends CreateRecord { diff --git a/app/Filament/Resources/PostResource.php b/app/Filament/Resources/PostResource.php index c04b28a..e3d9da7 100644 --- a/app/Filament/Resources/PostResource.php +++ b/app/Filament/Resources/PostResource.php @@ -2,9 +2,9 @@ namespace App\Filament\Resources; +use App\Containers\Article\Models\Post; use App\Filament\Components\Forms\PostForm; use App\Filament\Resources\PostResource\Pages; -use App\Models\Post; use BezhanSalleh\FilamentShield\Contracts\HasShieldPermissions; use Filament\Forms\Form; use Filament\Resources\Resource; diff --git a/app/Filament/Resources/PostResource/Pages/CreatePost.php b/app/Filament/Resources/PostResource/Pages/CreatePost.php index 9f973bb..16a2cbe 100644 --- a/app/Filament/Resources/PostResource/Pages/CreatePost.php +++ b/app/Filament/Resources/PostResource/Pages/CreatePost.php @@ -2,15 +2,13 @@ namespace App\Filament\Resources\PostResource\Pages; +use App\Containers\Article\Enums\PostStatus; use App\Dto\MainSliderDTO; -use App\Enums\PostStatus; use App\Filament\Resources\PostResource; use App\Services\Filament\Domain\Posts\PostDataProcessor; use App\Services\Filament\Domain\Posts\PostNotificationService; -use App\Services\Filament\Domain\Posts\PostSeoGenerator; use App\Services\Filament\Domain\Posts\PostSliderService; use App\Services\Filament\Domain\Posts\VkPostPublisher; -use App\Services\Filament\Domain\Seo\SeoGeneratorService; use App\Services\Filament\Traits\SeoGenerate; use Filament\Resources\Pages\CreateRecord; @@ -41,7 +39,7 @@ class CreatePost extends CreateRecord protected function processPostData(array $data): array { - return (new PostDataProcessor())->process($data, 'create'); + return (new PostDataProcessor())->processCreate($data); } protected function afterCreate(): void diff --git a/app/Filament/Resources/PostResource/Pages/EditPost.php b/app/Filament/Resources/PostResource/Pages/EditPost.php index de31a58..659db04 100644 --- a/app/Filament/Resources/PostResource/Pages/EditPost.php +++ b/app/Filament/Resources/PostResource/Pages/EditPost.php @@ -2,13 +2,12 @@ namespace App\Filament\Resources\PostResource\Pages; +use App\Containers\Article\Enums\PostStatus; +use App\Containers\Article\Models\Post; use App\Dto\MainSliderDTO; -use App\Enums\PostStatus; use App\Filament\Resources\PostResource; -use App\Models\Post; use App\Services\Filament\Domain\Posts\PostDataProcessor; use App\Services\Filament\Domain\Posts\PostNotificationService; -use App\Services\Filament\Domain\Posts\PostSeoGenerator; use App\Services\Filament\Domain\Posts\PostSliderService; use App\Services\Filament\Domain\Posts\VkPostPublisher; use App\Services\Filament\Domain\Seo\SeoGeneratorService; @@ -16,6 +15,7 @@ use App\Services\Filament\Traits\SeoGenerate; use Carbon\Carbon; use Filament\Actions; use Filament\Resources\Pages\EditRecord; +use Illuminate\Support\Facades\DB; class EditPost extends EditRecord { @@ -27,8 +27,15 @@ class EditPost extends EditRecord protected array $slideData; + protected function mutateFormDataBeforeFill(array $data): array { + if ($data['publish_at']) { + $data['publish_setting']['publish_after'] = true; + $data['publish_setting']['publish_at'] = $data['publish_at']; + } + $data['publication']['vk'] = true; + $data['publication']['telegram'] = true; $post = Post::query()->with(['seo', 'slide'])->find($data['id']); $data['slide'] = $post->slide ? $post->slide->toArray() : null; return $data; @@ -36,6 +43,7 @@ class EditPost extends EditRecord protected function mutateFormDataBeforeSave(array $data): array { + $data['publish_at'] = $this->record->publish_at; $this->extractAdditionalData($data); return $this->processPostData($data); } @@ -49,7 +57,7 @@ class EditPost extends EditRecord protected function processPostData(array $data): array { - return (new PostDataProcessor())->process($data, 'edit'); + return (new PostDataProcessor())->processUpdate($data); } protected function afterSave(): void @@ -97,7 +105,12 @@ class EditPost extends EditRecord protected function publishToVk(): void { - (new VkPostPublisher())->publish($this->publicationAgreements, $this->record); + $postRelation = DB::table('posts_vk_posts')->select()->where('post_id', $this->record->id)->first(); + if($postRelation){ + (new VkPostPublisher())->update($this->publicationAgreements, $this->record); + } else { + (new VkPostPublisher())->publish($this->publicationAgreements, $this->record); + } } protected function getHeaderActions(): array diff --git a/app/Filament/Resources/PostResource/Pages/ListPosts.php b/app/Filament/Resources/PostResource/Pages/ListPosts.php index 1702146..03d5657 100644 --- a/app/Filament/Resources/PostResource/Pages/ListPosts.php +++ b/app/Filament/Resources/PostResource/Pages/ListPosts.php @@ -2,9 +2,9 @@ namespace App\Filament\Resources\PostResource\Pages; -use App\Enums\PostStatus; +use App\Containers\Article\Enums\PostStatus; +use App\Containers\Article\Models\Post; use App\Filament\Resources\PostResource; -use App\Models\Post; use Filament\Actions; use Filament\Resources\Components\Tab; use Filament\Resources\Pages\ListRecords; diff --git a/app/Filament/Resources/ScheduleResource.php b/app/Filament/Resources/ScheduleResource.php index 70504d6..53f5775 100644 --- a/app/Filament/Resources/ScheduleResource.php +++ b/app/Filament/Resources/ScheduleResource.php @@ -2,21 +2,18 @@ namespace App\Filament\Resources; -use App\Enums\FormEducation; +use App\Containers\Schedule\Models\EducationalGroup; +use App\Containers\Schedule\Models\Schedule; use App\Filament\Resources\ScheduleResource\Pages; -use App\Models\EducationalGroup; -use App\Models\Schedule; use Filament\Forms; use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\Grid; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; -use Filament\Forms\Components\Toggle; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; -use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Support\Carbon; diff --git a/app/Filament/Resources/ScheduleResource/Pages/EditSchedule.php b/app/Filament/Resources/ScheduleResource/Pages/EditSchedule.php index 7b4ec4d..e3e8a85 100644 --- a/app/Filament/Resources/ScheduleResource/Pages/EditSchedule.php +++ b/app/Filament/Resources/ScheduleResource/Pages/EditSchedule.php @@ -3,7 +3,6 @@ namespace App\Filament\Resources\ScheduleResource\Pages; use App\Filament\Resources\ScheduleResource; -use App\Models\EducationalGroup; use Filament\Actions; use Filament\Resources\Pages\EditRecord; diff --git a/app/Filament/Resources/Shield/RoleResource.php b/app/Filament/Resources/Shield/RoleResource.php index 27bc2aa..73fcd35 100644 --- a/app/Filament/Resources/Shield/RoleResource.php +++ b/app/Filament/Resources/Shield/RoleResource.php @@ -137,7 +137,7 @@ class RoleResource extends Resource implements HasShieldPermissions public static function getModel(): string { - return Utils::getRoleModel(); + return 'App\\Containers\\User\\Models\\Role'; } public static function getModelLabel(): string diff --git a/app/Filament/Resources/SlideResource.php b/app/Filament/Resources/SlideResource.php index fcae4fc..6ad4579 100644 --- a/app/Filament/Resources/SlideResource.php +++ b/app/Filament/Resources/SlideResource.php @@ -2,12 +2,11 @@ namespace App\Filament\Resources; +use App\Containers\AppStructure\Models\Page; +use App\Containers\Article\Models\Post; +use App\Containers\Event\Models\Event; +use App\Containers\Widget\Models\Slide; use App\Filament\Resources\SlideResource\Pages; -use App\Models\Event; -use App\Models\Page; -use App\Models\Post; -use App\Models\Slide; -use App\Models\Slider; use Filament\Forms; use Filament\Forms\Components\ColorPicker; use Filament\Forms\Components\DateTimePicker; @@ -18,7 +17,6 @@ use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; - use Illuminate\Support\Carbon; class SlideResource extends Resource diff --git a/app/Filament/Resources/SliderResource.php b/app/Filament/Resources/SliderResource.php index 28c13c5..1777620 100644 --- a/app/Filament/Resources/SliderResource.php +++ b/app/Filament/Resources/SliderResource.php @@ -2,9 +2,9 @@ namespace App\Filament\Resources; +use App\Containers\Widget\Models\Slider; use App\Filament\Resources\SliderResource\Pages; use App\Filament\Resources\SliderResource\RelationManagers; -use App\Models\Slider; use Filament\Forms; use Filament\Forms\Components\Section; use Filament\Forms\Components\TextInput; diff --git a/app/Filament/Resources/SliderResource/RelationManagers/SlidesRelationManager.php b/app/Filament/Resources/SliderResource/RelationManagers/SlidesRelationManager.php index edac4f3..d3b8eae 100644 --- a/app/Filament/Resources/SliderResource/RelationManagers/SlidesRelationManager.php +++ b/app/Filament/Resources/SliderResource/RelationManagers/SlidesRelationManager.php @@ -2,9 +2,9 @@ namespace App\Filament\Resources\SliderResource\RelationManagers; -use App\Models\Event; -use App\Models\Page; -use App\Models\Post; +use App\Containers\Event\Models\Event; +use App\Containers\AppStructure\Models\Page; +use App\Containers\Article\Models\Post; use Filament\Forms; use Filament\Forms\Components\ColorPicker; use Filament\Forms\Components\DateTimePicker; diff --git a/app/Filament/Resources/SubSectionResource.php b/app/Filament/Resources/SubSectionResource.php index 6d16b25..d250b20 100644 --- a/app/Filament/Resources/SubSectionResource.php +++ b/app/Filament/Resources/SubSectionResource.php @@ -2,18 +2,15 @@ namespace App\Filament\Resources; +use App\Containers\AppStructure\Models\SubSection; use App\Filament\Resources\SubSectionResource\Pages; use App\Filament\Resources\SubSectionResource\RelationManagers; -use App\Models\Page; -use App\Models\SubSection; use Filament\Forms; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Str; class SubSectionResource extends Resource diff --git a/app/Filament/Resources/SubSectionResource/Pages/CreateSubSection.php b/app/Filament/Resources/SubSectionResource/Pages/CreateSubSection.php index 12dc766..b0b02fa 100644 --- a/app/Filament/Resources/SubSectionResource/Pages/CreateSubSection.php +++ b/app/Filament/Resources/SubSectionResource/Pages/CreateSubSection.php @@ -3,10 +3,6 @@ namespace App\Filament\Resources\SubSectionResource\Pages; use App\Filament\Resources\SubSectionResource; -use App\Models\Page; -use App\Models\SubSection; -use Filament\Actions; -use Filament\Notifications\Notification; use Filament\Resources\Pages\CreateRecord; class CreateSubSection extends CreateRecord diff --git a/app/Filament/Resources/SubSectionResource/Pages/EditSubSection.php b/app/Filament/Resources/SubSectionResource/Pages/EditSubSection.php index df9651c..e85537c 100644 --- a/app/Filament/Resources/SubSectionResource/Pages/EditSubSection.php +++ b/app/Filament/Resources/SubSectionResource/Pages/EditSubSection.php @@ -3,8 +3,7 @@ namespace App\Filament\Resources\SubSectionResource\Pages; use App\Filament\Resources\SubSectionResource; -use App\Models\Page; -use App\Models\SubSection; +use App\Containers\AppStructure\Models\Page; use Filament\Actions; use Filament\Resources\Pages\EditRecord; diff --git a/app/Filament/Resources/SubSectionResource/RelationManagers/PagesRelationManager.php b/app/Filament/Resources/SubSectionResource/RelationManagers/PagesRelationManager.php index fdf2812..b97e2a9 100644 --- a/app/Filament/Resources/SubSectionResource/RelationManagers/PagesRelationManager.php +++ b/app/Filament/Resources/SubSectionResource/RelationManagers/PagesRelationManager.php @@ -3,16 +3,12 @@ namespace App\Filament\Resources\SubSectionResource\RelationManagers; use App\Filament\Components\Forms\PageForm; -use App\Models\Page; -use App\Models\SubSection; +use App\Containers\AppStructure\Models\Page; use Filament\Forms; use Filament\Forms\Form; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; - class PagesRelationManager extends RelationManager { protected static string $relationship = 'pages'; diff --git a/app/Filament/Resources/TagResource.php b/app/Filament/Resources/TagResource.php index c78a0bf..e56cc0d 100644 --- a/app/Filament/Resources/TagResource.php +++ b/app/Filament/Resources/TagResource.php @@ -2,16 +2,12 @@ namespace App\Filament\Resources; +use App\Containers\Article\Models\Tag; use App\Filament\Resources\TagResource\Pages; -use App\Filament\Resources\TagResource\RelationManagers; -use App\Models\Tag; -use Filament\Forms; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; class TagResource extends Resource { diff --git a/app/Filament/Resources/UrlLinkResource.php b/app/Filament/Resources/UrlLinkResource.php index 0860f9f..cb2a31d 100644 --- a/app/Filament/Resources/UrlLinkResource.php +++ b/app/Filament/Resources/UrlLinkResource.php @@ -2,14 +2,9 @@ namespace App\Filament\Resources; +use App\Containers\AppStructure\Models\Page; use App\Filament\Resources\UrlLinkResource\Pages; -use App\Filament\Resources\UrlLinkResource\RelationManagers; -use App\Models\Page; -use App\Models\UrlLink; use Filament\Forms; -use Filament\Forms\Components\FileUpload; -use Filament\Forms\Components\Hidden; -use Filament\Forms\Components\RichEditor; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; @@ -18,10 +13,6 @@ use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Builder; - -use Illuminate\Support\Str; class UrlLinkResource extends Resource { diff --git a/app/Filament/Resources/UserDetailResource.php b/app/Filament/Resources/UserDetailResource.php index 9234b7d..3f1a853 100644 --- a/app/Filament/Resources/UserDetailResource.php +++ b/app/Filament/Resources/UserDetailResource.php @@ -2,19 +2,13 @@ namespace App\Filament\Resources; +use App\Containers\User\Models\UserDetail; use App\Filament\Components\Forms\UserDetailForm; use App\Filament\Resources\UserDetailResource\Pages; -use App\Filament\Resources\UserDetailResource\RelationManagers; -use App\Models\UserDetail; -use Filament\Forms; -use Filament\Forms\Components\Tabs; use Filament\Forms\Form; -use Filament\Resources\Components\Tab; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; class UserDetailResource extends Resource { diff --git a/app/Filament/Resources/UserResource.php b/app/Filament/Resources/UserResource.php index 8bb490d..159c8fa 100644 --- a/app/Filament/Resources/UserResource.php +++ b/app/Filament/Resources/UserResource.php @@ -2,20 +2,16 @@ namespace App\Filament\Resources; +use App\Containers\User\Models\User; use App\Filament\Resources\UserResource\Pages; use App\Filament\Resources\UserResource\RelationManagers; -use App\Models\User; use BezhanSalleh\FilamentShield\Contracts\HasShieldPermissions; use Filament\Forms; use Filament\Forms\Components\Section; -use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; -use Illuminate\Support\Str; class UserResource extends Resource implements HasShieldPermissions { diff --git a/app/Filament/Resources/UserResource/Pages/CreateUser.php b/app/Filament/Resources/UserResource/Pages/CreateUser.php index 343dd53..a3bb5c6 100644 --- a/app/Filament/Resources/UserResource/Pages/CreateUser.php +++ b/app/Filament/Resources/UserResource/Pages/CreateUser.php @@ -3,7 +3,7 @@ namespace App\Filament\Resources\UserResource\Pages; use App\Filament\Resources\UserResource; -use App\Models\User; +use App\Containers\User\Models\User; use Filament\Actions; use Filament\Resources\Pages\CreateRecord; use Illuminate\Support\Str; diff --git a/app/Filament/Resources/UserResource/Pages/EditUser.php b/app/Filament/Resources/UserResource/Pages/EditUser.php index ca18f35..21f6f8c 100644 --- a/app/Filament/Resources/UserResource/Pages/EditUser.php +++ b/app/Filament/Resources/UserResource/Pages/EditUser.php @@ -2,8 +2,8 @@ namespace App\Filament\Resources\UserResource\Pages; +use App\Containers\User\Models\User; use App\Filament\Resources\UserResource; -use App\Models\User; use Filament\Actions; use Filament\Resources\Pages\EditRecord; use Illuminate\Support\Str; diff --git a/app/Filament/Resources/UserResource/Pages/ListUsers.php b/app/Filament/Resources/UserResource/Pages/ListUsers.php index 6de0892..569b434 100644 --- a/app/Filament/Resources/UserResource/Pages/ListUsers.php +++ b/app/Filament/Resources/UserResource/Pages/ListUsers.php @@ -2,10 +2,10 @@ namespace App\Filament\Resources\UserResource\Pages; +use App\Containers\User\Mails\InvitationMail; +use App\Containers\User\Models\Invitation; use App\Filament\Resources\UserResource; -use App\Mail\InvitationMail; -use App\Models\Invitation; -use App\Models\User; +use App\Containers\User\Models\User; use Filament\Actions; use Filament\Forms\Components\TextInput; use Filament\Notifications\Notification; diff --git a/app/Filament/Resources/UserResource/RelationManagers/UserDetailRelationManager.php b/app/Filament/Resources/UserResource/RelationManagers/UserDetailRelationManager.php index 73899ba..3634324 100644 --- a/app/Filament/Resources/UserResource/RelationManagers/UserDetailRelationManager.php +++ b/app/Filament/Resources/UserResource/RelationManagers/UserDetailRelationManager.php @@ -3,15 +3,11 @@ namespace App\Filament\Resources\UserResource\RelationManagers; use App\Filament\Components\Forms\UserDetailForm; -use App\Models\User; -use Filament\Forms; -use Filament\Forms\Components\Tabs; +use App\Containers\User\Models\User; use Filament\Forms\Form; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; class UserDetailRelationManager extends RelationManager { diff --git a/app/Http/Controllers/AcademicJournalController.php b/app/Http/Controllers/AcademicJournalController.php deleted file mode 100644 index a0fca94..0000000 --- a/app/Http/Controllers/AcademicJournalController.php +++ /dev/null @@ -1,10 +0,0 @@ -when(request()->input('search'), function ($query, $search) { - $query->whereRaw("LOWER(first_name || ' ' || last_name) LIKE ?", ["%{$search}%"]) - ->orWhere('email', 'like', "%{$search}%") - ->orWhere('phone', 'like', "%{$search}%"); - }) - ->orderBy('id', 'desc') - ->paginate(request()->input('perPage', 9)) - ->withQueryString()); - $filters = request()->input('search'); - - return Inertia::render('AdminPanel/ApplicantQuestion/Index', compact('applicantQuestions', 'filters')); - } - - public function create() - { - return Inertia::render('AdminPanel/ApplicantQuestion/Create'); - } - - public function store(StoreRequest $request) - { - $data = $request->validated(); - ApplicantQuestion::create($data); - - return redirect()->route('admin.applicantQuestion.index'); - } -} diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index 4c7bd6d..34e0fb1 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -2,9 +2,8 @@ namespace App\Http\Controllers\Auth; +use App\Containers\User\Models\User; use App\Http\Controllers\Controller; -use App\Models\User; -use App\Providers\RouteServiceProvider; use Illuminate\Auth\Events\Registered; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; diff --git a/app/Http/Controllers/CategoryController.php b/app/Http/Controllers/CategoryController.php deleted file mode 100644 index 192d089..0000000 --- a/app/Http/Controllers/CategoryController.php +++ /dev/null @@ -1,67 +0,0 @@ -when(request()->input('search'), function ($query, $search) { - $query->where('title', 'like', "%{$search}%") - ->orWhere('title', 'like', "%{$search}%"); - }) - ->orderBy('id', 'desc') - ->paginate(request()->input('perPage', 9)) - ->withQueryString()); - $filters = [ - 'search' => request()->input('search'), - ]; - return Inertia::render('AdminPanel/Categories/Index', compact('categories', 'filters')); - } - - public function create() - { - return Inertia::render('AdminPanel/Categories/Create'); - } - - public function store(Request $request) - { - $data = $request->validate([ - 'title' => 'required|unique:categories|max:50|min:5', - ]); - Category::create($data); - return redirect()->route('admin.category.index'); - } - - public function edit(Category $category) - { - return Inertia::render('AdminPanel/Categories/Edit', compact('category')); - } - - public function update(Category $category, Request $request) - { - $data = $request->validate([ - 'title' => 'required|unique:categories|max:50|min:5', - ]); - $category->update($data); - return redirect()->route('admin.category.index'); - } - - public function destroy(string $id) - { - $category = Category::find($id); - $category->delete(); - - return redirect()->route('admin.category.index'); - } - -} diff --git a/app/Http/Controllers/ClientExternalVacancyController.php b/app/Http/Controllers/ClientExternalVacancyController.php deleted file mode 100644 index 58a3c98..0000000 --- a/app/Http/Controllers/ClientExternalVacancyController.php +++ /dev/null @@ -1,10 +0,0 @@ -where('is_active', true) - ->orderBy('id', 'desc') - ->paginate(6)); - return Inertia::render('Client/Library-news/Index', compact('posts')); - } - - public function show(string $slug) - { - $post = new ClientLibraryPostListResource(LibraryNews::query()->where('slug', $slug)->firstOrFail()); - return Inertia::render('Client/Library-news/Show', compact('post')); - } -} diff --git a/app/Http/Controllers/ClientPostController.php b/app/Http/Controllers/ClientPostController.php deleted file mode 100644 index 7f5d46b..0000000 --- a/app/Http/Controllers/ClientPostController.php +++ /dev/null @@ -1,158 +0,0 @@ -addHours(), function () { - return DB::table('taggables') - ->distinct() - ->select('tag_id') - ->where('taggable_type', Post::class) - ->get() - ->pluck('tag_id'); - }); - - $tags = Cache::remember('tags', now()->addHours(1), function () use ($tagIds) { - return \Spatie\Tags\Tag::whereIn('id', $tagIds)->get(); - }); - - $cacheKey = 'posts_' . md5(serialize($request->all())); - $posts = Cache::remember($cacheKey, now()->addHours(1), function () use ($request) { - return ClientPostListResource::collection(Post::query() - ->with('category') - ->select('title', 'slug', 'authors', 'category_id', 'preview', 'search_data', 'publish_at') - ->where('status', '=', 'published') - ->where('publish_at', '<', Carbon::now()) - ->when($request->input('search'), function ($query, $search) { - $query->whereRaw('LOWER(title) like ?', ["%".strtolower($search)."%"]); - }) - ->when($request->input('category'), function ($query) use ($request) { - $slugs = $request->input('category'); - if (is_array($slugs)) { - $query->whereHas('category', function ($query) use ($slugs) { - $query->whereIn('slug', $slugs); - }); - } - }) - ->when($request->input('tag'), function ($query, $slugs) { - if (is_array($slugs)) { - return $query->withAnyTags($slugs); - } - - $slugsArray = explode(',', $slugs); - return $query->withAnyTags($slugsArray); - }) - ->orderBy('publish_at', $request->input('sort', 'desc')) - ->paginate(9) - ->withQueryString() - ); - }); - - - $categories = Cache::remember('categories', now()->addHours(48), function () { - return CategoryResource::collection(Category::has('posts')->get()); - }); - - $categoriesContent = []; - if ($request->input('category')) { - foreach ($request->input('category') as $item) { - $cacheKey = 'category_content_' . $item; - $categoriesContent[$item] = Cache::remember($cacheKey, now()->addHours(1), function () use ($item) { - return new CategoryResource(Category::where('slug', $item)->first()); - }); - } - } - - // Кешируем контент тегов - $tagsContent = []; - if ($request->input('tag')) { - foreach ($request->input('tag') as $item) { - $cacheKey = 'tag_content_' . $item; - $tagsContent[$item] = Cache::remember($cacheKey, now()->addHours(1), function () use ($item) { - return new ClientTagResource(DB::table('tags') - ->where(DB::raw("JSON_UNQUOTE(JSON_EXTRACT(slug, '$.ru'))"), $item) - ->first()); - }); - } - } - - $filters = [ - 'search_filter' => [ - 'type' => 'search', - 'value' => $request->input('search'), - 'param' => 'search' - ], - 'category_filter' => [ - 'type' => 'category', - 'value' => $request->input('category'), - 'param' => 'category', - 'content' => $categoriesContent, - ], - 'tag_filter' => [ - 'type' => 'tag', - 'value' => $request->input('tag'), - 'param' => 'tag', - 'content' => $tagsContent - ], - 'sortingBy_filter' => [ - 'type' => 'sort', - 'value' => $request->input('sort'), - 'param' => 'sort', - ], - ]; - - $seo = $this->seoPageProvider->getSeoForCurrentPage(); - - return Inertia::render('Client/Posts/Index', compact('filters', 'posts', 'categories', 'tags', 'seo')); - } - - public function show(Request $request, $slug): \Inertia\Response - { - $postData = Cache::remember( - CacheKeys::POST_PREFIX->value . $slug, - now()->addHours(1), - fn() => Post::where('slug', $slug) - ->where('publish_at', '<', Carbon::now()) - ->firstOrFail() - ); - - $seo = Cache::remember( - CacheKeys::POST_PREFIX->value . 'seo_' . $slug, - now()->addHours(1), - fn() => $this->seoPageProvider->getSeoForModel($postData) - ); - - $post = new PostResource($postData); - - - // Возвращаем ответ с использованием кешированных данных - return Inertia::render('Client/Posts/Show', compact('post', 'seo')); - } - - -} diff --git a/app/Http/Controllers/ClientVacantPositionController.php b/app/Http/Controllers/ClientVacantPositionController.php deleted file mode 100644 index fe6f480..0000000 --- a/app/Http/Controllers/ClientVacantPositionController.php +++ /dev/null @@ -1,10 +0,0 @@ -where('is_active', true) - ->orderBy('id', 'desc') - ->paginate(6)); - return Inertia::render('Client/Library-exhibitions/Index', compact('exhibitions')); - } - - public function show(string $slug) - { - $exhibition = new ClientVirtualExhibitionListResource(VirtualExhibition::query()->where('slug', $slug)->firstOrFail()); - return Inertia::render('Client/Library-exhibitions/Show', compact('exhibition')); - } -} diff --git a/app/Http/Controllers/DepartmentController.php b/app/Http/Controllers/DepartmentController.php deleted file mode 100644 index 04148b9..0000000 --- a/app/Http/Controllers/DepartmentController.php +++ /dev/null @@ -1,54 +0,0 @@ - request()->input('search'), - ]; - return Inertia::render('AdminPanel/Departments/Index', compact('departments', 'filters')); - } - - public function create() - { - $faculties = FacultyResource::collection(Faculty::all()); - return Inertia::render('AdminPanel/Departments/Create', compact('faculties')); - } - - public function store(StoreRequest $request) - { - $data = $request->validated(); - Department::firstOrCreate($data); - return redirect()->route('admin.department.index'); - } - - public function edit(Department $department) - { - return Inertia::render('AdminPanel/Departments/Edit', compact('department')); - } - - public function update(UpdateRequest $request, Department $department) - { - $data = $request->validated(); - $department->update($data); - return redirect()->route('admin.department.index'); - } - - public function destroy(Department $department) - { - $department->delete(); - } -} diff --git a/app/Http/Controllers/DivisionController.php b/app/Http/Controllers/DivisionController.php deleted file mode 100644 index f4c66b1..0000000 --- a/app/Http/Controllers/DivisionController.php +++ /dev/null @@ -1,66 +0,0 @@ -when(request()->input('search'), function ($query, $search) { - $query->where('title', 'like', "%{$search}%"); - }) - ->orderBy('id', 'desc') - ->paginate(request()->input('perPage', 9)) - ->withQueryString()); - $filters = [ - 'search' => request()->input('search'), - ]; - return Inertia::render('AdminPanel/Divisions/Index', compact('divisions', 'filters')); - } - - public function create() - { - return Inertia::render('AdminPanel/Divisions/Create'); - } - - public function store(StoreRequest $request) - { - $data = $request->validated(); - $data['description'] = json_encode($data['description']); - Division::create($data); - return redirect()->route('admin.division.index'); - } - - public function edit(Division $division) - { - $division = new DivisionResource($division); - $users = UserResource::collection(User::all()); - return Inertia::render('AdminPanel/Divisions/Edit', compact('division', 'users')); - } - - public function update(Division $division, UpdateRequest $request) - { - $data = $request->validated(); - $data['description'] = json_encode($data['description']); - $division->update($data); - return redirect()->route('admin.division.index'); - } - - public function destroy(string $id) - { - $category = Division::find($id); - $category->delete(); - - return redirect()->route('admin.division.index'); - } -} diff --git a/app/Http/Controllers/EventController.php b/app/Http/Controllers/EventController.php deleted file mode 100644 index 6e59fa6..0000000 --- a/app/Http/Controllers/EventController.php +++ /dev/null @@ -1,62 +0,0 @@ -when(request()->input('search'), function ($query, $search) { - $query->where('title', 'like', "%{$search}%"); - }) - ->orderBy('id', 'desc') - ->paginate(request()->input('perPage', 9)) - ->withQueryString()); - $filters = [ - 'search' => request()->input('search'), - ]; - return Inertia::render('AdminPanel/Posts/Index', compact('events', 'filters')); - } - - public function create() - { - return Inertia::render('AdminPanel/Posts/Create'); - } - - public function store(StoreRequest $request) - { - $data = $request->validated(); - $data['content'] = json_encode($data['content']); - Event::create($data); - return redirect()->route('admin.event.index'); - } - - public function edit(Event $event) - { - $event = new EventResource($event); - return Inertia::render('AdminPanel/Posts/Edit', compact('event')); - } - - public function update(Event $event, UpdateRequest $request) - { - $data = $request->validated(); - $data['content'] = json_encode($data['content']); - $event->update($data); - return redirect()->route('admin.event.index'); - } - - - public function destroy(Event $event) - { - $event->delete(); - return redirect()->route('admin.event.index'); - } -} diff --git a/app/Http/Controllers/FacultyController.php b/app/Http/Controllers/FacultyController.php deleted file mode 100644 index 4aaa488..0000000 --- a/app/Http/Controllers/FacultyController.php +++ /dev/null @@ -1,52 +0,0 @@ - request()->input('search'), - ]; - return Inertia::render('AdminPanel/Faculties/Index', compact('faculties', 'filters')); - } - - public function create() - { - return Inertia::render('AdminPanel/Faculties/Create'); - } - - public function store(StoreRequest $request) - { - $data = $request->validated(); - Faculty::firstOrCreate($data); - return redirect()->route('admin.faculty.index'); - } - - public function edit(Faculty $faculty) - { - return Inertia::render('AdminPanel/Faculties/Edit', compact('faculty')); - } - - public function update(UpdateRequest $request, Faculty $faculty) - { - $data = $request->validated(); - $faculty->update($data); - return redirect()->route('admin.faculty.index'); - } - - public function destroy(Faculty $faculty) - { - $faculty->delete(); - } - -} diff --git a/app/Http/Controllers/FileUploadController.php b/app/Http/Controllers/FileUploadController.php deleted file mode 100644 index 33ae37d..0000000 --- a/app/Http/Controllers/FileUploadController.php +++ /dev/null @@ -1,37 +0,0 @@ -hasFile('file')) { - $file = $request->file('file'); - - if ($file->isValid()) { - // Генерируем уникальное имя файла - $filename = md5(Carbon::now() . '_' . $file->getClientOriginalName()) . '.' . $file->getClientOriginalExtension(); - - // Сохраняем файл в папку public/files - $path = Storage::disk('public')->putFileAs('/files', $file, $filename); - - // Генерируем полный URL к загруженному файлу с использованием функции asset - $fileUrl = '/storage/' . $path; - - // Возвращаем JSON-ответ с заданным форматом - return response()->json([ - 'success' => 1, - 'file' => [ - 'url' => $fileUrl, - ], - ]); - } - } - return response()->json(['error' => 'File upload failed'], 400); - } -} diff --git a/app/Http/Controllers/ImageController.php b/app/Http/Controllers/ImageController.php deleted file mode 100644 index 24da08c..0000000 --- a/app/Http/Controllers/ImageController.php +++ /dev/null @@ -1,36 +0,0 @@ -hasFile('image')) { - $image = $request->file('image'); - // Генерируем уникальное имя файла, чтобы избежать конфликтов - $filename = md5(Carbon::now() . '_' . $image->getClientOriginalName()) . '.' . $image->getClientOriginalExtension(); - // Сохраняем изображение в директорию public - ImageTool::configure(['driver' => 'imagick']); - ImageTool::make($image) - ->resize(1200, null, function ($constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }) - ->save(storage_path('app/public/images/' . $filename)); - $path = "/storage/images/" . $filename; - // Генерируем URL для доступа к изображению - return response()->json(['success' => 1, 'file' => ['url' => $path]]); - } - - return response()->json(['error' => 'Image upload failed']); - } - - -} diff --git a/app/Http/Controllers/ImportUserController.php b/app/Http/Controllers/ImportUserController.php deleted file mode 100644 index a0d6c3b..0000000 --- a/app/Http/Controllers/ImportUserController.php +++ /dev/null @@ -1,57 +0,0 @@ -whereHas('userDetail')->with('userDetail')->get(); - } - - public function test() - { - $response = Http::get('http://crawdad-fresh-bream.ngrok-free.app/api/import/users/')->object(); - foreach ($response as $user) { - $userDetail = $user->user_detail; - unset($user->user_detail); - $user = User::create([ - 'name' => $user->name, - 'slug' => $user->slug, - 'email' => $user->email, - 'email_verified_at' => $user->email_verified_at, - 'password' => Md5(Str::random(15)), - 'remember_token' => null, - 'created_at' => $user->created_at, - 'updated_at' => $user->updated_at, - ]); - $user->userDetail()->create([ - 'user_id' => $user->id, - 'is_only_worker' => $userDetail->is_only_worker, - 'photo' => $userDetail->photo, - 'academicTitle' => $userDetail->academicTitle, - 'AcademicDegree' => $userDetail->AcademicDegree, - 'education' => $userDetail->education, - 'awards' => $userDetail->awards, - 'professDisciplines' => $userDetail->professDisciplines, - 'professionalRetraining' => $userDetail->professionalRetraining, - 'professionalDevelopment' => $userDetail->professionalDevelopment, - 'workExperience' => $userDetail->workExperience, - 'attendedConferences' => $userDetail->attendedConferences, - 'participationScienceProjects' => $userDetail->participationScienceProjects, - 'publications' => $userDetail->publications, - 'contactEmail' => $userDetail->contactEmail, - 'contactPhone' => $userDetail->contactPhone, - 'search_data' => $userDetail->search_data, - 'other' => $userDetail->other, - 'created_at' => $userDetail->created_at, - 'updated_at' => $userDetail->updated_at, - ]); - } - } -} diff --git a/app/Http/Controllers/LinkToolController.php b/app/Http/Controllers/LinkToolController.php deleted file mode 100644 index 9f39fbf..0000000 --- a/app/Http/Controllers/LinkToolController.php +++ /dev/null @@ -1,81 +0,0 @@ -input('url') == \route('client.person.show', ['userDetail' => substr($request->input('url'), -1)])) { - $userDetail = UserDetail::find(substr($request->input('url'), -1)); - return response()->json([ - 'success' => 1, - 'link' => Str($request->input('url')), - 'meta' => [ - 'title' => $userDetail->surname . ' '. $userDetail->name . ' '. $userDetail->middleName, - 'description' => $userDetail->administrativePosition, - 'image' => [ - 'url' => $userDetail->photo - ], - 'type' => 'person', - 'data' => new UserDetailResource($userDetail), - ] - ]); - } - if ($request->input('url') == \route('client.post.show', ['slug' => $this->getSlugFromUrl($request->input('url')) ])) { - $post = Post::query()->where('slug', '=', $this->getSlugFromUrl($request->input('url')))->first(); - $content = json_decode($post->content); - foreach ($content->blocks as $data) { - if ($data->type === 'paragraph') { - return response()->json([ - 'success' => 1, - 'link' => Str($request->input('url')), - 'meta' => [ - 'title' => $post->title, - 'description' => $data->data->text, - 'type' => 'post', - 'data' => new PostResource($post), - ] - ]); - } - } - } - - if ($request->input('url') == \route('client.student.show', ['student' => substr($request->input('url'), -1)])) { - $student = Student::find(substr($request->input('url'), -1)); - return response()->json([ - 'success' => 1, - 'link' => Str($request->input('url')), - 'meta' => [ - 'title' => $student->surname . ' '. $student->name . ' '. $student->middleName, - 'description' => $student->position, - 'image' => [ - 'url' => $student->photo - ], - 'type' => 'student', - 'data' => new StudentResource($student), - ] - ]); - } - - return false; - } - - private function getSlugFromUrl($url) - { - $path = parse_url($url, PHP_URL_PATH); - $segments = explode('/', $path); - $lastSegment = end($segments); - return $lastSegment; - } - -} diff --git a/app/Http/Controllers/MainController.php b/app/Http/Controllers/MainController.php index c07b0ba..5bc19f8 100644 --- a/app/Http/Controllers/MainController.php +++ b/app/Http/Controllers/MainController.php @@ -2,36 +2,19 @@ namespace App\Http\Controllers; -use App\Enums\EducationalProgramStatus; -use App\Enums\LevelEducational; -use App\Enums\PostStatus; -use App\Http\Resources\AdditionalEducationResource; -use App\Http\Resources\ClientMainSliderResource; -use App\Http\Resources\ClientNavigationResource; -use App\Http\Resources\EventThumbnailResource; -use App\Http\Resources\MainSectionResource; -use App\Http\Resources\PostResource; -use App\Http\Resources\PostThumbnailResource; -use App\Models\AdditionalEducation; -use App\Models\AdditionalEducationCategory; -use App\Models\AdmissionCampaign; -use App\Models\DirectionStudy; -use App\Models\EducationalProgram; -use App\Models\Event; -use App\Models\MainSection; -use App\Models\MainSlider; -use App\Models\Page; -use App\Models\Post; -use App\Services\Filament\Icon\ArrayToCollectionService; -use App\Services\Vicon\EducationalProgram\EducationalProgramService; +use App\Containers\AdditionalEducation\Models\AdditionalEducation; +use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory; +use App\Containers\AppStructure\Models\Page; +use App\Containers\Article\Enums\PostStatus; +use App\Containers\Article\Models\Post; +use App\Containers\Education\Models\AdmissionCampaign; +use App\Containers\Event\Models\Event; +use App\Containers\Event\UI\WEB\Transformers\EventThumbnailResource; +use App\Containers\Widget\UI\API\Transformers\PostThumbnailResource; +use App\Ship\Enums\Education\LevelEducational; use Carbon\Carbon; use DateTime; -use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; -use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Hash; -use Illuminate\Support\Facades\Http; -use Illuminate\Support\Facades\Route; use Inertia\Inertia; class MainController extends Controller diff --git a/app/Http/Controllers/MainSectionController.php b/app/Http/Controllers/MainSectionController.php deleted file mode 100644 index f540e58..0000000 --- a/app/Http/Controllers/MainSectionController.php +++ /dev/null @@ -1,73 +0,0 @@ - request()->input('search'), - ]; - return Inertia::render('AdminPanel/MainSection/Index', compact('mainSections', 'filters')); - } - - public function create() - { - $subSections = SubSection::query()->where('main_section_id', '=', null)->get(); - return Inertia::render('AdminPanel/MainSection/Create', compact('subSections')); - } - - public function store(Request $request) - { - $data = $request->validate([ - 'title' => 'required|unique:main_sections|max:50|min:5', - 'subSection_ids' => 'array', - 'subSection_ids.*' => 'exists:sub_sections,id' - ]); - $subSection_ids = $data['subSection_ids']; - unset($data['subSection_ids']); - $mainSection = MainSection::create($data); - SubSection::whereIn('id', $subSection_ids)->update(['main_section_id' => $mainSection->id]); - return redirect()->route('admin.mainSection.index'); - } - - public function edit(MainSection $mainSection) - { - $subSections = SubSection::query()->where('main_section_id', '=', $mainSection->id)-> - orWhere('main_section_id', '=', null) - ->get(); - $subSection_ids = SubSection::query()->where('main_section_id', '=', $mainSection->id)->pluck('id'); - $mainSection = new MainSectionResource($mainSection); - return Inertia::render('AdminPanel/MainSection/Edit', compact('mainSection', 'subSections', 'subSection_ids')); - } - - public function update(MainSection $mainSection, Request $request) - { - $data = $request->validate([ - 'title' => 'required|unique:main_sections|max:50|min:5', - 'subSection_ids' => 'array', - 'subSection_ids.*' => 'exists:sub_sections,id' - ]); - $subSection_ids = $data['subSection_ids']; - unset($data['subSection_ids']); - $mainSection->update($data); - SubSection::query()->where('main_section_id', '=', $mainSection->id)->update(['main_section_id' => NULL]); - SubSection::whereIn('id', $subSection_ids)->update(['main_section_id' => $mainSection->id]); - return redirect()->route('admin.mainSection.index'); - } - - public function destroy(MainSection $mainSection) - { - SubSection::query()->where('main_section_id', '=', $mainSection->id)->update(['main_section_id' => NULL]); - $mainSection->delete(); - } -} diff --git a/app/Http/Controllers/PostController.php b/app/Http/Controllers/PostController.php deleted file mode 100644 index 3d60894..0000000 --- a/app/Http/Controllers/PostController.php +++ /dev/null @@ -1,175 +0,0 @@ -when(request()->input('search'), function ($query, $search) { - $query->where('title', 'like', "%{$search}%"); - }) - ->orderBy('publish_at', 'desc') - ->paginate(request()->input('perPage', 9)) - ->withQueryString()); - $filters = [ - 'search' => request()->input('search'), - ]; - - return Inertia::render('AdminPanel/Events/Index', compact('posts', 'filters')); - } - /** - * Show the form for creating a new resource. - */ - public function create() - { - $categories = CategoryResource::collection(Category::all()); - return Inertia::render('AdminPanel/Events/Create', compact('categories')); - } - - /** - * Store a newly created resource in storage. - */ - public function store(StoreRequest $request) - { - $data = $request->validated(); - $data['slug'] = Str::slug($data['title'], '-'); - $count = 0; - $original_slug = $data['slug']; - - while (Post::where('slug', '=', $data['slug'])->exists()) { - $count++; - $data['slug'] = $original_slug . '-' . $count + 1; - } - - - $data['content'] = json_encode($data['content']); - $data['reading_time'] = $this->calculateReadingTime($data['search_data']); - $author = $data['author']; - $images = $data['images']; - unset($data['author']); - unset($data['images']); - - $post = Post::create($data); - if (isset($author)) { - AuthorPost::create([ - 'name' => $author, - 'post_id' => $post->id - ]); - } - if (isset($images)) { - $gallery = Gallery::create([ - 'post_id' => $post->id, - ]); - foreach ($images as $image) { - $filename = md5(Carbon::now() . '_' . $image->getClientOriginalName()) . '.' . 'jpeg'; - - ImageTool::configure(['driver' => 'imagick']); - ImageTool::make($image) - ->resize(1200, null, function ($constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }) - ->save(storage_path('app/public/images/' . $filename)); - $path = "/storage/images/" . $filename; - Image::create([ - 'path' => $path, - 'gallery_id' => $gallery->id, - ]); - } - } - - return redirect()->route('admin.post.index'); - } - - /** - * Display the specified resource. - */ - public function show($slug) - { - $post = new PostResource(Post::where('slug', $slug)->firstOrFail()); - return Inertia::render('AdminPanel/Events/Show', compact('post')); - } - - /** - * Show the form for editing the specified resource. - */ - public function edit(Post $post) - { - $categories = CategoryResource::collection(Category::all()); - $post = new PostResource($post); - return Inertia::render('AdminPanel/Events/Edit', compact('post', 'categories')); - } - - /** - * Update the specified resource in storage. - */ - public function update(Post $post, Request $request) - { - $data = $request->validate([ - 'title' => 'required|max:255|min:5', - 'content' => 'required|array', - 'content.blocks' => 'required|array|min:1', - 'category_id' => 'nullable|exists:categories,id', - 'is_published' => 'boolean', - ]); - $data['slug'] = \Illuminate\Support\Str::slug($data['title'], '-'); - $data['content'] = json_encode($data['content']); - - $post->update($data); - return redirect()->route('admin.post.index'); - } - - /** - * Remove the specified resource from storage. - */ - public function destroy(Post $post) - { - $post->delete(); - return redirect()->route('admin.post.index'); - } - - private function calculateReadingTime(string $text): int - { - - $text = "lorem ipsum - это текст - часто используемый в печати и вэб-дизайне lorem ipsum является стандартной для текстов на латинице с начала xvi века в то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов используя lorem ipsum для распечатки образцов lorem ipsum не только успешно пережил без заметных изменений пять веков но и перешагнул в электронный дизайн его популяризации в новое время послужили публикация листов letraset с образцами lorem ipsum в 60-х годах и в более недавнее время программы электронной вёрстки типа aldus pagemaker в шаблонах которых используется lorem ipsum lorem ipsum - это текст - часто используемый в печати и вэб-дизайне lorem ipsum является стандартной для текстов на латинице с начала xvi века в то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов используя lorem ipsum для распечатки образцов lorem ipsum не только успешно пережил без заметных изменений пять веков но и перешагнул в электронный дизайн его популяризации в новое время послужили публикация листов letraset с образцами lorem ipsum в 60-х годах и в более недавнее время программы электронной вёрстки типа aldus pagemaker в шаблонах которых используется lorem ipsum"; - // Calculate the number of words in the text - $wordCount = str_word_count($text,0,"АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя"); - - - - - // Calculate the average reading speed in words per minute - $wordsPerMinute = 120; // You can adjust this value based on your desired reading speed - - // Calculate the reading time in minutes - $readingTime = $wordCount / $wordsPerMinute; - - // Round the reading time to the nearest integer - $readingTime = round($readingTime); - - - return $readingTime; - } -} diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php deleted file mode 100644 index 873b4f7..0000000 --- a/app/Http/Controllers/ProfileController.php +++ /dev/null @@ -1,63 +0,0 @@ - $request->user() instanceof MustVerifyEmail, - 'status' => session('status'), - ]); - } - - /** - * Update the user's profile information. - */ - public function update(ProfileUpdateRequest $request): RedirectResponse - { - $request->user()->fill($request->validated()); - - if ($request->user()->isDirty('email')) { - $request->user()->email_verified_at = null; - } - - $request->user()->save(); - - return Redirect::route('profile.edit'); - } - - /** - * Delete the user's account. - */ - public function destroy(Request $request): RedirectResponse - { - $request->validate([ - 'password' => ['required', 'current_password'], - ]); - - $user = $request->user(); - - Auth::logout(); - - $user->delete(); - - $request->session()->invalidate(); - $request->session()->regenerateToken(); - - return Redirect::to('/'); - } -} diff --git a/app/Http/Controllers/ScheduleController.php b/app/Http/Controllers/ScheduleController.php deleted file mode 100644 index 3b90fe9..0000000 --- a/app/Http/Controllers/ScheduleController.php +++ /dev/null @@ -1,94 +0,0 @@ -ExistSubSchedule()->orderBy('name')->paginate(10)); - $filters = [ - 'search' => request()->input('search'), - ]; - return Inertia::render('AdminPanel/Schedules/Index', compact('schedules', 'filters')); - } - - public function create() - { - $faculties = FacultyResource::collection(Faculty::all()); - return Inertia::render('AdminPanel/Schedules/Create', compact('faculties')); - } - - public function store(StoreRequest $request) - { - $data = $request->validated(); - - $this->storeSchedules($request->file('files'), $data); - - return redirect()->route('admin.index'); - } - - public function show(Schedule $schedule) - { - $schedule = new ScheduleResource($schedule); - return Inertia::render('AdminPanel/Schedules/Show', compact('schedule')); - } - - - - - - public function destroy(Schedule $schedule) - { - $schedule->delete(); - } - private function storeSchedules($files, $data) - { - foreach ($files as $file) { - $scheduleTitle = $this->generateScheduleTitle($file); - $schedule = $this->storeSchedule($scheduleTitle, $data); - $this->storeSubSchedule($file, $schedule); - } - } - - private function generateScheduleTitle($file) - { - $str = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME); - $words = explode(' ', $str); - return implode(' ', array_slice($words, 0, 2)); - } - - private function storeSchedule($title, $data) - { - return Schedule::firstOrCreate([ - 'name' => $title, - 'faculty_id' => $data['faculty_id'], - 'is_fullTime' => $data['is_fullTime'], - ]); - } - - private function storeSubSchedule($file, $schedule) - { - $path = Storage::disk('public')->putFileAs('/schedules', $file, $file->getClientOriginalName()); - SubSchedule::updateOrCreate([ - 'name' => pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME), - 'path_file' => '/storage/'.$path, - 'schedule_id' => $schedule->id, - ]); - } - -} diff --git a/app/Http/Controllers/StudentController.php b/app/Http/Controllers/StudentController.php deleted file mode 100644 index cb387f8..0000000 --- a/app/Http/Controllers/StudentController.php +++ /dev/null @@ -1,92 +0,0 @@ - request()->input('search'), - ]; - return Inertia::render('AdminPanel/Student/Index', compact('students', 'filters')); - } - - public function show(Student $student) - { - $student = new StudentResource($student); - return Inertia::render('Client/Student/Show', compact('student')); - } - - public function create() - { - return Inertia::render('AdminPanel/Student/Create'); - } - - public function store(StoreRequest $request) - { - $data = $request->validated(); - if ($request->file('photo')) { - $data['photo'] = $this->storePhoto($request->file('photo')); - } - Student::create($data); - return redirect()->route('admin.student.index'); - } - - public function edit(Student $student) - { - return Inertia::render('AdminPanel/Student/Edit', compact('student')); - } - - public function update(Student $student, UpdateRequest $request) - { - $data = $request->validated(); - if ($request->file('photo')) { - $data['photo'] = $this->storePhoto($request->file('photo')); - } - $student->update($data); - return redirect()->route('admin.student.index'); - } - - public function destroy(Student $student) - { - $student->delete(); - } - - private function storePhoto(UploadedFile $file) - { - if ($file->isValid()) { - $image = $file; - // Генерируем уникальное имя файла, чтобы избежать конфликтов - $filename = md5(Carbon::now() . '_' . $image->getClientOriginalName()) . '.' . $image->getClientOriginalExtension(); - // Сохраняем изображение в директорию public - ImageTool::configure(['driver' => 'imagick']); - - ImageTool::make($image) - ->resize(1200, null, function ($constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }) - ->save(storage_path('app/public/photos/' . $filename)); - $path = "/storage/photos/" . $filename; - // Генерируем URL для доступа к изображению - return $path; - } - } - -} diff --git a/app/Http/Controllers/SubScheduleController.php b/app/Http/Controllers/SubScheduleController.php deleted file mode 100644 index 1eaa429..0000000 --- a/app/Http/Controllers/SubScheduleController.php +++ /dev/null @@ -1,16 +0,0 @@ -path_file); - $subSchedule->delete(); - } -} diff --git a/app/Http/Controllers/SubSectionController.php b/app/Http/Controllers/SubSectionController.php deleted file mode 100644 index fca2174..0000000 --- a/app/Http/Controllers/SubSectionController.php +++ /dev/null @@ -1,79 +0,0 @@ - request()->input('search'), - ]; - return Inertia::render('AdminPanel/SubSection/Index', compact('subSections', 'filters')); - } - - public function create() - { - $pages = Page::query() - ->where('sub_section_id', '=', null) - ->where('is_visible', '=', 1) - ->where('title', '!=', null) - ->get(); - return Inertia::render('AdminPanel/SubSection/Create', compact('pages')); - } - - public function store(Request $request) - { - $data = $request->validate([ - 'title' => 'required|unique:main_sections|max:50|min:5', - 'page_ids' => 'array', - 'page_ids.*' => 'exists:pages,id' - ]); - $page_ids = $data['page_ids']; - unset($data['page_ids']); - $subSection = SubSection::create($data); - Page::whereIn('id', $page_ids)->update(['sub_section_id' => $subSection->id]); - return redirect()->route('admin.subSection.index'); - } - - public function edit(SubSection $subSection) - { - $pages = Page::query()->where('sub_section_id', $subSection->id) - ->orWhere(function ($query) { - $query->where('sub_section_id', null); - $query->where('is_visible', 1); - $query->where('title', '!=', null); - })->get(); - $page_ids = Page::query()->where('sub_section_id', '=', $subSection->id)->pluck('id'); - $subSection = new SubSectionResource($subSection); - return Inertia::render('AdminPanel/SubSection/Edit', compact('subSection', 'pages', 'page_ids')); - } - - public function update(SubSection $subSection, Request $request) - { - $data = $request->validate([ - 'title' => 'required|unique:categories|max:50|min:5', - 'page_ids' => 'array', - 'page_ids.*' => 'exists:pages,id' - ]); - $page_ids = $data['page_ids']; - unset($data['page_ids']); - $subSection->update($data); - Page::query()->where('sub_section_id', '=', $subSection->id)->update(['sub_section_id' => NULL]); - Page::whereIn('id', $page_ids)->update(['sub_section_id' => $subSection->id]); - return redirect()->route('admin.subSection.index'); - } - - public function destroy(SubSection $subSection) - { - Page::query()->where('sub_section_id', '=', $subSection->id)->update(['sub_section_id' => NULL]); - $subSection->delete(); - } -} diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php deleted file mode 100644 index 2bfb0be..0000000 --- a/app/Http/Controllers/TagController.php +++ /dev/null @@ -1,10 +0,0 @@ - request()->input('search'), - ]; - return Inertia::render('AdminPanel/Users/Index', compact('users', 'filters')); - } - - public function show(int $id) - { - $user = new PostResource(User::find($id)); - return Inertia::render('AdminPanel/Users/Show', compact('user')); - } - - public function create() - { - return Inertia::render('AdminPanel/Users/Create'); - } - - public function store(StoreRequest $request) - { - $data = $request->validated(); - User::firstOrCreate($data); - return redirect()->route('admin.user.index'); - } - - public function edit(User $user) - { - $user = new UserResource($user); - return Inertia::render('AdminPanel/Users/Edit', compact('user')); - } - - public function update(UpdateRequest $request, User $user) - { - $data = $request->validated(); - $user->update($data); - return redirect()->route('admin.user.index'); - } - - public function destroy(User $user) - { - $user->delete(); - } -} diff --git a/app/Http/Controllers/UserDetailController.php b/app/Http/Controllers/UserDetailController.php deleted file mode 100644 index 4fef674..0000000 --- a/app/Http/Controllers/UserDetailController.php +++ /dev/null @@ -1,68 +0,0 @@ -id; - return Inertia::render('AdminPanel/UserDetail/Create', compact('userId')); - } - - public function store(StoreRequest $request) - { - $data = $request->validated(); - if ($request->file('photo')) { - $data['photo'] = $this->storePhoto($request->file('photo')); - } - UserDetail::create($data); - return redirect()->route('admin.user.index'); - } - - public function edit(UserDetail $userDetail) - { - return Inertia::render('AdminPanel/UserDetail/Edit', compact('userDetail')); - } - - public function update(UserDetail $userDetail, UpdateRequest $request) - { - $data = $request->validated(); - if ($request->file('photo')) { - $data['photo'] = $this->storePhoto($request->file('photo')); - } - $userDetail->update($data); - return redirect()->route('admin.user.index'); - } - - private function storePhoto(UploadedFile $file) - { - if ($file->isValid()) { - $image = $file; - // Генерируем уникальное имя файла, чтобы избежать конфликтов - $filename = md5(Carbon::now() . '_' . $image->getClientOriginalName()) . '.' . $image->getClientOriginalExtension(); - // Сохраняем изображение в директорию public - ImageTool::configure(['driver' => 'imagick']); - ImageTool::make($image) - ->resize(1200, null, function ($constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }) - ->save(storage_path('app/public/photos/' . $filename)); - $path = "/storage/photos/" . $filename; - // Генерируем URL для доступа к изображению - return $path; - } - } -} diff --git a/app/Http/Controllers/VkAuthController.php b/app/Http/Controllers/VkAuthController.php deleted file mode 100644 index 7ceba21..0000000 --- a/app/Http/Controllers/VkAuthController.php +++ /dev/null @@ -1,18 +0,0 @@ -vkService = new VkService(new VKApiClient()); - $this->wall_token = env('WALL_ACCESS_VK_TOKEN'); - } - - public function wall() - { - dd($this->vkService->getPostById(39)); - } - - - public function getImages() - { - // Укажите путь к директории - $directory = 'public/images'; - - // Получаем все файлы из директории - $files = Storage::files($directory); - - - // Фильтруем только изображения (например, jpg, png) - $images = array_filter($files, function ($file) { - return in_array(pathinfo($file, PATHINFO_EXTENSION), ['webp', 'jpeg', 'png', 'gif']); - }); - - // Формируем полный URL для каждого изображения - $imageUrls = array_map(function ($file) { - return url(Storage::url($file)); // Добавляем домен - }, $images); - - return $imageUrls; // Возвращаем массив с полными URL изображений - } - - - - - -} diff --git a/app/Http/Controllers/api/NavigateController.php b/app/Http/Controllers/api/NavigateController.php deleted file mode 100644 index 57db702..0000000 --- a/app/Http/Controllers/api/NavigateController.php +++ /dev/null @@ -1,17 +0,0 @@ -orderBy('sort', 'asc')->get()); - } -} diff --git a/app/Http/Middleware/AccessCheck.php b/app/Http/Middleware/AccessCheck.php index b29f952..f00b2d5 100644 --- a/app/Http/Middleware/AccessCheck.php +++ b/app/Http/Middleware/AccessCheck.php @@ -2,8 +2,7 @@ namespace App\Http\Middleware; - -use App\Models\Page; +use App\Containers\AppStructure\Models\Page; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; diff --git a/app/Http/Middleware/FormTimePeriodMiddleware.php b/app/Http/Middleware/FormTimePeriodMiddleware.php index e168d8d..978f9fc 100644 --- a/app/Http/Middleware/FormTimePeriodMiddleware.php +++ b/app/Http/Middleware/FormTimePeriodMiddleware.php @@ -2,7 +2,7 @@ namespace App\Http\Middleware; -use App\Models\CustomForm; +use App\Containers\Widget\Models\CustomForm; use Carbon\Carbon; use Closure; use Illuminate\Http\Request; diff --git a/app/Http/Middleware/GenerateBreadcrumbs.php b/app/Http/Middleware/GenerateBreadcrumbs.php index 067d8ca..1bb7834 100644 --- a/app/Http/Middleware/GenerateBreadcrumbs.php +++ b/app/Http/Middleware/GenerateBreadcrumbs.php @@ -2,13 +2,12 @@ namespace App\Http\Middleware; -use App\Http\Resources\ClientBreadcrumbPage; -use App\Http\Resources\ClientBreadcrumbSection; -use App\Http\Resources\ClientBreadcrumbSubSection; -use App\Models\Page; +use App\Containers\AppStructure\Models\Page; +use App\Ship\Resources\Breadcrumb\ClientBreadcrumbPage; +use App\Ship\Resources\Breadcrumb\ClientBreadcrumbSection; +use App\Ship\Resources\Breadcrumb\ClientBreadcrumbSubSection; use Closure; use Illuminate\Http\Request; -use Symfony\Component\HttpFoundation\Response; class GenerateBreadcrumbs { diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index b44d531..1c93027 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -2,8 +2,8 @@ namespace App\Http\Middleware; -use App\Http\Resources\ClientNavigationResource; -use App\Models\MainSection; +use App\Containers\AppStructure\Models\MainSection; +use App\Containers\AppStructure\UI\API\Transformers\NavigationResource; use App\Services\App\Breadcrumb\BreadcrumbService; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; @@ -23,7 +23,7 @@ class HandleInertiaRequests extends Middleware { // Навигация (кешированная) $navigation = Cache::remember('navigation', now()->addHours(1), function () { - return ClientNavigationResource::collection( + return NavigationResource::collection( MainSection::with('subSections.pages.section') ->orderBy('sort', 'asc') ->get() diff --git a/app/Http/Requests/ApplicantQuestion/StoreRequest.php b/app/Http/Requests/ApplicantQuestion/StoreRequest.php deleted file mode 100644 index 06b9b21..0000000 --- a/app/Http/Requests/ApplicantQuestion/StoreRequest.php +++ /dev/null @@ -1,32 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'first_name' => 'required|string|min:2', - 'last_name' => 'required|string|min:2', - 'email' => 'required|email|min:2', - 'phone' => 'required|numeric|min:11', - 'text' => 'required|string|min:10', - ]; - } -} diff --git a/app/Http/Requests/Department/StoreRequest.php b/app/Http/Requests/Department/StoreRequest.php deleted file mode 100644 index 4b21682..0000000 --- a/app/Http/Requests/Department/StoreRequest.php +++ /dev/null @@ -1,29 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'title' => 'required|unique:faculties|min:2', - 'faculty_id' => 'required|exists:faculties,id' - ]; - } -} diff --git a/app/Http/Requests/Department/UpdateRequest.php b/app/Http/Requests/Department/UpdateRequest.php deleted file mode 100644 index 7b84bc3..0000000 --- a/app/Http/Requests/Department/UpdateRequest.php +++ /dev/null @@ -1,29 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'title' => 'required|min:2|unique:faculties', - 'faculty_id' => 'required|exists:faculties,id' - ]; - } -} diff --git a/app/Http/Requests/Division/StoreRequest.php b/app/Http/Requests/Division/StoreRequest.php deleted file mode 100644 index ff57100..0000000 --- a/app/Http/Requests/Division/StoreRequest.php +++ /dev/null @@ -1,30 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'title' => 'required|string', - 'description' => 'required|array', - 'description.blocks' => 'required|array|min:1', - ]; - } -} diff --git a/app/Http/Requests/Division/UpdateRequest.php b/app/Http/Requests/Division/UpdateRequest.php deleted file mode 100644 index 7f60826..0000000 --- a/app/Http/Requests/Division/UpdateRequest.php +++ /dev/null @@ -1,30 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'title' => 'required|string', - 'description' => 'required|array', - 'description.blocks' => 'required|array|min:1', - ]; - } -} diff --git a/app/Http/Requests/Event/StoreRequest.php b/app/Http/Requests/Event/StoreRequest.php deleted file mode 100644 index 2013344..0000000 --- a/app/Http/Requests/Event/StoreRequest.php +++ /dev/null @@ -1,33 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'title' => 'required|max:255|min:5', - 'content' => 'required|array', - 'content.blocks' => 'required|array|min:1', - 'event_date' => 'required|date', - 'address' => 'string', - 'is_online' => 'required|boolean', - ]; - } -} diff --git a/app/Http/Requests/Event/UpdateRequest.php b/app/Http/Requests/Event/UpdateRequest.php deleted file mode 100644 index 6d90753..0000000 --- a/app/Http/Requests/Event/UpdateRequest.php +++ /dev/null @@ -1,34 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'title' => 'required|max:255|min:5', - 'content' => 'required|array', - 'content.blocks' => 'required|array|min:1', - 'event_date' => 'required|date', - 'address' => 'string', - 'is_online' => 'required|boolean', - - ]; - } -} diff --git a/app/Http/Requests/Faculty/StoreRequest.php b/app/Http/Requests/Faculty/StoreRequest.php deleted file mode 100644 index 77c74b8..0000000 --- a/app/Http/Requests/Faculty/StoreRequest.php +++ /dev/null @@ -1,28 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'title' => 'required|unique:faculties|min:2' - ]; - } -} diff --git a/app/Http/Requests/Faculty/UpdateRequest.php b/app/Http/Requests/Faculty/UpdateRequest.php deleted file mode 100644 index ca01055..0000000 --- a/app/Http/Requests/Faculty/UpdateRequest.php +++ /dev/null @@ -1,28 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'title' => 'required|min:2|unique:faculties', - ]; - } -} diff --git a/app/Http/Requests/FormResponseRequest.php b/app/Http/Requests/FormResponseRequest.php deleted file mode 100644 index 2f2dcfd..0000000 --- a/app/Http/Requests/FormResponseRequest.php +++ /dev/null @@ -1,37 +0,0 @@ -rules = $rules; - } - - /** - * Determine if the user is authorized to make this request. - */ - public function authorize(): bool - { - return true; - } - - /** - * Get the validation rules that apply to the request. - * - * @return array|string> - */ - public function rules(): array - { - dd(1); - return [ - - ]; - } -} diff --git a/app/Http/Requests/Page/StoreRequest.php b/app/Http/Requests/Page/StoreRequest.php deleted file mode 100644 index 70627c4..0000000 --- a/app/Http/Requests/Page/StoreRequest.php +++ /dev/null @@ -1,34 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'title' => 'required|max:255|min:5', - 'content' => 'required|array', - 'content.blocks' => 'required|array|min:1', - 'code' => 'required|integer', - 'slug' => 'required|unique:pages,slug', - 'path' => 'required|unique:pages,path', - 'search_data' => 'required|string' - ]; - } -} diff --git a/app/Http/Requests/Page/UpdateRequest.php b/app/Http/Requests/Page/UpdateRequest.php deleted file mode 100644 index f05f0cb..0000000 --- a/app/Http/Requests/Page/UpdateRequest.php +++ /dev/null @@ -1,33 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'title' => 'required|max:255|min:5', - 'content' => 'required|array', - 'content.blocks' => 'required|array|min:1', - 'code' => 'required|integer', - 'slug' => 'required|unique:pages,slug,'.$this->id, - 'path' => 'required|unique:pages,path,'.$this->id, - ]; - } -} diff --git a/app/Http/Requests/Post/StoreRequest.php b/app/Http/Requests/Post/StoreRequest.php deleted file mode 100644 index 92db389..0000000 --- a/app/Http/Requests/Post/StoreRequest.php +++ /dev/null @@ -1,35 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'title' => 'required|max:255|min:5', - 'content' => 'required|array', - 'content.blocks' => 'required|array|min:1', - 'is_published' => 'required|boolean', - 'category_id' => 'nullable|exists:categories,id', - 'author' => 'nullable|string|min:5', - 'images' => 'nullable|array', - 'search_data' => 'required|string' - ]; - } -} diff --git a/app/Http/Requests/ProfileUpdateRequest.php b/app/Http/Requests/ProfileUpdateRequest.php deleted file mode 100644 index 327ce6f..0000000 --- a/app/Http/Requests/ProfileUpdateRequest.php +++ /dev/null @@ -1,23 +0,0 @@ - - */ - public function rules(): array - { - return [ - 'name' => ['string', 'max:255'], - 'email' => ['email', 'max:255', Rule::unique(User::class)->ignore($this->user()->id)], - ]; - } -} diff --git a/app/Http/Requests/Schedule/StoreRequest.php b/app/Http/Requests/Schedule/StoreRequest.php deleted file mode 100644 index afb87c1..0000000 --- a/app/Http/Requests/Schedule/StoreRequest.php +++ /dev/null @@ -1,32 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'faculty_id' => 'required|exists:faculties,id|integer', - 'is_fullTime' => 'required|boolean', - 'files' => 'required|array', - 'files.*' => ['required', File::types('pdf')] - ]; - } -} diff --git a/app/Http/Requests/Student/StoreRequest.php b/app/Http/Requests/Student/StoreRequest.php deleted file mode 100644 index 58175f9..0000000 --- a/app/Http/Requests/Student/StoreRequest.php +++ /dev/null @@ -1,35 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'name' => 'required|string', - 'surname' => 'required|string', - 'middleName' => 'nullable|string', - 'position' => 'nullable|string', - 'education' => 'nullable|string', - 'vk_link' => 'nullable|string', - 'contactEmail' => 'nullable|email', - 'contactPhone' => 'nullable|string', - ]; - } -} diff --git a/app/Http/Requests/Student/UpdateRequest.php b/app/Http/Requests/Student/UpdateRequest.php deleted file mode 100644 index df41f18..0000000 --- a/app/Http/Requests/Student/UpdateRequest.php +++ /dev/null @@ -1,35 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'name' => 'required|string', - 'surname' => 'required|string', - 'middleName' => 'nullable|string', - 'position' => 'nullable|string', - 'education' => 'nullable|string', - 'vk_link' => 'nullable|string', - 'contactEmail' => 'nullable|email', - 'contactPhone' => 'nullable|string', - ]; - } -} diff --git a/app/Http/Requests/User/StoreRequest.php b/app/Http/Requests/User/StoreRequest.php deleted file mode 100644 index 8a2c6d3..0000000 --- a/app/Http/Requests/User/StoreRequest.php +++ /dev/null @@ -1,29 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'email' => 'required|email', - 'password' => 'required|min:6|confirmed', - ]; - } -} diff --git a/app/Http/Requests/User/UpdateRequest.php b/app/Http/Requests/User/UpdateRequest.php deleted file mode 100644 index fd20a1e..0000000 --- a/app/Http/Requests/User/UpdateRequest.php +++ /dev/null @@ -1,28 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - // - ]; - } -} diff --git a/app/Http/Requests/UserDetail/StoreRequest.php b/app/Http/Requests/UserDetail/StoreRequest.php deleted file mode 100644 index 8aed906..0000000 --- a/app/Http/Requests/UserDetail/StoreRequest.php +++ /dev/null @@ -1,45 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'user_id' => 'required|exists:users,id|integer', - 'name' => 'required|string', - 'surname' => 'required|string', - 'middleName' => 'nullable|string', - 'academicTitle' => 'nullable|string', - 'educatorPosition' => 'nullable|string', - 'education' => 'nullable|string', - 'awards' => 'nullable|string', - 'professDisciplines' => 'nullable|string', - 'professionalRetraining' => 'nullable|string', - 'professionalDevelopment' => 'nullable|string', - 'workExperience' => 'nullable|integer', - 'attendedConferences' => 'nullable|string', - 'participationScience_projects' => 'nullable|string', - 'publications' => 'nullable|string', - 'trainingAids' => 'nullable|string', - 'contactEmail' => 'nullable|email', - 'contactPhone' => 'nullable|string', - ]; - } -} diff --git a/app/Http/Requests/UserDetail/UpdateRequest.php b/app/Http/Requests/UserDetail/UpdateRequest.php deleted file mode 100644 index 9be3e9c..0000000 --- a/app/Http/Requests/UserDetail/UpdateRequest.php +++ /dev/null @@ -1,44 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'name' => 'required|string', - 'surname' => 'required|string', - 'middleName' => 'nullable|string', - 'academicTitle' => 'nullable|string', - 'educatorPosition' => 'nullable|string', - 'education' => 'nullable|string', - 'awards' => 'nullable|string', - 'professDisciplines' => 'nullable|string', - 'professionalRetraining' => 'nullable|string', - 'professionalDevelopment' => 'nullable|string', - 'workExperience' => 'nullable|integer', - 'attendedConferences' => 'nullable|string', - 'participationScience_projects' => 'nullable|string', - 'publications' => 'nullable|string', - 'trainingAids' => 'nullable|string', - 'contactEmail' => 'nullable|email', - 'contactPhone' => 'nullable|string', - ]; - } -} diff --git a/app/Http/Resources/AdditionalEducationSelectResource.php b/app/Http/Resources/AdditionalEducationSelectResource.php deleted file mode 100644 index 08ea00a..0000000 --- a/app/Http/Resources/AdditionalEducationSelectResource.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/ApplicantQuestionResource.php b/app/Http/Resources/ApplicantQuestionResource.php deleted file mode 100644 index c0fb526..0000000 --- a/app/Http/Resources/ApplicantQuestionResource.php +++ /dev/null @@ -1,29 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'first_name' => $this->first_name, - 'last_name' => $this->last_name, - 'email' => $this->email, - 'phone' => $this->phone, - 'text' => $this->text, - 'created_at' => $this->created_at, - - - ]; - } -} diff --git a/app/Http/Resources/CampaignDegreeResource.php b/app/Http/Resources/CampaignDegreeResource.php deleted file mode 100644 index 84c4bf4..0000000 --- a/app/Http/Resources/CampaignDegreeResource.php +++ /dev/null @@ -1,24 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'name' => $this->name, - 'slug' => $this->slug, - 'naprs' => DirectionStudyResource::collection($this->directionStudiesHasPrograms) - ]; - } -} diff --git a/app/Http/Resources/ClientAcademicJournalListResource.php b/app/Http/Resources/ClientAcademicJournalListResource.php deleted file mode 100644 index 043ded3..0000000 --- a/app/Http/Resources/ClientAcademicJournalListResource.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/ClientDepartmentPreviewResource.php b/app/Http/Resources/ClientDepartmentPreviewResource.php deleted file mode 100644 index 3947eab..0000000 --- a/app/Http/Resources/ClientDepartmentPreviewResource.php +++ /dev/null @@ -1,23 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'slug' => $this->slug, - ]; - } -} diff --git a/app/Http/Resources/ClientEducationalGroupResource.php b/app/Http/Resources/ClientEducationalGroupResource.php deleted file mode 100644 index fcee93b..0000000 --- a/app/Http/Resources/ClientEducationalGroupResource.php +++ /dev/null @@ -1,24 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'schedules' => ClientScheduleSearchResource::collection($this->schedules), - 'faculty' => $this->faculty->title, - ]; - } -} diff --git a/app/Http/Resources/ClientEventCategoryResource.php b/app/Http/Resources/ClientEventCategoryResource.php deleted file mode 100644 index bd33b05..0000000 --- a/app/Http/Resources/ClientEventCategoryResource.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/ClientFormResource.php b/app/Http/Resources/ClientFormResource.php deleted file mode 100644 index 78bc572..0000000 --- a/app/Http/Resources/ClientFormResource.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/ClientFullInfoPersonResource.php b/app/Http/Resources/ClientFullInfoPersonResource.php deleted file mode 100644 index bbfacf4..0000000 --- a/app/Http/Resources/ClientFullInfoPersonResource.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'name' => $this->name, - 'details' => new ClientPersonDetailResource($this->whenLoaded('userDetail')), - 'departments_work' => ClientPersonDepartmentsWorkResource::collection($this->whenLoaded('departments_work')), - 'departments_teach' => ClientPersonDepartmentsTeachResource::collection($this->whenLoaded('departments_teach')), - 'divisions_works' => ClientPersonDivisionsWorkResource::collection($this->whenLoaded('divisions')), - 'faculties_works' => ClientPersonFacultiesWorkResource::collection($this->whenLoaded('faculties')) - ]; - } -} diff --git a/app/Http/Resources/ClientJournalIssueListResource.php b/app/Http/Resources/ClientJournalIssueListResource.php deleted file mode 100644 index e465ff8..0000000 --- a/app/Http/Resources/ClientJournalIssueListResource.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/ClientLibraryPostListResource.php b/app/Http/Resources/ClientLibraryPostListResource.php deleted file mode 100644 index 11518d8..0000000 --- a/app/Http/Resources/ClientLibraryPostListResource.php +++ /dev/null @@ -1,32 +0,0 @@ - - */ - - - - - - - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'content' => $this->content, - 'preview_text' => $this->preview_text, - 'category' => $this->category, - 'created_at' => $this->created_at->diffforhumans(), - ]; - } -} diff --git a/app/Http/Resources/ClientMainSliderResource.php b/app/Http/Resources/ClientMainSliderResource.php deleted file mode 100644 index 4744b1e..0000000 --- a/app/Http/Resources/ClientMainSliderResource.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/ClientNavigationResource.php b/app/Http/Resources/ClientNavigationResource.php deleted file mode 100644 index 983ae76..0000000 --- a/app/Http/Resources/ClientNavigationResource.php +++ /dev/null @@ -1,24 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'slug' => $this->slug, - 'subSections' => ClientSubSectionNavigateResource::collection($this->whenLoaded('subSections')->sortBy('sort')), - ]; - } -} diff --git a/app/Http/Resources/ClientPageReferenceListResource.php b/app/Http/Resources/ClientPageReferenceListResource.php deleted file mode 100644 index dcdc1fd..0000000 --- a/app/Http/Resources/ClientPageReferenceListResource.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/ClientPageReferenceResource.php b/app/Http/Resources/ClientPageReferenceResource.php deleted file mode 100644 index 85f0907..0000000 --- a/app/Http/Resources/ClientPageReferenceResource.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/ClientPersonDetailResource.php b/app/Http/Resources/ClientPersonDetailResource.php deleted file mode 100644 index 787e339..0000000 --- a/app/Http/Resources/ClientPersonDetailResource.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/ClientSubSectionNavigateResource.php b/app/Http/Resources/ClientSubSectionNavigateResource.php deleted file mode 100644 index c14f692..0000000 --- a/app/Http/Resources/ClientSubSectionNavigateResource.php +++ /dev/null @@ -1,24 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'slug' => $this->slug, - 'pages' => ClientPageNavigateResource::collection($this->whenLoaded('pages')), - ]; - } -} diff --git a/app/Http/Resources/ClientTagResource.php b/app/Http/Resources/ClientTagResource.php deleted file mode 100644 index 4f0cee4..0000000 --- a/app/Http/Resources/ClientTagResource.php +++ /dev/null @@ -1,24 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'name' => $this->name, - 'slug' => $this->slug, - - ]; - } -} diff --git a/app/Http/Resources/ClientVirtualExhibitionListResource.php b/app/Http/Resources/ClientVirtualExhibitionListResource.php deleted file mode 100644 index d2bb97b..0000000 --- a/app/Http/Resources/ClientVirtualExhibitionListResource.php +++ /dev/null @@ -1,26 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'content' => $this->content, - 'preview_text' => $this->preview_text, - 'category' => $this->category, - 'created_at' => $this->created_at->diffforhumans(), - ]; - } -} diff --git a/app/Http/Resources/ContestResource.php b/app/Http/Resources/ContestResource.php deleted file mode 100644 index 2cfed8f..0000000 --- a/app/Http/Resources/ContestResource.php +++ /dev/null @@ -1,41 +0,0 @@ - "Очная", - 2 => "Очно-Заочная", - 3 => "Заочная", - ]; - - const sourceOfFinancing = [ - 1 => "Бюджетных мест", - 2 => "Целевая квота", - 3 => "Особая квота", - 4 => "Платных мест", - ]; - - /** - * Transform the resource into an array. - * - * @return array - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'form_of_study' => self::formOfStudy[$this->form_obuch], - 'source' => self::sourceOfFinancing[$this->source], - 'count_places' => $this->count_places, - 'start_date_of_dispatch_doc' => $this->start_date_of_dispatch_zajavl, - 'end_date_of_dispatch_doc' => $this->end_date_of_dispatch_zajavl, - 'start_date_of_dispatch_consent' => $this->start_date_of_dispatch_consent, - 'end_date_of_dispatch_consent' => $this->end_date_of_dispatch_consent, - ]; - } -} diff --git a/app/Http/Resources/DepartmentResource.php b/app/Http/Resources/DepartmentResource.php deleted file mode 100644 index 0d2bd58..0000000 --- a/app/Http/Resources/DepartmentResource.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'content' => $this->content, - 'faculty' => $this->faculty, - 'slug' => $this->slug, - 'workers' => ClientPersonDepartmentPreviewResource::collection($this->workers), - 'teachers' => ClientPersonDepartmentTeachPreviewResource::collection($this->teachers), - ]; - } -} diff --git a/app/Http/Resources/DirectionStudyResource.php b/app/Http/Resources/DirectionStudyResource.php deleted file mode 100644 index 07c9021..0000000 --- a/app/Http/Resources/DirectionStudyResource.php +++ /dev/null @@ -1,24 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'name' => $this->name, - 'code' => $this->code, - 'programs' => EducationalProgramResource::collection($this->programs), - ]; - } -} diff --git a/app/Http/Resources/EducationGroupResource.php b/app/Http/Resources/EducationGroupResource.php deleted file mode 100644 index 39dadba..0000000 --- a/app/Http/Resources/EducationGroupResource.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/EducationGroupSearchResource.php b/app/Http/Resources/EducationGroupSearchResource.php deleted file mode 100644 index f6be2c4..0000000 --- a/app/Http/Resources/EducationGroupSearchResource.php +++ /dev/null @@ -1,23 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'schedules' => ClientScheduleSearchResource::collection($this->whenLoaded('schedules')), - ]; - } -} diff --git a/app/Http/Resources/EducationProgramSelectResource.php b/app/Http/Resources/EducationProgramSelectResource.php deleted file mode 100644 index 05b2f8e..0000000 --- a/app/Http/Resources/EducationProgramSelectResource.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return parent::toArray($request); - } -} diff --git a/app/Http/Resources/EventResource.php b/app/Http/Resources/EventResource.php deleted file mode 100644 index d24e626..0000000 --- a/app/Http/Resources/EventResource.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'content' => json_decode($this->content), - 'is_online' => $this->is_online, - 'address' => $this->address, - 'event_date_start' => $this->event_date_start, - 'created_at' => $this->created_at->diffforhumans(), - ]; - } -} diff --git a/app/Http/Resources/ExamResource.php b/app/Http/Resources/ExamResource.php deleted file mode 100644 index a7a6e0f..0000000 --- a/app/Http/Resources/ExamResource.php +++ /dev/null @@ -1,36 +0,0 @@ - - */ - - const typeOfExam = [ - 1 => "ЕГЭ", - 2 => "Вступительное испытание" - ]; - - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'name' => $this->name, - 'type' => self::typeOfExam[$this->type], - 'is_creative_direction' => $this->is_creative_direction, - 'is_profile_direction' => $this->is_profile_direction, - 'priority' => $this->priority, - 'min_ball' => $this->min_ball, - 'max_ball' => $this->max_ball, - 'form_exam' => $this->form_exam, - 'language' => $this->language, - ]; - } -} diff --git a/app/Http/Resources/GalleryResource.php b/app/Http/Resources/GalleryResource.php deleted file mode 100644 index 1027293..0000000 --- a/app/Http/Resources/GalleryResource.php +++ /dev/null @@ -1,24 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->post->title, - 'images' => $this->images, - 'created_at' => $this->created_at - ]; - } -} diff --git a/app/Http/Resources/MainSectionResource.php b/app/Http/Resources/MainSectionResource.php deleted file mode 100644 index dc7b707..0000000 --- a/app/Http/Resources/MainSectionResource.php +++ /dev/null @@ -1,24 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'subSections' => SubSectionResource::collection($this->subSections->sortBy('sort')), - 'created_at' => $this->created_at, - ]; - } -} diff --git a/app/Http/Resources/RegisteredPageResource.php b/app/Http/Resources/RegisteredPageResource.php deleted file mode 100644 index 44981d2..0000000 --- a/app/Http/Resources/RegisteredPageResource.php +++ /dev/null @@ -1,25 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'path' => $this->path, - 'is_visible' => $this->is_visible, - 'code' => $this->code, - ]; - } -} diff --git a/app/Http/Resources/ScheduleResource.php b/app/Http/Resources/ScheduleResource.php deleted file mode 100644 index c1cf762..0000000 --- a/app/Http/Resources/ScheduleResource.php +++ /dev/null @@ -1,22 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - ]; - } -} diff --git a/app/Http/Resources/StudentResource.php b/app/Http/Resources/StudentResource.php deleted file mode 100644 index 2498e6f..0000000 --- a/app/Http/Resources/StudentResource.php +++ /dev/null @@ -1,31 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'name' => $this->name, - 'surname' => $this->surname, - 'middleName' => $this->middleName, - 'photo' => $this->photo, - 'position' => $this->position, - 'education' => $this->education, - 'vk_link' => $this->vk_link, - 'contactEmail' => $this->contactEmail, - 'contactPhone' => $this->contactPhone, - 'created_at' => $this->created_at, - ]; - } -} diff --git a/app/Http/Resources/SubSectionResource.php b/app/Http/Resources/SubSectionResource.php deleted file mode 100644 index 884f89e..0000000 --- a/app/Http/Resources/SubSectionResource.php +++ /dev/null @@ -1,25 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'title' => $this->title, - 'pages' => ClientPageNavigateResource::collection($this->whenLoaded('pages')), - 'main_section' => $this->mainSection->title ?? null, - 'created_at' => $this->created_at->diffforhumans(), - ]; - } -} diff --git a/app/Http/Resources/UserDetailResource.php b/app/Http/Resources/UserDetailResource.php deleted file mode 100644 index d523e19..0000000 --- a/app/Http/Resources/UserDetailResource.php +++ /dev/null @@ -1,39 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'name' => $this->name ? $this->name : null, - 'surname' => $this->surname, - 'middleName' => $this->middleName, - 'photo' => $this->photo, - 'academicTitle' => $this->academicTitle, - 'educatorPosition' => $this->educatorPosition, - 'education' => $this->education, - 'awards' => $this->awards, - 'professDisciplines' => $this->professDisciplines, - 'professionalRetraining' => $this->professionalRetraining, - 'professionalDevelopment' => $this->professionalDevelopment, - 'workExperience' => $this->workExperience, - 'attendedConferences' => $this->attendedConferences, - 'participationScienceProjects' => $this->participationScienceProjects, - 'publications' => $this->publications, - 'trainingAids' => $this->trainingAids, - 'contactEmail' => $this->contactEmail, - 'contactPhone' => $this->contactPhone, - ]; - } -} diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php deleted file mode 100644 index 8df285f..0000000 --- a/app/Http/Resources/UserResource.php +++ /dev/null @@ -1,26 +0,0 @@ - - */ - public function toArray(Request $request): array - { - return [ - 'id' => $this->id, - 'name' => $this->name, - 'slug' => $this->slug, - 'administrativePosition' => $this->pivot->administrativePosition, - 'sort' => $this->pivot->sort, - 'details' => $this->userDetail, - ]; - } -} diff --git a/app/Jobs/CreateAdmissionPlan.php b/app/Jobs/CreateAdmissionPlan.php index 7efa496..87e3db5 100644 --- a/app/Jobs/CreateAdmissionPlan.php +++ b/app/Jobs/CreateAdmissionPlan.php @@ -2,19 +2,15 @@ namespace App\Jobs; -use App\Enums\LevelEducational; -use App\Models\AdmissionCampaign; -use App\Models\DirectionStudy; -use App\Models\EducationalProgram; +use App\Containers\Education\Models\AdmissionCampaign; +use App\Containers\Education\Models\EducationalProgram; use App\Services\Vicon\DirectionStudy\AdmissionPlanService; -use App\Services\Vicon\EducationalProgram\EducationalProgramService; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log; -use Illuminate\Support\Str; class CreateAdmissionPlan implements ShouldQueue { diff --git a/app/Jobs/CreateDirectionStudy.php b/app/Jobs/CreateDirectionStudy.php index 330530e..0333960 100644 --- a/app/Jobs/CreateDirectionStudy.php +++ b/app/Jobs/CreateDirectionStudy.php @@ -2,8 +2,7 @@ namespace App\Jobs; -use App\Enums\LevelEducational; -use App\Models\DirectionStudy; +use App\Containers\Education\Models\DirectionStudy; use App\Services\Vicon\DirectionStudy\DirectionStudyService; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; diff --git a/app/Jobs/CreateEducationalProgram.php b/app/Jobs/CreateEducationalProgram.php index 09cd9c1..b1e8a6f 100644 --- a/app/Jobs/CreateEducationalProgram.php +++ b/app/Jobs/CreateEducationalProgram.php @@ -2,9 +2,8 @@ namespace App\Jobs; -use App\Enums\LevelEducational; -use App\Models\DirectionStudy; -use App\Models\EducationalProgram; +use App\Containers\Education\Models\DirectionStudy; +use App\Containers\Education\Models\EducationalProgram; use App\Services\Vicon\EducationalProgram\EducationalProgramService; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; diff --git a/app/Jobs/CreateVkPost.php b/app/Jobs/CreateVkPost.php index 2a9e81b..1e9c0be 100644 --- a/app/Jobs/CreateVkPost.php +++ b/app/Jobs/CreateVkPost.php @@ -2,12 +2,8 @@ namespace App\Jobs; -use App\Enums\LevelEducational; -use App\Models\DirectionStudy; -use App\Services\Vicon\DirectionStudy\DirectionStudyService; use App\Services\VK\VkService; use Carbon\Carbon; -use Filament\Notifications\Notification; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; @@ -15,15 +11,12 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; -use Illuminate\Support\Str; -use VK\Client\VKApiClient; + class CreateVkPost implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; - - /** * Create a new job instance. */ diff --git a/app/Jobs/ImportApiDataPost.php b/app/Jobs/ImportApiDataPost.php index dd45604..949ef26 100644 --- a/app/Jobs/ImportApiDataPost.php +++ b/app/Jobs/ImportApiDataPost.php @@ -2,8 +2,7 @@ namespace App\Jobs; -use App\Enums\PostStatus; -use App\Models\Post; +use App\Containers\Article\Models\Post; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; diff --git a/app/Jobs/ImportUsers.php b/app/Jobs/ImportUsers.php index d2bdc61..a1df6d4 100644 --- a/app/Jobs/ImportUsers.php +++ b/app/Jobs/ImportUsers.php @@ -2,8 +2,7 @@ namespace App\Jobs; -use App\Models\Post; -use App\Models\User; +use App\Containers\User\Models\User; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; diff --git a/app/Jobs/SendFormResponseMail.php b/app/Jobs/SendFormResponseMail.php index 396997a..32b142f 100644 --- a/app/Jobs/SendFormResponseMail.php +++ b/app/Jobs/SendFormResponseMail.php @@ -2,8 +2,8 @@ namespace App\Jobs; -use App\Mail\CustomFormResponseMail; -use App\Models\CustomFormResponse; +use App\Containers\Widget\Mails\CustomFormResponseMail; +use App\Containers\Widget\Models\CustomFormResponse; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; diff --git a/app/Jobs/UpdateVkPost.php b/app/Jobs/UpdateVkPost.php index 9454aad..d750d6d 100644 --- a/app/Jobs/UpdateVkPost.php +++ b/app/Jobs/UpdateVkPost.php @@ -2,12 +2,7 @@ namespace App\Jobs; -use App\Enums\LevelEducational; -use App\Models\DirectionStudy; -use App\Services\Vicon\DirectionStudy\DirectionStudyService; use App\Services\VK\VkService; -use Carbon\Carbon; -use Filament\Notifications\Notification; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; @@ -15,15 +10,11 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; -use Illuminate\Support\Str; -use VK\Client\VKApiClient; class UpdateVkPost implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; - - /** * Create a new job instance. */ diff --git a/app/Livewire/AcceptInvitation.php b/app/Livewire/AcceptInvitation.php index 36e4b2d..951bc2c 100644 --- a/app/Livewire/AcceptInvitation.php +++ b/app/Livewire/AcceptInvitation.php @@ -2,22 +2,19 @@ namespace App\Livewire; -use App\Models\AcceptedInvitation; -use App\Models\Invitation; -use App\Models\User; +use App\Containers\User\Models\AcceptedInvitation; +use App\Containers\User\Models\Invitation; +use App\Containers\User\Models\User; use Filament\Actions\Action; use Filament\Facades\Filament; use Filament\Forms\Components\TextInput; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Form; use Filament\Pages\Concerns\InteractsWithFormActions; -use Filament\Pages\Dashboard; use Filament\Pages\SimplePage; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\Rules\Password; -use Livewire\Component; -use function Laravel\Prompts\password; class AcceptInvitation extends SimplePage { diff --git a/app/Models/CampaignDegree.php b/app/Models/CampaignDegree.php deleted file mode 100644 index bf111e3..0000000 --- a/app/Models/CampaignDegree.php +++ /dev/null @@ -1,29 +0,0 @@ -belongsTo(AdmissionCampaign::class); - } - - public function directionStudies() - { - return $this->hasMany(DirectionStudy::class); - } - - public function directionStudiesHasPrograms() - { - return $this->hasMany(DirectionStudy::class)->has('programs'); - } - -} diff --git a/app/Models/EducationalGroup.php b/app/Models/EducationalGroup.php deleted file mode 100644 index b7d402d..0000000 --- a/app/Models/EducationalGroup.php +++ /dev/null @@ -1,22 +0,0 @@ -belongsTo(Faculty::class); - } - public function schedules() - { - return $this->hasMany(Schedule::class); - } -} diff --git a/app/Models/Gallery.php b/app/Models/Gallery.php deleted file mode 100644 index b848ca8..0000000 --- a/app/Models/Gallery.php +++ /dev/null @@ -1,21 +0,0 @@ -belongsTo(Post::class); - } - - public function images() { - return $this->hasMany(Image::class); - } -} diff --git a/app/Models/Image.php b/app/Models/Image.php deleted file mode 100644 index ec83413..0000000 --- a/app/Models/Image.php +++ /dev/null @@ -1,18 +0,0 @@ -belongsTo(Gallery::class); - } - -} diff --git a/app/Models/MainSlider.php b/app/Models/MainSlider.php deleted file mode 100644 index c4bea32..0000000 --- a/app/Models/MainSlider.php +++ /dev/null @@ -1,28 +0,0 @@ - 'array', - 'image' => 'array', - ]; - - public function slidable() - { - return $this->morphTo(); - } - - -} diff --git a/app/Models/Post.php b/app/Models/Post.php deleted file mode 100644 index bea16a3..0000000 --- a/app/Models/Post.php +++ /dev/null @@ -1,60 +0,0 @@ -id); - Cache::forget('posts_' . $post->category_id . '_*'); // Очистка кеша для всех постов в категории - }); - - static::deleted(function ($post) { - Cache::forget('post_' . $post->id); - Cache::forget('posts_' . $post->category_id . '_*'); // Очистка кеша для всех постов в категории - }); - } - - public function category() : BelongsTo - { - return $this->belongsTo(Category::class); - } - - public function author() : BelongsTo - { - return $this->belongsTo(User::class, 'user_id'); - } - - public function seo(): MorphOne - { - return $this->morphOne(Seo::class, 'seoable'); - } - - public function slide(): MorphOne - { - return $this->morphOne(Slide::class, 'slidable'); - } - - protected $casts = [ - 'content' => 'array', - 'authors' => 'array', - 'status' => PostStatus::class, - 'images' => 'array' - ]; -} diff --git a/app/Models/ProgramContest.php b/app/Models/ProgramContest.php deleted file mode 100644 index a21d3d3..0000000 --- a/app/Models/ProgramContest.php +++ /dev/null @@ -1,18 +0,0 @@ -belongsTo(EducationalProgram::class, 'educational_program_id'); - } -} diff --git a/app/Models/ProgramExam.php b/app/Models/ProgramExam.php deleted file mode 100644 index 06d0f54..0000000 --- a/app/Models/ProgramExam.php +++ /dev/null @@ -1,18 +0,0 @@ -belongsTo(EducationalProgram::class); - } -} diff --git a/app/Models/SubSchedule.php b/app/Models/SubSchedule.php deleted file mode 100644 index cd38c0b..0000000 --- a/app/Models/SubSchedule.php +++ /dev/null @@ -1,15 +0,0 @@ -cacheService = new MainSliderCacheService(); - } - /** - * Handle the MainSlider "created" event. - */ - public function created(MainSlider $mainSlider): void - { - - - // Устанавливаем сортировку для новой записи - $mainSlider->sort = 1; - $mainSlider->save(); - - // Обновляем сортировку для всех остальных записей - $this->updateSortOrder($mainSlider->id); - - $this->cacheService->clearAllCacheByModel(); - } - - /** - * Handle the MainSlider "updated" event. - */ - public function updated(MainSlider $mainSlider): void - { - $this->cacheService->clearAllCacheByModel(); - } - - /** - * Handle the MainSlider "deleted" event. - */ - public function deleted(MainSlider $mainSlider): void - { - $this->cacheService->clearAllCacheByModel(); - } - - /** - * Handle the MainSlider "restored" event. - */ - public function restored(MainSlider $mainSlider): void - { - // - } - - /** - * Handle the MainSlider "force deleted" event. - */ - public function forceDeleted(MainSlider $mainSlider): void - { - // - } - - protected function updateSortOrder($id): void - { - // Получаем все записи, отсортированные по текущему значению sort - $slides = MainSlider::orderBy('sort', 'asc')->where('id', '!=', $id)->get(); - - if ($slides->count() > 0) { - foreach ($slides as $index => $slide) { - $slide->sort = $index + 2; // Начинаем с 1 - $slide->save(); - } - } - } -} diff --git a/app/Observers/PageObserver.php b/app/Observers/PageObserver.php index b29aefe..37f966b 100644 --- a/app/Observers/PageObserver.php +++ b/app/Observers/PageObserver.php @@ -2,7 +2,7 @@ namespace App\Observers; -use App\Models\Page; +use App\Containers\AppStructure\Models\Page; use App\Services\App\Cache\PageCacheService; use Illuminate\Support\Facades\Cache; diff --git a/app/Observers/PageReferenceListObserver.php b/app/Observers/PageReferenceListObserver.php index 4527f06..bc804d9 100644 --- a/app/Observers/PageReferenceListObserver.php +++ b/app/Observers/PageReferenceListObserver.php @@ -2,7 +2,7 @@ namespace App\Observers; -use App\Models\PageReferenceList; +use App\Containers\Widget\Models\PageReferenceList; use App\Services\App\Cache\PageReferenceListCacheService; class PageReferenceListObserver diff --git a/app/Observers/PostObserver.php b/app/Observers/PostObserver.php index 2c9eda3..05beb9a 100644 --- a/app/Observers/PostObserver.php +++ b/app/Observers/PostObserver.php @@ -2,11 +2,8 @@ namespace App\Observers; -use App\Models\Post; +use App\Containers\Article\Models\Post; use App\Services\App\Cache\PostCacheService; -use Filament\Notifications\Notification; -use Illuminate\Support\Facades\Cache; -use Illuminate\Support\Facades\Redirect; class PostObserver { diff --git a/app/Observers/ScheduleObserver.php b/app/Observers/ScheduleObserver.php index e279498..5a24709 100644 --- a/app/Observers/ScheduleObserver.php +++ b/app/Observers/ScheduleObserver.php @@ -2,7 +2,7 @@ namespace App\Observers; -use App\Models\Schedule; +use App\Containers\Schedule\Models\Schedule; use App\Services\App\Cache\ScheduleCacheService; class ScheduleObserver diff --git a/app/Observers/SlideObserver.php b/app/Observers/SlideObserver.php index 256dea8..9cc6d3e 100644 --- a/app/Observers/SlideObserver.php +++ b/app/Observers/SlideObserver.php @@ -2,9 +2,7 @@ namespace App\Observers; -use App\Models\MainSlider; -use App\Models\Slide; -use App\Services\App\Cache\MainSliderCacheService; +use App\Containers\Widget\Models\Slide; use App\Services\App\Cache\SliderCacheService; class SlideObserver diff --git a/app/Observers/SubSectionObserver.php b/app/Observers/SubSectionObserver.php index 9f8115a..c6a1a85 100644 --- a/app/Observers/SubSectionObserver.php +++ b/app/Observers/SubSectionObserver.php @@ -2,7 +2,7 @@ namespace App\Observers; -use App\Models\SubSection; +use App\Containers\AppStructure\Models\SubSection; use Illuminate\Support\Facades\Cache; class SubSectionObserver diff --git a/app/Observers/TagObserver.php b/app/Observers/TagObserver.php index 9ff4ce8..5e6278f 100644 --- a/app/Observers/TagObserver.php +++ b/app/Observers/TagObserver.php @@ -2,7 +2,7 @@ namespace App\Observers; -use App\Models\Tag; +use App\Containers\Article\Models\Tag; use App\Services\App\Cache\TagCacheService; class TagObserver diff --git a/app/Observers/UserObserver.php b/app/Observers/UserObserver.php index 0f564a4..8cc1c80 100644 --- a/app/Observers/UserObserver.php +++ b/app/Observers/UserObserver.php @@ -2,7 +2,7 @@ namespace App\Observers; -use App\Models\User; +use App\Containers\User\Models\User; use App\Services\App\Cache\UserCacheService; class UserObserver diff --git a/app/Policies/MainSliderPolicy.php b/app/Policies/MainSliderPolicy.php deleted file mode 100644 index 774c81b..0000000 --- a/app/Policies/MainSliderPolicy.php +++ /dev/null @@ -1,108 +0,0 @@ -can('view_any_main::slider'); - } - - /** - * Determine whether the user can view the model. - */ - public function view(User $user, MainSlider $mainSlider): bool - { - return $user->can('view_main::slider'); - } - - /** - * Determine whether the user can create models. - */ - public function create(User $user): bool - { - return $user->can('create_main::slider'); - } - - /** - * Determine whether the user can update the model. - */ - public function update(User $user, MainSlider $mainSlider): bool - { - return $user->can('update_main::slider'); - } - - /** - * Determine whether the user can delete the model. - */ - public function delete(User $user, MainSlider $mainSlider): bool - { - return $user->can('delete_main::slider'); - } - - /** - * Determine whether the user can bulk delete. - */ - public function deleteAny(User $user): bool - { - return $user->can('delete_any_main::slider'); - } - - /** - * Determine whether the user can permanently delete. - */ - public function forceDelete(User $user, MainSlider $mainSlider): bool - { - return $user->can('force_delete_main::slider'); - } - - /** - * Determine whether the user can permanently bulk delete. - */ - public function forceDeleteAny(User $user): bool - { - return $user->can('force_delete_any_main::slider'); - } - - /** - * Determine whether the user can restore. - */ - public function restore(User $user, MainSlider $mainSlider): bool - { - return $user->can('restore_main::slider'); - } - - /** - * Determine whether the user can bulk restore. - */ - public function restoreAny(User $user): bool - { - return $user->can('restore_any_main::slider'); - } - - /** - * Determine whether the user can replicate. - */ - public function replicate(User $user, MainSlider $mainSlider): bool - { - return $user->can('replicate_main::slider'); - } - - /** - * Determine whether the user can reorder. - */ - public function reorder(User $user): bool - { - return $user->can('reorder_main::slider'); - } -} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index f85d90e..37f0d4d 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,39 +2,35 @@ namespace App\Providers; -use App\Models\AcademicJournal; -use App\Models\AdditionalEducation; -use App\Models\AdmissionCampaign; -use App\Models\AdmissionPlan; -use App\Models\ContactWidget; -use App\Models\Department; -use App\Models\DirectionStudy; -use App\Models\Division; -use App\Models\EducationalProgram; -use App\Models\Event; -use App\Models\Faculty; -use App\Models\MainSection; -use App\Models\MainSlider; -use App\Models\Page; -use App\Models\PageReferenceList; -use App\Models\Post; -use App\Models\Schedule; -use App\Models\Slide; -use App\Models\SubSection; -use App\Models\User; +use App\Containers\AdditionalEducation\Models\AdditionalEducation; +use App\Containers\AppStructure\Models\MainSection; +use App\Containers\AppStructure\Models\Page; +use App\Containers\AppStructure\Models\SubSection; +use App\Containers\Article\Models\Post; +use App\Containers\Education\Models\AdmissionCampaign; +use App\Containers\Education\Models\AdmissionPlan; +use App\Containers\Education\Models\DirectionStudy; +use App\Containers\Education\Models\EducationalProgram; +use App\Containers\Event\Models\Event; +use App\Containers\InstituteStructure\Models\Department; +use App\Containers\InstituteStructure\Models\Division; +use App\Containers\InstituteStructure\Models\Faculty; +use App\Containers\Schedule\Models\Schedule; +use App\Containers\Science\Models\AcademicJournal; +use App\Containers\User\Models\User; +use App\Containers\Widget\Models\ContactWidget; +use App\Containers\Widget\Models\PageReferenceList; +use App\Containers\Widget\Models\Slide; use App\Observers\AcademicJournalObserver; use App\Observers\AdditionalEducationObserver; use App\Observers\AdmissionCampaignObserver; -use App\Observers\AdmissionPlanObserver; use App\Observers\ContactWidgetObserver; use App\Observers\DepartmentObserver; -use App\Observers\DirectionStudyObserver; use App\Observers\DivisionObserver; use App\Observers\EducationalProgramObserver; use App\Observers\EventObserver; use App\Observers\FacultyObserver; use App\Observers\MainSectionObserver; -use App\Observers\MainSliderObserver; use App\Observers\PageObserver; use App\Observers\PageReferenceListObserver; use App\Observers\PostObserver; @@ -42,8 +38,9 @@ use App\Observers\ScheduleObserver; use App\Observers\SlideObserver; use App\Observers\SubSectionObserver; use App\Observers\UserObserver; -use App\Services\App\Cache\MainSliderCacheService; use App\Services\App\Cache\SliderCacheService; +use App\Ship\Contracts\SeoServiceInterface; +use App\Ship\Services\SeoPageService; use Carbon\Carbon; use Filament\Facades\Filament; use Filament\Support\Facades\FilamentView; @@ -61,7 +58,7 @@ class AppServiceProvider extends ServiceProvider */ public function register(): void { - // + $this->app->bind(SeoServiceInterface::class, SeoPageService::class); } /** diff --git a/app/Providers/ByteConverterServiceProvider.php b/app/Providers/ByteConverterServiceProvider.php index 7e1859b..8c9286a 100644 --- a/app/Providers/ByteConverterServiceProvider.php +++ b/app/Providers/ByteConverterServiceProvider.php @@ -2,7 +2,7 @@ namespace App\Providers; -use App\Helpers\ByteConverter; +use App\Ship\Helpers\ByteConverter; use Illuminate\Support\ServiceProvider; class ByteConverterServiceProvider extends ServiceProvider diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index eeb249a..5589147 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -2,12 +2,11 @@ namespace App\Providers; -use App\Models\CustomFormResponse; +use App\Containers\Widget\Models\CustomFormResponse; use App\Observers\CustomFormResponseObserver; use Illuminate\Auth\Events\Registered; use Illuminate\Auth\Listeners\SendEmailVerificationNotification; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; -use Illuminate\Support\Facades\Event; class EventServiceProvider extends ServiceProvider { diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 2d64b5f..d0913f6 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -62,7 +62,7 @@ class AdminPanelProvider extends PanelProvider ->plugins([ \BezhanSalleh\FilamentShield\FilamentShieldPlugin::make(), FilamentSpatieLaravelBackupPlugin::make()->usingPage(Backups::class), - CheckpointPlugin::make(), +// CheckpointPlugin::make(), ]); } } diff --git a/app/Services/App/Breadcrumb/BreadcrumbService.php b/app/Services/App/Breadcrumb/BreadcrumbService.php index 12379cc..f94152b 100644 --- a/app/Services/App/Breadcrumb/BreadcrumbService.php +++ b/app/Services/App/Breadcrumb/BreadcrumbService.php @@ -2,10 +2,10 @@ namespace App\Services\App\Breadcrumb; -use App\Http\Resources\ClientBreadcrumbPage; -use App\Http\Resources\ClientBreadcrumbSection; -use App\Http\Resources\ClientBreadcrumbSubSection; -use App\Models\Page; +use App\Containers\AppStructure\Models\Page; +use App\Ship\Resources\Breadcrumb\ClientBreadcrumbPage; +use App\Ship\Resources\Breadcrumb\ClientBreadcrumbSection; +use App\Ship\Resources\Breadcrumb\ClientBreadcrumbSubSection; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Route; diff --git a/app/Services/App/Cache/AcademicJournalCacheService.php b/app/Services/App/Cache/AcademicJournalCacheService.php index c6037bc..538d6ac 100644 --- a/app/Services/App/Cache/AcademicJournalCacheService.php +++ b/app/Services/App/Cache/AcademicJournalCacheService.php @@ -2,8 +2,8 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; -use App\Models\AcademicJournal; +use App\Containers\Science\Models\AcademicJournal; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class AcademicJournalCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/AdditionalEducationCacheService.php b/app/Services/App/Cache/AdditionalEducationCacheService.php index 00efabe..71a7a43 100644 --- a/app/Services/App/Cache/AdditionalEducationCacheService.php +++ b/app/Services/App/Cache/AdditionalEducationCacheService.php @@ -2,8 +2,8 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; -use App\Models\AdditionalEducation; +use App\Containers\AdditionalEducation\Models\AdditionalEducation; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class AdditionalEducationCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/AdmissionCampaignCacheService.php b/app/Services/App/Cache/AdmissionCampaignCacheService.php index 13e4063..c17cc8f 100644 --- a/app/Services/App/Cache/AdmissionCampaignCacheService.php +++ b/app/Services/App/Cache/AdmissionCampaignCacheService.php @@ -2,7 +2,7 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class AdmissionCampaignCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/CategoryCacheService.php b/app/Services/App/Cache/CategoryCacheService.php index c3ae770..21324f3 100644 --- a/app/Services/App/Cache/CategoryCacheService.php +++ b/app/Services/App/Cache/CategoryCacheService.php @@ -2,7 +2,7 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class CategoryCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/ContactWidgetCacheService.php b/app/Services/App/Cache/ContactWidgetCacheService.php index 422d17a..43cc2bc 100644 --- a/app/Services/App/Cache/ContactWidgetCacheService.php +++ b/app/Services/App/Cache/ContactWidgetCacheService.php @@ -2,8 +2,8 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; -use App\Models\ContactWidget; +use App\Containers\Widget\Models\ContactWidget; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class ContactWidgetCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/DepartmentCacheService.php b/app/Services/App/Cache/DepartmentCacheService.php index 3bd641d..65e1f12 100644 --- a/app/Services/App/Cache/DepartmentCacheService.php +++ b/app/Services/App/Cache/DepartmentCacheService.php @@ -2,8 +2,8 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; -use App\Models\Department; +use App\Containers\InstituteStructure\Models\Department; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class DepartmentCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/DivisionCacheService.php b/app/Services/App/Cache/DivisionCacheService.php index 3f57661..20b0b04 100644 --- a/app/Services/App/Cache/DivisionCacheService.php +++ b/app/Services/App/Cache/DivisionCacheService.php @@ -2,7 +2,7 @@ namespace App\Services\App\Cache; -use App\Models\Division; +use App\Containers\InstituteStructure\Models\Division; use Illuminate\Support\Facades\Cache; class DivisionCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/EducationalProgramCacheService.php b/app/Services/App/Cache/EducationalProgramCacheService.php index 79590d8..ad5bfd0 100644 --- a/app/Services/App/Cache/EducationalProgramCacheService.php +++ b/app/Services/App/Cache/EducationalProgramCacheService.php @@ -2,8 +2,8 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; -use App\Models\EducationalProgram; +use App\Containers\Education\Models\EducationalProgram; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class EducationalProgramCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/EventCacheService.php b/app/Services/App/Cache/EventCacheService.php index 319a106..d048d26 100644 --- a/app/Services/App/Cache/EventCacheService.php +++ b/app/Services/App/Cache/EventCacheService.php @@ -2,8 +2,8 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; -use App\Models\Event; +use App\Ship\Enums\CacheKeys; +use App\Containers\Event\Models\Event; use Illuminate\Support\Facades\Cache; class EventCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/FacultyCacheService.php b/app/Services/App/Cache/FacultyCacheService.php index bd0011b..bf02ed2 100644 --- a/app/Services/App/Cache/FacultyCacheService.php +++ b/app/Services/App/Cache/FacultyCacheService.php @@ -2,8 +2,8 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; -use App\Models\Faculty; +use App\Ship\Enums\CacheKeys; +use App\Containers\InstituteStructure\Models\Faculty; use Illuminate\Support\Facades\Cache; class FacultyCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/MainSectionCacheService.php b/app/Services/App/Cache/MainSectionCacheService.php index ec74375..9ff473b 100644 --- a/app/Services/App/Cache/MainSectionCacheService.php +++ b/app/Services/App/Cache/MainSectionCacheService.php @@ -2,7 +2,7 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class MainSectionCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/PageCacheService.php b/app/Services/App/Cache/PageCacheService.php index b2c0936..f4b6172 100644 --- a/app/Services/App/Cache/PageCacheService.php +++ b/app/Services/App/Cache/PageCacheService.php @@ -2,8 +2,8 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; -use App\Models\Page; +use App\Ship\Enums\CacheKeys; +use App\Containers\AppStructure\Models\Page; use Illuminate\Support\Facades\Cache; class PageCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/PageReferenceListCacheService.php b/app/Services/App/Cache/PageReferenceListCacheService.php index b58a0cc..cef486a 100644 --- a/app/Services/App/Cache/PageReferenceListCacheService.php +++ b/app/Services/App/Cache/PageReferenceListCacheService.php @@ -2,8 +2,8 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; -use App\Models\PageReferenceList; +use App\Containers\Widget\Models\PageReferenceList; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class PageReferenceListCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/PostCacheService.php b/app/Services/App/Cache/PostCacheService.php index 539906a..c1eaa61 100644 --- a/app/Services/App/Cache/PostCacheService.php +++ b/app/Services/App/Cache/PostCacheService.php @@ -2,7 +2,7 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class PostCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/ScheduleCacheService.php b/app/Services/App/Cache/ScheduleCacheService.php index 10dc0ca..238e305 100644 --- a/app/Services/App/Cache/ScheduleCacheService.php +++ b/app/Services/App/Cache/ScheduleCacheService.php @@ -2,8 +2,8 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; -use App\Models\Schedule; +use App\Containers\Schedule\Models\Schedule; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class ScheduleCacheService extends AbstractCacheService implements CacheInterface @@ -34,11 +34,6 @@ class ScheduleCacheService extends AbstractCacheService implements CacheInterfac } - private function forgetScheduleCache(int $id): void - { - Cache::forget($this->getCacheKey($id)); - } - private function clearAllSchedulesCache(): void { Cache::forget(CacheKeys::SCHEDULES_PREFIX->value); diff --git a/app/Services/App/Cache/SliderCacheService.php b/app/Services/App/Cache/SliderCacheService.php index 6200a0a..a391a82 100644 --- a/app/Services/App/Cache/SliderCacheService.php +++ b/app/Services/App/Cache/SliderCacheService.php @@ -2,7 +2,7 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class SliderCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/SubSectionCacheService.php b/app/Services/App/Cache/SubSectionCacheService.php index 3a2fd28..1bca198 100644 --- a/app/Services/App/Cache/SubSectionCacheService.php +++ b/app/Services/App/Cache/SubSectionCacheService.php @@ -2,7 +2,7 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class SubSectionCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/TagCacheService.php b/app/Services/App/Cache/TagCacheService.php index 0fc97c1..a41e28e 100644 --- a/app/Services/App/Cache/TagCacheService.php +++ b/app/Services/App/Cache/TagCacheService.php @@ -2,7 +2,7 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; +use App\Ship\Enums\CacheKeys; use Illuminate\Support\Facades\Cache; class TagCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Cache/UserCacheService.php b/app/Services/App/Cache/UserCacheService.php index ae725ae..c5c36f0 100644 --- a/app/Services/App/Cache/UserCacheService.php +++ b/app/Services/App/Cache/UserCacheService.php @@ -2,8 +2,8 @@ namespace App\Services\App\Cache; -use App\Enums\CacheKeys; -use App\Models\User; +use App\Ship\Enums\CacheKeys; +use App\Containers\User\Models\User; use Illuminate\Support\Facades\Cache; class UserCacheService extends AbstractCacheService implements CacheInterface diff --git a/app/Services/App/Seo/SeoPageProvider.php b/app/Services/App/Seo/SeoPageProvider.php index da3c44b..d9f02b4 100644 --- a/app/Services/App/Seo/SeoPageProvider.php +++ b/app/Services/App/Seo/SeoPageProvider.php @@ -2,8 +2,8 @@ namespace App\Services\App\Seo; -use App\Enums\CacheKeys; -use App\Models\Page; +use App\Containers\AppStructure\Models\Page; +use App\Ship\Enums\CacheKeys; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Route; diff --git a/app/Services/Filament/Domain/Posts/PostDataProcessor.php b/app/Services/Filament/Domain/Posts/PostDataProcessor.php index 425d82f..76b9618 100644 --- a/app/Services/Filament/Domain/Posts/PostDataProcessor.php +++ b/app/Services/Filament/Domain/Posts/PostDataProcessor.php @@ -2,7 +2,7 @@ namespace App\Services\Filament\Domain\Posts; -use App\Enums\PostStatus; +use App\Containers\Article\Enums\PostStatus; use Illuminate\Support\Carbon; use Illuminate\Support\Str; @@ -14,7 +14,7 @@ class PostDataProcessor * @param array $data * @return array */ - public function process(array $data, $operation): array + public function processCreate(array $data): array { // Удаляем ненужные данные unset($data['publication']); @@ -22,15 +22,15 @@ class PostDataProcessor // Устанавливаем текст для предпросмотра $data['preview_text'] = $this->setPreviewText($data); + if (($data['status'] === PostStatus::PUBLISHED->value)) { + $data['publish_at'] = $this->setPublishDateTime(); + } + // Устанавливаем время публикации if ($data['publish_setting']['publish_after'] === true) { $data['publish_at'] = $this->setPublishDateTimeInFuture($data['publish_setting']); } - if (($data['status'] === PostStatus::PUBLISHED->value || PostStatus::PUBLISHED) && $operation === 'create') { - $data['publish_at'] = $this->setPublishDateTime(); - } - unset($data['publish_setting']); // Генерируем данные для поиска @@ -46,6 +46,36 @@ class PostDataProcessor return $data; } + public function processUpdate(array $data): array + { + // Удаляем ненужные данные + unset($data['publication']); + + // Устанавливаем текст для предпросмотра + $data['preview_text'] = $this->setPreviewText($data); + + + if (!$data['publish_at'] && ($data['status'] === PostStatus::PUBLISHED->value)) { + $data['publish_at'] = $this->setPublishDateTime(); + } + + // Устанавливаем время публикации + if ((isset($data['publish_setting']['publish_after']) && $data['publish_setting']['publish_after']) || + (isset($data['publish_setting']['publish_at']) && $data['publish_setting']['publish_at'])) { + $data['publish_at'] = $this->setPublishDateTimeInFuture($data['publish_setting']); + } + + unset($data['publish_setting']); + + // Генерируем данные для поиска + $data['search_data'] = $this->generateSearchData($data['content']); + + // Рассчитываем время чтения + $data['reading_time'] = $this->calculateReadingTime($data['search_data']); + + return $data; + } + /** * Устанавливает текст для предпросмотра. * @@ -77,7 +107,7 @@ class PostDataProcessor private function setPublishDateTimeInFuture(array $publishSetting): ?Carbon { - if ($publishSetting['publish_after'] === true) { + if (!empty($publishSetting['publish_at'])) { return Carbon::parse($publishSetting['publish_at']); } diff --git a/app/Services/Filament/Domain/Posts/PostNotificationService.php b/app/Services/Filament/Domain/Posts/PostNotificationService.php index 4b3dfe8..f72f09b 100644 --- a/app/Services/Filament/Domain/Posts/PostNotificationService.php +++ b/app/Services/Filament/Domain/Posts/PostNotificationService.php @@ -2,10 +2,10 @@ namespace App\Services\Filament\Domain\Posts; +use App\Containers\Article\Models\Post; +use App\Containers\User\Models\Role; +use App\Containers\User\Models\User; use App\Filament\Resources\PostResource; -use App\Models\Post; -use App\Models\Role; -use App\Models\User; use Filament\Notifications\Actions\Action; use Filament\Notifications\Notification; diff --git a/app/Services/Filament/Domain/Posts/PostSliderService.php b/app/Services/Filament/Domain/Posts/PostSliderService.php index 2f48438..6e3bd3f 100644 --- a/app/Services/Filament/Domain/Posts/PostSliderService.php +++ b/app/Services/Filament/Domain/Posts/PostSliderService.php @@ -2,10 +2,9 @@ namespace App\Services\Filament\Domain\Posts; +use App\Containers\Widget\Models\Slide; use App\Dto\MainSliderDTO; -use App\Models\MainSlider; -use App\Models\Post; -use App\Models\Slide; +use App\Containers\Article\Models\Post; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Log; diff --git a/app/Services/Filament/Domain/Posts/VkPostPublisher.php b/app/Services/Filament/Domain/Posts/VkPostPublisher.php index 5ef5ffb..452f15e 100644 --- a/app/Services/Filament/Domain/Posts/VkPostPublisher.php +++ b/app/Services/Filament/Domain/Posts/VkPostPublisher.php @@ -2,9 +2,10 @@ namespace App\Services\Filament\Domain\Posts; -use App\Enums\PostStatus; +use App\Containers\Article\Enums\PostStatus; +use App\Containers\Article\Models\Post; use App\Jobs\CreateVkPost; -use App\Models\Post; +use App\Jobs\UpdateVkPost; use Illuminate\Support\Facades\Storage; class VkPostPublisher @@ -18,18 +19,31 @@ class VkPostPublisher */ public function publish(array $settings, Post $post): void { - if ($post->status === PostStatus::PUBLISHED) { + if ($post->status->value === PostStatus::PUBLISHED->value) { if ($settings['vk']) { $text = $this->generateContentForVk($post->content); $images = $this->generateImageLinksForVk($post->images); $publishDate = $post->publish_at > now() ? $post->publish_at->timestamp : null; - dispatch(new CreateVkPost($post->title, $text, $images, $post->id, $publishDate)); } } } + public function update(array $settings, Post $post): void + { + if ($post->status->value === PostStatus::PUBLISHED->value) { + if ($settings['vk']) { + + $text = $this->generateContentForVk($post->content); + $images = $this->generateImageLinksForVk($post->images); + $publishDate = $post->publish_at > now() ? $post->publish_at->timestamp : null; + + dispatch(new UpdateVkPost($post->title, $text, $images, $post->id, $publishDate)); + } + } + } + /** * Генерирует текстовый контент для ВКонтакте. * diff --git a/app/Services/Filament/Traits/SeoGenerate.php b/app/Services/Filament/Traits/SeoGenerate.php index c264de2..a2b40f8 100644 --- a/app/Services/Filament/Traits/SeoGenerate.php +++ b/app/Services/Filament/Traits/SeoGenerate.php @@ -2,8 +2,8 @@ namespace App\Services\Filament\Traits; -use App\Services\App\Seo\SeoDescriptionInterface; use App\Services\Filament\Domain\Seo\SeoGeneratorService; +use App\Ship\Contracts\SeoDescriptionInterface; trait SeoGenerate { diff --git a/app/Ship/Abstracts/Broadcasting/Channel.php b/app/Ship/Abstracts/Broadcasting/Channel.php new file mode 100644 index 0000000..36874d1 --- /dev/null +++ b/app/Ship/Abstracts/Broadcasting/Channel.php @@ -0,0 +1,10 @@ +filters[$key])) { + throw new RuntimeException("Фильтр с ключом '$key' уже существует."); + } + + $this->filters[$key] = [ + 'type' => $type, + 'value' => $value, + 'param' => $param, + 'content' => $content, + ]; + + return $this; + } + + /** + * Возвращает собранные фильтры + * + * @return array + */ + public function get(): array + { + return $this->filters; + } + + public function reset(): self + { + $this->filters = []; + return $this; + } +} \ No newline at end of file diff --git a/app/Ship/Contracts/SeoDescriptionInterface.php b/app/Ship/Contracts/SeoDescriptionInterface.php new file mode 100644 index 0000000..87b9fe7 --- /dev/null +++ b/app/Ship/Contracts/SeoDescriptionInterface.php @@ -0,0 +1,8 @@ +, \Psr\Log\LogLevel::*> + */ + protected $levels = [ + // + ]; + + /** + * A list of the exception types that are not reported. + * + * @var array> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed to the session on validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register() + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/app/Helpers/ByteConverter.php b/app/Ship/Helpers/ByteConverter.php similarity index 91% rename from app/Helpers/ByteConverter.php rename to app/Ship/Helpers/ByteConverter.php index 05d5294..fffb2ff 100644 --- a/app/Helpers/ByteConverter.php +++ b/app/Ship/Helpers/ByteConverter.php @@ -1,6 +1,6 @@ command('sitemap:generate')->dailyAt('03:00'); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->loadCommandsForConsoleKernel(); + $this->loadRoutesForConsoleKernel(); + } +} diff --git a/app/Ship/Kernels/HttpKernel.php b/app/Ship/Kernels/HttpKernel.php new file mode 100644 index 0000000..4ef0b3b --- /dev/null +++ b/app/Ship/Kernels/HttpKernel.php @@ -0,0 +1,90 @@ + + */ + protected $middleware = [ + TransformRequestMiddleware::class, + // \App\Ship\Middleware\TrustHosts::class, + \App\Ship\Middleware\TrustProxies::class, + \Illuminate\Http\Middleware\HandleCors::class, + \App\Ship\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Ship\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Ship\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Ship\Middleware\VerifyCsrfToken::class, + \App\Http\Middleware\HandleInertiaRequests::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Ship\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Ship\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \App\Ship\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'role' => RoleMiddleware::class, + 'permission' => PermissionMiddleware::class, + 'role_or_permission' => RoleOrPermissionMiddleware::class, + 'access-check' => AccessCheck::class, + 'rate.limited.counter' => RateLimitCounterMiddleware::class, + 'rate.limited.check' => RateLimitCheckMiddleware::class, + 'ensure.browser' => InternalRequestOnly::class, + 'superadmin' => EnsureUserIsSuperadmin::class, + 'limit.post' => LimitPost::class, + 'form.time.period' => FormTimePeriodMiddleware::class, + ]; +} diff --git a/app/Ship/Mails/Mailables/Content.php b/app/Ship/Mails/Mailables/Content.php new file mode 100644 index 0000000..7b7aa6b --- /dev/null +++ b/app/Ship/Mails/Mailables/Content.php @@ -0,0 +1,10 @@ +route()->uri) + ->where('is_registered', '=', true) + ->first(); + + // Если запись не найдена, пропускаем запрос + if (!$registeredRoute) { + return $next($request); + } + + // Если код не 200, возвращаем соответствующий код ошибки + if ($registeredRoute->code != 200) { + abort($registeredRoute->code); + } + + $request->attributes->set('settings_page', $registeredRoute->settings); + // Если все проверки пройдены, продолжаем выполнение запроса + return $next($request); + } +} \ No newline at end of file diff --git a/app/Ship/Middleware/Authenticate.php b/app/Ship/Middleware/Authenticate.php new file mode 100644 index 0000000..6af327e --- /dev/null +++ b/app/Ship/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return '/'; + } + } +} diff --git a/app/Ship/Middleware/EncryptCookies.php b/app/Ship/Middleware/EncryptCookies.php new file mode 100644 index 0000000..5feb4d6 --- /dev/null +++ b/app/Ship/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Ship/Middleware/EnsureUserIsSuperadmin.php b/app/Ship/Middleware/EnsureUserIsSuperadmin.php new file mode 100644 index 0000000..c7f90e6 --- /dev/null +++ b/app/Ship/Middleware/EnsureUserIsSuperadmin.php @@ -0,0 +1,28 @@ +hasRole('super_admin')) { + return Inertia::render('Error', ['status' => 403]) + ->toResponse($request) + ->setStatusCode(403); + } + + return $next($request); + } +} diff --git a/app/Ship/Middleware/FormTimePeriodMiddleware.php b/app/Ship/Middleware/FormTimePeriodMiddleware.php new file mode 100644 index 0000000..be7ced2 --- /dev/null +++ b/app/Ship/Middleware/FormTimePeriodMiddleware.php @@ -0,0 +1,48 @@ +find($request->route('id')); + + if (!$form) { + abort(Response::HTTP_NOT_FOUND, 'Form not found'); + } + + + if (!isset($form->settings['period'])) { + return $next($request); + } + + $period = $form->settings['period']; + + try { + $start_time = Carbon::parse($period['start_time']); + $end_time = Carbon::parse($period['end_time']); + } catch (\Exception $e) { + abort(Response::HTTP_BAD_REQUEST, 'Invalid time format'); + } + + $now = Carbon::now(); + + if ($now >= $start_time && $now <= $end_time) { + return $next($request); + } + + abort(Response::HTTP_FORBIDDEN, 'Form is not available at this time'); + } +} diff --git a/app/Ship/Middleware/GenerateBreadcrumbs.php b/app/Ship/Middleware/GenerateBreadcrumbs.php new file mode 100644 index 0000000..01c36d3 --- /dev/null +++ b/app/Ship/Middleware/GenerateBreadcrumbs.php @@ -0,0 +1,35 @@ +path(); + $page = Page::where('path', '=', $path) + ->with('section.pages.section', 'section.mainSection') + ->first(); + + if ($page && isset($page->section)) { + $breadcrumbs = [ + 'mainSection' => new ClientBreadcrumbSection($page->section->mainSection), + 'subSection' => new ClientBreadcrumbSubSection($page->section), + 'page' => new ClientBreadcrumbPage($page), + ]; + } else { + $breadcrumbs = null; + } + + $request->merge(['breadcrumbs' => $breadcrumbs]); + + return $next($request); + } +} diff --git a/app/Ship/Middleware/HandleInertiaRequests.php b/app/Ship/Middleware/HandleInertiaRequests.php new file mode 100644 index 0000000..7588d8e --- /dev/null +++ b/app/Ship/Middleware/HandleInertiaRequests.php @@ -0,0 +1,55 @@ +addHours(1), function () { + return NavigationResource::collection( + MainSection::with('subSections.pages.section') + ->orderBy('sort', 'asc') + ->get() + ); + }); + + // Хлебные крошки (автоматически по текущему URL) + $breadcrumbs = app(BreadcrumbService::class)->generateBreadcrumbs(); + + return [ + ...parent::share($request), + 'auth' => [ + 'user' => $request->user() ? $request->user()->only('id', 'name', 'email', 'created_at') : null, + ], + 'ziggy' => fn () => [ + ...(new Ziggy)->toArray(), + 'location' => $request->url(), + ], + 'navigation' => $navigation, + 'breadcrumbs' => $breadcrumbs, // Добавляем хлебные крошки + 'urlPrev' => function () { + if (url()->previous() !== url()->current()) { + return url()->previous(); + } + return 'empty'; + }, + ]; + } +} \ No newline at end of file diff --git a/app/Ship/Middleware/InternalRequestOnly.php b/app/Ship/Middleware/InternalRequestOnly.php new file mode 100644 index 0000000..c65b78f --- /dev/null +++ b/app/Ship/Middleware/InternalRequestOnly.php @@ -0,0 +1,27 @@ +header('User-Agent'); + + // Проверяем, что User-Agent содержит ключевые слова, характерные для браузеров + if (!preg_match('/Mozilla|Chrome|Safari|Firefox|Edge/i', $userAgent)) { + return response('Access denied. This route is available only from a web browser.', 403); + } + + return $next($request); + } +} diff --git a/app/Ship/Middleware/LimitPost.php b/app/Ship/Middleware/LimitPost.php new file mode 100644 index 0000000..afca83d --- /dev/null +++ b/app/Ship/Middleware/LimitPost.php @@ -0,0 +1,28 @@ +user()->receivedInvitation === null) { + return $next($request); + } + if (auth()->user()->receivedInvitation->post_limit > 0) { + return $next($request); + } else { + throw new HttpException(403, 'Лимит постов исчерпан'); + } + } +} diff --git a/app/Ship/Middleware/PreventRequestsDuringMaintenance.php b/app/Ship/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..fff4ba6 --- /dev/null +++ b/app/Ship/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Ship/Middleware/RateLimitCheckMiddleware.php b/app/Ship/Middleware/RateLimitCheckMiddleware.php new file mode 100644 index 0000000..f5536c3 --- /dev/null +++ b/app/Ship/Middleware/RateLimitCheckMiddleware.php @@ -0,0 +1,27 @@ +ip(); + $key = 'rate_limit:' . $ip; + + // Получаем текущее количество попыток + $attempts = Cache::get($key, 0); + + if ($attempts >= 5) { + return response()->json(['message' => 'Слишком много запросов, пожалуйста, попробуйте позже.'], 429); + } + + // Увеличиваем количество попыток + + return $next($request); + } +} \ No newline at end of file diff --git a/app/Ship/Middleware/RateLimitCounterMiddleware.php b/app/Ship/Middleware/RateLimitCounterMiddleware.php new file mode 100644 index 0000000..919823a --- /dev/null +++ b/app/Ship/Middleware/RateLimitCounterMiddleware.php @@ -0,0 +1,30 @@ +ip(); + $key = 'rate_limit:' . $ip; + $maxAttempts = 5; // Максимальное количество попыток + $decayMinutes = 1; // Время блокировки в минутах + + // Получаем текущее количество попыток + $attempts = Cache::get($key, 0); + + if ($attempts >= $maxAttempts) { + return response()->json(['message' => 'Слишком много запросов, пожалуйста, попробуйте позже.'], 429); + } + + // Увеличиваем количество попыток + Cache::put($key, $attempts + 1, $decayMinutes * 60); + + return $next($request); + } +} \ No newline at end of file diff --git a/app/Ship/Middleware/RedirectIfAuthenticated.php b/app/Ship/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..652294a --- /dev/null +++ b/app/Ship/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,32 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Ship/Middleware/TransformRequestMiddleware.php b/app/Ship/Middleware/TransformRequestMiddleware.php new file mode 100644 index 0000000..998582e --- /dev/null +++ b/app/Ship/Middleware/TransformRequestMiddleware.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/app/Ship/Middleware/TrustHosts.php b/app/Ship/Middleware/TrustHosts.php new file mode 100644 index 0000000..afe05ba --- /dev/null +++ b/app/Ship/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts() + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Ship/Middleware/TrustProxies.php b/app/Ship/Middleware/TrustProxies.php new file mode 100644 index 0000000..4b6f680 --- /dev/null +++ b/app/Ship/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/app/Ship/Middleware/ValidateSignature.php b/app/Ship/Middleware/ValidateSignature.php new file mode 100644 index 0000000..06f662d --- /dev/null +++ b/app/Ship/Middleware/ValidateSignature.php @@ -0,0 +1,22 @@ + + */ + protected $except = [ + // 'fbclid', + // 'utm_campaign', + // 'utm_content', + // 'utm_medium', + // 'utm_source', + // 'utm_term', + ]; +} diff --git a/app/Ship/Middleware/VerifyCsrfToken.php b/app/Ship/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..00e03dd --- /dev/null +++ b/app/Ship/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Ship/Models/Builder.php b/app/Ship/Models/Builder.php new file mode 100644 index 0000000..c6750d6 --- /dev/null +++ b/app/Ship/Models/Builder.php @@ -0,0 +1,10 @@ + + */ + protected $fillable = [ + 'name', + 'email', + 'password', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + ]; + + protected static function booted(): void + { + if (config('filament-shield.dashboard_user.enabled', false)) { + FilamentShield::createRole(name: config('filament-shield.dashboard_user.name', 'dashboard_user')); + FilamentShield::createRole(name: config('', 'editor')); + static::created(function (User $user) { + $user->assignRole(config('filament-shield.dashboard_user.name', 'dashboard_user')); + }); + static::deleting(function (User $user) { + $user->assignRole(config('filament-shield.dashboard_user.name', 'dashboard_user')); + }); + } + } + public function canAccessPanel(Panel|\Filament\Panel $panel): bool + { + return match ($panel->getId()) { + "admin" => $this->hasRole(Utils::getSuperAdminName()), + "dashboard" => $this->hasRole(config('filament-shield.dashboard_user.name', 'dashboard_user')) + || $this->hasRole(Utils::getSuperAdminName()) + || $this->hasRole(config('filament-shield.invited_user.name', 'invited_user')), + default => false, + }; + } +} diff --git a/app/Ship/Notifications/Messages/MailMessage.php b/app/Ship/Notifications/Messages/MailMessage.php new file mode 100644 index 0000000..57a0d77 --- /dev/null +++ b/app/Ship/Notifications/Messages/MailMessage.php @@ -0,0 +1,10 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Ship/Providers/BroadcastServiceProvider.php b/app/Ship/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..51165a6 --- /dev/null +++ b/app/Ship/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } + + /** + * Determine if events and listeners should be automatically discovered. + * + * @return bool + */ + public function shouldDiscoverEvents() + { + return false; + } +} diff --git a/app/Ship/Providers/RouteServiceProvider.php b/app/Ship/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..6c21b55 --- /dev/null +++ b/app/Ship/Providers/RouteServiceProvider.php @@ -0,0 +1,30 @@ +seo?->toArray(); + } + public function getSeoForCurrentPage(): array|null + { + $path = $this->getCurrentPath(); + + $page = Cache::remember( + CacheKeys::PAGE_PREFIX->value . $path, + now()->addHours(1), + fn() => Page::where('path', $path)->first() + ); + + if ($page && $page->seo) { + return $page->seo->toArray(); + } + + return null; + } + + private function getCurrentPath(): string + { + if (Route::currentRouteName() === 'page.view') { + return request()->path(); + } + + $routeUrl = route(Route::currentRouteName()); + return ltrim(parse_url($routeUrl, PHP_URL_PATH), '/'); + } +} \ No newline at end of file diff --git a/app/Ship/Tests/TestCase.php b/app/Ship/Tests/TestCase.php new file mode 100644 index 0000000..d1fe8c3 --- /dev/null +++ b/app/Ship/Tests/TestCase.php @@ -0,0 +1,11 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/app/Ship/Traits/HasSeo.php b/app/Ship/Traits/HasSeo.php new file mode 100644 index 0000000..e047468 --- /dev/null +++ b/app/Ship/Traits/HasSeo.php @@ -0,0 +1,15 @@ +morphOne(Seo::class, 'seoable'); + } +} \ No newline at end of file diff --git a/bootstrap/app.php b/bootstrap/app.php index f46e391..c9c04d5 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -28,18 +28,18 @@ $app = new Illuminate\Foundation\Application( $app->singleton( Illuminate\Contracts\Http\Kernel::class, - App\Http\Kernel::class -); + App\Ship\Kernels\HttpKernel::class + ); -$app->singleton( - Illuminate\Contracts\Console\Kernel::class, - App\Console\Kernel::class -); + $app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Ship\Kernels\ConsoleKernel::class + ); -$app->singleton( - Illuminate\Contracts\Debug\ExceptionHandler::class, - App\Exceptions\Handler::class -); + $app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Ship\Exceptions\Handler::class + ); /* diff --git a/composer.json b/composer.json index f17d195..ae5c494 100644 --- a/composer.json +++ b/composer.json @@ -9,12 +9,12 @@ "ext-curl": "*", "ext-zip": "*", "alxdorosenco/porto-for-laravel": "^10.0", - "askerakbar/checkpoint": "^0.0.1", - "awcodes/filament-tiptap-editor": "^3.0", - "bezhansalleh/filament-shield": "^3.2", - "filament/filament": "^3.0-stable", - "filament/spatie-laravel-tags-plugin": "^3.2", - "guava/filament-icon-picker": "^2.0", + "awcodes/filament-tiptap-editor": "3.4.16", + "bezhansalleh/filament-shield": "3.2.6", + "filament/filament": "v3.2.127", + "filament/spatie-laravel-settings-plugin": "^3.2", + "filament/spatie-laravel-tags-plugin": "v3.2.113", + "guava/filament-icon-picker": "2.2.4", "guzzlehttp/guzzle": "^7.8", "imangazaliev/didom": "^2.0", "inertiajs/inertia-laravel": "^2.0", @@ -23,17 +23,17 @@ "laravel/framework": "^10.10", "laravel/sanctum": "^3.2", "laravel/tinker": "^2.8", - "mohamedsabil83/filament-forms-tinyeditor": "^2.3", + "mohamedsabil83/filament-forms-tinyeditor": "v2.3.3", "nesbot/carbon": "^2.71", "opcodesio/log-viewer": "^3.15", "predis/predis": "^2.3", "protonemedia/laravel-cross-eloquent-search": "^3.4", - "pxlrbt/filament-excel": "^2.3", - "shuvroroy/filament-spatie-laravel-backup": "^2.2", + "pxlrbt/filament-excel": "v2.3.4", + "shuvroroy/filament-spatie-laravel-backup": "v2.2.3", "spatie/laravel-sitemap": "^7.2", "symfony/filesystem": "^6.3", "tightenco/ziggy": "^1.0", - "tomatophp/filament-icons": "^1.1", + "tomatophp/filament-icons": "v1.1.4", "vkcom/vk-php-sdk": "^5.131", "xvladqt/faker-lorem-flickr": "^1.0", "yepsua/filament-range-field": "^0.3.4" diff --git a/composer.lock b/composer.lock index b238503..d254b0b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3e91b6e2e45dde3f5e5667344fe15d7c", + "content-hash": "46d10b4875c40f8c0425ba3eab11c904", "packages": [ { "name": "alxdorosenco/porto-for-laravel", @@ -134,90 +134,27 @@ }, "time": "2025-04-06T06:54:34+00:00" }, - { - "name": "askerakbar/checkpoint", - "version": "0.0.1", - "source": { - "type": "git", - "url": "https://github.com/askerakbar/checkpoint.git", - "reference": "29bd6842b4a6286e7a29b149c15a7ff2a3cf029f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/askerakbar/checkpoint/zipball/29bd6842b4a6286e7a29b149c15a7ff2a3cf029f", - "reference": "29bd6842b4a6286e7a29b149c15a7ff2a3cf029f", - "shasum": "" - }, - "require": { - "filament/notifications": "3.x-dev", - "filament/spatie-laravel-settings-plugin": "3.x-dev", - "php": "^8.1" - }, - "require-dev": { - "laravel/pint": "dev-main", - "orchestra/testbench": "9.x-dev", - "pestphp/pest": "3.x-dev", - "pestphp/pest-plugin-laravel": "3.x-dev", - "pestphp/pest-plugin-livewire": "3.x-dev" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "AskerAkbar\\Checkpoint\\CheckpointServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "AskerAkbar\\Checkpoint\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Asker Akbar", - "homepage": "https://github.com/askerakbar", - "role": "Developer" - } - ], - "description": "This Filament PHP plugin improves login security by letting you customize rate-limiting settings like duration and the number of attempts. It also notifies admins about suspicious activity", - "homepage": "https://github.com/askerakbar/checkpoint/", - "keywords": [ - "auth-notifications", - "filament", - "filament-auth" - ], - "support": { - "issues": "https://github.com/askerakbar/checkpoint/issues", - "source": "https://github.com/askerakbar/checkpoint/tree/0.0.1" - }, - "time": "2024-10-08T06:51:03+00:00" - }, { "name": "awcodes/filament-tiptap-editor", - "version": "v3.5.13", + "version": "v3.4.16", "source": { "type": "git", "url": "https://github.com/awcodes/filament-tiptap-editor.git", - "reference": "17684330a0bc0e9cfbd40a1de89efea6f635ef74" + "reference": "fef63d8e04776299470892735a329568c1743f54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awcodes/filament-tiptap-editor/zipball/17684330a0bc0e9cfbd40a1de89efea6f635ef74", - "reference": "17684330a0bc0e9cfbd40a1de89efea6f635ef74", + "url": "https://api.github.com/repos/awcodes/filament-tiptap-editor/zipball/fef63d8e04776299470892735a329568c1743f54", + "reference": "fef63d8e04776299470892735a329568c1743f54", "shasum": "" }, "require": { - "filament/filament": "^3.2.138", "php": "^8.1", "spatie/laravel-package-tools": "^1.9.2", "ueberdosis/tiptap-php": "^1.1" }, "require-dev": { + "filament/filament": "^3.0", "laravel/pint": "^1.0", "nunomaduro/collision": "^7.0", "orchestra/testbench": "^8.0", @@ -269,7 +206,7 @@ ], "support": { "issues": "https://github.com/awcodes/filament-tiptap-editor/issues", - "source": "https://github.com/awcodes/filament-tiptap-editor/tree/v3.5.13" + "source": "https://github.com/awcodes/filament-tiptap-editor/tree/v3.4.16" }, "funding": [ { @@ -277,20 +214,20 @@ "type": "github" } ], - "time": "2025-05-05T14:04:37+00:00" + "time": "2024-09-21T17:01:40+00:00" }, { "name": "bezhansalleh/filament-shield", - "version": "3.3.6", + "version": "3.2.6", "source": { "type": "git", "url": "https://github.com/bezhanSalleh/filament-shield.git", - "reference": "f77e4a47a4c411ca973e1964dbc1f963dd09e1c4" + "reference": "212428385855256d5499b02b6148b7c9eaa1b1fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bezhanSalleh/filament-shield/zipball/f77e4a47a4c411ca973e1964dbc1f963dd09e1c4", - "reference": "f77e4a47a4c411ca973e1964dbc1f963dd09e1c4", + "url": "https://api.github.com/repos/bezhanSalleh/filament-shield/zipball/212428385855256d5499b02b6148b7c9eaa1b1fb", + "reference": "212428385855256d5499b02b6148b7c9eaa1b1fb", "shasum": "" }, "require": { @@ -309,8 +246,7 @@ "phpstan/extension-installer": "^1.3", "phpstan/phpstan-deprecation-rules": "^1.1", "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^10.1", - "spatie/laravel-ray": "^1.37" + "phpunit/phpunit": "^10.1" }, "type": "library", "extra": { @@ -356,7 +292,7 @@ ], "support": { "issues": "https://github.com/bezhanSalleh/filament-shield/issues", - "source": "https://github.com/bezhanSalleh/filament-shield/tree/3.3.6" + "source": "https://github.com/bezhanSalleh/filament-shield/tree/3.2.6" }, "funding": [ { @@ -364,7 +300,7 @@ "type": "github" } ], - "time": "2025-05-03T02:31:53+00:00" + "time": "2024-09-02T14:20:04+00:00" }, { "name": "blade-ui-kit/blade-heroicons", @@ -912,27 +848,27 @@ }, { "name": "danharrin/livewire-rate-limiting", - "version": "v2.1.0", + "version": "v1.3.1", "source": { "type": "git", "url": "https://github.com/danharrin/livewire-rate-limiting.git", - "reference": "14dde653a9ae8f38af07a0ba4921dc046235e1a0" + "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/14dde653a9ae8f38af07a0ba4921dc046235e1a0", - "reference": "14dde653a9ae8f38af07a0ba4921dc046235e1a0", + "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", + "reference": "1a1b299e20de61f88ed6e94ea0bbcfc33aab1ddb", "shasum": "" }, "require": { - "illuminate/support": "^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^9.0|^10.0|^11.0", "php": "^8.0" }, "require-dev": { "livewire/livewire": "^3.0", "livewire/volt": "^1.3", - "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", - "phpunit/phpunit": "^9.0|^10.0|^11.5.3" + "orchestra/testbench": "^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.0|^10.0" }, "type": "library", "autoload": { @@ -962,7 +898,7 @@ "type": "github" } ], - "time": "2025-02-21T08:52:11+00:00" + "time": "2024-05-06T09:10:03+00:00" }, { "name": "dflydev/dot-access-data", @@ -1808,16 +1744,16 @@ }, { "name": "filament/actions", - "version": "3.x-dev", + "version": "v3.2.127", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", - "reference": "08caa8dec43ebf4192dcd999cca786656a3dbc90" + "reference": "f325e315c365cfcea5c9da96662ddea37e3663fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/08caa8dec43ebf4192dcd999cca786656a3dbc90", - "reference": "08caa8dec43ebf4192dcd999cca786656a3dbc90", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/f325e315c365cfcea5c9da96662ddea37e3663fc", + "reference": "f325e315c365cfcea5c9da96662ddea37e3663fc", "shasum": "" }, "require": { @@ -1826,15 +1762,14 @@ "filament/infolists": "self.version", "filament/notifications": "self.version", "filament/support": "self.version", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/database": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "league/csv": "^9.16", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "league/csv": "^9.14", "openspout/openspout": "^4.23", "php": "^8.1", "spatie/laravel-package-tools": "^1.9" }, - "default-branch": true, "type": "library", "extra": { "laravel": { @@ -1858,24 +1793,24 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-04-30T09:16:43+00:00" + "time": "2024-11-29T09:30:57+00:00" }, { "name": "filament/filament", - "version": "3.x-dev", + "version": "v3.2.127", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "2c4783bdd973967cc2dbc2dc518c70b04839ace3" + "reference": "4aea767e8c872842b624fe47affe078433111259" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/2c4783bdd973967cc2dbc2dc518c70b04839ace3", - "reference": "2c4783bdd973967cc2dbc2dc518c70b04839ace3", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/4aea767e8c872842b624fe47affe078433111259", + "reference": "4aea767e8c872842b624fe47affe078433111259", "shasum": "" }, "require": { - "danharrin/livewire-rate-limiting": "^0.3|^1.0|^2.0", + "danharrin/livewire-rate-limiting": "^0.3|^1.0", "filament/actions": "self.version", "filament/forms": "self.version", "filament/infolists": "self.version", @@ -1883,20 +1818,19 @@ "filament/support": "self.version", "filament/tables": "self.version", "filament/widgets": "self.version", - "illuminate/auth": "^10.45|^11.0|^12.0", - "illuminate/console": "^10.45|^11.0|^12.0", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/cookie": "^10.45|^11.0|^12.0", - "illuminate/database": "^10.45|^11.0|^12.0", - "illuminate/http": "^10.45|^11.0|^12.0", - "illuminate/routing": "^10.45|^11.0|^12.0", - "illuminate/session": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "illuminate/view": "^10.45|^11.0|^12.0", + "illuminate/auth": "^10.45|^11.0", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/cookie": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/http": "^10.45|^11.0", + "illuminate/routing": "^10.45|^11.0", + "illuminate/session": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", "php": "^8.1", "spatie/laravel-package-tools": "^1.9" }, - "default-branch": true, "type": "library", "extra": { "laravel": { @@ -1924,37 +1858,36 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-04-30T09:16:38+00:00" + "time": "2024-11-29T09:30:58+00:00" }, { "name": "filament/forms", - "version": "3.x-dev", + "version": "v3.2.127", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "22e62dc2b4c68018e9846aadf7e8c5310d0e38cf" + "reference": "c78071f1aabb63a0d9bf74268005d3294b61dc2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/22e62dc2b4c68018e9846aadf7e8c5310d0e38cf", - "reference": "22e62dc2b4c68018e9846aadf7e8c5310d0e38cf", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/c78071f1aabb63a0d9bf74268005d3294b61dc2a", + "reference": "c78071f1aabb63a0d9bf74268005d3294b61dc2a", "shasum": "" }, "require": { "danharrin/date-format-converter": "^0.3", "filament/actions": "self.version", "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0|^12.0", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/database": "^10.45|^11.0|^12.0", - "illuminate/filesystem": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "illuminate/validation": "^10.45|^11.0|^12.0", - "illuminate/view": "^10.45|^11.0|^12.0", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/validation": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", "php": "^8.1", "spatie/laravel-package-tools": "^1.9" }, - "default-branch": true, "type": "library", "extra": { "laravel": { @@ -1981,35 +1914,34 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-04-30T09:16:39+00:00" + "time": "2024-11-29T09:30:53+00:00" }, { "name": "filament/infolists", - "version": "3.x-dev", + "version": "v3.2.127", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", - "reference": "cc71f1c15f132660986384d302a33a2b20618a96" + "reference": "e655ac3900ab2109022aa0243cfb4126729ef431" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/infolists/zipball/cc71f1c15f132660986384d302a33a2b20618a96", - "reference": "cc71f1c15f132660986384d302a33a2b20618a96", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/e655ac3900ab2109022aa0243cfb4126729ef431", + "reference": "e655ac3900ab2109022aa0243cfb4126729ef431", "shasum": "" }, "require": { "filament/actions": "self.version", "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0|^12.0", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/database": "^10.45|^11.0|^12.0", - "illuminate/filesystem": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "illuminate/view": "^10.45|^11.0|^12.0", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", "php": "^8.1", "spatie/laravel-package-tools": "^1.9" }, - "default-branch": true, "type": "library", "extra": { "laravel": { @@ -2033,33 +1965,32 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-04-23T06:39:44+00:00" + "time": "2024-11-29T09:30:56+00:00" }, { "name": "filament/notifications", - "version": "3.x-dev", + "version": "v3.2.127", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", - "reference": "edf7960621b2181b4c2fc040b0712fbd5dd036ef" + "reference": "c19df07c801c5550de0d30957c5a316f53019533" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/notifications/zipball/edf7960621b2181b4c2fc040b0712fbd5dd036ef", - "reference": "edf7960621b2181b4c2fc040b0712fbd5dd036ef", + "url": "https://api.github.com/repos/filamentphp/notifications/zipball/c19df07c801c5550de0d30957c5a316f53019533", + "reference": "c19df07c801c5550de0d30957c5a316f53019533", "shasum": "" }, "require": { "filament/actions": "self.version", "filament/support": "self.version", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/filesystem": "^10.45|^11.0|^12.0", - "illuminate/notifications": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/notifications": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", "php": "^8.1", "spatie/laravel-package-tools": "^1.9" }, - "default-branch": true, "type": "library", "extra": { "laravel": { @@ -2086,31 +2017,30 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-04-23T06:39:49+00:00" + "time": "2024-10-23T07:36:14+00:00" }, { "name": "filament/spatie-laravel-settings-plugin", - "version": "3.x-dev", + "version": "v3.2.127", "source": { "type": "git", "url": "https://github.com/filamentphp/spatie-laravel-settings-plugin.git", - "reference": "80c9e960b30890fdc731da262b71255cb39bee31" + "reference": "8d9f1a19147e2cf765d353bb7250f92f866fc78f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/spatie-laravel-settings-plugin/zipball/80c9e960b30890fdc731da262b71255cb39bee31", - "reference": "80c9e960b30890fdc731da262b71255cb39bee31", + "url": "https://api.github.com/repos/filamentphp/spatie-laravel-settings-plugin/zipball/8d9f1a19147e2cf765d353bb7250f92f866fc78f", + "reference": "8d9f1a19147e2cf765d353bb7250f92f866fc78f", "shasum": "" }, "require": { "filament/filament": "self.version", - "illuminate/console": "^10.45|^11.0|^12.0", - "illuminate/filesystem": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", + "illuminate/console": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", "php": "^8.1", "spatie/laravel-settings": "^2.2|^3.0" }, - "default-branch": true, "type": "library", "extra": { "laravel": { @@ -2134,24 +2064,24 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-04-23T06:39:48+00:00" + "time": "2024-10-16T12:07:29+00:00" }, { "name": "filament/spatie-laravel-tags-plugin", - "version": "v3.3.14", + "version": "v3.2.113", "source": { "type": "git", "url": "https://github.com/filamentphp/spatie-laravel-tags-plugin.git", - "reference": "c604cb09809f4c54503bd9bbbf53eb1749bd99f1" + "reference": "09a85ce068e7466e9aabe7d27a3acd1b1f7adab2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/spatie-laravel-tags-plugin/zipball/c604cb09809f4c54503bd9bbbf53eb1749bd99f1", - "reference": "c604cb09809f4c54503bd9bbbf53eb1749bd99f1", + "url": "https://api.github.com/repos/filamentphp/spatie-laravel-tags-plugin/zipball/09a85ce068e7466e9aabe7d27a3acd1b1f7adab2", + "reference": "09a85ce068e7466e9aabe7d27a3acd1b1f7adab2", "shasum": "" }, "require": { - "illuminate/database": "^10.45|^11.0|^12.0", + "illuminate/database": "^10.45|^11.0", "php": "^8.1", "spatie/laravel-tags": "^4.0" }, @@ -2171,31 +2101,31 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-04-30T09:16:35+00:00" + "time": "2024-07-31T11:53:24+00:00" }, { "name": "filament/support", - "version": "3.x-dev", + "version": "v3.2.127", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", - "reference": "0ab49fdb2bc937257d6f8e1f7b97a03216a43656" + "reference": "a720fb2508a1d84a9b35aedc9991d4b53d18fea6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/0ab49fdb2bc937257d6f8e1f7b97a03216a43656", - "reference": "0ab49fdb2bc937257d6f8e1f7b97a03216a43656", + "url": "https://api.github.com/repos/filamentphp/support/zipball/a720fb2508a1d84a9b35aedc9991d4b53d18fea6", + "reference": "a720fb2508a1d84a9b35aedc9991d4b53d18fea6", "shasum": "" }, "require": { "blade-ui-kit/blade-heroicons": "^2.5", "doctrine/dbal": "^3.2|^4.0", "ext-intl": "*", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "illuminate/view": "^10.45|^11.0|^12.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", "kirschbaum-development/eloquent-power-joins": "^3.0|^4.0", - "livewire/livewire": "^3.5", + "livewire/livewire": "3.5.12", "php": "^8.1", "ryangjchandler/blade-capture-directive": "^0.2|^0.3|^1.0", "spatie/color": "^1.5", @@ -2204,7 +2134,6 @@ "symfony/console": "^6.0|^7.0", "symfony/html-sanitizer": "^6.1|^7.0" }, - "default-branch": true, "type": "library", "extra": { "laravel": { @@ -2231,36 +2160,35 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-04-30T09:16:34+00:00" + "time": "2024-11-29T09:31:13+00:00" }, { "name": "filament/tables", - "version": "3.x-dev", + "version": "v3.2.127", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", - "reference": "bb5fad7306c39fdbb08d97982073114ac465bf92" + "reference": "c287a68e084c96c3f2991eaddf1d6b5159af5147" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/bb5fad7306c39fdbb08d97982073114ac465bf92", - "reference": "bb5fad7306c39fdbb08d97982073114ac465bf92", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/c287a68e084c96c3f2991eaddf1d6b5159af5147", + "reference": "c287a68e084c96c3f2991eaddf1d6b5159af5147", "shasum": "" }, "require": { "filament/actions": "self.version", "filament/forms": "self.version", "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0|^12.0", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/database": "^10.45|^11.0|^12.0", - "illuminate/filesystem": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "illuminate/view": "^10.45|^11.0|^12.0", + "illuminate/console": "^10.45|^11.0", + "illuminate/contracts": "^10.45|^11.0", + "illuminate/database": "^10.45|^11.0", + "illuminate/filesystem": "^10.45|^11.0", + "illuminate/support": "^10.45|^11.0", + "illuminate/view": "^10.45|^11.0", "php": "^8.1", "spatie/laravel-package-tools": "^1.9" }, - "default-branch": true, "type": "library", "extra": { "laravel": { @@ -2284,20 +2212,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-04-30T09:16:33+00:00" + "time": "2024-11-30T09:21:26+00:00" }, { "name": "filament/widgets", - "version": "3.x-dev", + "version": "v3.2.127", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", - "reference": "048c5a4bf0477efbe2910c54a1aeb55c64cf1348" + "reference": "6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/widgets/zipball/048c5a4bf0477efbe2910c54a1aeb55c64cf1348", - "reference": "048c5a4bf0477efbe2910c54a1aeb55c64cf1348", + "url": "https://api.github.com/repos/filamentphp/widgets/zipball/6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55", + "reference": "6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55", "shasum": "" }, "require": { @@ -2305,7 +2233,6 @@ "php": "^8.1", "spatie/laravel-package-tools": "^1.9" }, - "default-branch": true, "type": "library", "extra": { "laravel": { @@ -2329,7 +2256,7 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-04-23T06:39:59+00:00" + "time": "2024-11-27T16:52:29+00:00" }, { "name": "fruitcake/php-cors", @@ -2466,20 +2393,21 @@ }, { "name": "guava/filament-icon-picker", - "version": "2.3.0", + "version": "2.2.4", "source": { "type": "git", "url": "https://github.com/lukas-frey/filament-icon-picker.git", - "reference": "123543b4d62653180fed47c11fce7caa0f00a5e9" + "reference": "ed309fee35e9566356d67635176af2f312fa687b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lukas-frey/filament-icon-picker/zipball/123543b4d62653180fed47c11fce7caa0f00a5e9", - "reference": "123543b4d62653180fed47c11fce7caa0f00a5e9", + "url": "https://api.github.com/repos/lukas-frey/filament-icon-picker/zipball/ed309fee35e9566356d67635176af2f312fa687b", + "reference": "ed309fee35e9566356d67635176af2f312fa687b", "shasum": "" }, "require": { "filament/filament": "^3.0@stable", + "illuminate/contracts": "^9.0|^10.0|^11.0", "php": "^8.0" }, "require-dev": { @@ -2511,7 +2439,7 @@ "description": "A filament plugin that adds an icon picker field.", "support": { "issues": "https://github.com/lukas-frey/filament-icon-picker/issues", - "source": "https://github.com/lukas-frey/filament-icon-picker/tree/2.3.0" + "source": "https://github.com/lukas-frey/filament-icon-picker/tree/2.2.4" }, "funding": [ { @@ -2519,7 +2447,7 @@ "type": "github" } ], - "time": "2025-02-25T19:08:20+00:00" + "time": "2024-06-27T07:07:31+00:00" }, { "name": "guzzlehttp/guzzle", @@ -3138,24 +3066,24 @@ }, { "name": "joshembling/image-optimizer", - "version": "v1.6.0", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/joshembling/image-optimizer.git", - "reference": "ba942b01aec16fbd2c9fdfabe239cf4c8f7ba63e" + "reference": "a7bc45d2b86098639c0ce3c382a47a35ff9a1d0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/joshembling/image-optimizer/zipball/ba942b01aec16fbd2c9fdfabe239cf4c8f7ba63e", - "reference": "ba942b01aec16fbd2c9fdfabe239cf4c8f7ba63e", + "url": "https://api.github.com/repos/joshembling/image-optimizer/zipball/a7bc45d2b86098639c0ce3c382a47a35ff9a1d0d", + "reference": "a7bc45d2b86098639c0ce3c382a47a35ff9a1d0d", "shasum": "" }, "require": { - "filament/forms": "^3.3", - "illuminate/contracts": "^10.0|^11.0|^12.0", + "filament/forms": "^3.0", + "illuminate/contracts": "^10.0|^11.0", "intervention/image": "^2.7", "php": "^8.2", - "spatie/laravel-package-tools": "^1.19.0" + "spatie/laravel-package-tools": "^1.15.0" }, "require-dev": { "laravel/pint": "^1.0", @@ -3210,7 +3138,7 @@ "type": "github" } ], - "time": "2025-03-08T16:55:23+00:00" + "time": "2025-02-24T14:07:06+00:00" }, { "name": "kirschbaum-development/eloquent-power-joins", @@ -4377,23 +4305,23 @@ }, { "name": "livewire/livewire", - "version": "v3.6.3", + "version": "v3.5.12", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "56aa1bb63a46e06181c56fa64717a7287e19115e" + "reference": "3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/56aa1bb63a46e06181c56fa64717a7287e19115e", - "reference": "56aa1bb63a46e06181c56fa64717a7287e19115e", + "url": "https://api.github.com/repos/livewire/livewire/zipball/3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d", + "reference": "3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d", "shasum": "" }, "require": { - "illuminate/database": "^10.0|^11.0|^12.0", - "illuminate/routing": "^10.0|^11.0|^12.0", - "illuminate/support": "^10.0|^11.0|^12.0", - "illuminate/validation": "^10.0|^11.0|^12.0", + "illuminate/database": "^10.0|^11.0", + "illuminate/routing": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "illuminate/validation": "^10.0|^11.0", "laravel/prompts": "^0.1.24|^0.2|^0.3", "league/mime-type-detection": "^1.9", "php": "^8.1", @@ -4402,11 +4330,11 @@ }, "require-dev": { "calebporzio/sushi": "^2.1", - "laravel/framework": "^10.15.0|^11.0|^12.0", + "laravel/framework": "^10.15.0|^11.0", "mockery/mockery": "^1.3.1", - "orchestra/testbench": "^8.21.0|^9.0|^10.0", - "orchestra/testbench-dusk": "^8.24|^9.1|^10.0", - "phpunit/phpunit": "^10.4|^11.5", + "orchestra/testbench": "^8.21.0|^9.0", + "orchestra/testbench-dusk": "^8.24|^9.1", + "phpunit/phpunit": "^10.4", "psy/psysh": "^0.11.22|^0.12" }, "type": "library", @@ -4441,7 +4369,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.6.3" + "source": "https://github.com/livewire/livewire/tree/v3.5.12" }, "funding": [ { @@ -4449,7 +4377,7 @@ "type": "github" } ], - "time": "2025-04-12T22:26:52+00:00" + "time": "2024-10-15T19:35:06+00:00" }, { "name": "maatwebsite/excel", @@ -4786,35 +4714,35 @@ }, { "name": "mohamedsabil83/filament-forms-tinyeditor", - "version": "v2.4.0", + "version": "v2.3.3", "source": { "type": "git", "url": "https://github.com/mohamedsabil83/filament-forms-tinyeditor.git", - "reference": "a6697e57113100583b3876f070a4425b172ba9b7" + "reference": "e2d85ba1a7360a8d633f9546bf60434b57f082fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mohamedsabil83/filament-forms-tinyeditor/zipball/a6697e57113100583b3876f070a4425b172ba9b7", - "reference": "a6697e57113100583b3876f070a4425b172ba9b7", + "url": "https://api.github.com/repos/mohamedsabil83/filament-forms-tinyeditor/zipball/e2d85ba1a7360a8d633f9546bf60434b57f082fe", + "reference": "e2d85ba1a7360a8d633f9546bf60434b57f082fe", "shasum": "" }, "require": { "filament/forms": "^3.0", - "illuminate/contracts": "^9.0 || ^10.0 || ^11.0 || ^12.0", + "illuminate/contracts": "^9.0|^10.0|^11.0", "php": "^8.1", "spatie/laravel-package-tools": "^1.14.0" }, "require-dev": { "larastan/larastan": "^2.2", "laravel/pint": "^1.0", - "nunomaduro/collision": "^7.0 || ^8.0", - "orchestra/testbench": "8.0 || ^9.0 || ^10.0", + "nunomaduro/collision": "^7.0|^8.0", + "orchestra/testbench": "8.0|^9.0", "pestphp/pest": "^2.0", "pestphp/pest-plugin-laravel": "^2.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", + "phpunit/phpunit": "^10.0|^11.0", "spatie/laravel-ray": "^1.26" }, "type": "library", @@ -4852,7 +4780,7 @@ ], "support": { "issues": "https://github.com/mohamedsabil83/filament-forms-tinyeditor/issues", - "source": "https://github.com/mohamedsabil83/filament-forms-tinyeditor/tree/v2.4.0" + "source": "https://github.com/mohamedsabil83/filament-forms-tinyeditor/tree/v2.3.3" }, "funding": [ { @@ -4864,7 +4792,7 @@ "type": "github" } ], - "time": "2025-02-26T11:52:24+00:00" + "time": "2024-10-13T12:50:56+00:00" }, { "name": "monolog/monolog", @@ -6663,16 +6591,16 @@ }, { "name": "pxlrbt/filament-excel", - "version": "v2.4.3", + "version": "v2.3.4", "source": { "type": "git", "url": "https://github.com/pxlrbt/filament-excel.git", - "reference": "3425500cfede8a9334a6a79f001b5a36a117ca6f" + "reference": "da3db3b77b5c06dd3ea8f02e3a5c690db2cfcfc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pxlrbt/filament-excel/zipball/3425500cfede8a9334a6a79f001b5a36a117ca6f", - "reference": "3425500cfede8a9334a6a79f001b5a36a117ca6f", + "url": "https://api.github.com/repos/pxlrbt/filament-excel/zipball/da3db3b77b5c06dd3ea8f02e3a5c690db2cfcfc7", + "reference": "da3db3b77b5c06dd3ea8f02e3a5c690db2cfcfc7", "shasum": "" }, "require": { @@ -6718,7 +6646,7 @@ ], "support": { "issues": "https://github.com/pxlrbt/filament-excel/issues", - "source": "https://github.com/pxlrbt/filament-excel/tree/v2.4.3" + "source": "https://github.com/pxlrbt/filament-excel/tree/v2.3.4" }, "funding": [ { @@ -6726,7 +6654,7 @@ "type": "github" } ], - "time": "2025-03-22T02:12:15+00:00" + "time": "2024-08-19T09:16:15+00:00" }, { "name": "ralouphie/getallheaders", @@ -7098,16 +7026,16 @@ }, { "name": "shuvroroy/filament-spatie-laravel-backup", - "version": "v2.2.4", + "version": "v2.2.3", "source": { "type": "git", "url": "https://github.com/shuvroroy/filament-spatie-laravel-backup.git", - "reference": "bd6c0079aec874f89e83d23ed5f96afb6bb97fb9" + "reference": "78d5d2de32c94edec280568140c4534e975a19a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shuvroroy/filament-spatie-laravel-backup/zipball/bd6c0079aec874f89e83d23ed5f96afb6bb97fb9", - "reference": "bd6c0079aec874f89e83d23ed5f96afb6bb97fb9", + "url": "https://api.github.com/repos/shuvroroy/filament-spatie-laravel-backup/zipball/78d5d2de32c94edec280568140c4534e975a19a9", + "reference": "78d5d2de32c94edec280568140c4534e975a19a9", "shasum": "" }, "require": { @@ -7118,16 +7046,16 @@ "spatie/laravel-package-tools": "^1.15" }, "require-dev": { - "larastan/larastan": "^2.9", "laravel/pint": "^1.0", - "nunomaduro/collision": "^8.1.1||^7.10.0", - "orchestra/testbench": "^9.0.0||^8.22.0", - "pestphp/pest": "^2.0||^3.0", - "pestphp/pest-plugin-arch": "^2.0||^3.0", - "pestphp/pest-plugin-laravel": "^2.0||^3.0", - "phpstan/extension-installer": "^1.3", - "phpstan/phpstan-deprecation-rules": "^1.1", - "phpstan/phpstan-phpunit": "^1.3" + "nunomaduro/collision": "^7.9", + "nunomaduro/larastan": "^2.0.1", + "orchestra/testbench": "^8.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-arch": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0" }, "type": "library", "extra": { @@ -7162,15 +7090,15 @@ ], "support": { "issues": "https://github.com/shuvroroy/filament-spatie-laravel-backup/issues", - "source": "https://github.com/shuvroroy/filament-spatie-laravel-backup/tree/v2.2.4" + "source": "https://github.com/shuvroroy/filament-spatie-laravel-backup/tree/v2.2.3" }, "funding": [ { - "url": "https://www.buymeacoffee.com/shuvroroy", - "type": "buy_me_a_coffee" + "url": "https://github.com/shuvroroy", + "type": "github" } ], - "time": "2025-01-22T05:39:31+00:00" + "time": "2024-10-20T12:11:50+00:00" }, { "name": "spatie/browsershot", @@ -10924,16 +10852,16 @@ }, { "name": "tomatophp/filament-icons", - "version": "v1.1.5", + "version": "v1.1.4", "source": { "type": "git", "url": "https://github.com/tomatophp/filament-icons.git", - "reference": "38339344651e3624b2eb9c7c5e42a2addb35a81b" + "reference": "fd9cd3d0741bb286a833f390e723f4d8f4004f27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tomatophp/filament-icons/zipball/38339344651e3624b2eb9c7c5e42a2addb35a81b", - "reference": "38339344651e3624b2eb9c7c5e42a2addb35a81b", + "url": "https://api.github.com/repos/tomatophp/filament-icons/zipball/fd9cd3d0741bb286a833f390e723f4d8f4004f27", + "reference": "fd9cd3d0741bb286a833f390e723f4d8f4004f27", "shasum": "" }, "require": { @@ -10977,7 +10905,7 @@ ], "support": { "issues": "https://github.com/tomatophp/filament-icons/issues", - "source": "https://github.com/tomatophp/filament-icons/tree/v1.1.5" + "source": "https://github.com/tomatophp/filament-icons/tree/v1.1.4" }, "funding": [ { @@ -10985,7 +10913,7 @@ "type": "github" } ], - "time": "2025-04-16T04:44:30+00:00" + "time": "2025-02-08T14:08:00+00:00" }, { "name": "ueberdosis/tiptap-php", diff --git a/config/auth.php b/config/auth.php index 9548c15..faff9ac 100644 --- a/config/auth.php +++ b/config/auth.php @@ -1,5 +1,7 @@ [ 'users' => [ 'driver' => 'eloquent', - 'model' => App\Models\User::class, + 'model' => User::class, ], // 'users' => [ diff --git a/config/filament-shield.php b/config/filament-shield.php index aab916a..14c9c5a 100644 --- a/config/filament-shield.php +++ b/config/filament-shield.php @@ -14,7 +14,7 @@ return [ ], 'auth_provider_model' => [ - 'fqcn' => 'App\\Models\\User', + 'fqcn' => 'App\\Containers\\User\\Models\\User', ], 'super_admin' => [ diff --git a/config/sanctum.php b/config/sanctum.php index 529cfdc..a467554 100644 --- a/config/sanctum.php +++ b/config/sanctum.php @@ -1,5 +1,7 @@ [ - 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, - 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + 'verify_csrf_token' => VerifyCsrfToken::class, + 'encrypt_cookies' => EncryptCookies::class, ], ]; diff --git a/database/factories/DepartmentFactory.php b/database/factories/DepartmentFactory.php index a7bdfd5..96c6b89 100644 --- a/database/factories/DepartmentFactory.php +++ b/database/factories/DepartmentFactory.php @@ -2,7 +2,7 @@ namespace Database\Factories; -use App\Models\Faculty; +use App\Containers\InstituteStructure\Models\Faculty; use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Support\Str; diff --git a/database/factories/EducationalGroupFactory.php b/database/factories/EducationalGroupFactory.php new file mode 100644 index 0000000..72da5bf --- /dev/null +++ b/database/factories/EducationalGroupFactory.php @@ -0,0 +1,21 @@ + $this->faker->words(3, true), + 'faculty_id' => \App\Models\Faculty::factory(), + 'education_form_id' => $this->faker->numberBetween(1, 3), + 'created_at' => $this->faker->dateTimeBetween('-1 year', 'now'), + 'updated_at' => $this->faker->dateTimeBetween('-1 year', 'now'), + ]; + } +} + + diff --git a/database/factories/EventFactory.php b/database/factories/EventFactory.php index 782563d..648bc1b 100644 --- a/database/factories/EventFactory.php +++ b/database/factories/EventFactory.php @@ -2,7 +2,7 @@ namespace Database\Factories; -use App\Models\EventCategory; +use App\Containers\Event\Models\EventCategory; use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Support\Str; diff --git a/database/factories/FacultyFactory.php b/database/factories/FacultyFactory.php index 06ea200..f680a07 100644 --- a/database/factories/FacultyFactory.php +++ b/database/factories/FacultyFactory.php @@ -35,6 +35,7 @@ class FacultyFactory extends Factory 'slug' => $slug, 'content' => $content, 'abbreviation' => $abbreviation, + 'is_active' => $this->faker->boolean(100), 'created_at' => now(), 'updated_at' => now(), ]; diff --git a/database/factories/PostFactory.php b/database/factories/PostFactory.php index de4884f..237cdb2 100644 --- a/database/factories/PostFactory.php +++ b/database/factories/PostFactory.php @@ -2,15 +2,12 @@ namespace Database\Factories; -use App\Enums\PostStatus; -use App\Models\Category; -use App\Models\User; +use App\Containers\Article\Enums\PostStatus; +use App\Containers\Article\Models\Category; +use App\Containers\User\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Support\Str; -/** - * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Post> - */ class PostFactory extends Factory { /** @@ -54,6 +51,7 @@ class PostFactory extends Factory 'status' => $status, 'authors' => $authors, 'images' => $images, + 'preview' => null, 'search_data' => $search_data, 'reading_time' => $reading_time, 'category_id' => $category_id, diff --git a/database/factories/ScheduleFactory.php b/database/factories/ScheduleFactory.php new file mode 100644 index 0000000..dd75b33 --- /dev/null +++ b/database/factories/ScheduleFactory.php @@ -0,0 +1,25 @@ +faker->unique()->word . '.pdf'; + + return [ + 'file' => [ + [ + 'title' => $this->faker->randomElement(['Обычное', 'Основное', 'Дополнительное', 'Экзаменационное']), + 'path' => 'schedules/' . $this->faker->slug . '-' . time() . '.pdf' + ] + ], + 'educational_group_id' => \App\Models\EducationalGroup::factory(), + 'created_at' => $this->faker->dateTimeBetween('-6 months', 'now'), + 'updated_at' => $this->faker->dateTimeBetween('-6 months', 'now'), + ]; + } +} \ No newline at end of file diff --git a/database/factories/UserDetailFactory.php b/database/factories/UserDetailFactory.php index 62ea816..1aa4344 100644 --- a/database/factories/UserDetailFactory.php +++ b/database/factories/UserDetailFactory.php @@ -2,7 +2,7 @@ namespace Database\Factories; -use App\Models\User; +use App\Containers\User\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; /** diff --git a/database/migrations/2024_07_29_132208_create_workers_departments_table.php b/database/migrations/2024_07_29_132208_create_workers_departments_table.php index e301995..db75552 100644 --- a/database/migrations/2024_07_29_132208_create_workers_departments_table.php +++ b/database/migrations/2024_07_29_132208_create_workers_departments_table.php @@ -1,7 +1,7 @@ 'Failj', // 'email' => 'Failj@bk.ru', // 'slug' => 'failj', // 'password' => "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi", // ]); - User::factory()->count(50)->has(UserDetail::factory())->create(); - EventCategory::factory()->count(10)->create(); - Category::factory()->count(80)->create(); +// User::factory()->count(50)->has(UserDetail::factory())->create(); +// EventCategory::factory()->count(10)->create(); +// Category::factory()->count(80)->create(); Post::factory()->count(1000)->create(); - Event::factory()->count(200)->create(); - Faculty::factory()->count(6)->create(); - Department::factory()->count(12)->create(); +// Event::factory()->count(200)->create(); + $faculties = Faculty::factory()->count(6)->create(); - for ($i = 0; $i < 20; $i++) { - DB::table('workers_departments')->insert([ - 'user_id' => User::inRandomOrder()->first()->id, - 'department_id' => Department::inRandomOrder()->first()->id, - 'position' => $faker->word, - 'created_at' => now(), - 'updated_at' => now(), - ]); - } - - for ($i = 0; $i < 20; $i++) { - DB::table('workers_faculties')->insert([ - 'user_id' => User::inRandomOrder()->first()->id, - 'faculty_id' => Faculty::inRandomOrder()->first()->id, - 'position' => $faker->word, - 'created_at' => now(), - 'updated_at' => now(), - ]); - } - - for ($i = 0; $i < 30; $i++) { - DB::table('teachers_departments')->insert([ - 'user_id' => User::inRandomOrder()->first()->id, - 'department_id' => Department::inRandomOrder()->first()->id, - 'teaching_position' => $faker->word, - 'created_at' => now(), - 'updated_at' => now(), - ]); - } - $this->call([RolesSeeder::class]); - $users = [ - [ - 'name' => 'Admin', - 'email' => 'Admin@mail.ru', - 'password' => 'R177p900', - 'role' => 'admin', - ], - [ - 'name' => 'John', - 'email' => 'Test@mail.ru', - 'password' => 'R177p900', - 'role' => 'user', - ] - ]; - foreach ($users as $user) { - $created_user = User::create([ - 'name' => $user['name'], - 'email' => $user['email'], - 'password' => Hash::make($user['password']), - ]); - $created_user->assignRole($user['role']); - } +// Затем создаем 40 групп, распределяя их по созданным факультетам + EducationalGroup::factory() + ->count(40) + ->sequence(fn () => [ + 'faculty_id' => $faculties->random()->id + ]) + ->has(Schedule::factory()->count(90 / 40)) // Распределяем 90 расписаний по 40 группам + ->create(); +// Department::factory()->count(12)->create(); +// +// for ($i = 0; $i < 20; $i++) { +// DB::table('workers_departments')->insert([ +// 'user_id' => User::inRandomOrder()->first()->id, +// 'department_id' => Department::inRandomOrder()->first()->id, +// 'position' => $faker->word, +// 'created_at' => now(), +// 'updated_at' => now(), +// ]); +// } +// +// for ($i = 0; $i < 20; $i++) { +// DB::table('workers_faculties')->insert([ +// 'user_id' => User::inRandomOrder()->first()->id, +// 'faculty_id' => Faculty::inRandomOrder()->first()->id, +// 'position' => $faker->word, +// 'created_at' => now(), +// 'updated_at' => now(), +// ]); +// } +// +// for ($i = 0; $i < 30; $i++) { +// DB::table('teachers_departments')->insert([ +// 'user_id' => User::inRandomOrder()->first()->id, +// 'department_id' => Department::inRandomOrder()->first()->id, +// 'teaching_position' => $faker->word, +// 'created_at' => now(), +// 'updated_at' => now(), +// ]); +// } +// $this->call([RolesSeeder::class]); +// $users = [ +// [ +// 'name' => 'Admin', +// 'email' => 'Admin@mail.ru', +// 'password' => 'R177p900', +// 'role' => 'admin', +// ], +// [ +// 'name' => 'John', +// 'email' => 'Test@mail.ru', +// 'password' => 'R177p900', +// 'role' => 'user', +// ] +// ]; +// foreach ($users as $user) { +// $created_user = User::create([ +// 'name' => $user['name'], +// 'email' => $user['email'], +// 'password' => Hash::make($user['password']), +// ]); +// $created_user->assignRole($user['role']); +// } } } diff --git a/docker-compose.yml b/docker-compose.yml index d532577..aaefa3a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,6 +8,7 @@ services: ports: - "80:80" container_name: ntspi-nginx + restart: always depends_on: - app env_file: diff --git a/public/css/filament/filament/app.css b/public/css/filament/filament/app.css index bb61be9..925c77d 100644 --- a/public/css/filament/filament/app.css +++ b/public/css/filament/filament/app.css @@ -1 +1 @@ -*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.13 | MIT License | https://tailwindcss.com*/*,:after,:before{border-color:rgba(var(--gray-200),1);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-400),1);opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-400),1);opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}@media (forced-colors:active) {[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root.dark{color-scheme:dark}[data-field-wrapper]{scroll-margin-top:8rem}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-inline-start-color:var(--tw-prose-quote-borders);border-inline-start-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-bottom:2em;margin-top:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);color:var(--tw-prose-kbd);font-family:inherit;font-size:.875em;font-weight:500;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;width:100%}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8571429em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-top:.1428571em;padding-inline-start:.3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-base{font-size:1rem;line-height:1.75}.prose-base :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose-base :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em}.prose-base :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.25em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose-base :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.5em;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose-base :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose-base :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose-base :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose-base :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-base :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose-base :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose-base :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(.prose-base>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(.prose-base>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(.prose-base>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose-base :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3em;margin-top:3em}.prose-base :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857}.prose-base :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose-base :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose-base :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose-base :where(.prose-base>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(.prose-base>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-start:1em}.prose-lg :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8888889em;padding-inline-end:.4444444em;padding-bottom:.2222222em;padding-top:.2222222em;padding-inline-start:.4444444em}.prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-lg :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8666667em}.prose-lg :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding-inline-end:1.5em;padding-bottom:1em;padding-top:1em;padding-inline-start:1.5em}.prose-lg :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(.prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(.prose-lg>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;padding-inline-start:1.5555556em}.prose-lg :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.prose-lg :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-inline-start:.75em}.prose-lg :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-top:.75em;padding-inline-start:.75em}.prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg :where(.prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(.prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-4{inset:1rem}.inset-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.inset-y-0{bottom:0;top:0}.-bottom-1\/2{bottom:-50%}.-top-1{top:-.25rem}.-top-1\/2{top:-50%}.-top-2{top:-.5rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-1\/2{bottom:50%}.end-0{inset-inline-end:0}.end-4{inset-inline-end:1rem}.end-6{inset-inline-end:1.5rem}.left-3{left:.75rem}.start-0{inset-inline-start:0}.start-full{inset-inline-start:100%}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-4{top:1rem}.top-6{top:1.5rem}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.col-\[--col-span-default\]{grid-column:var(--col-span-default)}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:var(--col-start-default)}.row-start-2{grid-row-start:2}.-m-0\.5{margin:-.125rem}.-m-1{margin:-.25rem}.-m-1\.5{margin:-.375rem}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.-m-3{margin:-.75rem}.-m-3\.5{margin:-.875rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.my-16{margin-bottom:4rem;margin-top:4rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-auto{margin-bottom:auto;margin-top:auto}.\!mt-0{margin-top:0!important}.-mb-4{margin-bottom:-1rem}.-mb-6{margin-bottom:-1.5rem}.-me-2{margin-inline-end:-.5rem}.-ms-0\.5{margin-inline-start:-.125rem}.-ms-1{margin-inline-start:-.25rem}.-ms-2{margin-inline-start:-.5rem}.-mt-3{margin-top:-.75rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.-mt-7{margin-top:-1.75rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.me-1{margin-inline-end:.25rem}.me-4{margin-inline-end:1rem}.me-6{margin-inline-end:1.5rem}.ml-auto{margin-left:auto}.ms-1{margin-inline-start:.25rem}.ms-auto{margin-inline-start:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.line-clamp-\[--line-clamp\]{-webkit-box-orient:vertical;-webkit-line-clamp:var(--line-clamp);display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.h-0{height:0}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[100dvh\],.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:24rem}.min-h-\[theme\(spacing\.48\)\]{min-height:12rem}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.min-w-\[theme\(spacing\.8\)\]{min-width:2rem}.\!max-w-2xl{max-width:42rem!important}.\!max-w-3xl{max-width:48rem!important}.\!max-w-4xl{max-width:56rem!important}.\!max-w-5xl{max-width:64rem!important}.\!max-w-6xl{max-width:72rem!important}.\!max-w-7xl{max-width:80rem!important}.\!max-w-\[14rem\]{max-width:14rem!important}.\!max-w-lg{max-width:32rem!important}.\!max-w-md{max-width:28rem!important}.\!max-w-sm{max-width:24rem!important}.\!max-w-xl{max-width:36rem!important}.\!max-w-xs{max-width:20rem!important}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-min{max-width:-moz-min-content;max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:1536px}.max-w-screen-lg{max-width:1024px}.max-w-screen-md{max-width:768px}.max-w-screen-sm{max-width:640px}.max-w-screen-xl{max-width:1280px}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-1\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/4{--tw-translate-x:-25%}.-translate-x-12{--tw-translate-x:-3rem}.-translate-x-12,.-translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-5{--tw-translate-x:-1.25rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-12{--tw-translate-y:-3rem}.-translate-y-12,.-translate-y-3\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-3\/4{--tw-translate-y:-75%}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-12{--tw-translate-x:3rem}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-5,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.translate-y-12{--tw-translate-y:3rem}.-rotate-180,.translate-y-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-180{--tw-rotate:-180deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-95,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize{resize:both}.scroll-mt-9{scroll-margin-top:2.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{-moz-columns:var(--cols-default);columns:var(--cols-default)}.break-inside-avoid{-moz-column-break-inside:avoid;break-inside:avoid}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:var(--cols-default)}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\2c minmax\(theme\(spacing\.7\)\2c 1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-6{row-gap:1.5rem}.gap-y-7{row-gap:1.75rem}.gap-y-8{row-gap:2rem}.gap-y-px{row-gap:1px}.-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.5rem*var(--tw-space-x-reverse))}.-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.75rem*var(--tw-space-x-reverse))}.-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1rem*var(--tw-space-x-reverse))}.-space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.25rem*var(--tw-space-x-reverse))}.-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.5rem*var(--tw-space-x-reverse))}.-space-x-7>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.75rem*var(--tw-space-x-reverse))}.-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-2rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-100),var(--tw-divide-opacity))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-200),var(--tw-divide-opacity))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x-\[0\.5px\]{border-left-width:.5px;border-right-width:.5px}.border-y{border-bottom-width:1px;border-top-width:1px}.\!border-t-0{border-top-width:0!important}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-e{border-inline-end-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.\!border-none{border-style:none!important}.border-none{border-style:none}.border-gray-100{--tw-border-opacity:1;border-color:rgba(var(--gray-100),var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(var(--gray-300),var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.border-primary-500{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.border-primary-600{--tw-border-opacity:1;border-color:rgba(var(--primary-600),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-t-gray-200{--tw-border-opacity:1;border-top-color:rgba(var(--gray-200),var(--tw-border-opacity))}.\!bg-gray-50{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))!important}.\!bg-gray-700{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-custom-100{--tw-bg-opacity:1;background-color:rgba(var(--c-100),var(--tw-bg-opacity))}.bg-custom-50{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(var(--gray-200),var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.bg-gray-950\/50{background-color:rgba(var(--gray-950),.5)}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/0{background-color:hsla(0,0%,100%,0)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.\!bg-none{background-image:none!important}.bg-cover{background-size:cover}.bg-center{background-position:50%}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pe-0{padding-inline-end:0}.pe-1{padding-inline-end:.25rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-6{padding-inline-end:1.5rem}.pe-8{padding-inline-end:2rem}.ps-0{padding-inline-start:0}.ps-1{padding-inline-start:.25rem}.ps-2{padding-inline-start:.5rem}.ps-3{padding-inline-start:.75rem}.ps-4{padding-inline-start:1rem}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-thin{font-weight:100}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-loose{line-height:2}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.text-custom-400{--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.text-custom-50{--tw-text-opacity:1;color:rgba(var(--c-50),var(--tw-text-opacity))}.text-custom-500{--tw-text-opacity:1;color:rgba(var(--c-500),var(--tw-text-opacity))}.text-custom-600{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.text-custom-700\/50{color:rgba(var(--c-700),.5)}.text-danger-600{--tw-text-opacity:1;color:rgba(var(--danger-600),var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgba(var(--gray-100),var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.text-gray-700\/50{color:rgba(var(--gray-700),.5)}.text-gray-950{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-0{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-custom-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.ring-custom-600\/10{--tw-ring-color:rgba(var(--c-600),0.1)}.ring-custom-600\/20{--tw-ring-color:rgba(var(--c-600),0.2)}.ring-danger-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-300),var(--tw-ring-opacity))}.ring-gray-600\/10{--tw-ring-color:rgba(var(--gray-600),0.1)}.ring-gray-900\/10{--tw-ring-color:rgba(var(--gray-900),0.1)}.ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}.ring-gray-950\/5{--tw-ring-color:rgba(var(--gray-950),0.05)}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-white\/10{--tw-ring-color:hsla(0,0%,100%,.1)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-100{transition-delay:.1s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[transform\:translateZ\(0\)\]{transform:translateZ(0)}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{bottom:0;content:var(--tw-content);top:0}.before\:start-0:before{content:var(--tw-content);inset-inline-start:0}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:bg-primary-600:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.first\:border-s-0:first-child{border-inline-start-width:0}.first\:border-t-0:first-child{border-top-width:0}.last\:border-e-0:last-child{border-inline-end-width:0}.first-of-type\:ps-1:first-of-type{padding-inline-start:.25rem}.last-of-type\:pe-1:last-of-type{padding-inline-end:.25rem}.checked\:ring-0:checked{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:bg-gray-50:focus-within{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:bg-custom-400\/10:hover{background-color:rgba(var(--c-400),.1)}.hover\:bg-custom-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.hover\:bg-gray-400\/10:hover{background-color:rgba(var(--gray-400),.1)}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:text-custom-600:hover{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.hover\:text-custom-700\/75:hover{color:rgba(var(--c-700),.75)}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.hover\:text-gray-700\/75:hover{color:rgba(var(--gray-700),.75)}.hover\:opacity-100:hover{opacity:1}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-danger-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.focus\:ring-primary-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px}.checked\:focus\:ring-danger-500\/50:focus:checked{--tw-ring-color:rgba(var(--danger-500),0.5)}.checked\:focus\:ring-primary-500\/50:focus:checked{--tw-ring-color:rgba(var(--primary-500),0.5)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-primary-500:focus-visible{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.focus-visible\:bg-custom-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.focus-visible\:bg-gray-100:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.focus-visible\:bg-gray-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.focus-visible\:text-custom-700\/75:focus-visible{color:rgba(var(--c-700),.75)}.focus-visible\:text-gray-500:focus-visible{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.focus-visible\:text-gray-700\/75:focus-visible{color:rgba(var(--gray-700),.75)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:ring-custom-500\/50:focus-visible{--tw-ring-color:rgba(var(--c-500),0.5)}.focus-visible\:ring-custom-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:rgba(var(--gray-400),0.4)}.focus-visible\:ring-primary-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.focus-visible\:ring-primary-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.disabled\:text-gray-50:disabled{--tw-text-opacity:1;color:rgba(var(--gray-50),var(--tw-text-opacity))}.disabled\:text-gray-500:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:rgba(var(--gray-500),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:checked\:bg-current:checked:disabled{background-color:currentColor}.disabled\:checked\:text-gray-400:checked:disabled{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group\/item:first-child .group-first\/item\:rounded-s-lg{border-end-start-radius:.5rem;border-start-start-radius:.5rem}.group\/item:last-child .group-last\/item\:rounded-e-lg{border-end-end-radius:.5rem;border-start-end-radius:.5rem}.group:hover .group-hover\:text-gray-500,.group\/button:hover .group-hover\/button\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:hover .group-hover\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:hover .group-hover\/item\:underline,.group\/link:hover .group-hover\/link\:underline{text-decoration-line:underline}.group:focus-visible .group-focus-visible\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:focus-visible .group-focus-visible\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:focus-visible .group-focus-visible\/item\:underline{text-decoration-line:underline}.group\/link:focus-visible .group-focus-visible\/link\:underline{text-decoration-line:underline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:divide-white\/10:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.1)}.dark\:divide-white\/5:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.05)}.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-700),var(--tw-border-opacity))}.dark\:border-primary-500:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.dark\:border-white\/10:is(.dark *){border-color:hsla(0,0%,100%,.1)}.dark\:border-white\/5:is(.dark *){border-color:hsla(0,0%,100%,.05)}.dark\:border-t-white\/10:is(.dark *){border-top-color:hsla(0,0%,100%,.1)}.dark\:\!bg-gray-700:is(.dark *){--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.dark\:bg-custom-400\/10:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.dark\:bg-custom-500\/20:is(.dark *){background-color:rgba(var(--c-500),.2)}.dark\:bg-gray-400\/10:is(.dark *){background-color:rgba(var(--gray-400),.1)}.dark\:bg-gray-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}.dark\:bg-gray-500\/20:is(.dark *){background-color:rgba(var(--gray-500),.2)}.dark\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.dark\:bg-gray-900\/30:is(.dark *){background-color:rgba(var(--gray-900),.3)}.dark\:bg-gray-950:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-950),var(--tw-bg-opacity))}.dark\:bg-gray-950\/75:is(.dark *){background-color:rgba(var(--gray-950),.75)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}.dark\:bg-primary-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:bg-white\/10:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:bg-white\/5:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:fill-current:is(.dark *){fill:currentColor}.dark\:text-custom-300\/50:is(.dark *){color:rgba(var(--c-300),.5)}.dark\:text-custom-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.dark\:text-custom-400\/10:is(.dark *){color:rgba(var(--c-400),.1)}.dark\:text-danger-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-400),var(--tw-text-opacity))}.dark\:text-danger-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-500),var(--tw-text-opacity))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.dark\:text-gray-300\/50:is(.dark *){color:rgba(var(--gray-300),.5)}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:text-gray-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.dark\:text-gray-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-800),var(--tw-text-opacity))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.dark\:text-primary-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:text-white\/5:is(.dark *){color:hsla(0,0%,100%,.05)}.dark\:ring-custom-400\/30:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.3)}.dark\:ring-custom-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}.dark\:ring-danger-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:ring-gray-400\/20:is(.dark *){--tw-ring-color:rgba(var(--gray-400),0.2)}.dark\:ring-gray-50\/10:is(.dark *){--tw-ring-color:rgba(var(--gray-50),0.1)}.dark\:ring-gray-700:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-700),var(--tw-ring-opacity))}.dark\:ring-gray-900:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-900),var(--tw-ring-opacity))}.dark\:ring-white\/10:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:placeholder\:text-gray-500:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:placeholder\:text-gray-500:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:before\:bg-primary-500:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.dark\:checked\:bg-danger-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--danger-500),var(--tw-bg-opacity))}.dark\:checked\:bg-primary-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.dark\:focus-within\:bg-white\/5:focus-within:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}.dark\:hover\:bg-custom-400\/10:hover:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:hover\:bg-white\/10:hover:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:hover\:bg-white\/5:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:text-custom-300:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-300),var(--tw-text-opacity))}.dark\:hover\:text-custom-300\/75:hover:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.dark\:hover\:text-gray-300\/75:hover:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:hover\:text-gray-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:hover\:ring-white\/20:hover:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:focus\:ring-danger-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:focus\:ring-primary-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.dark\:checked\:focus\:ring-danger-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--danger-400),0.5)}.dark\:checked\:focus\:ring-primary-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--primary-400),0.5)}.dark\:focus-visible\:border-primary-500:focus-visible:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.dark\:focus-visible\:bg-custom-400\/10:focus-visible:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:focus-visible\:bg-white\/5:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:focus-visible\:text-custom-300\/75:focus-visible:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:focus-visible\:text-gray-300\/75:focus-visible:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:focus-visible\:text-gray-400:focus-visible:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:focus-visible\:ring-custom-400\/50:focus-visible:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}.dark\:focus-visible\:ring-custom-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}.dark\:focus-visible\:ring-primary-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.dark\:disabled\:bg-transparent:disabled:is(.dark *){background-color:transparent}.dark\:disabled\:text-gray-400:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:disabled\:ring-white\/10:disabled:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled:is(.dark *){-webkit-text-fill-color:rgba(var(--gray-400),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:checked\:bg-gray-600:checked:disabled:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}.group\/button:hover .dark\:group-hover\/button\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group:hover .dark\:group-hover\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.group:hover .dark\:group-hover\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group:focus-visible .dark\:group-focus-visible\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.group:focus-visible .dark\:group-focus-visible\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.sm\:relative{position:relative}.sm\:inset-x-auto{left:auto;right:auto}.sm\:end-0{inset-inline-end:0}.sm\:col-\[--col-span-sm\]{grid-column:var(--col-span-sm)}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:var(--col-start-sm)}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.sm\:ms-auto{margin-inline-start:auto}.sm\:mt-7{margin-top:1.75rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:hidden{display:none}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:w-screen{width:100vw}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-4xl{max-width:56rem}.sm\:max-w-5xl{max-width:64rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-7xl{max-width:80rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:columns-\[--cols-sm\]{-moz-columns:var(--cols-sm);columns:var(--cols-sm)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[--cols-sm\]{grid-template-columns:var(--cols-sm)}.sm\:grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-1{gap:.25rem}.sm\:gap-3{gap:.75rem}.sm\:gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-10{padding:2.5rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.sm\:pe-3{padding-inline-end:.75rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:ps-3{padding-inline-start:.75rem}.sm\:ps-6{padding-inline-start:1.5rem}.sm\:pt-1\.5{padding-top:.375rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:leading-6{line-height:1.5rem}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:.75rem}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:1.5rem}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:.75rem}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:1.5rem}}@media (min-width:768px){.md\:bottom-4{bottom:1rem}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:var(--col-span-md)}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:var(--col-start-md)}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:inline-grid{display:inline-grid}.md\:hidden{display:none}.md\:w-max{width:-moz-max-content;width:max-content}.md\:max-w-60{max-width:15rem}.md\:columns-\[--cols-md\]{-moz-columns:var(--cols-md);columns:var(--cols-md)}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:var(--cols-md)}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}.md\:gap-1{gap:.25rem}.md\:gap-3{gap:.75rem}.md\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(0px*var(--tw-divide-y-reverse));border-top-width:calc(0px*(1 - var(--tw-divide-y-reverse)))}.md\:overflow-x-auto{overflow-x:auto}.md\:rounded-xl{border-radius:.75rem}.md\:p-20{padding:5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:pe-6{padding-inline-end:1.5rem}.md\:ps-3{padding-inline-start:.75rem}}@media (min-width:1024px){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:var(--col-span-lg)}.lg\:col-start-\[--col-start-lg\]{grid-column-start:var(--col-start-lg)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:table-cell{display:table-cell}.lg\:inline-grid{display:inline-grid}.lg\:hidden{display:none}.lg\:h-full{height:100%}.lg\:max-w-xs{max-width:20rem}.lg\:-translate-x-full{--tw-translate-x:-100%}.lg\:-translate-x-full,.lg\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:translate-x-0{--tw-translate-x:0px}.lg\:columns-\[--cols-lg\]{-moz-columns:var(--cols-lg);columns:var(--cols-lg)}.lg\:grid-cols-\[--cols-lg\]{grid-template-columns:var(--cols-lg)}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:gap-1{gap:.25rem}.lg\:gap-3{gap:.75rem}.lg\:bg-transparent{background-color:transparent}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pe-8{padding-inline-end:2rem}.lg\:shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.lg\:shadow-none,.lg\:shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lg\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lg\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}.dark\:lg\:bg-transparent:is(.dark *){background-color:transparent}}@media (min-width:1280px){.xl\:col-\[--col-span-xl\]{grid-column:var(--col-span-xl)}.xl\:col-start-\[--col-start-xl\]{grid-column-start:var(--col-start-xl)}.xl\:block{display:block}.xl\:table-cell{display:table-cell}.xl\:inline-grid{display:inline-grid}.xl\:hidden{display:none}.xl\:columns-\[--cols-xl\]{-moz-columns:var(--cols-xl);columns:var(--cols-xl)}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:var(--cols-xl)}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:gap-1{gap:.25rem}.xl\:gap-3{gap:.75rem}}@media (min-width:1536px){.\32xl\:col-\[--col-span-2xl\]{grid-column:var(--col-span-2xl)}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:var(--col-start-2xl)}.\32xl\:block{display:block}.\32xl\:table-cell{display:table-cell}.\32xl\:inline-grid{display:inline-grid}.\32xl\:hidden{display:none}.\32xl\:columns-\[--cols-2xl\]{-moz-columns:var(--cols-2xl);columns:var(--cols-2xl)}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:var(--cols-2xl)}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-start{align-items:flex-start}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-center{align-items:center}.\32xl\:gap-1{gap:.25rem}.\32xl\:gap-3{gap:.75rem}}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-5:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/2:where([dir=rtl],[dir=rtl] *){--tw-translate-x:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/4:where([dir=rtl],[dir=rtl] *){--tw-translate-x:25%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:flex-row-reverse:where([dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.rtl\:divide-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}@media (min-width:1024px){.rtl\:lg\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:lg\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}.\[\&\.trix-active\]\:bg-gray-50.trix-active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.\[\&\.trix-active\]\:text-primary-600.trix-active{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:\[\&\.trix-active\]\:text-primary-400.trix-active:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of .fi-btn)){--tw-shadow:-1px 0 0 0 rgba(var(--gray-200),1);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of .fi-btn)):is(.dark *){--tw-shadow:-1px 0 0 0 hsla(0,0%,100%,.2);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of .fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of .fi-btn){border-end-start-radius:.5rem;border-start-start-radius:.5rem}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of .fi-btn){border-end-end-radius:.5rem;border-start-end-radius:.5rem}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{bottom:0;content:var(--tw-content);top:0}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:0}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:.125rem}.\[\&\>\*\:first-child\]\:before\:bg-primary-600>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:first-child\]\:dark\:before\:bg-primary-500:is(.dark *)>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:0}.\[\&_\.fi-badge-delete-button\]\:hidden .fi-badge-delete-button{display:none}.\[\&_\.filepond--root\]\:font-sans .filepond--root{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.\[\&_optgroup\]\:bg-white optgroup{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.\[\&_optgroup\]\:dark\:bg-gray-900:is(.dark *) optgroup{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.\[\&_option\]\:bg-white option{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.\[\&_option\]\:dark\:bg-gray-900:is(.dark *) option{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}@media(hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[\@media\(hover\:hover\)\]\:duration-75{transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:checked+.\[input\:checked\+\&\]\:hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-gray-500:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}input:checked:focus-visible+.\[input\:checked\:focus-visible\+\&\]\:ring-custom-500\/50{--tw-ring-color:rgba(var(--c-500),0.5)}input:checked:focus-visible+.dark\:\[input\:checked\:focus-visible\+\&\]\:ring-custom-400\/50:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)} \ No newline at end of file +*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.13 | MIT License | https://tailwindcss.com*/*,:after,:before{border-color:rgba(var(--gray-200),1);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-400),1);opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-400),1);opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}input::placeholder,textarea::placeholder{color:rgba(var(--gray-500),var(--tw-text-opacity,1));opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:rgba(var(--gray-500),var(--tw-border-opacity,1));border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}@media (forced-colors:active) {[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root.dark{color-scheme:dark}[data-field-wrapper]{scroll-margin-top:8rem}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-inline-start-color:var(--tw-prose-quote-borders);border-inline-start-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-bottom:2em;margin-top:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);color:var(--tw-prose-kbd);font-family:inherit;font-size:.875em;font-weight:500;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;width:100%}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8571429em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-top:.1428571em;padding-inline-start:.3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-top:.6666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-base{font-size:1rem;line-height:1.75}.prose-base :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose-base :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em}.prose-base :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.25em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose-base :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.5em;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose-base :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose-base :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose-base :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose-base :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-base :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose-base :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose-base :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose-base :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(.prose-base>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(.prose-base>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(.prose-base>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose-base :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3em;margin-top:3em}.prose-base :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857}.prose-base :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose-base :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose-base :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose-base :where(.prose-base>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(.prose-base>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6666667em;margin-top:1.6666667em;padding-inline-start:1em}.prose-lg :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.8888889em;padding-inline-end:.4444444em;padding-bottom:.2222222em;padding-top:.2222222em;padding-inline-start:.4444444em}.prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-lg :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8666667em}.prose-lg :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding-inline-end:1.5em;padding-bottom:1em;padding-top:1em;padding-inline-start:1.5em}.prose-lg :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-inline-start:1.5555556em}.prose-lg :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4444444em}.prose-lg :where(.prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(.prose-lg>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;padding-inline-start:1.5555556em}.prose-lg :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.prose-lg :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-inline-start:.75em}.prose-lg :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.75em;padding-bottom:.75em;padding-top:.75em;padding-inline-start:.75em}.prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-lg :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg :where(.prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(.prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-4{inset:1rem}.inset-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.inset-y-0{bottom:0;top:0}.-bottom-1\/2{bottom:-50%}.-top-1{top:-.25rem}.-top-1\/2{top:-50%}.-top-2{top:-.5rem}.-top-3{top:-.75rem}.bottom-0{bottom:0}.bottom-1\/2{bottom:50%}.end-0{inset-inline-end:0}.end-4{inset-inline-end:1rem}.end-6{inset-inline-end:1.5rem}.left-3{left:.75rem}.start-0{inset-inline-start:0}.start-full{inset-inline-start:100%}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-4{top:1rem}.top-6{top:1.5rem}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.order-first{order:-9999}.col-\[--col-span-default\]{grid-column:var(--col-span-default)}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-\[--col-start-default\]{grid-column-start:var(--col-start-default)}.row-start-2{grid-row-start:2}.-m-0\.5{margin:-.125rem}.-m-1{margin:-.25rem}.-m-1\.5{margin:-.375rem}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.-m-3{margin:-.75rem}.-m-3\.5{margin:-.875rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.my-16{margin-bottom:4rem;margin-top:4rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-auto{margin-bottom:auto;margin-top:auto}.\!mt-0{margin-top:0!important}.-mb-4{margin-bottom:-1rem}.-mb-6{margin-bottom:-1.5rem}.-me-2{margin-inline-end:-.5rem}.-ms-0\.5{margin-inline-start:-.125rem}.-ms-1{margin-inline-start:-.25rem}.-ms-2{margin-inline-start:-.5rem}.-mt-3{margin-top:-.75rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.-mt-7{margin-top:-1.75rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.me-1{margin-inline-end:.25rem}.me-3{margin-inline-end:.75rem}.me-4{margin-inline-end:1rem}.me-6{margin-inline-end:1.5rem}.ml-auto{margin-left:auto}.ms-1{margin-inline-start:.25rem}.ms-auto{margin-inline-start:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.line-clamp-\[--line-clamp\]{-webkit-box-orient:vertical;-webkit-line-clamp:var(--line-clamp);display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.h-0{height:0}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[100dvh\],.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:24rem}.min-h-\[theme\(spacing\.48\)\]{min-height:12rem}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[calc\(100\%\+2rem\)\]{width:calc(100% + 2rem)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[theme\(spacing\.4\)\]{min-width:1rem}.min-w-\[theme\(spacing\.5\)\]{min-width:1.25rem}.min-w-\[theme\(spacing\.6\)\]{min-width:1.5rem}.min-w-\[theme\(spacing\.8\)\]{min-width:2rem}.\!max-w-2xl{max-width:42rem!important}.\!max-w-3xl{max-width:48rem!important}.\!max-w-4xl{max-width:56rem!important}.\!max-w-5xl{max-width:64rem!important}.\!max-w-6xl{max-width:72rem!important}.\!max-w-7xl{max-width:80rem!important}.\!max-w-\[14rem\]{max-width:14rem!important}.\!max-w-lg{max-width:32rem!important}.\!max-w-md{max-width:28rem!important}.\!max-w-sm{max-width:24rem!important}.\!max-w-xl{max-width:36rem!important}.\!max-w-xs{max-width:20rem!important}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-min{max-width:-moz-min-content;max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:1536px}.max-w-screen-lg{max-width:1024px}.max-w-screen-md{max-width:768px}.max-w-screen-sm{max-width:640px}.max-w-screen-xl{max-width:1280px}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-1\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/4{--tw-translate-x:-25%}.-translate-x-12{--tw-translate-x:-3rem}.-translate-x-12,.-translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-5{--tw-translate-x:-1.25rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-12{--tw-translate-y:-3rem}.-translate-y-12,.-translate-y-3\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-3\/4{--tw-translate-y:-75%}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-12{--tw-translate-x:3rem}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-5,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.translate-y-12{--tw-translate-y:3rem}.-rotate-180,.translate-y-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-180{--tw-rotate:-180deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-95,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize{resize:both}.scroll-mt-9{scroll-margin-top:2.25rem}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.columns-\[--cols-default\]{-moz-columns:var(--cols-default);columns:var(--cols-default)}.break-inside-avoid{-moz-column-break-inside:avoid;break-inside:avoid}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[--cols-default\]{grid-template-columns:var(--cols-default)}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[repeat\(7\2c minmax\(theme\(spacing\.7\)\2c 1fr\)\)\]{grid-template-columns:repeat(7,minmax(1.75rem,1fr))}.grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.grid-rows-\[1fr_auto_1fr\]{grid-template-rows:1fr auto 1fr}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-6{row-gap:1.5rem}.gap-y-7{row-gap:1.75rem}.gap-y-8{row-gap:2rem}.gap-y-px{row-gap:1px}.-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.5rem*var(--tw-space-x-reverse))}.-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.75rem*var(--tw-space-x-reverse))}.-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1rem*var(--tw-space-x-reverse))}.-space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.25rem*var(--tw-space-x-reverse))}.-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.5rem*var(--tw-space-x-reverse))}.-space-x-7>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1.75rem*var(--tw-space-x-reverse))}.-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-2rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-100),var(--tw-divide-opacity))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(var(--gray-200),var(--tw-divide-opacity))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x-\[0\.5px\]{border-left-width:.5px;border-right-width:.5px}.border-y{border-bottom-width:1px;border-top-width:1px}.\!border-t-0{border-top-width:0!important}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-e{border-inline-end-width:1px}.border-s{border-inline-start-width:1px}.border-t{border-top-width:1px}.\!border-none{border-style:none!important}.border-none{border-style:none}.border-gray-100{--tw-border-opacity:1;border-color:rgba(var(--gray-100),var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(var(--gray-300),var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.border-primary-500{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.border-primary-600{--tw-border-opacity:1;border-color:rgba(var(--primary-600),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-t-gray-200{--tw-border-opacity:1;border-top-color:rgba(var(--gray-200),var(--tw-border-opacity))}.\!bg-gray-50{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))!important}.\!bg-gray-700{--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-custom-100{--tw-bg-opacity:1;background-color:rgba(var(--c-100),var(--tw-bg-opacity))}.bg-custom-50{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(var(--gray-200),var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.bg-gray-950\/50{background-color:rgba(var(--gray-950),.5)}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/0{background-color:hsla(0,0%,100%,0)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.\!bg-none{background-image:none!important}.bg-cover{background-size:cover}.bg-center{background-position:50%}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pe-0{padding-inline-end:0}.pe-1{padding-inline-end:.25rem}.pe-2{padding-inline-end:.5rem}.pe-3{padding-inline-end:.75rem}.pe-4{padding-inline-end:1rem}.pe-6{padding-inline-end:1.5rem}.pe-8{padding-inline-end:2rem}.ps-0{padding-inline-start:0}.ps-1{padding-inline-start:.25rem}.ps-2{padding-inline-start:.5rem}.ps-3{padding-inline-start:.75rem}.ps-4{padding-inline-start:1rem}.ps-\[5\.25rem\]{padding-inline-start:5.25rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-thin{font-weight:100}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-loose{line-height:2}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.text-custom-400{--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.text-custom-50{--tw-text-opacity:1;color:rgba(var(--c-50),var(--tw-text-opacity))}.text-custom-500{--tw-text-opacity:1;color:rgba(var(--c-500),var(--tw-text-opacity))}.text-custom-600{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.text-custom-700\/50{color:rgba(var(--c-700),.5)}.text-danger-600{--tw-text-opacity:1;color:rgba(var(--danger-600),var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgba(var(--gray-100),var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.text-gray-700\/50{color:rgba(var(--gray-700),.5)}.text-gray-950{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-0{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-custom-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.ring-custom-600\/10{--tw-ring-color:rgba(var(--c-600),0.1)}.ring-custom-600\/20{--tw-ring-color:rgba(var(--c-600),0.2)}.ring-danger-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-300),var(--tw-ring-opacity))}.ring-gray-600\/10{--tw-ring-color:rgba(var(--gray-600),0.1)}.ring-gray-900\/10{--tw-ring-color:rgba(var(--gray-900),0.1)}.ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}.ring-gray-950\/5{--tw-ring-color:rgba(var(--gray-950),0.05)}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-white\/10{--tw-ring-color:hsla(0,0%,100%,.1)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-100{transition-delay:.1s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[transform\:translateZ\(0\)\]{transform:translateZ(0)}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{bottom:0;content:var(--tw-content);top:0}.before\:start-0:before{content:var(--tw-content);inset-inline-start:0}.before\:h-full:before{content:var(--tw-content);height:100%}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:bg-primary-600:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.first\:border-s-0:first-child{border-inline-start-width:0}.first\:border-t-0:first-child{border-top-width:0}.last\:border-e-0:last-child{border-inline-end-width:0}.first-of-type\:ps-1:first-of-type{padding-inline-start:.25rem}.last-of-type\:pe-1:last-of-type{padding-inline-end:.25rem}.checked\:ring-0:checked{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:bg-gray-50:focus-within{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:bg-custom-400\/10:hover{background-color:rgba(var(--c-400),.1)}.hover\:bg-custom-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.hover\:bg-gray-400\/10:hover{background-color:rgba(var(--gray-400),.1)}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.hover\:text-custom-600:hover{--tw-text-opacity:1;color:rgba(var(--c-600),var(--tw-text-opacity))}.hover\:text-custom-700\/75:hover{color:rgba(var(--c-700),.75)}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.hover\:text-gray-700\/75:hover{color:rgba(var(--gray-700),.75)}.hover\:opacity-100:hover{opacity:1}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-danger-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.focus\:ring-primary-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px}.checked\:focus\:ring-danger-500\/50:focus:checked{--tw-ring-color:rgba(var(--danger-500),0.5)}.checked\:focus\:ring-primary-500\/50:focus:checked{--tw-ring-color:rgba(var(--primary-500),0.5)}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-primary-500:focus-visible{--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.focus-visible\:bg-custom-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--c-50),var(--tw-bg-opacity))}.focus-visible\:bg-gray-100:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-100),var(--tw-bg-opacity))}.focus-visible\:bg-gray-50:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.focus-visible\:text-custom-700\/75:focus-visible{color:rgba(var(--c-700),.75)}.focus-visible\:text-gray-500:focus-visible{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.focus-visible\:text-gray-700\/75:focus-visible{color:rgba(var(--gray-700),.75)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:ring-custom-500\/50:focus-visible{--tw-ring-color:rgba(var(--c-500),0.5)}.focus-visible\:ring-custom-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-600),var(--tw-ring-opacity))}.focus-visible\:ring-gray-400\/40:focus-visible{--tw-ring-color:rgba(var(--gray-400),0.4)}.focus-visible\:ring-primary-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.focus-visible\:ring-primary-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.enabled\:cursor-wait:enabled{cursor:wait}.enabled\:opacity-70:enabled{opacity:.7}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-gray-50:disabled{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.disabled\:text-gray-50:disabled{--tw-text-opacity:1;color:rgba(var(--gray-50),var(--tw-text-opacity))}.disabled\:text-gray-500:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled{-webkit-text-fill-color:rgba(var(--gray-500),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled::placeholder{-webkit-text-fill-color:rgba(var(--gray-400),1)}.disabled\:checked\:bg-current:checked:disabled{background-color:currentColor}.disabled\:checked\:text-gray-400:checked:disabled{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group\/item:first-child .group-first\/item\:rounded-s-lg{border-end-start-radius:.5rem;border-start-start-radius:.5rem}.group\/item:last-child .group-last\/item\:rounded-e-lg{border-end-end-radius:.5rem;border-start-end-radius:.5rem}.group:hover .group-hover\:text-gray-500,.group\/button:hover .group-hover\/button\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:hover .group-hover\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:hover .group-hover\/item\:underline,.group\/link:hover .group-hover\/link\:underline{text-decoration-line:underline}.group:focus-visible .group-focus-visible\:text-gray-500{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.group:focus-visible .group-focus-visible\:text-gray-700{--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.group\/item:focus-visible .group-focus-visible\/item\:underline{text-decoration-line:underline}.group\/link:focus-visible .group-focus-visible\/link\:underline{text-decoration-line:underline}.dark\:flex:is(.dark *){display:flex}.dark\:hidden:is(.dark *){display:none}.dark\:divide-white\/10:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.1)}.dark\:divide-white\/5:is(.dark *)>:not([hidden])~:not([hidden]){border-color:hsla(0,0%,100%,.05)}.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-600),var(--tw-border-opacity))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--gray-700),var(--tw-border-opacity))}.dark\:border-primary-500:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.dark\:border-white\/10:is(.dark *){border-color:hsla(0,0%,100%,.1)}.dark\:border-white\/5:is(.dark *){border-color:hsla(0,0%,100%,.05)}.dark\:border-t-white\/10:is(.dark *){border-top-color:hsla(0,0%,100%,.1)}.dark\:\!bg-gray-700:is(.dark *){--tw-bg-opacity:1!important;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))!important}.dark\:bg-custom-400\/10:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}.dark\:bg-custom-500\/20:is(.dark *){background-color:rgba(var(--c-500),.2)}.dark\:bg-gray-400\/10:is(.dark *){background-color:rgba(var(--gray-400),.1)}.dark\:bg-gray-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}.dark\:bg-gray-500\/20:is(.dark *){background-color:rgba(var(--gray-500),.2)}.dark\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.dark\:bg-gray-900\/30:is(.dark *){background-color:rgba(var(--gray-900),.3)}.dark\:bg-gray-950:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-950),var(--tw-bg-opacity))}.dark\:bg-gray-950\/75:is(.dark *){background-color:rgba(var(--gray-950),.75)}.dark\:bg-primary-400:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}.dark\:bg-primary-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:bg-white\/10:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:bg-white\/5:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:text-custom-300\/50:is(.dark *){color:rgba(var(--c-300),.5)}.dark\:text-custom-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-400),var(--tw-text-opacity))}.dark\:text-custom-400\/10:is(.dark *){color:rgba(var(--c-400),.1)}.dark\:text-danger-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-400),var(--tw-text-opacity))}.dark\:text-danger-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--danger-500),var(--tw-text-opacity))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.dark\:text-gray-300\/50:is(.dark *){color:rgba(var(--gray-300),.5)}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:text-gray-700:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-700),var(--tw-text-opacity))}.dark\:text-gray-800:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-800),var(--tw-text-opacity))}.dark\:text-primary-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.dark\:text-primary-500:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:text-white\/5:is(.dark *){color:hsla(0,0%,100%,.05)}.dark\:ring-custom-400\/30:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.3)}.dark\:ring-custom-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}.dark\:ring-danger-500:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:ring-gray-400\/20:is(.dark *){--tw-ring-color:rgba(var(--gray-400),0.2)}.dark\:ring-gray-50\/10:is(.dark *){--tw-ring-color:rgba(var(--gray-50),0.1)}.dark\:ring-gray-700:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-700),var(--tw-ring-opacity))}.dark\:ring-gray-900:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-900),var(--tw-ring-opacity))}.dark\:ring-white\/10:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:placeholder\:text-gray-500:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:placeholder\:text-gray-500:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.dark\:before\:bg-primary-500:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.dark\:checked\:bg-danger-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--danger-500),var(--tw-bg-opacity))}.dark\:checked\:bg-primary-500:checked:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity))}.dark\:focus-within\:bg-white\/5:focus-within:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}.dark\:hover\:bg-custom-400\/10:hover:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:hover\:bg-white\/10:hover:is(.dark *){background-color:hsla(0,0%,100%,.1)}.dark\:hover\:bg-white\/5:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:hover\:text-custom-300:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--c-300),var(--tw-text-opacity))}.dark\:hover\:text-custom-300\/75:hover:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.dark\:hover\:text-gray-300\/75:hover:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:hover\:text-gray-400:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:hover\:ring-white\/20:hover:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)}.dark\:focus\:ring-danger-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:focus\:ring-primary-500:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.dark\:checked\:focus\:ring-danger-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--danger-400),0.5)}.dark\:checked\:focus\:ring-primary-400\/50:focus:checked:is(.dark *){--tw-ring-color:rgba(var(--primary-400),0.5)}.dark\:focus-visible\:border-primary-500:focus-visible:is(.dark *){--tw-border-opacity:1;border-color:rgba(var(--primary-500),var(--tw-border-opacity))}.dark\:focus-visible\:bg-custom-400\/10:focus-visible:is(.dark *){background-color:rgba(var(--c-400),.1)}.dark\:focus-visible\:bg-white\/5:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:focus-visible\:text-custom-300\/75:focus-visible:is(.dark *){color:rgba(var(--c-300),.75)}.dark\:focus-visible\:text-gray-300\/75:focus-visible:is(.dark *){color:rgba(var(--gray-300),.75)}.dark\:focus-visible\:text-gray-400:focus-visible:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:focus-visible\:ring-custom-400\/50:focus-visible:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}.dark\:focus-visible\:ring-custom-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--c-500),var(--tw-ring-opacity))}.dark\:focus-visible\:ring-primary-500:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.dark\:disabled\:bg-transparent:disabled:is(.dark *){background-color:transparent}.dark\:disabled\:text-gray-400:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.dark\:disabled\:ring-white\/10:disabled:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1)}.dark\:disabled\:\[-webkit-text-fill-color\:theme\(colors\.gray\.400\)\]:disabled:is(.dark *){-webkit-text-fill-color:rgba(var(--gray-400),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::-moz-placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:placeholder\:\[-webkit-text-fill-color\:theme\(colors\.gray\.500\)\]:disabled:is(.dark *)::placeholder{-webkit-text-fill-color:rgba(var(--gray-500),1)}.dark\:disabled\:checked\:bg-gray-600:checked:disabled:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}.group\/button:hover .dark\:group-hover\/button\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group:hover .dark\:group-hover\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.group:hover .dark\:group-hover\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.group:focus-visible .dark\:group-focus-visible\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-200),var(--tw-text-opacity))}.group:focus-visible .dark\:group-focus-visible\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.sm\:relative{position:relative}.sm\:inset-x-auto{left:auto;right:auto}.sm\:end-0{inset-inline-end:0}.sm\:col-\[--col-span-sm\]{grid-column:var(--col-span-sm)}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-start-\[--col-start-sm\]{grid-column-start:var(--col-start-sm)}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.sm\:ms-auto{margin-inline-start:auto}.sm\:mt-7{margin-top:1.75rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:hidden{display:none}.sm\:w-\[calc\(100\%\+3rem\)\]{width:calc(100% + 3rem)}.sm\:w-screen{width:100vw}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-4xl{max-width:56rem}.sm\:max-w-5xl{max-width:64rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-7xl{max-width:80rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:columns-\[--cols-sm\]{-moz-columns:var(--cols-sm);columns:var(--cols-sm)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[--cols-sm\]{grid-template-columns:var(--cols-sm)}.sm\:grid-cols-\[repeat\(auto-fit\2c minmax\(0\2c 1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.sm\:grid-rows-\[1fr_auto_3fr\]{grid-template-rows:1fr auto 3fr}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-1{gap:.25rem}.sm\:gap-3{gap:.75rem}.sm\:gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-10{padding:2.5rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.sm\:pe-3{padding-inline-end:.75rem}.sm\:pe-6{padding-inline-end:1.5rem}.sm\:ps-3{padding-inline-start:.75rem}.sm\:ps-6{padding-inline-start:1.5rem}.sm\:pt-1\.5{padding-top:.375rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:leading-6{line-height:1.5rem}.sm\:first-of-type\:ps-3:first-of-type{padding-inline-start:.75rem}.sm\:first-of-type\:ps-6:first-of-type{padding-inline-start:1.5rem}.sm\:last-of-type\:pe-3:last-of-type{padding-inline-end:.75rem}.sm\:last-of-type\:pe-6:last-of-type{padding-inline-end:1.5rem}}@media (min-width:768px){.md\:bottom-4{bottom:1rem}.md\:order-first{order:-9999}.md\:col-\[--col-span-md\]{grid-column:var(--col-span-md)}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-start-\[--col-start-md\]{grid-column-start:var(--col-start-md)}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:inline-grid{display:inline-grid}.md\:hidden{display:none}.md\:w-max{width:-moz-max-content;width:max-content}.md\:max-w-60{max-width:15rem}.md\:columns-\[--cols-md\]{-moz-columns:var(--cols-md);columns:var(--cols-md)}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[--cols-md\]{grid-template-columns:var(--cols-md)}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}.md\:gap-1{gap:.25rem}.md\:gap-3{gap:.75rem}.md\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(0px*var(--tw-divide-y-reverse));border-top-width:calc(0px*(1 - var(--tw-divide-y-reverse)))}.md\:overflow-x-auto{overflow-x:auto}.md\:rounded-xl{border-radius:.75rem}.md\:p-20{padding:5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:pe-6{padding-inline-end:1.5rem}.md\:ps-3{padding-inline-start:.75rem}}@media (min-width:1024px){.lg\:sticky{position:sticky}.lg\:z-0{z-index:0}.lg\:col-\[--col-span-lg\]{grid-column:var(--col-span-lg)}.lg\:col-start-\[--col-start-lg\]{grid-column-start:var(--col-start-lg)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:table-cell{display:table-cell}.lg\:inline-grid{display:inline-grid}.lg\:hidden{display:none}.lg\:h-full{height:100%}.lg\:max-w-xs{max-width:20rem}.lg\:-translate-x-full{--tw-translate-x:-100%}.lg\:-translate-x-full,.lg\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:translate-x-0{--tw-translate-x:0px}.lg\:columns-\[--cols-lg\]{-moz-columns:var(--cols-lg);columns:var(--cols-lg)}.lg\:grid-cols-\[--cols-lg\]{grid-template-columns:var(--cols-lg)}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:gap-1{gap:.25rem}.lg\:gap-3{gap:.75rem}.lg\:bg-transparent{background-color:transparent}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pe-8{padding-inline-end:2rem}.lg\:shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.lg\:shadow-none,.lg\:shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lg\:shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lg\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lg\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.lg\:transition-none{transition-property:none}.lg\:delay-100{transition-delay:.1s}.dark\:lg\:bg-transparent:is(.dark *){background-color:transparent}}@media (min-width:1280px){.xl\:col-\[--col-span-xl\]{grid-column:var(--col-span-xl)}.xl\:col-start-\[--col-start-xl\]{grid-column-start:var(--col-start-xl)}.xl\:block{display:block}.xl\:table-cell{display:table-cell}.xl\:inline-grid{display:inline-grid}.xl\:hidden{display:none}.xl\:columns-\[--cols-xl\]{-moz-columns:var(--cols-xl);columns:var(--cols-xl)}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[--cols-xl\]{grid-template-columns:var(--cols-xl)}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:gap-1{gap:.25rem}.xl\:gap-3{gap:.75rem}}@media (min-width:1536px){.\32xl\:col-\[--col-span-2xl\]{grid-column:var(--col-span-2xl)}.\32xl\:col-start-\[--col-start-2xl\]{grid-column-start:var(--col-start-2xl)}.\32xl\:block{display:block}.\32xl\:table-cell{display:table-cell}.\32xl\:inline-grid{display:inline-grid}.\32xl\:hidden{display:none}.\32xl\:columns-\[--cols-2xl\]{-moz-columns:var(--cols-2xl);columns:var(--cols-2xl)}.\32xl\:grid-cols-\[--cols-2xl\]{grid-template-columns:var(--cols-2xl)}.\32xl\:flex-row{flex-direction:row}.\32xl\:items-start{align-items:flex-start}.\32xl\:items-end{align-items:flex-end}.\32xl\:items-center{align-items:center}.\32xl\:gap-1{gap:.25rem}.\32xl\:gap-3{gap:.75rem}}.ltr\:hidden:where([dir=ltr],[dir=ltr] *){display:none}.rtl\:hidden:where([dir=rtl],[dir=rtl] *){display:none}.rtl\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-5:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/2:where([dir=rtl],[dir=rtl] *){--tw-translate-x:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-1\/4:where([dir=rtl],[dir=rtl] *){--tw-translate-x:25%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:flex-row-reverse:where([dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.rtl\:divide-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}@media (min-width:1024px){.rtl\:lg\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:lg\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}.\[\&\.trix-active\]\:bg-gray-50.trix-active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.\[\&\.trix-active\]\:text-primary-600.trix-active{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity))}.dark\:\[\&\.trix-active\]\:bg-white\/5.trix-active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.dark\:\[\&\.trix-active\]\:text-primary-400.trix-active:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-400),var(--tw-text-opacity))}.\[\&\:\:-ms-reveal\]\:hidden::-ms-reveal{display:none}.\[\&\:not\(\:first-of-type\)\]\:border-s:not(:first-of-type){border-inline-start-width:1px}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-2:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-600),var(--tw-ring-opacity))}.\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-600:focus-within:not(:has(.fi-ac-action:focus)){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-danger-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--danger-500),var(--tw-ring-opacity))}.dark\:\[\&\:not\(\:has\(\.fi-ac-action\:focus\)\)\]\:focus-within\:ring-primary-500:focus-within:not(:has(.fi-ac-action:focus)):is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-500),var(--tw-ring-opacity))}.\[\&\:not\(\:last-of-type\)\]\:border-e:not(:last-of-type){border-inline-end-width:1px}.\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.gray\.200\)\]:not(:nth-child(1 of .fi-btn)){--tw-shadow:-1px 0 0 0 rgba(var(--gray-200),1);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.dark\:\[\&\:not\(\:nth-child\(1_of_\.fi-btn\)\)\]\:shadow-\[-1px_0_0_0_theme\(colors\.white\/20\%\)\]:not(:nth-child(1 of .fi-btn)):is(.dark *){--tw-shadow:-1px 0 0 0 hsla(0,0%,100%,.2);--tw-shadow-colored:-1px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.\[\&\:not\(\:nth-last-child\(1_of_\.fi-btn\)\)\]\:me-px:not(:nth-last-child(1 of .fi-btn)){margin-inline-end:1px}.\[\&\:nth-child\(1_of_\.fi-btn\)\]\:rounded-s-lg:nth-child(1 of .fi-btn){border-end-start-radius:.5rem;border-start-start-radius:.5rem}.\[\&\:nth-last-child\(1_of_\.fi-btn\)\]\:rounded-e-lg:nth-last-child(1 of .fi-btn){border-end-end-radius:.5rem;border-start-end-radius:.5rem}.\[\&\>\*\:first-child\]\:relative>:first-child{position:relative}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:first-child\]\:before\:absolute>:first-child:before{content:var(--tw-content);position:absolute}.\[\&\>\*\:first-child\]\:before\:inset-y-0>:first-child:before{bottom:0;content:var(--tw-content);top:0}.\[\&\>\*\:first-child\]\:before\:start-0>:first-child:before{content:var(--tw-content);inset-inline-start:0}.\[\&\>\*\:first-child\]\:before\:w-0\.5>:first-child:before{content:var(--tw-content);width:.125rem}.\[\&\>\*\:first-child\]\:before\:bg-primary-600>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:first-child\]\:dark\:before\:bg-primary-500:is(.dark *)>:first-child:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-500),var(--tw-bg-opacity));content:var(--tw-content)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&_\.choices\\_\\_inner\]\:ps-0 .choices__inner{padding-inline-start:0}.\[\&_\.fi-badge-delete-button\]\:hidden .fi-badge-delete-button{display:none}.\[\&_\.filepond--root\]\:font-sans .filepond--root{font-family:var(--font-family),ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.\[\&_optgroup\]\:bg-white optgroup{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.\[\&_optgroup\]\:dark\:bg-gray-900:is(.dark *) optgroup{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.\[\&_option\]\:bg-white option{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.\[\&_option\]\:dark\:bg-gray-900:is(.dark *) option{--tw-bg-opacity:1;background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}:checked+*>.\[\:checked\+\*\>\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}@media(hover:hover){.\[\@media\(hover\:hover\)\]\:transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[\@media\(hover\:hover\)\]\:duration-75{transition-duration:75ms}}input:checked+.\[input\:checked\+\&\]\:bg-custom-600{--tw-bg-opacity:1;background-color:rgba(var(--c-600),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:bg-gray-400{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}input:checked+.\[input\:checked\+\&\]\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:checked+.\[input\:checked\+\&\]\:hover\:bg-custom-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}input:checked+.\[input\:checked\+\&\]\:hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-custom-500:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-500),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:bg-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-600),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-custom-400:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--c-400),var(--tw-bg-opacity))}input:checked+.dark\:\[input\:checked\+\&\]\:hover\:bg-gray-500:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}input:checked:focus-visible+.\[input\:checked\:focus-visible\+\&\]\:ring-custom-500\/50{--tw-ring-color:rgba(var(--c-500),0.5)}input:checked:focus-visible+.dark\:\[input\:checked\:focus-visible\+\&\]\:ring-custom-400\/50:is(.dark *){--tw-ring-color:rgba(var(--c-400),0.5)}input:focus-visible+.\[input\:focus-visible\+\&\]\:z-10{z-index:10}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}input:focus-visible+.\[input\:focus-visible\+\&\]\:ring-gray-950\/10{--tw-ring-color:rgba(var(--gray-950),0.1)}input:focus-visible+.dark\:\[input\:focus-visible\+\&\]\:ring-white\/20:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2)} \ No newline at end of file diff --git a/public/css/filament/forms/forms.css b/public/css/filament/forms/forms.css index 5c29a13..642acfd 100644 --- a/public/css/filament/forms/forms.css +++ b/public/css/filament/forms/forms.css @@ -1,4 +1,4 @@ -input::-webkit-datetime-edit{display:block;padding:0}.cropper-container{-webkit-touch-callout:none;direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{inset:0;position:absolute}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:#3399ffbf;overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.33333%;left:0;top:33.33333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.33333%;top:0;width:33.33333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.filepond--assistant{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--browser.filepond--browser{font-size:0;left:1em;margin:0;opacity:0;padding:0;position:absolute;top:1.75em;width:calc(100% - 2em)}.filepond--data{border:none;contain:strict;height:0;margin:0;padding:0;visibility:hidden;width:0}.filepond--data,.filepond--drip{pointer-events:none;position:absolute}.filepond--drip{background:rgba(0,0,0,.01);border-radius:.5em;inset:0;opacity:.1;overflow:hidden}.filepond--drip-blob{background:#292625;border-radius:50%;height:8em;margin-left:-4em;margin-top:-4em;transform-origin:center center;width:8em}.filepond--drip-blob,.filepond--drop-label{left:0;position:absolute;top:0;will-change:transform,opacity}.filepond--drop-label{align-items:center;color:#4f4f4f;display:flex;height:0;justify-content:center;margin:0;right:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--drop-label.filepond--drop-label label{display:block;margin:0;padding:.5em}.filepond--drop-label label{cursor:default;font-size:.875em;font-weight:400;line-height:1.5;text-align:center}.filepond--label-action{-webkit-text-decoration-skip:ink;cursor:pointer;text-decoration:underline;text-decoration-color:#a7a4a4;text-decoration-skip-ink:auto}.filepond--root[data-disabled] .filepond--drop-label label{opacity:.5}.filepond--file-action-button.filepond--file-action-button{border:none;font-family:inherit;font-size:1em;height:1.625em;line-height:inherit;margin:0;outline:none;padding:0;width:1.625em;will-change:transform,opacity}.filepond--file-action-button.filepond--file-action-button span{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file-action-button.filepond--file-action-button svg{height:100%;width:100%}.filepond--file-action-button.filepond--file-action-button:after{content:"";inset:-.75em;position:absolute}.filepond--file-action-button{background-color:#00000080;background-image:none;border-radius:50%;box-shadow:0 0 #fff0;color:#fff;cursor:auto;transition:box-shadow .25s ease-in}.filepond--file-action-button:focus,.filepond--file-action-button:hover{box-shadow:0 0 0 .125em #ffffffe6}.filepond--file-action-button[disabled]{background-color:#00000040;color:#ffffff80}.filepond--file-action-button[hidden]{display:none}.filepond--file-info{align-items:flex-start;display:flex;flex:1;flex-direction:column;margin:0 .5em 0 0;min-width:0;pointer-events:none;position:static;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-info *{margin:0}.filepond--file-info .filepond--file-info-main{font-size:.75em;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.filepond--file-info .filepond--file-info-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out;white-space:nowrap}.filepond--file-info .filepond--file-info-sub:empty{display:none}.filepond--file-status{align-items:flex-end;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;margin:0;min-width:2.25em;pointer-events:none;position:static;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-status *{margin:0;white-space:nowrap}.filepond--file-status .filepond--file-status-main{font-size:.75em;line-height:1.2}.filepond--file-status .filepond--file-status-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out}.filepond--file-wrapper.filepond--file-wrapper{border:none;height:100%;margin:0;min-width:0;padding:0}.filepond--file-wrapper.filepond--file-wrapper>legend{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file{align-items:flex-start;border-radius:.5em;color:#fff;display:flex;height:100%;padding:.5625em;position:static}.filepond--file .filepond--file-status{margin-left:auto;margin-right:2.25em}.filepond--file .filepond--processing-complete-indicator{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:3}.filepond--file .filepond--file-action-button,.filepond--file .filepond--processing-complete-indicator,.filepond--file .filepond--progress-indicator{position:absolute}.filepond--file [data-align*=left]{left:.5625em}.filepond--file [data-align*=right]{right:.5625em}.filepond--file [data-align*=center]{left:calc(50% - .8125em)}.filepond--file [data-align*=bottom]{bottom:1.125em}.filepond--file [data-align=center]{top:calc(50% - .8125em)}.filepond--file .filepond--progress-indicator{margin-top:.1875em}.filepond--file .filepond--progress-indicator[data-align*=right]{margin-right:.1875em}.filepond--file .filepond--progress-indicator[data-align*=left]{margin-left:.1875em}[data-filepond-item-state*=error] .filepond--file-info,[data-filepond-item-state*=invalid] .filepond--file-info,[data-filepond-item-state=cancelled] .filepond--file-info{margin-right:2.25em}[data-filepond-item-state~=processing] .filepond--file-status-sub{opacity:0}[data-filepond-item-state~=processing] .filepond--action-abort-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-error] .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-error] .filepond--action-retry-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing svg{animation:fall .5s linear .125s both}[data-filepond-item-state=processing-complete] .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--file-info-sub,[data-filepond-item-state=processing-complete] .filepond--processing-complete-indicator:not([style*=hidden])~.filepond--file-status .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing~.filepond--file-info .filepond--file-info-sub{opacity:.5}[data-filepond-item-state*=error] .filepond--file-wrapper,[data-filepond-item-state*=error] .filepond--panel,[data-filepond-item-state*=invalid] .filepond--file-wrapper,[data-filepond-item-state*=invalid] .filepond--panel{animation:shake .65s linear both}[data-filepond-item-state*=busy] .filepond--progress-indicator svg{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes shake{10%,90%{transform:translate(-.0625em)}20%,80%{transform:translate(.125em)}30%,50%,70%{transform:translate(-.25em)}40%,60%{transform:translate(.25em)}}@keyframes fall{0%{animation-timing-function:ease-out;opacity:0;transform:scale(.5)}70%{animation-timing-function:ease-in-out;opacity:1;transform:scale(1.1)}to{animation-timing-function:ease-out;transform:scale(1)}}.filepond--hopper[data-hopper-state=drag-over]>*{pointer-events:none}.filepond--hopper[data-hopper-state=drag-over]:after{content:"";inset:0;position:absolute;z-index:100}.filepond--progress-indicator{z-index:103}.filepond--file-action-button{z-index:102}.filepond--file-status{z-index:101}.filepond--file-info{z-index:100}.filepond--item{left:0;margin:.25em;padding:0;position:absolute;right:0;top:0;touch-action:none;will-change:transform,opacity;z-index:1}.filepond--item>.filepond--panel{z-index:-1}.filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:0 .0625em .125em -.0625em #00000040}.filepond--item>.filepond--file-wrapper,.filepond--item>.filepond--panel{transition:opacity .15s ease-out}.filepond--item[data-drag-state]{cursor:grab}.filepond--item[data-drag-state]>.filepond--panel{box-shadow:0 0 0 transparent;transition:box-shadow .125s ease-in-out}.filepond--item[data-drag-state=drag]{cursor:grabbing}.filepond--item[data-drag-state=drag]>.filepond--panel{box-shadow:0 .125em .3125em #00000053}.filepond--item[data-drag-state]:not([data-drag-state=idle]){z-index:2}.filepond--item-panel{background-color:#64605e}[data-filepond-item-state=processing-complete] .filepond--item-panel{background-color:#369763}[data-filepond-item-state*=error] .filepond--item-panel,[data-filepond-item-state*=invalid] .filepond--item-panel{background-color:#c44e47}.filepond--item-panel{border-radius:.5em;transition:background-color .25s}.filepond--list-scroller{left:0;margin:0;position:absolute;right:0;top:0;will-change:transform}.filepond--list-scroller[data-state=overflow] .filepond--list{bottom:0;right:0}.filepond--list-scroller[data-state=overflow]{-webkit-overflow-scrolling:touch;-webkit-mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);overflow-x:hidden;overflow-y:scroll}.filepond--list-scroller::-webkit-scrollbar{background:transparent}.filepond--list-scroller::-webkit-scrollbar:vertical{width:1em}.filepond--list-scroller::-webkit-scrollbar:horizontal{height:0}.filepond--list-scroller::-webkit-scrollbar-thumb{background-clip:content-box;background-color:#0000004d;border:.3125em solid transparent;border-radius:99999px}.filepond--list.filepond--list{list-style-type:none;margin:0;padding:0;position:absolute;top:0;will-change:transform}.filepond--list{left:.75em;right:.75em}.filepond--root[data-style-panel-layout~=integrated]{height:100%;margin:0;max-width:none;width:100%}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root{border-radius:0}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root>*,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root>*{display:none}.filepond--root[data-style-panel-layout~=circle] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{align-items:center;bottom:0;display:flex;height:auto;justify-content:center;z-index:7}.filepond--root[data-style-panel-layout~=circle] .filepond--item-panel,.filepond--root[data-style-panel-layout~=integrated] .filepond--item-panel{display:none}.filepond--root[data-style-panel-layout~=compact] .filepond--list-scroller,.filepond--root[data-style-panel-layout~=integrated] .filepond--list-scroller{height:100%;margin-bottom:0;margin-top:0;overflow:hidden}.filepond--root[data-style-panel-layout~=compact] .filepond--list,.filepond--root[data-style-panel-layout~=integrated] .filepond--list{height:100%;left:0;right:0}.filepond--root[data-style-panel-layout~=compact] .filepond--item,.filepond--root[data-style-panel-layout~=integrated] .filepond--item{margin:0}.filepond--root[data-style-panel-layout~=compact] .filepond--file-wrapper,.filepond--root[data-style-panel-layout~=integrated] .filepond--file-wrapper{height:100%}.filepond--root[data-style-panel-layout~=compact] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7}.filepond--root[data-style-panel-layout~=circle]{border-radius:99999rem;overflow:hidden}.filepond--root[data-style-panel-layout~=circle]>.filepond--panel{border-radius:inherit}.filepond--root[data-style-panel-layout~=circle] .filepond--file-info,.filepond--root[data-style-panel-layout~=circle] .filepond--file-status,.filepond--root[data-style-panel-layout~=circle]>.filepond--panel>*{display:none}@media not all and (-webkit-min-device-pixel-ratio:0),not all and (min-resolution:.001dpcm){@supports (-webkit-appearance:none) and (stroke-color:transparent){.filepond--root[data-style-panel-layout~=circle]{will-change:transform}}}.filepond--panel-root{background-color:#f1f0ef;border-radius:.5em}.filepond--panel{height:100%!important;left:0;margin:0;pointer-events:none;position:absolute;right:0;top:0}.filepond-panel:not([data-scalable=false]){height:auto!important}.filepond--panel[data-scalable=false]>div{display:none}.filepond--panel[data-scalable=true]{background-color:transparent!important;border:none!important;transform-style:preserve-3d}.filepond--panel-bottom,.filepond--panel-center,.filepond--panel-top{left:0;margin:0;padding:0;position:absolute;right:0;top:0}.filepond--panel-bottom,.filepond--panel-top{height:.5em}.filepond--panel-top{border-bottom:none!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.filepond--panel-top:after{background-color:inherit;bottom:-1px;content:"";height:2px;left:0;position:absolute;right:0}.filepond--panel-bottom,.filepond--panel-center{backface-visibility:hidden;transform:translate3d(0,.5em,0);transform-origin:left top;will-change:transform}.filepond--panel-bottom{border-top:none!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.filepond--panel-bottom:before{background-color:inherit;content:"";height:2px;left:0;position:absolute;right:0;top:-1px}.filepond--panel-center{border-bottom:none!important;border-radius:0!important;border-top:none!important;height:100px!important}.filepond--panel-center:not([style]){visibility:hidden}.filepond--progress-indicator{color:#fff;height:1.25em;margin:0;pointer-events:none;position:static;width:1.25em;will-change:transform,opacity}.filepond--progress-indicator svg{height:100%;transform-box:fill-box;vertical-align:top;width:100%}.filepond--progress-indicator path{fill:none;stroke:currentColor}.filepond--list-scroller{z-index:6}.filepond--drop-label{z-index:5}.filepond--drip{z-index:3}.filepond--root>.filepond--panel{z-index:2}.filepond--browser{z-index:1}.filepond--root{box-sizing:border-box;contain:layout style size;direction:ltr;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1rem;font-weight:450;line-height:normal;margin-bottom:1em;position:relative;text-align:left;text-rendering:optimizeLegibility}.filepond--root *{box-sizing:inherit;line-height:inherit}.filepond--root :not(text){font-size:inherit}.filepond--root[data-disabled]{pointer-events:none}.filepond--root[data-disabled] .filepond--list-scroller{pointer-events:all}.filepond--root[data-disabled] .filepond--list{pointer-events:none}.filepond--root .filepond--drop-label{min-height:4.75em}.filepond--root .filepond--list-scroller{margin-bottom:1em;margin-top:1em}.filepond--root .filepond--credits{bottom:-14px;color:inherit;font-size:11px;line-height:.85;opacity:.175;position:absolute;right:0;text-decoration:none;z-index:3}.filepond--root .filepond--credits[style]{bottom:auto;margin-top:14px;top:0}.filepond--action-edit-item.filepond--action-edit-item{height:2em;padding:.1875em;width:2em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=center]{margin-left:-.1875em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=bottom]{margin-bottom:-.1875em}.filepond--action-edit-item-alt{background:transparent;border:none;color:inherit;font-family:inherit;line-height:inherit;margin:0 0 0 .25em;outline:none;padding:0;pointer-events:all;position:absolute}.filepond--action-edit-item-alt svg{height:1.3125em;width:1.3125em}.filepond--action-edit-item-alt span{font-size:0;opacity:0}.filepond--root[data-style-panel-layout~=circle] .filepond--action-edit-item{opacity:1!important;visibility:visible!important}.filepond--image-preview-markup{left:0;position:absolute;top:0}.filepond--image-preview-wrapper{z-index:2}.filepond--image-preview-overlay{display:block;left:0;margin:0;max-height:7rem;min-height:5rem;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:2}.filepond--image-preview-overlay svg{color:inherit;height:auto;max-height:inherit;width:100%}.filepond--image-preview-overlay-idle{color:#282828d9;mix-blend-mode:multiply}.filepond--image-preview-overlay-success{color:#369763;mix-blend-mode:normal}.filepond--image-preview-overlay-failure{color:#c44e47;mix-blend-mode:normal}@supports (-webkit-marquee-repetition:infinite) and ((-o-object-fit:fill) or (object-fit:fill)){.filepond--image-preview-overlay-idle{mix-blend-mode:normal}}.filepond--image-preview-wrapper{background:rgba(0,0,0,.01);border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--image-preview{align-items:center;background:#222;display:flex;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;will-change:transform,opacity;z-index:1}.filepond--image-clip{margin:0 auto;overflow:hidden;position:relative}.filepond--image-clip[data-transparency-indicator=grid] canvas,.filepond--image-clip[data-transparency-indicator=grid] img{background-color:#fff;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg' fill='%23eee'%3E%3Cpath d='M0 0h50v50H0M50 50h50v50H50'/%3E%3C/svg%3E");background-size:1.25em 1.25em}.filepond--image-bitmap,.filepond--image-vector{left:0;position:absolute;top:0;will-change:transform}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview-wrapper{border-radius:0}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview{align-items:center;display:flex;height:100%;justify-content:center}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-wrapper{border-radius:99999rem}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-overlay{bottom:0;top:auto;transform:scaleY(-1)}.filepond--root[data-style-panel-layout~=circle] .filepond--file .filepond--file-action-button[data-align*=bottom]:not([data-align*=center]){margin-bottom:.325em}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=left]{left:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=right]{right:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=left],.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=right]{margin-bottom:.5125em}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=center]{margin-bottom:.1875em;margin-left:.1875em;margin-top:0}.filepond--media-preview audio{display:none}.filepond--media-preview .audioplayer{margin:2.3em auto auto;width:calc(100% - 1.4em)}.filepond--media-preview .playpausebtn{background-position:50%;background-repeat:no-repeat;border:none;border-radius:25px;cursor:pointer;float:left;height:25px;margin-right:.3em;margin-top:.3em;outline:none;width:25px}.filepond--media-preview .playpausebtn:hover{background-color:#00000080}.filepond--media-preview .play{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyElEQVQ4T9XUsWoCQRRG4XPaFL5SfIy8gKYKBCysrax8Ahs7qzQ2qVIFOwsrsbEWLEK6EBFGBrIQhN2d3dnGgalm+Jh7789Ix8uOPe4YDCH0gZ66atKW0pJDCE/AEngDXtRjCpwCRucbGANzNVTBqWBhfAJDdV+GNgWj8wtM41bPt3AbsDB2f69d/0dzwC0wUDe54A8wAWbqJbfkD+BZPeQO5QsYqYu6LKb0MIb7VT3VYfG8CnwEHtT3FKi4c8e/TZMyk3LYFrwCgMdHFbRDKS8AAAAASUVORK5CYII=)}.filepond--media-preview .pause{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAh0lEQVQ4T+2UsQkCURBE30PLMbAMMResQrAPsQ0TK9AqDKxGZeTLD74aGNwlhzfZssvADDMrPcOe+RggYZIJcG2s2KinMidZAvu6u6uzT8u+JCeZArfmcKUeK+EaONTdQy23bxgJX8aPHvIHsSnVuzTx36rn2pQFsGuqN//ZlK7vbIDvq6vkJ9yteBXzecYbAAAAAElFTkSuQmCC)}.filepond--media-preview .timeline{background:hsla(0,0%,100%,.3);border-radius:15px;float:left;height:3px;margin-top:1em;width:calc(100% - 2.5em)}.filepond--media-preview .playhead{background:#fff;border-radius:50%;height:13px;margin-top:-5px;width:13px}.filepond--media-preview-wrapper{background:rgba(0,0,0,.01);border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;pointer-events:auto;position:absolute;right:0;top:0}.filepond--media-preview-wrapper:before{background:linear-gradient(180deg,#000 0,transparent);content:" ";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#000000",endColorstr="#00000000",GradientType=0);height:2em;position:absolute;width:100%;z-index:3}.filepond--media-preview{display:block;height:100%;position:relative;transform-origin:center center;width:100%;will-change:transform,opacity;z-index:1}.filepond--media-preview audio,.filepond--media-preview video{width:100%;will-change:transform}.filepond--root{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);margin-bottom:0}.filepond--root:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2);background-color:hsla(0,0%,100%,.05)}.filepond--root[data-disabled=disabled]{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.filepond--root[data-disabled=disabled]:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1);background-color:transparent}.filepond--panel-root{background-color:transparent}.filepond--drop-label label{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem;padding:.75rem!important}.filepond--drop-label label:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.filepond--label-action{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity));font-weight:500;text-decoration-line:none;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.filepond--label-action:hover{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.filepond--label-action:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.filepond--label-action:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.filepond--drip-blob{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.filepond--drip-blob:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}.filepond--root[data-style-panel-layout=grid] .filepond--item{display:inline;width:calc(50% - .5rem)}@media (min-width:1024px){.filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(33.33% - .5rem)}}.filepond--download-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--download-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--download-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--open-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--open-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--open-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--file-action-button.filepond--action-edit-item{background-color:rgba(0,0,0,.5)}.cropper-drag-box.cropper-crop.cropper-modal{background-color:rgba(var(--gray-100),.5);opacity:1}.cropper-drag-box.cropper-crop.cropper-modal:is(.dark *){background-color:rgba(var(--gray-900),.8)}.fi-fo-file-upload-circle-cropper .cropper-face,.fi-fo-file-upload-circle-cropper .cropper-view-box{border-radius:50%}.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{inset:-50px 0 0;overflow:hidden;position:absolute}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:0;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:0;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:0 0!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{inset:0;position:absolute;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{display:flex;flex-direction:row;flex-wrap:wrap}.EasyMDEContainer .CodeMirror{word-wrap:break-word;border:1px solid #ced4da;border-bottom-left-radius:4px;border-bottom-right-radius:4px;box-sizing:border-box;font:inherit;height:auto;padding:10px;z-index:0}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{background:#fff;border-bottom-right-radius:0!important;border-right:none!important;height:auto;inset:50px 0 0;position:fixed!important;z-index:8}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-bottom-right-radius:0;border-right:none!important;flex:1 1 auto;position:relative}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px;padding:9px 10px;position:relative;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none}.editor-toolbar.fullscreen{background:#fff;border:0;box-sizing:border-box;height:50px;left:0;opacity:1;padding-bottom:10px;padding-top:10px;position:fixed;top:0;width:100%;z-index:9}.editor-toolbar.fullscreen:before{background:linear-gradient(90deg,#fff 0,hsla(0,0%,100%,0));height:50px;left:0;margin:0;padding:0;position:fixed;top:0;width:20px}.editor-toolbar.fullscreen:after{background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,#fff);height:50px;margin:0;padding:0;position:fixed;right:0;top:0;width:20px}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{background:0 0;border:1px solid transparent;border-radius:3px;cursor:pointer;display:inline-block;height:30px;margin:0;padding:0;text-align:center;text-decoration:none!important}.editor-toolbar button{font-weight:700;min-width:30px;padding:0 6px;white-space:nowrap}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;display:inline-block;margin:0 6px;text-indent:-10px;width:0}.editor-toolbar button:after{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;position:relative;top:2px;vertical-align:text-bottom}.editor-toolbar button.heading-1:after{content:"1"}.editor-toolbar button.heading-2:after{content:"2"}.editor-toolbar button.heading-3:after{content:"3"}.editor-toolbar button.heading-bigger:after{content:"\25b2"}.editor-toolbar button.heading-smaller:after{content:"\25bc"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{color:#959694;font-size:12px;padding:8px 10px;text-align:right}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{display:inline-block;margin-left:1em;min-width:4em}.editor-statusbar .lines:before{content:"lines: "}.editor-statusbar .words:before{content:"words: "}.editor-statusbar .characters:before{content:"characters: "}.editor-preview-full{height:100%;left:0;position:absolute;top:0;width:100%;z-index:7}.editor-preview-full,.editor-preview-side{box-sizing:border-box;display:none;overflow:auto}.editor-preview-side{word-wrap:break-word;border:1px solid #ddd;bottom:0;position:fixed;right:0;top:50px;width:50%;z-index:9}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:1 1 auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{background:#fafafa;padding:10px}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.cm-s-easymde .cm-header-5{font-size:1.25rem}.cm-s-easymde .cm-header-6{font-size:1rem}.cm-s-easymde .cm-header-1,.cm-s-easymde .cm-header-2,.cm-s-easymde .cm-header-3,.cm-s-easymde .cm-header-4,.cm-s-easymde .cm-header-5,.cm-s-easymde .cm-header-6{line-height:1.2;margin-bottom:.5rem}.cm-s-easymde .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{border:1px solid #fff;border-radius:0;position:relative}.editor-toolbar .easymde-dropdown,.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff,#fff 84%,#333 0,#333)}.easymde-dropdown-content{background-color:#f9f9f9;box-shadow:0 8px 16px #0003;display:block;padding:8px;position:absolute;top:30px;visibility:hidden;z-index:2}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.easymde-dropdown-content button{display:block}span[data-img-src]:after{background-image:var(--bg-image);background-repeat:no-repeat;background-size:contain;content:"";display:block;height:0;max-height:100%;max-width:100%;padding-top:var(--height);width:var(--width)}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)}:root{--color-cm-red:#991b1b;--color-cm-orange:#9a3412;--color-cm-amber:#92400e;--color-cm-yellow:#854d0e;--color-cm-lime:#3f6212;--color-cm-green:#166534;--color-cm-emerald:#065f46;--color-cm-teal:#115e59;--color-cm-cyan:#155e75;--color-cm-sky:#075985;--color-cm-blue:#1e40af;--color-cm-indigo:#3730a3;--color-cm-violet:#5b21b6;--color-cm-purple:#6b21a8;--color-cm-fuchsia:#86198f;--color-cm-pink:#9d174d;--color-cm-rose:#9f1239;--color-cm-gray:#18181b;--color-cm-gray-muted:#71717a;--color-cm-gray-background:#e4e4e7}.dark{--color-cm-red:#f87171;--color-cm-orange:#fb923c;--color-cm-amber:#fbbf24;--color-cm-yellow:#facc15;--color-cm-lime:#a3e635;--color-cm-green:#4ade80;--color-cm-emerald:#4ade80;--color-cm-teal:#2dd4bf;--color-cm-cyan:#22d3ee;--color-cm-sky:#38bdf8;--color-cm-blue:#60a5fa;--color-cm-indigo:#818cf8;--color-cm-violet:#a78bfa;--color-cm-purple:#c084fc;--color-cm-fuchsia:#e879f9;--color-cm-pink:#f472b6;--color-cm-rose:#fb7185;--color-cm-gray:#fafafa;--color-cm-gray-muted:#a1a1aa;--color-cm-gray-background:#52525b}.cm-s-easymde .cm-comment{background-color:transparent;color:var(--color-cm-gray-muted)}.EasyMDEContainer .CodeMirror-cursor{border-color:currentColor}.dark .EasyMDEContainer .cm-s-easymde span.CodeMirror-selectedtext{filter:invert(100%)}.EasyMDEContainer .cm-s-easymde .cm-keyword{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-atom{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-number{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-def{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable{color:var(--color-cm-yellow)}.EasyMDEContainer .cm-s-easymde .cm-variable-2{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable-3{color:var(--color-cm-emerald)}.EasyMDEContainer .cm-s-easymde .cm-operator,.EasyMDEContainer .cm-s-easymde .cm-property{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-string,.EasyMDEContainer .cm-s-easymde .cm-string-2{color:var(--color-cm-rose)}.EasyMDEContainer .cm-s-easymde .cm-meta{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-error{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-qualifier{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-builtin{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-bracket{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-hr{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote{color:var(--color-cm-sky)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote+.cm-quote{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-list,.EasyMDEContainer .cm-s-easymde .cm-formatting-list+.cm-variable-2,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-variable-2{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-link{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-amber)}.EasyMDEContainer .cm-s-easymde .cm-attribute+.cm-string{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-formatting-code+.cm-comment:not(.cm-formatting-code){background-color:var(--color-cm-gray-background);color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-header-1{font-size:1.875rem;line-height:2.25rem}.EasyMDEContainer .cm-s-easymde .cm-header-2{font-size:1.5rem;line-height:2rem}.EasyMDEContainer .cm-s-easymde .cm-header-3{font-size:1.25rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-4{font-size:1.125rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-5{font-size:1rem;line-height:1.5rem}.EasyMDEContainer .cm-s-easymde .cm-header-6{font-size:.875rem;line-height:1.25rem}.EasyMDEContainer .cm-s-easymde .cm-comment{background-image:none}.EasyMDEContainer .CodeMirror,.EasyMDEContainer .cm-s-easymde .cm-formatting-code-block,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-comment{background-color:transparent;color:inherit}.EasyMDEContainer .CodeMirror{border-style:none;padding:.375rem .75rem}.EasyMDEContainer .CodeMirror-scroll{height:auto}.EasyMDEContainer .editor-toolbar{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity));border-radius:0;border-width:0 0 1px;-moz-column-gap:.25rem;column-gap:.25rem;display:flex;overflow-x:auto;padding:.5rem .625rem}.EasyMDEContainer .editor-toolbar:is(.dark *){border-color:hsla(0,0%,100%,.1)}.EasyMDEContainer .editor-toolbar button{border-radius:.5rem;border-style:none;cursor:pointer;display:grid;height:2rem;padding:0;place-content:center;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}.EasyMDEContainer .editor-toolbar button:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button.active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:before{--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity));display:block;height:1rem;width:1rem}.EasyMDEContainer .editor-toolbar button:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:before{content:"";-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.EasyMDEContainer .editor-toolbar button.active:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar .separator{border-style:none;margin:0!important;width:.25rem}.EasyMDEContainer .editor-toolbar .bold:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M321.1 242.4c19-22.3 30.9-50.8 30.9-82.4 0-70.59-57.42-128-128-128l-192 .01c-17.67 0-32 14.31-32 32s14.33 32 32 32h16v320H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h224c70.58 0 128-57.41 128-128 0-46.71-25.4-87.21-62.9-109.61zM112 96.01h112c35.3 0 64 28.72 64 64s-28.7 64-64 64H112v-128zM256 416H112V288h144c35.3 0 64 28.71 64 63.1S291.3 416 256 416z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M321.1 242.4c19-22.3 30.9-50.8 30.9-82.4 0-70.59-57.42-128-128-128l-192 .01c-17.67 0-32 14.31-32 32s14.33 32 32 32h16v320H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h224c70.58 0 128-57.41 128-128 0-46.71-25.4-87.21-62.9-109.61zM112 96.01h112c35.3 0 64 28.72 64 64s-28.7 64-64 64H112v-128zM256 416H112V288h144c35.3 0 64 28.71 64 63.1S291.3 416 256 416z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .italic:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M384 64.01c0 17.69-14.31 32-32 32h-58.67l-133.3 320H224c17.69 0 32 14.31 32 32s-14.31 32-32 32H32c-17.69 0-32-14.31-32-32s14.31-32 32-32h58.67l133.3-320H160c-17.69 0-32-14.31-32-32s14.31-32 32-32h192c17.7 0 32 14.32 32 32z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M384 64.01c0 17.69-14.31 32-32 32h-58.67l-133.3 320H224c17.69 0 32 14.31 32 32s-14.31 32-32 32H32c-17.69 0-32-14.31-32-32s14.31-32 32-32h58.67l133.3-320H160c-17.69 0-32-14.31-32-32s14.31-32 32-32h192c17.7 0 32 14.32 32 32z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .strikethrough:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M332.2 319.9c17.22 12.17 22.33 26.51 18.61 48.21-3.031 17.59-10.88 29.34-24.72 36.99-35.44 19.75-108.5 11.96-186-19.68-16.34-6.686-35.03 1.156-41.72 17.53s1.188 35.05 17.53 41.71c31.75 12.93 95.69 35.37 157.6 35.37 29.62 0 58.81-5.156 83.72-18.96 30.81-17.09 50.44-45.46 56.72-82.11 3.998-23.27 2.168-42.58-3.488-59.05H332.2zm155.8-80-176.5-.03c-15.85-5.614-31.83-10.34-46.7-14.62-85.47-24.62-110.9-39.05-103.7-81.33 2.5-14.53 10.16-25.96 22.72-34.03 20.47-13.15 64.06-23.84 155.4.343 17.09 4.53 34.59-5.654 39.13-22.74 4.531-17.09-5.656-34.59-22.75-39.12-91.31-24.18-160.7-21.62-206.3 7.654C121.8 73.72 103.6 101.1 98.09 133.1c-8.83 51.4 9.81 84.2 39.11 106.8H24c-13.25 0-24 10.75-24 23.1 0 13.25 10.75 23.1 24 23.1h464c13.25 0 24-10.75 24-23.1 0-12.3-10.7-23.1-24-23.1z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M332.2 319.9c17.22 12.17 22.33 26.51 18.61 48.21-3.031 17.59-10.88 29.34-24.72 36.99-35.44 19.75-108.5 11.96-186-19.68-16.34-6.686-35.03 1.156-41.72 17.53s1.188 35.05 17.53 41.71c31.75 12.93 95.69 35.37 157.6 35.37 29.62 0 58.81-5.156 83.72-18.96 30.81-17.09 50.44-45.46 56.72-82.11 3.998-23.27 2.168-42.58-3.488-59.05H332.2zm155.8-80-176.5-.03c-15.85-5.614-31.83-10.34-46.7-14.62-85.47-24.62-110.9-39.05-103.7-81.33 2.5-14.53 10.16-25.96 22.72-34.03 20.47-13.15 64.06-23.84 155.4.343 17.09 4.53 34.59-5.654 39.13-22.74 4.531-17.09-5.656-34.59-22.75-39.12-91.31-24.18-160.7-21.62-206.3 7.654C121.8 73.72 103.6 101.1 98.09 133.1c-8.83 51.4 9.81 84.2 39.11 106.8H24c-13.25 0-24 10.75-24 23.1 0 13.25 10.75 23.1 24 23.1h464c13.25 0 24-10.75 24-23.1 0-12.3-10.7-23.1-24-23.1z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .link:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M598.6 41.41C570.1 13.8 534.8 0 498.6 0s-72.36 13.8-99.96 41.41l-43.36 43.36c15.11 8.012 29.47 17.58 41.91 30.02 3.146 3.146 5.898 6.518 8.742 9.838l37.96-37.96C458.5 72.05 477.1 64 498.6 64c20.67 0 40.1 8.047 54.71 22.66 14.61 14.61 22.66 34.04 22.66 54.71s-8.049 40.1-22.66 54.71l-133.3 133.3C405.5 343.1 386 352 365.4 352s-40.1-8.048-54.71-22.66C296 314.7 287.1 295.3 287.1 274.6s8.047-40.1 22.66-54.71l4.44-3.49c-2.1-3.9-4.3-7.9-7.5-11.1-8.6-8.6-19.9-13.3-32.1-13.3-11.93 0-23.1 4.664-31.61 12.97-30.71 53.96-23.63 123.6 22.39 169.6C293 402.2 329.2 416 365.4 416c36.18 0 72.36-13.8 99.96-41.41L598.6 241.3c28.45-28.45 42.24-66.01 41.37-103.3-.87-35.9-14.57-69.84-41.37-96.59zM234 387.4l-37.9 37.9C181.5 439.1 162 448 141.4 448c-20.67 0-40.1-8.047-54.71-22.66-14.61-14.61-22.66-34.04-22.66-54.71s8.049-40.1 22.66-54.71l133.3-133.3C234.5 168 253.1 160 274.6 160s40.1 8.048 54.71 22.66c14.62 14.61 22.66 34.04 22.66 54.71s-8.047 40.1-22.66 54.71l-3.51 3.52c2.094 3.939 4.219 7.895 7.465 11.15C341.9 315.3 353.3 320 365.4 320c11.93 0 23.1-4.664 31.61-12.97 30.71-53.96 23.63-123.6-22.39-169.6C346.1 109.8 310.8 96 274.6 96c-36.2 0-72.3 13.8-99.9 41.4L41.41 270.7C13.81 298.3 0 334.48 0 370.66c0 36.18 13.8 72.36 41.41 99.97C69.01 498.2 105.2 512 141.4 512c36.18 0 72.36-13.8 99.96-41.41l43.36-43.36c-15.11-8.012-29.47-17.58-41.91-30.02-3.21-3.11-5.91-6.51-8.81-9.81z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M598.6 41.41C570.1 13.8 534.8 0 498.6 0s-72.36 13.8-99.96 41.41l-43.36 43.36c15.11 8.012 29.47 17.58 41.91 30.02 3.146 3.146 5.898 6.518 8.742 9.838l37.96-37.96C458.5 72.05 477.1 64 498.6 64c20.67 0 40.1 8.047 54.71 22.66 14.61 14.61 22.66 34.04 22.66 54.71s-8.049 40.1-22.66 54.71l-133.3 133.3C405.5 343.1 386 352 365.4 352s-40.1-8.048-54.71-22.66C296 314.7 287.1 295.3 287.1 274.6s8.047-40.1 22.66-54.71l4.44-3.49c-2.1-3.9-4.3-7.9-7.5-11.1-8.6-8.6-19.9-13.3-32.1-13.3-11.93 0-23.1 4.664-31.61 12.97-30.71 53.96-23.63 123.6 22.39 169.6C293 402.2 329.2 416 365.4 416c36.18 0 72.36-13.8 99.96-41.41L598.6 241.3c28.45-28.45 42.24-66.01 41.37-103.3-.87-35.9-14.57-69.84-41.37-96.59zM234 387.4l-37.9 37.9C181.5 439.1 162 448 141.4 448c-20.67 0-40.1-8.047-54.71-22.66-14.61-14.61-22.66-34.04-22.66-54.71s8.049-40.1 22.66-54.71l133.3-133.3C234.5 168 253.1 160 274.6 160s40.1 8.048 54.71 22.66c14.62 14.61 22.66 34.04 22.66 54.71s-8.047 40.1-22.66 54.71l-3.51 3.52c2.094 3.939 4.219 7.895 7.465 11.15C341.9 315.3 353.3 320 365.4 320c11.93 0 23.1-4.664 31.61-12.97 30.71-53.96 23.63-123.6-22.39-169.6C346.1 109.8 310.8 96 274.6 96c-36.2 0-72.3 13.8-99.9 41.4L41.41 270.7C13.81 298.3 0 334.48 0 370.66c0 36.18 13.8 72.36 41.41 99.97C69.01 498.2 105.2 512 141.4 512c36.18 0 72.36-13.8 99.96-41.41l43.36-43.36c-15.11-8.012-29.47-17.58-41.91-30.02-3.21-3.11-5.91-6.51-8.81-9.81z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .heading:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M0 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v112h224V96h-16c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v320h16c17.7 0 32 14.3 32 32s-14.3 32-32 32h-96c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V272H112v144h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V96H32C14.3 96 0 81.7 0 64z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M0 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v112h224V96h-16c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32h-16v320h16c17.7 0 32 14.3 32 32s-14.3 32-32 32h-96c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V272H112v144h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V96H32C14.3 96 0 81.7 0 64z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .quote:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M96 224c-11.28 0-21.95 2.3-32 5.9V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.3-32-32-32C57.42 96 0 153.4 0 224v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96zm256 0c-11.28 0-21.95 2.305-32 5.879V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.33-32-32-32c-70.58 0-128 57.42-128 128v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M96 224c-11.28 0-21.95 2.3-32 5.9V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.3-32-32-32C57.42 96 0 153.4 0 224v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96zm256 0c-11.28 0-21.95 2.305-32 5.879V224c0-35.3 28.7-64 64-64 17.67 0 32-14.33 32-32s-14.33-32-32-32c-70.58 0-128 57.42-128 128v96c0 53.02 42.98 96 96 96s96-42.98 96-96-43-96-96-96z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .code:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M416 31.94C416 21.75 408.1 0 384.1 0c-13.98 0-26.87 9.072-30.89 23.18l-128 448a31.933 31.933 0 0 0-1.241 8.801C223.1 490.3 232 512 256 512c13.92 0 26.73-9.157 30.75-23.22l128-448c.85-2.97 1.25-5.93 1.25-8.84zM176 143.1c0-18.28-14.95-32-32-32-8.188 0-16.38 3.125-22.62 9.376l-112 112C3.125 239.6 0 247.8 0 255.1s3.125 17.3 9.375 23.5l112 112c6.225 6.3 14.425 8.5 22.625 8.5 17.05 0 32-13.73 32-32 0-8.188-3.125-16.38-9.375-22.63L77.25 255.1l89.38-89.38c6.27-5.42 9.37-13.52 9.37-22.62zm464 112c0-8.188-3.125-16.38-9.375-22.63l-112-112C512.4 115.1 504.2 111.1 496 111.1c-17.05 0-32 13.73-32 32 0 8.188 3.125 16.38 9.375 22.63l89.38 89.38-89.38 89.38C467.1 351.6 464 359.8 464 367.1c0 18.28 14.95 32 32 32 8.188 0 16.38-3.125 22.62-9.376l112-112C636.9 272.4 640 264.2 640 255.1z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 512'%3E%3Cpath d='M416 31.94C416 21.75 408.1 0 384.1 0c-13.98 0-26.87 9.072-30.89 23.18l-128 448a31.933 31.933 0 0 0-1.241 8.801C223.1 490.3 232 512 256 512c13.92 0 26.73-9.157 30.75-23.22l128-448c.85-2.97 1.25-5.93 1.25-8.84zM176 143.1c0-18.28-14.95-32-32-32-8.188 0-16.38 3.125-22.62 9.376l-112 112C3.125 239.6 0 247.8 0 255.1s3.125 17.3 9.375 23.5l112 112c6.225 6.3 14.425 8.5 22.625 8.5 17.05 0 32-13.73 32-32 0-8.188-3.125-16.38-9.375-22.63L77.25 255.1l89.38-89.38c6.27-5.42 9.37-13.52 9.37-22.62zm464 112c0-8.188-3.125-16.38-9.375-22.63l-112-112C512.4 115.1 504.2 111.1 496 111.1c-17.05 0-32 13.73-32 32 0 8.188 3.125 16.38 9.375 22.63l89.38 89.38-89.38 89.38C467.1 351.6 464 359.8 464 367.1c0 18.28 14.95 32 32 32 8.188 0 16.38-3.125 22.62-9.376l112-112C636.9 272.4 640 264.2 640 255.1z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .unordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M16 96c0-26.51 21.49-48 48-48s48 21.49 48 48c0 26.5-21.49 48-48 48s-48-21.5-48-48zm464-32c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zM16 416c0-26.5 21.49-48 48-48s48 21.5 48 48-21.49 48-48 48-48-21.5-48-48zm96-160c0 26.5-21.49 48-48 48s-48-21.5-48-48 21.49-48 48-48 48 21.5 48 48z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M16 96c0-26.51 21.49-48 48-48s48 21.49 48 48c0 26.5-21.49 48-48 48s-48-21.5-48-48zm464-32c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32h288zM16 416c0-26.5 21.49-48 48-48s48 21.5 48 48-21.49 48-48 48-48-21.5-48-48zm96-160c0 26.5-21.49 48-48 48s-48-21.5-48-48 21.49-48 48-48 48 21.5 48 48z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .ordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M55.1 56.04c0-13.26 11.64-24 24-24h32c14.2 0 24 10.74 24 24V176h16c14.2 0 24 10.8 24 24 0 13.3-9.8 24-24 24h-80c-12.36 0-24-10.7-24-24 0-13.2 11.64-24 24-24h16V80.04h-8c-12.36 0-24-10.75-24-24zm63.6 285.16c-6.6-7.4-18.3-6.9-24.05 1.2l-11.12 15.5c-7.7 10.8-22.69 13.3-33.48 5.6-10.79-7.7-13.28-22.7-5.58-33.4l11.12-15.6c23.74-33.3 72.31-35.7 99.21-4.9 21.3 23.5 20.8 60.9-1.1 84.7L118.8 432H152c13.3 0 24 10.7 24 24s-10.7 24-24 24H64c-9.53 0-18.16-5.6-21.98-14.4-3.83-8.7-2.12-18.9 4.34-25.9l72.04-78c5.3-5.8 5.4-14.6.3-20.5zM512 64c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H256c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M55.1 56.04c0-13.26 11.64-24 24-24h32c14.2 0 24 10.74 24 24V176h16c14.2 0 24 10.8 24 24 0 13.3-9.8 24-24 24h-80c-12.36 0-24-10.7-24-24 0-13.2 11.64-24 24-24h16V80.04h-8c-12.36 0-24-10.75-24-24zm63.6 285.16c-6.6-7.4-18.3-6.9-24.05 1.2l-11.12 15.5c-7.7 10.8-22.69 13.3-33.48 5.6-10.79-7.7-13.28-22.7-5.58-33.4l11.12-15.6c23.74-33.3 72.31-35.7 99.21-4.9 21.3 23.5 20.8 60.9-1.1 84.7L118.8 432H152c13.3 0 24 10.7 24 24s-10.7 24-24 24H64c-9.53 0-18.16-5.6-21.98-14.4-3.83-8.7-2.12-18.9 4.34-25.9l72.04-78c5.3-5.8 5.4-14.6.3-20.5zM512 64c17.7 0 32 14.33 32 32 0 17.7-14.3 32-32 32H256c-17.7 0-32-14.3-32-32 0-17.67 14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256zm0 160c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32h256z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .table:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1792 1792'%3E%3Cpath d='M576 1376v-192q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V800q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zM576 608V416q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm-512-768V416q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V416q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm128-320v1088q0 66-47 113t-113 47H224q-66 0-113-47t-47-113V288q0-66 47-113t113-47h1344q66 0 113 47t47 113z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1792 1792'%3E%3Cpath d='M576 1376v-192q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V800q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zM576 608V416q0-14-9-23t-23-9H224q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384v-192q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm-512-768V416q0-14-9-23t-23-9H736q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm512 384V800q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm0-384V416q0-14-9-23t-23-9h-320q-14 0-23 9t-9 23v192q0 14 9 23t23 9h320q14 0 23-9t9-23zm128-320v1088q0 66-47 113t-113 47H224q-66 0-113-47t-47-113V288q0-66 47-113t113-47h1344q66 0 113 47t47 113z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .upload-image:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M447.1 32h-484C28.64 32-.01 60.65-.01 96v320c0 35.35 28.65 64 63.1 64h384c35.35 0 64-28.65 64-64V96c.01-35.35-27.79-64-63.99-64zm-336 64c26.51 0 48 21.49 48 48s-20.6 48-48 48-48-21.49-48-48 22.38-48 48-48zm335 311.6c-2.8 5.2-8.2 8.4-14.1 8.4H82.01a15.993 15.993 0 0 1-14.26-8.75 16 16 0 0 1 1.334-16.68l70-96C142.1 290.4 146.9 288 152 288s9.916 2.441 12.93 6.574l32.46 44.51 93.3-139.1C293.7 194.7 298.7 192 304 192s10.35 2.672 13.31 7.125l128 192c3.29 4.875 3.59 11.175.79 16.475z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M447.1 32h-484C28.64 32-.01 60.65-.01 96v320c0 35.35 28.65 64 63.1 64h384c35.35 0 64-28.65 64-64V96c.01-35.35-27.79-64-63.99-64zm-336 64c26.51 0 48 21.49 48 48s-20.6 48-48 48-48-21.49-48-48 22.38-48 48-48zm335 311.6c-2.8 5.2-8.2 8.4-14.1 8.4H82.01a15.993 15.993 0 0 1-14.26-8.75 16 16 0 0 1 1.334-16.68l70-96C142.1 290.4 146.9 288 152 288s9.916 2.441 12.93 6.574l32.46 44.51 93.3-139.1C293.7 194.7 298.7 192 304 192s10.35 2.672 13.31 7.125l128 192c3.29 4.875 3.59 11.175.79 16.475z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .undo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M480 256c0 123.4-100.5 223.9-223.9 223.9-48.84 0-95.17-15.58-134.2-44.86-14.12-10.59-16.97-30.66-6.375-44.81 10.59-14.12 30.62-16.94 44.81-6.375 27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256S344.31 96.2 256.2 96.2c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04C16 35 45.07 22.96 62.07 39.97l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11 379.5 32.11 480 132.6 480 256z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M480 256c0 123.4-100.5 223.9-223.9 223.9-48.84 0-95.17-15.58-134.2-44.86-14.12-10.59-16.97-30.66-6.375-44.81 10.59-14.12 30.62-16.94 44.81-6.375 27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256S344.31 96.2 256.2 96.2c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04C16 35 45.07 22.96 62.07 39.97l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11 379.5 32.11 480 132.6 480 256z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .redo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M468.9 32.11c13.87 0 27.18 10.77 27.18 27.04v145.9c0 10.59-8.584 19.17-19.17 19.17h-145.7c-16.28 0-27.06-13.32-27.06-27.2 0-6.634 2.461-13.4 7.96-18.9l45.12-45.14c-28.22-23.14-63.85-36.64-101.3-36.64-88.09 0-159.8 71.69-159.8 159.8S167.8 415.9 255.9 415.9c73.14 0 89.44-38.31 115.1-38.31 18.48 0 31.97 15.04 31.97 31.96 0 35.04-81.59 70.41-147 70.41-123.4 0-223.9-100.5-223.9-223.9S132.6 32.44 256 32.44c54.6 0 106.2 20.39 146.4 55.26L450 40.07c5.5-5.5 12.3-7.96 18.9-7.96z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M468.9 32.11c13.87 0 27.18 10.77 27.18 27.04v145.9c0 10.59-8.584 19.17-19.17 19.17h-145.7c-16.28 0-27.06-13.32-27.06-27.2 0-6.634 2.461-13.4 7.96-18.9l45.12-45.14c-28.22-23.14-63.85-36.64-101.3-36.64-88.09 0-159.8 71.69-159.8 159.8S167.8 415.9 255.9 415.9c73.14 0 89.44-38.31 115.1-38.31 18.48 0 31.97 15.04 31.97 31.96 0 35.04-81.59 70.41-147 70.41-123.4 0-223.9-100.5-223.9-223.9S132.6 32.44 256 32.44c54.6 0 106.2 20.39 146.4 55.26L450 40.07c5.5-5.5 12.3-7.96 18.9-7.96z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-statusbar{display:none}.fi-fo-rich-editor trix-toolbar .trix-dialogs{position:relative}.fi-fo-rich-editor trix-toolbar .trix-dialog{--tw-bg-opacity:1;--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgba(var(--gray-50),var(--tw-bg-opacity));border-radius:.5rem;bottom:auto;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);left:0;padding:.5rem;position:absolute;right:0;top:1rem}.fi-fo-rich-editor trix-toolbar .trix-dialog:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields{display:flex;flex-direction:column;gap:.5rem;width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group{display:flex;gap:.5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-style:none;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--gray-950),var(--tw-text-opacity));display:block;font-size:.875rem;line-height:1.25rem;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:.75rem;padding-top:.375rem;padding-inline-start:.75rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *){--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-color:hsla(0,0%,100%,.2);background-color:rgba(var(--gray-700),var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}@media (min-width:640px){.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{font-size:.875rem;line-height:1.5rem}}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button{--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity));background-color:rgba(var(--gray-50),var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.75rem;line-height:1rem;padding:.125rem .5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button:is(.dark *){--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-600),var(--tw-ring-opacity));background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}.fi-fo-rich-editor trix-editor:empty:before{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-editor:empty:is(.dark *):before{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-editor:empty:before{content:attr(placeholder)}.fi-fo-rich-editor trix-editor.prose :where(ol):not(:where([class~=not-prose] *)),.fi-fo-rich-editor trix-editor.prose :where(ul):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:1.625em!important}.fi-fo-rich-editor trix-editor.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:.375em!important}select:not(.choices){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E")}[dir=rtl] select{background-position:left .5rem center!important}.choices{outline:2px solid transparent;outline-offset:2px;position:relative}.choices [hidden]{display:none!important}.choices[data-type*=select-one] .has-no-choices{display:none}.choices[data-type*=select-one] .choices__input{display:block;margin:0;width:100%}.choices__inner{background-repeat:no-repeat;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:2rem;padding-top:.375rem;padding-inline-start:.75rem}@media (min-width:640px){.choices__inner{font-size:.875rem;line-height:1.5rem}}.choices__inner{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-size:1.5em 1.5em}.choices.is-disabled .choices__inner{cursor:default}[dir=rtl] .choices__inner{background-position:left .5rem center}.choices__list--single{display:inline-block}.choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices.is-disabled .choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices.is-disabled .choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__list--multiple{display:flex;flex-wrap:wrap;gap:.375rem}.choices__list--multiple:not(:empty){margin-bottom:.25rem;margin-left:-.25rem;margin-right:-.25rem;padding-bottom:.125rem;padding-top:.125rem}.choices__list--multiple .choices__item{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-color:rgba(var(--primary-600),0.1);align-items:center;background-color:rgba(var(--primary-50),var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--primary-600),var(--tw-text-opacity));display:inline-flex;font-size:.75rem;font-weight:500;gap:.25rem;line-height:1rem;padding:.25rem .5rem;word-break:break-all}.choices__list--multiple .choices__item:is(.dark *){--tw-text-opacity:1;--tw-ring-color:rgba(var(--primary-400),0.3);background-color:rgba(var(--primary-400),.1);color:rgba(var(--primary-400),var(--tw-text-opacity))}.choices__list--dropdown,.choices__list[aria-expanded]{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.05);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:none;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;overflow:hidden;overflow-wrap:break-word;position:absolute;top:100%;width:100%;will-change:visibility;z-index:10}.choices__list--dropdown:is(.dark *),.choices__list[aria-expanded]:is(.dark *){--tw-bg-opacity:1;--tw-ring-color:hsla(0,0%,100%,.1);background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.is-active.choices__list--dropdown,.is-active.choices__list[aria-expanded]{display:block;padding:.25rem}.choices__list--dropdown .choices__list,.choices__list[aria-expanded] .choices__list{max-height:15rem;overflow:auto;will-change:scroll-position}.choices__item--choice{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity));padding:.5rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__item--choice:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__item--choice.choices__item--selectable{--tw-text-opacity:1;border-radius:.375rem;color:rgba(var(--gray-950),var(--tw-text-opacity))}.choices__item--choice.choices__item--selectable:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices__list--dropdown .choices__item--selectable.is-highlighted,.choices__list[aria-expanded] .choices__item--selectable.is-highlighted{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.choices__list--dropdown .choices__item--selectable.is-highlighted:is(.dark *),.choices__list[aria-expanded] .choices__item--selectable.is-highlighted:is(.dark *){background-color:hsla(0,0%,100%,.05)}.choices__item{cursor:default}.choices__item--disabled{pointer-events:none}.choices__item--disabled:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__item--disabled:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices.is-disabled .choices__placeholder.choices__item,.choices__placeholder.choices__item{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity));cursor:default}.choices.is-disabled .choices__placeholder.choices__item:is(.dark *),.choices__placeholder.choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__button{background-color:transparent;background-position:50%;background-repeat:no-repeat;border-width:0;outline:2px solid transparent;outline-offset:2px;text-indent:-9999px}.choices[data-type*=select-one] .choices__button{height:1rem;inset-inline-end:0;margin-inline-end:2.25rem;opacity:.5;padding:0;position:absolute;transition-duration:75ms;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1rem}.choices[data-type*=select-one] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em;top:calc(50% - .5714em)}.dark .choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button{height:1rem;opacity:.5;width:1rem}.choices[data-type*=select-multiple] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em}.dark .choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button:focus-visible,.choices[data-type*=select-multiple] .choices__button:hover,.choices[data-type*=select-one] .choices__button:focus-visible,.choices[data-type*=select-one] .choices__button:hover{opacity:.7}.choices[data-type*=select-multiple] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-multiple] .choices__button:hover:is(.dark *),.choices[data-type*=select-one] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-one] .choices__button:hover:is(.dark *){opacity:.6}.choices.is-disabled .choices__button,.choices[data-type*=select-one] .choices__item[data-value=""] .choices__button{display:none}.choices__input{--tw-text-opacity:1;background-color:transparent!important;border-style:none;color:rgba(var(--gray-950),var(--tw-text-opacity));font-size:1rem!important;line-height:1.5rem!important;padding:0!important;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__input:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.choices__input:disabled{--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-500),1);color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices__input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:disabled:is(.dark *){--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-400),1);color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.choices__input{font-size:.875rem!important;line-height:1.5rem}}.choices__list--dropdown .choices__input{padding:.5rem!important}.choices__input::-webkit-search-cancel-button,.choices__input::-webkit-search-decoration,.choices__input::-webkit-search-results-button,.choices__input::-webkit-search-results-decoration{display:none}.choices__input::-ms-clear,.choices__input::-ms-reveal{display:none;height:0;width:0}.choices__group{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity));padding:1rem .5rem .5rem}.choices__group:first-child{padding-top:.5rem}.choices__group:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.webkit-calendar-picker-indicator\:opacity-0::-webkit-calendar-picker-indicator{opacity:0}/*! Bundled license information: +input::-webkit-datetime-edit{display:block;padding:0}.cropper-container{-webkit-touch-callout:none;direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{inset:0;position:absolute}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:#3399ffbf;overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.33333%;left:0;top:33.33333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.33333%;top:0;width:33.33333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}.filepond--assistant{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--browser.filepond--browser{font-size:0;left:1em;margin:0;opacity:0;padding:0;position:absolute;top:1.75em;width:calc(100% - 2em)}.filepond--data{border:none;contain:strict;height:0;margin:0;padding:0;visibility:hidden;width:0}.filepond--data,.filepond--drip{pointer-events:none;position:absolute}.filepond--drip{background:rgba(0,0,0,.01);border-radius:.5em;inset:0;opacity:.1;overflow:hidden}.filepond--drip-blob{background:#292625;border-radius:50%;height:8em;margin-left:-4em;margin-top:-4em;transform-origin:center center;width:8em}.filepond--drip-blob,.filepond--drop-label{left:0;position:absolute;top:0;will-change:transform,opacity}.filepond--drop-label{align-items:center;color:#4f4f4f;display:flex;height:0;justify-content:center;margin:0;right:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--drop-label.filepond--drop-label label{display:block;margin:0;padding:.5em}.filepond--drop-label label{cursor:default;font-size:.875em;font-weight:400;line-height:1.5;text-align:center}.filepond--label-action{-webkit-text-decoration-skip:ink;cursor:pointer;text-decoration:underline;text-decoration-color:#a7a4a4;text-decoration-skip-ink:auto}.filepond--root[data-disabled] .filepond--drop-label label{opacity:.5}.filepond--file-action-button.filepond--file-action-button{border:none;font-family:inherit;font-size:1em;height:1.625em;line-height:inherit;margin:0;outline:none;padding:0;width:1.625em;will-change:transform,opacity}.filepond--file-action-button.filepond--file-action-button span{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file-action-button.filepond--file-action-button svg{height:100%;width:100%}.filepond--file-action-button.filepond--file-action-button:after{content:"";inset:-.75em;position:absolute}.filepond--file-action-button{background-color:#00000080;background-image:none;border-radius:50%;box-shadow:0 0 #fff0;color:#fff;cursor:auto;transition:box-shadow .25s ease-in}.filepond--file-action-button:focus,.filepond--file-action-button:hover{box-shadow:0 0 0 .125em #ffffffe6}.filepond--file-action-button[disabled]{background-color:#00000040;color:#ffffff80}.filepond--file-action-button[hidden]{display:none}.filepond--file-info{align-items:flex-start;display:flex;flex:1;flex-direction:column;margin:0 .5em 0 0;min-width:0;pointer-events:none;position:static;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-info *{margin:0}.filepond--file-info .filepond--file-info-main{font-size:.75em;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.filepond--file-info .filepond--file-info-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out;white-space:nowrap}.filepond--file-info .filepond--file-info-sub:empty{display:none}.filepond--file-status{align-items:flex-end;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;margin:0;min-width:2.25em;pointer-events:none;position:static;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none;will-change:transform,opacity}.filepond--file-status *{margin:0;white-space:nowrap}.filepond--file-status .filepond--file-status-main{font-size:.75em;line-height:1.2}.filepond--file-status .filepond--file-status-sub{font-size:.625em;opacity:.5;transition:opacity .25s ease-in-out}.filepond--file-wrapper.filepond--file-wrapper{border:none;height:100%;margin:0;min-width:0;padding:0}.filepond--file-wrapper.filepond--file-wrapper>legend{clip:rect(1px,1px,1px,1px);border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.filepond--file{align-items:flex-start;border-radius:.5em;color:#fff;display:flex;height:100%;padding:.5625em;position:static}.filepond--file .filepond--file-status{margin-left:auto;margin-right:2.25em}.filepond--file .filepond--processing-complete-indicator{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:3}.filepond--file .filepond--file-action-button,.filepond--file .filepond--processing-complete-indicator,.filepond--file .filepond--progress-indicator{position:absolute}.filepond--file [data-align*=left]{left:.5625em}.filepond--file [data-align*=right]{right:.5625em}.filepond--file [data-align*=center]{left:calc(50% - .8125em)}.filepond--file [data-align*=bottom]{bottom:1.125em}.filepond--file [data-align=center]{top:calc(50% - .8125em)}.filepond--file .filepond--progress-indicator{margin-top:.1875em}.filepond--file .filepond--progress-indicator[data-align*=right]{margin-right:.1875em}.filepond--file .filepond--progress-indicator[data-align*=left]{margin-left:.1875em}[data-filepond-item-state*=error] .filepond--file-info,[data-filepond-item-state*=invalid] .filepond--file-info,[data-filepond-item-state=cancelled] .filepond--file-info{margin-right:2.25em}[data-filepond-item-state~=processing] .filepond--file-status-sub{opacity:0}[data-filepond-item-state~=processing] .filepond--action-abort-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-error] .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-error] .filepond--action-retry-item-processing~.filepond--file-status .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing svg{animation:fall .5s linear .125s both}[data-filepond-item-state=processing-complete] .filepond--file-status-sub{opacity:.5}[data-filepond-item-state=processing-complete] .filepond--file-info-sub,[data-filepond-item-state=processing-complete] .filepond--processing-complete-indicator:not([style*=hidden])~.filepond--file-status .filepond--file-status-sub{opacity:0}[data-filepond-item-state=processing-complete] .filepond--action-revert-item-processing~.filepond--file-info .filepond--file-info-sub{opacity:.5}[data-filepond-item-state*=error] .filepond--file-wrapper,[data-filepond-item-state*=error] .filepond--panel,[data-filepond-item-state*=invalid] .filepond--file-wrapper,[data-filepond-item-state*=invalid] .filepond--panel{animation:shake .65s linear both}[data-filepond-item-state*=busy] .filepond--progress-indicator svg{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes shake{10%,90%{transform:translate(-.0625em)}20%,80%{transform:translate(.125em)}30%,50%,70%{transform:translate(-.25em)}40%,60%{transform:translate(.25em)}}@keyframes fall{0%{animation-timing-function:ease-out;opacity:0;transform:scale(.5)}70%{animation-timing-function:ease-in-out;opacity:1;transform:scale(1.1)}to{animation-timing-function:ease-out;transform:scale(1)}}.filepond--hopper[data-hopper-state=drag-over]>*{pointer-events:none}.filepond--hopper[data-hopper-state=drag-over]:after{content:"";inset:0;position:absolute;z-index:100}.filepond--progress-indicator{z-index:103}.filepond--file-action-button{z-index:102}.filepond--file-status{z-index:101}.filepond--file-info{z-index:100}.filepond--item{left:0;margin:.25em;padding:0;position:absolute;right:0;top:0;touch-action:none;will-change:transform,opacity;z-index:1}.filepond--item>.filepond--panel{z-index:-1}.filepond--item>.filepond--panel .filepond--panel-bottom{box-shadow:0 .0625em .125em -.0625em #00000040}.filepond--item>.filepond--file-wrapper,.filepond--item>.filepond--panel{transition:opacity .15s ease-out}.filepond--item[data-drag-state]{cursor:grab}.filepond--item[data-drag-state]>.filepond--panel{box-shadow:0 0 0 transparent;transition:box-shadow .125s ease-in-out}.filepond--item[data-drag-state=drag]{cursor:grabbing}.filepond--item[data-drag-state=drag]>.filepond--panel{box-shadow:0 .125em .3125em #00000053}.filepond--item[data-drag-state]:not([data-drag-state=idle]){z-index:2}.filepond--item-panel{background-color:#64605e}[data-filepond-item-state=processing-complete] .filepond--item-panel{background-color:#369763}[data-filepond-item-state*=error] .filepond--item-panel,[data-filepond-item-state*=invalid] .filepond--item-panel{background-color:#c44e47}.filepond--item-panel{border-radius:.5em;transition:background-color .25s}.filepond--list-scroller{left:0;margin:0;position:absolute;right:0;top:0;will-change:transform}.filepond--list-scroller[data-state=overflow] .filepond--list{bottom:0;right:0}.filepond--list-scroller[data-state=overflow]{-webkit-overflow-scrolling:touch;-webkit-mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);mask:linear-gradient(180deg,#000 calc(100% - .5em),transparent);overflow-x:hidden;overflow-y:scroll}.filepond--list-scroller::-webkit-scrollbar{background:transparent}.filepond--list-scroller::-webkit-scrollbar:vertical{width:1em}.filepond--list-scroller::-webkit-scrollbar:horizontal{height:0}.filepond--list-scroller::-webkit-scrollbar-thumb{background-clip:content-box;background-color:#0000004d;border:.3125em solid transparent;border-radius:99999px}.filepond--list.filepond--list{list-style-type:none;margin:0;padding:0;position:absolute;top:0;will-change:transform}.filepond--list{left:.75em;right:.75em}.filepond--root[data-style-panel-layout~=integrated]{height:100%;margin:0;max-width:none;width:100%}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root{border-radius:0}.filepond--root[data-style-panel-layout~=circle] .filepond--panel-root>*,.filepond--root[data-style-panel-layout~=integrated] .filepond--panel-root>*{display:none}.filepond--root[data-style-panel-layout~=circle] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{align-items:center;bottom:0;display:flex;height:auto;justify-content:center;z-index:7}.filepond--root[data-style-panel-layout~=circle] .filepond--item-panel,.filepond--root[data-style-panel-layout~=integrated] .filepond--item-panel{display:none}.filepond--root[data-style-panel-layout~=compact] .filepond--list-scroller,.filepond--root[data-style-panel-layout~=integrated] .filepond--list-scroller{height:100%;margin-bottom:0;margin-top:0;overflow:hidden}.filepond--root[data-style-panel-layout~=compact] .filepond--list,.filepond--root[data-style-panel-layout~=integrated] .filepond--list{height:100%;left:0;right:0}.filepond--root[data-style-panel-layout~=compact] .filepond--item,.filepond--root[data-style-panel-layout~=integrated] .filepond--item{margin:0}.filepond--root[data-style-panel-layout~=compact] .filepond--file-wrapper,.filepond--root[data-style-panel-layout~=integrated] .filepond--file-wrapper{height:100%}.filepond--root[data-style-panel-layout~=compact] .filepond--drop-label,.filepond--root[data-style-panel-layout~=integrated] .filepond--drop-label{z-index:7}.filepond--root[data-style-panel-layout~=circle]{border-radius:99999rem;overflow:hidden}.filepond--root[data-style-panel-layout~=circle]>.filepond--panel{border-radius:inherit}.filepond--root[data-style-panel-layout~=circle] .filepond--file-info,.filepond--root[data-style-panel-layout~=circle] .filepond--file-status,.filepond--root[data-style-panel-layout~=circle]>.filepond--panel>*{display:none}@media not all and (-webkit-min-device-pixel-ratio:0),not all and (min-resolution:.001dpcm){@supports (-webkit-appearance:none) and (stroke-color:transparent){.filepond--root[data-style-panel-layout~=circle]{will-change:transform}}}.filepond--panel-root{background-color:#f1f0ef;border-radius:.5em}.filepond--panel{height:100%!important;left:0;margin:0;pointer-events:none;position:absolute;right:0;top:0}.filepond-panel:not([data-scalable=false]){height:auto!important}.filepond--panel[data-scalable=false]>div{display:none}.filepond--panel[data-scalable=true]{background-color:transparent!important;border:none!important;transform-style:preserve-3d}.filepond--panel-bottom,.filepond--panel-center,.filepond--panel-top{left:0;margin:0;padding:0;position:absolute;right:0;top:0}.filepond--panel-bottom,.filepond--panel-top{height:.5em}.filepond--panel-top{border-bottom:none!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.filepond--panel-top:after{background-color:inherit;bottom:-1px;content:"";height:2px;left:0;position:absolute;right:0}.filepond--panel-bottom,.filepond--panel-center{backface-visibility:hidden;transform:translate3d(0,.5em,0);transform-origin:left top;will-change:transform}.filepond--panel-bottom{border-top:none!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.filepond--panel-bottom:before{background-color:inherit;content:"";height:2px;left:0;position:absolute;right:0;top:-1px}.filepond--panel-center{border-bottom:none!important;border-radius:0!important;border-top:none!important;height:100px!important}.filepond--panel-center:not([style]){visibility:hidden}.filepond--progress-indicator{color:#fff;height:1.25em;margin:0;pointer-events:none;position:static;width:1.25em;will-change:transform,opacity}.filepond--progress-indicator svg{height:100%;transform-box:fill-box;vertical-align:top;width:100%}.filepond--progress-indicator path{fill:none;stroke:currentColor}.filepond--list-scroller{z-index:6}.filepond--drop-label{z-index:5}.filepond--drip{z-index:3}.filepond--root>.filepond--panel{z-index:2}.filepond--browser{z-index:1}.filepond--root{box-sizing:border-box;contain:layout style size;direction:ltr;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1rem;font-weight:450;line-height:normal;margin-bottom:1em;position:relative;text-align:left;text-rendering:optimizeLegibility}.filepond--root *{box-sizing:inherit;line-height:inherit}.filepond--root :not(text){font-size:inherit}.filepond--root[data-disabled]{pointer-events:none}.filepond--root[data-disabled] .filepond--list-scroller{pointer-events:all}.filepond--root[data-disabled] .filepond--list{pointer-events:none}.filepond--root .filepond--drop-label{min-height:4.75em}.filepond--root .filepond--list-scroller{margin-bottom:1em;margin-top:1em}.filepond--root .filepond--credits{bottom:-14px;color:inherit;font-size:11px;line-height:.85;opacity:.175;position:absolute;right:0;text-decoration:none;z-index:3}.filepond--root .filepond--credits[style]{bottom:auto;margin-top:14px;top:0}.filepond--action-edit-item.filepond--action-edit-item{height:2em;padding:.1875em;width:2em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=center]{margin-left:-.1875em}.filepond--action-edit-item.filepond--action-edit-item[data-align*=bottom]{margin-bottom:-.1875em}.filepond--action-edit-item-alt{background:transparent;border:none;color:inherit;font-family:inherit;line-height:inherit;margin:0 0 0 .25em;outline:none;padding:0;pointer-events:all;position:absolute}.filepond--action-edit-item-alt svg{height:1.3125em;width:1.3125em}.filepond--action-edit-item-alt span{font-size:0;opacity:0}.filepond--root[data-style-panel-layout~=circle] .filepond--action-edit-item{opacity:1!important;visibility:visible!important}.filepond--image-preview-markup{left:0;position:absolute;top:0}.filepond--image-preview-wrapper{z-index:2}.filepond--image-preview-overlay{display:block;left:0;margin:0;max-height:7rem;min-height:5rem;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:2}.filepond--image-preview-overlay svg{color:inherit;height:auto;max-height:inherit;width:100%}.filepond--image-preview-overlay-idle{color:#282828d9;mix-blend-mode:multiply}.filepond--image-preview-overlay-success{color:#369763;mix-blend-mode:normal}.filepond--image-preview-overlay-failure{color:#c44e47;mix-blend-mode:normal}@supports (-webkit-marquee-repetition:infinite) and ((-o-object-fit:fill) or (object-fit:fill)){.filepond--image-preview-overlay-idle{mix-blend-mode:normal}}.filepond--image-preview-wrapper{background:rgba(0,0,0,.01);border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.filepond--image-preview{align-items:center;background:#222;display:flex;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;will-change:transform,opacity;z-index:1}.filepond--image-clip{margin:0 auto;overflow:hidden;position:relative}.filepond--image-clip[data-transparency-indicator=grid] canvas,.filepond--image-clip[data-transparency-indicator=grid] img{background-color:#fff;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg' fill='%23eee'%3E%3Cpath d='M0 0h50v50H0M50 50h50v50H50'/%3E%3C/svg%3E");background-size:1.25em 1.25em}.filepond--image-bitmap,.filepond--image-vector{left:0;position:absolute;top:0;will-change:transform}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview-wrapper{border-radius:0}.filepond--root[data-style-panel-layout~=integrated] .filepond--image-preview{align-items:center;display:flex;height:100%;justify-content:center}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-wrapper{border-radius:99999rem}.filepond--root[data-style-panel-layout~=circle] .filepond--image-preview-overlay{bottom:0;top:auto;transform:scaleY(-1)}.filepond--root[data-style-panel-layout~=circle] .filepond--file .filepond--file-action-button[data-align*=bottom]:not([data-align*=center]){margin-bottom:.325em}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=left]{left:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--file [data-align*=right]{right:calc(50% - 3em)}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=left],.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=right]{margin-bottom:.5125em}.filepond--root[data-style-panel-layout~=circle] .filepond--progress-indicator[data-align*=bottom][data-align*=center]{margin-bottom:.1875em;margin-left:.1875em;margin-top:0}.filepond--media-preview audio{display:none}.filepond--media-preview .audioplayer{margin:2.3em auto auto;width:calc(100% - 1.4em)}.filepond--media-preview .playpausebtn{background-position:50%;background-repeat:no-repeat;border:none;border-radius:25px;cursor:pointer;float:left;height:25px;margin-right:.3em;margin-top:.3em;outline:none;width:25px}.filepond--media-preview .playpausebtn:hover{background-color:#00000080}.filepond--media-preview .play{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAyElEQVQ4T9XUsWoCQRRG4XPaFL5SfIy8gKYKBCysrax8Ahs7qzQ2qVIFOwsrsbEWLEK6EBFGBrIQhN2d3dnGgalm+Jh7789Ix8uOPe4YDCH0gZ66atKW0pJDCE/AEngDXtRjCpwCRucbGANzNVTBqWBhfAJDdV+GNgWj8wtM41bPt3AbsDB2f69d/0dzwC0wUDe54A8wAWbqJbfkD+BZPeQO5QsYqYu6LKb0MIb7VT3VYfG8CnwEHtT3FKi4c8e/TZMyk3LYFrwCgMdHFbRDKS8AAAAASUVORK5CYII=)}.filepond--media-preview .pause{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAh0lEQVQ4T+2UsQkCURBE30PLMbAMMResQrAPsQ0TK9AqDKxGZeTLD74aGNwlhzfZssvADDMrPcOe+RggYZIJcG2s2KinMidZAvu6u6uzT8u+JCeZArfmcKUeK+EaONTdQy23bxgJX8aPHvIHsSnVuzTx36rn2pQFsGuqN//ZlK7vbIDvq6vkJ9yteBXzecYbAAAAAElFTkSuQmCC)}.filepond--media-preview .timeline{background:hsla(0,0%,100%,.3);border-radius:15px;float:left;height:3px;margin-top:1em;width:calc(100% - 2.5em)}.filepond--media-preview .playhead{background:#fff;border-radius:50%;height:13px;margin-top:-5px;width:13px}.filepond--media-preview-wrapper{background:rgba(0,0,0,.01);border-radius:.45em;height:100%;left:0;margin:0;overflow:hidden;pointer-events:auto;position:absolute;right:0;top:0}.filepond--media-preview-wrapper:before{background:linear-gradient(180deg,#000 0,transparent);content:" ";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#000000",endColorstr="#00000000",GradientType=0);height:2em;position:absolute;width:100%;z-index:3}.filepond--media-preview{display:block;height:100%;position:relative;transform-origin:center center;width:100%;will-change:transform,opacity;z-index:1}.filepond--media-preview audio,.filepond--media-preview video{width:100%;will-change:transform}.filepond--root{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);margin-bottom:0}.filepond--root:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.2);background-color:hsla(0,0%,100%,.05)}.filepond--root[data-disabled=disabled]{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.filepond--root[data-disabled=disabled]:is(.dark *){--tw-ring-color:hsla(0,0%,100%,.1);background-color:transparent}.filepond--panel-root{background-color:transparent}.filepond--drop-label label{--tw-text-opacity:1;color:rgba(var(--gray-600),var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem;padding:.75rem!important}.filepond--drop-label label:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.filepond--label-action{--tw-text-opacity:1;color:rgba(var(--primary-600),var(--tw-text-opacity));font-weight:500;text-decoration-line:none;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.filepond--label-action:hover{--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.filepond--label-action:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.filepond--label-action:hover:is(.dark *){--tw-text-opacity:1;color:rgba(var(--primary-500),var(--tw-text-opacity))}.filepond--drip-blob{--tw-bg-opacity:1;background-color:rgba(var(--gray-400),var(--tw-bg-opacity))}.filepond--drip-blob:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-500),var(--tw-bg-opacity))}.filepond--root[data-style-panel-layout=grid] .filepond--item{display:inline;width:calc(50% - .5rem)}@media (min-width:1024px){.filepond--root[data-style-panel-layout=grid] .filepond--item{width:calc(33.33% - .5rem)}}.filepond--download-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--download-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--download-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWRvd25sb2FkIj48cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNE03IDEwbDUgNSA1LTVNMTIgMTVWMyIvPjwvc3ZnPg==);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--open-icon{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));display:inline-block;height:1rem;margin-inline-end:.25rem;pointer-events:auto;vertical-align:bottom;width:1rem}.filepond--open-icon:hover{background-color:hsla(0,0%,100%,.7)}.filepond--open-icon{-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEwIDZINmEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0Ii8+PC9zdmc+);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100%;mask-size:100%}.filepond--file-action-button.filepond--action-edit-item{background-color:rgba(0,0,0,.5)}.cropper-drag-box.cropper-crop.cropper-modal{background-color:rgba(var(--gray-100),.5);opacity:1}.cropper-drag-box.cropper-crop.cropper-modal:is(.dark *){background-color:rgba(var(--gray-900),.8)}.fi-fo-file-upload-circle-cropper .cropper-face,.fi-fo-file-upload-circle-cropper .cropper-view-box{border-radius:50%}.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{inset:-50px 0 0;overflow:hidden;position:absolute}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:0;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:0;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:0 0!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{inset:0;position:absolute;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{display:flex;flex-direction:row;flex-wrap:wrap}.EasyMDEContainer .CodeMirror{word-wrap:break-word;border:1px solid #ced4da;border-bottom-left-radius:4px;border-bottom-right-radius:4px;box-sizing:border-box;font:inherit;height:auto;padding:10px;z-index:0}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{background:#fff;border-bottom-right-radius:0!important;border-right:none!important;height:auto;inset:50px 0 0;position:fixed!important;z-index:8}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-bottom-right-radius:0;border-right:none!important;flex:1 1 auto;position:relative}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px;padding:9px 10px;position:relative;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none}.editor-toolbar.fullscreen{background:#fff;border:0;box-sizing:border-box;height:50px;left:0;opacity:1;padding-bottom:10px;padding-top:10px;position:fixed;top:0;width:100%;z-index:9}.editor-toolbar.fullscreen:before{background:linear-gradient(90deg,#fff 0,hsla(0,0%,100%,0));height:50px;left:0;margin:0;padding:0;position:fixed;top:0;width:20px}.editor-toolbar.fullscreen:after{background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,#fff);height:50px;margin:0;padding:0;position:fixed;right:0;top:0;width:20px}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{background:0 0;border:1px solid transparent;border-radius:3px;cursor:pointer;display:inline-block;height:30px;margin:0;padding:0;text-align:center;text-decoration:none!important}.editor-toolbar button{font-weight:700;min-width:30px;padding:0 6px;white-space:nowrap}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;display:inline-block;margin:0 6px;text-indent:-10px;width:0}.editor-toolbar button:after{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;position:relative;top:2px;vertical-align:text-bottom}.editor-toolbar button.heading-1:after{content:"1"}.editor-toolbar button.heading-2:after{content:"2"}.editor-toolbar button.heading-3:after{content:"3"}.editor-toolbar button.heading-bigger:after{content:"\25b2"}.editor-toolbar button.heading-smaller:after{content:"\25bc"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{color:#959694;font-size:12px;padding:8px 10px;text-align:right}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{display:inline-block;margin-left:1em;min-width:4em}.editor-statusbar .lines:before{content:"lines: "}.editor-statusbar .words:before{content:"words: "}.editor-statusbar .characters:before{content:"characters: "}.editor-preview-full{height:100%;left:0;position:absolute;top:0;width:100%;z-index:7}.editor-preview-full,.editor-preview-side{box-sizing:border-box;display:none;overflow:auto}.editor-preview-side{word-wrap:break-word;border:1px solid #ddd;bottom:0;position:fixed;right:0;top:50px;width:50%;z-index:9}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:1 1 auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{background:#fafafa;padding:10px}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.cm-s-easymde .cm-header-5{font-size:1.25rem}.cm-s-easymde .cm-header-6{font-size:1rem}.cm-s-easymde .cm-header-1,.cm-s-easymde .cm-header-2,.cm-s-easymde .cm-header-3,.cm-s-easymde .cm-header-4,.cm-s-easymde .cm-header-5,.cm-s-easymde .cm-header-6{line-height:1.2;margin-bottom:.5rem}.cm-s-easymde .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{border:1px solid #fff;border-radius:0;position:relative}.editor-toolbar .easymde-dropdown,.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff,#fff 84%,#333 0,#333)}.easymde-dropdown-content{background-color:#f9f9f9;box-shadow:0 8px 16px #0003;display:block;padding:8px;position:absolute;top:30px;visibility:hidden;z-index:2}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.easymde-dropdown-content button{display:block}span[data-img-src]:after{background-image:var(--bg-image);background-repeat:no-repeat;background-size:contain;content:"";display:block;height:0;max-height:100%;max-width:100%;padding-top:var(--height);width:var(--width)}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)}:root{--color-cm-red:#991b1b;--color-cm-orange:#9a3412;--color-cm-amber:#92400e;--color-cm-yellow:#854d0e;--color-cm-lime:#3f6212;--color-cm-green:#166534;--color-cm-emerald:#065f46;--color-cm-teal:#115e59;--color-cm-cyan:#155e75;--color-cm-sky:#075985;--color-cm-blue:#1e40af;--color-cm-indigo:#3730a3;--color-cm-violet:#5b21b6;--color-cm-purple:#6b21a8;--color-cm-fuchsia:#86198f;--color-cm-pink:#9d174d;--color-cm-rose:#9f1239;--color-cm-gray:#18181b;--color-cm-gray-muted:#71717a;--color-cm-gray-background:#e4e4e7}.dark{--color-cm-red:#f87171;--color-cm-orange:#fb923c;--color-cm-amber:#fbbf24;--color-cm-yellow:#facc15;--color-cm-lime:#a3e635;--color-cm-green:#4ade80;--color-cm-emerald:#4ade80;--color-cm-teal:#2dd4bf;--color-cm-cyan:#22d3ee;--color-cm-sky:#38bdf8;--color-cm-blue:#60a5fa;--color-cm-indigo:#818cf8;--color-cm-violet:#a78bfa;--color-cm-purple:#c084fc;--color-cm-fuchsia:#e879f9;--color-cm-pink:#f472b6;--color-cm-rose:#fb7185;--color-cm-gray:#fafafa;--color-cm-gray-muted:#a1a1aa;--color-cm-gray-background:#52525b}.cm-s-easymde .cm-comment{background-color:transparent;color:var(--color-cm-gray-muted)}.EasyMDEContainer .CodeMirror-cursor{border-color:currentColor}.dark .EasyMDEContainer .cm-s-easymde span.CodeMirror-selectedtext{filter:invert(100%)}.EasyMDEContainer .cm-s-easymde .cm-keyword{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-atom{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-number{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-def{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable{color:var(--color-cm-yellow)}.EasyMDEContainer .cm-s-easymde .cm-variable-2{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-variable-3{color:var(--color-cm-emerald)}.EasyMDEContainer .cm-s-easymde .cm-operator,.EasyMDEContainer .cm-s-easymde .cm-property{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-string,.EasyMDEContainer .cm-s-easymde .cm-string-2{color:var(--color-cm-rose)}.EasyMDEContainer .cm-s-easymde .cm-meta{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-error{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-qualifier{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-builtin{color:var(--color-cm-violet)}.EasyMDEContainer .cm-s-easymde .cm-bracket{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-hr{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote{color:var(--color-cm-sky)}.EasyMDEContainer .cm-s-easymde .cm-formatting-quote+.cm-quote{color:var(--color-cm-gray-muted)}.EasyMDEContainer .cm-s-easymde .cm-formatting-list,.EasyMDEContainer .cm-s-easymde .cm-formatting-list+.cm-variable-2,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-variable-2{color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-link{color:var(--color-cm-blue)}.EasyMDEContainer .cm-s-easymde .cm-tag{color:var(--color-cm-red)}.EasyMDEContainer .cm-s-easymde .cm-attribute{color:var(--color-cm-amber)}.EasyMDEContainer .cm-s-easymde .cm-attribute+.cm-string{color:var(--color-cm-green)}.EasyMDEContainer .cm-s-easymde .cm-formatting-code+.cm-comment:not(.cm-formatting-code){background-color:var(--color-cm-gray-background);color:var(--color-cm-gray)}.EasyMDEContainer .cm-s-easymde .cm-header-1{font-size:1.875rem;line-height:2.25rem}.EasyMDEContainer .cm-s-easymde .cm-header-2{font-size:1.5rem;line-height:2rem}.EasyMDEContainer .cm-s-easymde .cm-header-3{font-size:1.25rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-4{font-size:1.125rem;line-height:1.75rem}.EasyMDEContainer .cm-s-easymde .cm-header-5{font-size:1rem;line-height:1.5rem}.EasyMDEContainer .cm-s-easymde .cm-header-6{font-size:.875rem;line-height:1.25rem}.EasyMDEContainer .cm-s-easymde .cm-comment{background-image:none}.EasyMDEContainer .CodeMirror,.EasyMDEContainer .cm-s-easymde .cm-formatting-code-block,.EasyMDEContainer .cm-s-easymde .cm-tab+.cm-comment{background-color:transparent;color:inherit}.EasyMDEContainer .CodeMirror{border-style:none;padding:.375rem .75rem}.EasyMDEContainer .CodeMirror-scroll{height:auto}.EasyMDEContainer .editor-toolbar{--tw-border-opacity:1;border-color:rgba(var(--gray-200),var(--tw-border-opacity));border-radius:0;border-width:0 0 1px;-moz-column-gap:.25rem;column-gap:.25rem;display:flex;overflow-x:auto;padding:.5rem .625rem}.EasyMDEContainer .editor-toolbar:is(.dark *){border-color:hsla(0,0%,100%,.1)}.EasyMDEContainer .editor-toolbar button{border-radius:.5rem;border-style:none;cursor:pointer;display:grid;height:2rem;padding:0;place-content:center;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}.EasyMDEContainer .editor-toolbar button:hover{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:focus-visible{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:hover:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:focus-visible:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button.active{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *){background-color:hsla(0,0%,100%,.05)}.EasyMDEContainer .editor-toolbar button:before{--tw-bg-opacity:1;background-color:rgba(var(--gray-700),var(--tw-bg-opacity));display:block;height:1.25rem;width:1.25rem}.EasyMDEContainer .editor-toolbar button:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--gray-300),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button:before{content:"";-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.EasyMDEContainer .editor-toolbar button.active:before{--tw-bg-opacity:1;background-color:rgba(var(--primary-600),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar button.active:is(.dark *):before{--tw-bg-opacity:1;background-color:rgba(var(--primary-400),var(--tw-bg-opacity))}.EasyMDEContainer .editor-toolbar .separator{border-style:none;margin:0!important;width:.25rem}.EasyMDEContainer .editor-toolbar .bold:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M4 3a1 1 0 0 1 1-1h6a4.5 4.5 0 0 1 3.274 7.587A4.75 4.75 0 0 1 11.25 18H5a1 1 0 0 1-1-1V3Zm2.5 5.5v-4H11a2 2 0 1 1 0 4H6.5Zm0 2.5v4.5h4.75a2.25 2.25 0 0 0 0-4.5H6.5Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .italic:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M8 2.75A.75.75 0 0 1 8.75 2h7.5a.75.75 0 0 1 0 1.5h-3.215l-4.483 13h2.698a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 0 1 0-1.5h3.215l4.483-13H8.75A.75.75 0 0 1 8 2.75Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .strikethrough:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M11.617 3.963c-1.186-.318-2.418-.323-3.416.015-.992.336-1.49.91-1.642 1.476-.152.566-.007 1.313.684 2.1.528.6 1.273 1.1 2.128 1.446h7.879a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5h3.813a5.976 5.976 0 0 1-.447-.456C5.18 7.479 4.798 6.231 5.11 5.066c.312-1.164 1.268-2.055 2.61-2.509 1.336-.451 2.877-.42 4.286-.043.856.23 1.684.592 2.409 1.074a.75.75 0 1 1-.83 1.25 6.723 6.723 0 0 0-1.968-.875Zm1.909 8.123a.75.75 0 0 1 1.015.309c.53.99.607 2.062.18 3.01-.421.94-1.289 1.648-2.441 2.038-1.336.452-2.877.42-4.286.043-1.409-.377-2.759-1.121-3.69-2.18a.75.75 0 1 1 1.127-.99c.696.791 1.765 1.403 2.952 1.721 1.186.318 2.418.323 3.416-.015.853-.288 1.34-.756 1.555-1.232.21-.467.205-1.049-.136-1.69a.75.75 0 0 1 .308-1.014Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .link:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z'/%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z'/%3E%3Cpath d='M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .heading:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4ZM13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M2.75 4a.75.75 0 0 1 .75.75v4.5h5v-4.5a.75.75 0 0 1 1.5 0v10.5a.75.75 0 0 1-1.5 0v-4.5h-5v4.5a.75.75 0 0 1-1.5 0V4.75A.75.75 0 0 1 2.75 4ZM13 8.75a.75.75 0 0 1 .75-.75h1.75a.75.75 0 0 1 .75.75v5.75h1a.75.75 0 0 1 0 1.5h-3.5a.75.75 0 0 1 0-1.5h1v-5h-1a.75.75 0 0 1-.75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .quote:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M10 2c-2.236 0-4.43.18-6.57.524C1.993 2.755 1 4.014 1 5.426v5.148c0 1.413.993 2.67 2.43 2.902 1.168.188 2.352.327 3.55.414.28.02.521.18.642.413l1.713 3.293a.75.75 0 0 0 1.33 0l1.713-3.293a.783.783 0 0 1 .642-.413 41.102 41.102 0 0 0 3.55-.414c1.437-.231 2.43-1.49 2.43-2.902V5.426c0-1.413-.993-2.67-2.43-2.902A41.289 41.289 0 0 0 10 2ZM6.75 6a.75.75 0 0 0 0 1.5h6.5a.75.75 0 0 0 0-1.5h-6.5Zm0 2.5a.75.75 0 0 0 0 1.5h3.5a.75.75 0 0 0 0-1.5h-3.5Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .code:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06Zm-2.343-3.209a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6.28 5.22a.75.75 0 0 1 0 1.06L2.56 10l3.72 3.72a.75.75 0 0 1-1.06 1.06L.97 10.53a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Zm7.44 0a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L17.44 10l-3.72-3.72a.75.75 0 0 1 0-1.06Zm-2.343-3.209a.75.75 0 0 1 .612.867l-2.5 14.5a.75.75 0 0 1-1.478-.255l2.5-14.5a.75.75 0 0 1 .866-.612Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .unordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0 10.5a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0-5.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M6 4.75A.75.75 0 0 1 6.75 4h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 4.75ZM6 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75A.75.75 0 0 1 6 10Zm0 5.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H6.75a.75.75 0 0 1-.75-.75ZM1.99 4.75a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0 10.5a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1v-.01Zm0-5.25a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v.01a1 1 0 0 1-1 1h-.01a1 1 0 0 1-1-1V10Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .ordered-list:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3Zm-.03 7.404a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm-5.125-1.625a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath d='M3 1.25a.75.75 0 0 0 0 1.5h.25v2.5a.75.75 0 0 0 1.5 0V2A.75.75 0 0 0 4 1.25H3Zm-.03 7.404a3.5 3.5 0 0 1 1.524-.12.034.034 0 0 1-.012.012L2.415 9.579A.75.75 0 0 0 2 10.25v1c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H3.927l1.225-.613c.52-.26.848-.79.848-1.371 0-.647-.429-1.327-1.193-1.451a5.03 5.03 0 0 0-2.277.155.75.75 0 0 0 .44 1.434ZM7.75 3a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm0 6.25a.75.75 0 0 0 0 1.5h9.5a.75.75 0 0 0 0-1.5h-9.5Zm-5.125-1.625a.75.75 0 0 0 0 1.5h1.5a.125.125 0 0 1 0 .25H3.5a.75.75 0 0 0 0 1.5h.625a.125.125 0 0 1 0 .25h-1.5a.75.75 0 0 0 0 1.5h1.5a1.625 1.625 0 0 0 1.37-2.5 1.625 1.625 0 0 0-1.37-2.5h-1.5Z'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .table:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M.99 5.24A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25l.01 9.5A2.25 2.25 0 0 1 16.76 17H3.26A2.267 2.267 0 0 1 1 14.74l-.01-9.5Zm8.26 9.52v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.615c0 .414.336.75.75.75h5.373a.75.75 0 0 0 .627-.74Zm1.5 0a.75.75 0 0 0 .627.74h5.373a.75.75 0 0 0 .75-.75v-.615a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625Zm6.75-3.63v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75v.625c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75ZM17.5 7.5v-.625a.75.75 0 0 0-.75-.75H11.5a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75h5.25a.75.75 0 0 0 .75-.75Zm-8.25 0v-.625a.75.75 0 0 0-.75-.75H3.25a.75.75 0 0 0-.75.75V7.5c0 .414.336.75.75.75H8.5a.75.75 0 0 0 .75-.75Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .upload-image:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .undo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-toolbar .redo:before{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd'/%3E%3C/svg%3E")}.EasyMDEContainer .editor-statusbar{display:none}.fi-fo-rich-editor trix-toolbar .trix-dialogs{position:relative}.fi-fo-rich-editor trix-toolbar .trix-dialog{--tw-bg-opacity:1;--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgba(var(--gray-50),var(--tw-bg-opacity));border-radius:.5rem;bottom:auto;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);left:0;padding:.5rem;position:absolute;right:0;top:1rem}.fi-fo-rich-editor trix-toolbar .trix-dialog:is(.dark *){--tw-bg-opacity:1;background-color:rgba(var(--gray-800),var(--tw-bg-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields{display:flex;flex-direction:column;gap:.5rem;width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group{display:flex;gap:.5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.1);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-style:none;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--gray-950),var(--tw-text-opacity));display:block;font-size:.875rem;line-height:1.25rem;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:.75rem;padding-top:.375rem;padding-inline-start:.75rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *){--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-color:hsla(0,0%,100%,.2);background-color:rgba(var(--gray-700),var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input:focus-within:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgba(var(--primary-600),var(--tw-ring-opacity))}@media (min-width:640px){.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-input{font-size:.875rem;line-height:1.5rem}}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button{--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-200),var(--tw-ring-opacity));background-color:rgba(var(--gray-50),var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.75rem;line-height:1rem;padding:.125rem .5rem}.fi-fo-rich-editor trix-toolbar .trix-dialog__link-fields .trix-button-group .trix-button:is(.dark *){--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--gray-600),var(--tw-ring-opacity));background-color:rgba(var(--gray-700),var(--tw-bg-opacity))}.fi-fo-rich-editor trix-editor:empty:before{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.fi-fo-rich-editor trix-editor:empty:is(.dark *):before{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.fi-fo-rich-editor trix-editor:empty:before{content:attr(placeholder)}.fi-fo-rich-editor trix-editor.prose :where(ol):not(:where([class~=not-prose] *)),.fi-fo-rich-editor trix-editor.prose :where(ul):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:1.625em!important}.fi-fo-rich-editor trix-editor.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-inline-end:0!important;padding-inline-start:.375em!important}select:not(.choices){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E")}[dir=rtl] select{background-position:left .5rem center!important}.choices{outline:2px solid transparent;outline-offset:2px;position:relative}.choices [hidden]{display:none!important}.choices[data-type*=select-one] .has-no-choices{display:none}.choices[data-type*=select-one] .choices__input{display:block;margin:0;width:100%}.choices__inner{background-repeat:no-repeat;outline:2px solid transparent;outline-offset:2px;padding-bottom:.375rem;padding-inline-end:2rem;padding-top:.375rem;padding-inline-start:.75rem}@media (min-width:640px){.choices__inner{font-size:.875rem;line-height:1.5rem}}.choices__inner{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-size:1.5em 1.5em}.choices.is-disabled .choices__inner{cursor:default}[dir=rtl] .choices__inner{background-position:left .5rem center}.choices__list--single{display:inline-block}.choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-950),var(--tw-text-opacity))}.choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices.is-disabled .choices__list--single .choices__item{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices.is-disabled .choices__list--single .choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__list--multiple{display:flex;flex-wrap:wrap;gap:.375rem}.choices__list--multiple:not(:empty){margin-bottom:.25rem;margin-left:-.25rem;margin-right:-.25rem;padding-bottom:.125rem;padding-top:.125rem}.choices__list--multiple .choices__item{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-color:rgba(var(--primary-600),0.1);align-items:center;background-color:rgba(var(--primary-50),var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--primary-600),var(--tw-text-opacity));display:inline-flex;font-size:.75rem;font-weight:500;gap:.25rem;line-height:1rem;padding:.25rem .5rem;word-break:break-all}.choices__list--multiple .choices__item:is(.dark *){--tw-text-opacity:1;--tw-ring-color:rgba(var(--primary-400),0.3);background-color:rgba(var(--primary-400),.1);color:rgba(var(--primary-400),var(--tw-text-opacity))}.choices__list--dropdown,.choices__list[aria-expanded]{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--gray-950),0.05);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:none;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;overflow:hidden;overflow-wrap:break-word;position:absolute;top:100%;width:100%;will-change:visibility;z-index:10}.choices__list--dropdown:is(.dark *),.choices__list[aria-expanded]:is(.dark *){--tw-bg-opacity:1;--tw-ring-color:hsla(0,0%,100%,.1);background-color:rgba(var(--gray-900),var(--tw-bg-opacity))}.is-active.choices__list--dropdown,.is-active.choices__list[aria-expanded]{display:block;padding:.25rem}.choices__list--dropdown .choices__list,.choices__list[aria-expanded] .choices__list{max-height:15rem;overflow:auto;will-change:scroll-position}.choices__item--choice{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity));padding:.5rem;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__item--choice:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__item--choice.choices__item--selectable{--tw-text-opacity:1;border-radius:.375rem;color:rgba(var(--gray-950),var(--tw-text-opacity))}.choices__item--choice.choices__item--selectable:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices__list--dropdown .choices__item--selectable.is-highlighted,.choices__list[aria-expanded] .choices__item--selectable.is-highlighted{--tw-bg-opacity:1;background-color:rgba(var(--gray-50),var(--tw-bg-opacity))}.choices__list--dropdown .choices__item--selectable.is-highlighted:is(.dark *),.choices__list[aria-expanded] .choices__item--selectable.is-highlighted:is(.dark *){background-color:hsla(0,0%,100%,.05)}.choices__item{cursor:default}.choices__item--disabled{pointer-events:none}.choices__item--disabled:disabled{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__item--disabled:disabled:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices.is-disabled .choices__placeholder.choices__item,.choices__placeholder.choices__item{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity));cursor:default}.choices.is-disabled .choices__placeholder.choices__item:is(.dark *),.choices__placeholder.choices__item:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__button{background-color:transparent;background-position:50%;background-repeat:no-repeat;border-width:0;outline:2px solid transparent;outline-offset:2px;text-indent:-9999px}.choices[data-type*=select-one] .choices__button{height:1rem;inset-inline-end:0;margin-inline-end:2.25rem;opacity:.5;padding:0;position:absolute;transition-duration:75ms;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1rem}.choices[data-type*=select-one] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em;top:calc(50% - .5714em)}.dark .choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button{height:1rem;opacity:.5;width:1rem}.choices[data-type*=select-multiple] .choices__button:is(.dark *){opacity:.4}.choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=);background-size:.7142em .7142em}.dark .choices[data-type*=select-multiple] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJtMi41OTIuMDQ0IDE4LjM2NCAxOC4zNjQtMi41NDggMi41NDhMLjA0NCAyLjU5MnoiLz48cGF0aCBkPSJNMCAxOC4zNjQgMTguMzY0IDBsMi41NDggMi41NDhMMi41NDggMjAuOTEyeiIvPjwvZz48L3N2Zz4=)}.choices[data-type*=select-multiple] .choices__button:focus-visible,.choices[data-type*=select-multiple] .choices__button:hover,.choices[data-type*=select-one] .choices__button:focus-visible,.choices[data-type*=select-one] .choices__button:hover{opacity:.7}.choices[data-type*=select-multiple] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-multiple] .choices__button:hover:is(.dark *),.choices[data-type*=select-one] .choices__button:focus-visible:is(.dark *),.choices[data-type*=select-one] .choices__button:hover:is(.dark *){opacity:.6}.choices.is-disabled .choices__button,.choices[data-type*=select-one] .choices__item[data-value=""] .choices__button{display:none}.choices__input{--tw-text-opacity:1;background-color:transparent!important;border-style:none;color:rgba(var(--gray-950),var(--tw-text-opacity));font-size:1rem!important;line-height:1.5rem!important;padding:0!important;transition-duration:75ms;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.choices__input::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__input::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.choices__input:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.choices__input:disabled{--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-500),1);color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.choices__input:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity))}.choices__input:disabled:is(.dark *){--tw-text-opacity:1;-webkit-text-fill-color:rgba(var(--gray-400),1);color:rgba(var(--gray-400),var(--tw-text-opacity))}@media (min-width:640px){.choices__input{font-size:.875rem!important;line-height:1.5rem}}.choices__list--dropdown .choices__input{padding:.5rem!important}.choices__input::-webkit-search-cancel-button,.choices__input::-webkit-search-decoration,.choices__input::-webkit-search-results-button,.choices__input::-webkit-search-results-decoration{display:none}.choices__input::-ms-clear,.choices__input::-ms-reveal{display:none;height:0;width:0}.choices__group{--tw-text-opacity:1;color:rgba(var(--gray-500),var(--tw-text-opacity));padding:1rem .5rem .5rem}.choices__group:first-child{padding-top:.5rem}.choices__group:is(.dark *){--tw-text-opacity:1;color:rgba(var(--gray-400),var(--tw-text-opacity))}.webkit-calendar-picker-indicator\:opacity-0::-webkit-calendar-picker-indicator{opacity:0}/*! Bundled license information: cropperjs/dist/cropper.min.css: (*! diff --git a/public/vendor/livewire/livewire.esm.js b/public/vendor/livewire/livewire.esm.js new file mode 100644 index 0000000..2d7ef47 --- /dev/null +++ b/public/vendor/livewire/livewire.esm.js @@ -0,0 +1,10926 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); + +// ../alpine/packages/alpinejs/dist/module.cjs.js +var require_module_cjs = __commonJS({ + "../alpine/packages/alpinejs/dist/module.cjs.js"(exports, module) { + var __create2 = Object.create; + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __getProtoOf2 = Object.getPrototypeOf; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __commonJS2 = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; + var __export = (target, all2) => { + for (var name in all2) + __defProp2(target, name, { get: all2[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target, mod)); + var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var require_shared_cjs = __commonJS2({ + "node_modules/@vue/shared/dist/shared.cjs.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function makeMap(str, expectsLowerCase) { + const map = /* @__PURE__ */ Object.create(null); + const list = str.split(","); + for (let i = 0; i < list.length; i++) { + map[list[i]] = true; + } + return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val]; + } + var PatchFlagNames = { + [1]: `TEXT`, + [2]: `CLASS`, + [4]: `STYLE`, + [8]: `PROPS`, + [16]: `FULL_PROPS`, + [32]: `HYDRATE_EVENTS`, + [64]: `STABLE_FRAGMENT`, + [128]: `KEYED_FRAGMENT`, + [256]: `UNKEYED_FRAGMENT`, + [512]: `NEED_PATCH`, + [1024]: `DYNAMIC_SLOTS`, + [2048]: `DEV_ROOT_FRAGMENT`, + [-1]: `HOISTED`, + [-2]: `BAIL` + }; + var slotFlagsText = { + [1]: "STABLE", + [2]: "DYNAMIC", + [3]: "FORWARDED" + }; + var GLOBALS_WHITE_LISTED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt"; + var isGloballyWhitelisted = /* @__PURE__ */ makeMap(GLOBALS_WHITE_LISTED); + var range = 2; + function generateCodeFrame(source, start22 = 0, end = source.length) { + let lines = source.split(/(\r?\n)/); + const newlineSequences = lines.filter((_, idx) => idx % 2 === 1); + lines = lines.filter((_, idx) => idx % 2 === 0); + let count = 0; + const res = []; + for (let i = 0; i < lines.length; i++) { + count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0); + if (count >= start22) { + for (let j = i - range; j <= i + range || end > count; j++) { + if (j < 0 || j >= lines.length) + continue; + const line = j + 1; + res.push(`${line}${" ".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`); + const lineLength = lines[j].length; + const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0; + if (j === i) { + const pad = start22 - (count - (lineLength + newLineSeqLength)); + const length = Math.max(1, end > count ? lineLength - pad : end - start22); + res.push(` | ` + " ".repeat(pad) + "^".repeat(length)); + } else if (j > i) { + if (end > count) { + const length = Math.max(Math.min(end - count, lineLength), 1); + res.push(` | ` + "^".repeat(length)); + } + count += lineLength + newLineSeqLength; + } + } + break; + } + } + return res.join("\n"); + } + var specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; + var isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs); + var isBooleanAttr2 = /* @__PURE__ */ makeMap(specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`); + var unsafeAttrCharRE = /[>/="'\u0009\u000a\u000c\u0020]/; + var attrValidationCache = {}; + function isSSRSafeAttrName(name) { + if (attrValidationCache.hasOwnProperty(name)) { + return attrValidationCache[name]; + } + const isUnsafe = unsafeAttrCharRE.test(name); + if (isUnsafe) { + console.error(`unsafe attribute name: ${name}`); + } + return attrValidationCache[name] = !isUnsafe; + } + var propsToAttrMap = { + acceptCharset: "accept-charset", + className: "class", + htmlFor: "for", + httpEquiv: "http-equiv" + }; + var isNoUnitNumericStyleProp = /* @__PURE__ */ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,stroke-miterlimit,stroke-opacity,stroke-width`); + var isKnownAttr = /* @__PURE__ */ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`); + function normalizeStyle(value) { + if (isArray2(value)) { + const res = {}; + for (let i = 0; i < value.length; i++) { + const item = value[i]; + const normalized = normalizeStyle(isString(item) ? parseStringStyle(item) : item); + if (normalized) { + for (const key in normalized) { + res[key] = normalized[key]; + } + } + } + return res; + } else if (isObject2(value)) { + return value; + } + } + var listDelimiterRE = /;(?![^(]*\))/g; + var propertyDelimiterRE = /:(.+)/; + function parseStringStyle(cssText) { + const ret = {}; + cssText.split(listDelimiterRE).forEach((item) => { + if (item) { + const tmp = item.split(propertyDelimiterRE); + tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); + } + }); + return ret; + } + function stringifyStyle(styles) { + let ret = ""; + if (!styles) { + return ret; + } + for (const key in styles) { + const value = styles[key]; + const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key); + if (isString(value) || typeof value === "number" && isNoUnitNumericStyleProp(normalizedKey)) { + ret += `${normalizedKey}:${value};`; + } + } + return ret; + } + function normalizeClass(value) { + let res = ""; + if (isString(value)) { + res = value; + } else if (isArray2(value)) { + for (let i = 0; i < value.length; i++) { + const normalized = normalizeClass(value[i]); + if (normalized) { + res += normalized + " "; + } + } + } else if (isObject2(value)) { + for (const name in value) { + if (value[name]) { + res += name + " "; + } + } + } + return res.trim(); + } + var HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot"; + var SVG_TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view"; + var VOID_TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr"; + var isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS); + var isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS); + var isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS); + var escapeRE = /["'&<>]/; + function escapeHtml(string) { + const str = "" + string; + const match = escapeRE.exec(str); + if (!match) { + return str; + } + let html = ""; + let escaped; + let index; + let lastIndex = 0; + for (index = match.index; index < str.length; index++) { + switch (str.charCodeAt(index)) { + case 34: + escaped = """; + break; + case 38: + escaped = "&"; + break; + case 39: + escaped = "'"; + break; + case 60: + escaped = "<"; + break; + case 62: + escaped = ">"; + break; + default: + continue; + } + if (lastIndex !== index) { + html += str.substring(lastIndex, index); + } + lastIndex = index + 1; + html += escaped; + } + return lastIndex !== index ? html + str.substring(lastIndex, index) : html; + } + var commentStripRE = /^-?>||--!>| looseEqual(item, val)); + } + var toDisplayString = (val) => { + return val == null ? "" : isObject2(val) ? JSON.stringify(val, replacer, 2) : String(val); + }; + var replacer = (_key, val) => { + if (isMap(val)) { + return { + [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val2]) => { + entries[`${key} =>`] = val2; + return entries; + }, {}) + }; + } else if (isSet(val)) { + return { + [`Set(${val.size})`]: [...val.values()] + }; + } else if (isObject2(val) && !isArray2(val) && !isPlainObject(val)) { + return String(val); + } + return val; + }; + var babelParserDefaultPlugins = [ + "bigInt", + "optionalChaining", + "nullishCoalescingOperator" + ]; + var EMPTY_OBJ = Object.freeze({}); + var EMPTY_ARR = Object.freeze([]); + var NOOP = () => { + }; + var NO = () => false; + var onRE = /^on[^a-z]/; + var isOn = (key) => onRE.test(key); + var isModelListener = (key) => key.startsWith("onUpdate:"); + var extend = Object.assign; + var remove = (arr, el) => { + const i = arr.indexOf(el); + if (i > -1) { + arr.splice(i, 1); + } + }; + var hasOwnProperty = Object.prototype.hasOwnProperty; + var hasOwn = (val, key) => hasOwnProperty.call(val, key); + var isArray2 = Array.isArray; + var isMap = (val) => toTypeString(val) === "[object Map]"; + var isSet = (val) => toTypeString(val) === "[object Set]"; + var isDate = (val) => val instanceof Date; + var isFunction2 = (val) => typeof val === "function"; + var isString = (val) => typeof val === "string"; + var isSymbol = (val) => typeof val === "symbol"; + var isObject2 = (val) => val !== null && typeof val === "object"; + var isPromise = (val) => { + return isObject2(val) && isFunction2(val.then) && isFunction2(val.catch); + }; + var objectToString = Object.prototype.toString; + var toTypeString = (value) => objectToString.call(value); + var toRawType = (value) => { + return toTypeString(value).slice(8, -1); + }; + var isPlainObject = (val) => toTypeString(val) === "[object Object]"; + var isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; + var isReservedProp = /* @__PURE__ */ makeMap(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"); + var cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null); + return (str) => { + const hit = cache[str]; + return hit || (cache[str] = fn(str)); + }; + }; + var camelizeRE = /-(\w)/g; + var camelize = cacheStringFunction((str) => { + return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); + }); + var hyphenateRE = /\B([A-Z])/g; + var hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase()); + var capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1)); + var toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``); + var hasChanged = (value, oldValue) => value !== oldValue && (value === value || oldValue === oldValue); + var invokeArrayFns = (fns, arg) => { + for (let i = 0; i < fns.length; i++) { + fns[i](arg); + } + }; + var def = (obj, key, value) => { + Object.defineProperty(obj, key, { + configurable: true, + enumerable: false, + value + }); + }; + var toNumber = (val) => { + const n = parseFloat(val); + return isNaN(n) ? val : n; + }; + var _globalThis; + var getGlobalThis = () => { + return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); + }; + exports2.EMPTY_ARR = EMPTY_ARR; + exports2.EMPTY_OBJ = EMPTY_OBJ; + exports2.NO = NO; + exports2.NOOP = NOOP; + exports2.PatchFlagNames = PatchFlagNames; + exports2.babelParserDefaultPlugins = babelParserDefaultPlugins; + exports2.camelize = camelize; + exports2.capitalize = capitalize; + exports2.def = def; + exports2.escapeHtml = escapeHtml; + exports2.escapeHtmlComment = escapeHtmlComment; + exports2.extend = extend; + exports2.generateCodeFrame = generateCodeFrame; + exports2.getGlobalThis = getGlobalThis; + exports2.hasChanged = hasChanged; + exports2.hasOwn = hasOwn; + exports2.hyphenate = hyphenate; + exports2.invokeArrayFns = invokeArrayFns; + exports2.isArray = isArray2; + exports2.isBooleanAttr = isBooleanAttr2; + exports2.isDate = isDate; + exports2.isFunction = isFunction2; + exports2.isGloballyWhitelisted = isGloballyWhitelisted; + exports2.isHTMLTag = isHTMLTag; + exports2.isIntegerKey = isIntegerKey; + exports2.isKnownAttr = isKnownAttr; + exports2.isMap = isMap; + exports2.isModelListener = isModelListener; + exports2.isNoUnitNumericStyleProp = isNoUnitNumericStyleProp; + exports2.isObject = isObject2; + exports2.isOn = isOn; + exports2.isPlainObject = isPlainObject; + exports2.isPromise = isPromise; + exports2.isReservedProp = isReservedProp; + exports2.isSSRSafeAttrName = isSSRSafeAttrName; + exports2.isSVGTag = isSVGTag; + exports2.isSet = isSet; + exports2.isSpecialBooleanAttr = isSpecialBooleanAttr; + exports2.isString = isString; + exports2.isSymbol = isSymbol; + exports2.isVoidTag = isVoidTag; + exports2.looseEqual = looseEqual; + exports2.looseIndexOf = looseIndexOf; + exports2.makeMap = makeMap; + exports2.normalizeClass = normalizeClass; + exports2.normalizeStyle = normalizeStyle; + exports2.objectToString = objectToString; + exports2.parseStringStyle = parseStringStyle; + exports2.propsToAttrMap = propsToAttrMap; + exports2.remove = remove; + exports2.slotFlagsText = slotFlagsText; + exports2.stringifyStyle = stringifyStyle; + exports2.toDisplayString = toDisplayString; + exports2.toHandlerKey = toHandlerKey; + exports2.toNumber = toNumber; + exports2.toRawType = toRawType; + exports2.toTypeString = toTypeString; + } + }); + var require_shared = __commonJS2({ + "node_modules/@vue/shared/index.js"(exports2, module2) { + "use strict"; + if (false) { + module2.exports = null; + } else { + module2.exports = require_shared_cjs(); + } + } + }); + var require_reactivity_cjs = __commonJS2({ + "node_modules/@vue/reactivity/dist/reactivity.cjs.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var shared = require_shared(); + var targetMap = /* @__PURE__ */ new WeakMap(); + var effectStack = []; + var activeEffect; + var ITERATE_KEY = Symbol("iterate"); + var MAP_KEY_ITERATE_KEY = Symbol("Map key iterate"); + function isEffect(fn) { + return fn && fn._isEffect === true; + } + function effect3(fn, options = shared.EMPTY_OBJ) { + if (isEffect(fn)) { + fn = fn.raw; + } + const effect4 = createReactiveEffect(fn, options); + if (!options.lazy) { + effect4(); + } + return effect4; + } + function stop2(effect4) { + if (effect4.active) { + cleanup(effect4); + if (effect4.options.onStop) { + effect4.options.onStop(); + } + effect4.active = false; + } + } + var uid = 0; + function createReactiveEffect(fn, options) { + const effect4 = function reactiveEffect() { + if (!effect4.active) { + return fn(); + } + if (!effectStack.includes(effect4)) { + cleanup(effect4); + try { + enableTracking(); + effectStack.push(effect4); + activeEffect = effect4; + return fn(); + } finally { + effectStack.pop(); + resetTracking(); + activeEffect = effectStack[effectStack.length - 1]; + } + } + }; + effect4.id = uid++; + effect4.allowRecurse = !!options.allowRecurse; + effect4._isEffect = true; + effect4.active = true; + effect4.raw = fn; + effect4.deps = []; + effect4.options = options; + return effect4; + } + function cleanup(effect4) { + const { deps } = effect4; + if (deps.length) { + for (let i = 0; i < deps.length; i++) { + deps[i].delete(effect4); + } + deps.length = 0; + } + } + var shouldTrack = true; + var trackStack = []; + function pauseTracking() { + trackStack.push(shouldTrack); + shouldTrack = false; + } + function enableTracking() { + trackStack.push(shouldTrack); + shouldTrack = true; + } + function resetTracking() { + const last = trackStack.pop(); + shouldTrack = last === void 0 ? true : last; + } + function track2(target, type, key) { + if (!shouldTrack || activeEffect === void 0) { + return; + } + let depsMap = targetMap.get(target); + if (!depsMap) { + targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); + } + let dep = depsMap.get(key); + if (!dep) { + depsMap.set(key, dep = /* @__PURE__ */ new Set()); + } + if (!dep.has(activeEffect)) { + dep.add(activeEffect); + activeEffect.deps.push(dep); + if (activeEffect.options.onTrack) { + activeEffect.options.onTrack({ + effect: activeEffect, + target, + type, + key + }); + } + } + } + function trigger2(target, type, key, newValue, oldValue, oldTarget) { + const depsMap = targetMap.get(target); + if (!depsMap) { + return; + } + const effects = /* @__PURE__ */ new Set(); + const add2 = (effectsToAdd) => { + if (effectsToAdd) { + effectsToAdd.forEach((effect4) => { + if (effect4 !== activeEffect || effect4.allowRecurse) { + effects.add(effect4); + } + }); + } + }; + if (type === "clear") { + depsMap.forEach(add2); + } else if (key === "length" && shared.isArray(target)) { + depsMap.forEach((dep, key2) => { + if (key2 === "length" || key2 >= newValue) { + add2(dep); + } + }); + } else { + if (key !== void 0) { + add2(depsMap.get(key)); + } + switch (type) { + case "add": + if (!shared.isArray(target)) { + add2(depsMap.get(ITERATE_KEY)); + if (shared.isMap(target)) { + add2(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } else if (shared.isIntegerKey(key)) { + add2(depsMap.get("length")); + } + break; + case "delete": + if (!shared.isArray(target)) { + add2(depsMap.get(ITERATE_KEY)); + if (shared.isMap(target)) { + add2(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } + break; + case "set": + if (shared.isMap(target)) { + add2(depsMap.get(ITERATE_KEY)); + } + break; + } + } + const run = (effect4) => { + if (effect4.options.onTrigger) { + effect4.options.onTrigger({ + effect: effect4, + target, + key, + type, + newValue, + oldValue, + oldTarget + }); + } + if (effect4.options.scheduler) { + effect4.options.scheduler(effect4); + } else { + effect4(); + } + }; + effects.forEach(run); + } + var isNonTrackableKeys = /* @__PURE__ */ shared.makeMap(`__proto__,__v_isRef,__isVue`); + var builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol).map((key) => Symbol[key]).filter(shared.isSymbol)); + var get2 = /* @__PURE__ */ createGetter(); + var shallowGet = /* @__PURE__ */ createGetter(false, true); + var readonlyGet = /* @__PURE__ */ createGetter(true); + var shallowReadonlyGet = /* @__PURE__ */ createGetter(true, true); + var arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations(); + function createArrayInstrumentations() { + const instrumentations = {}; + ["includes", "indexOf", "lastIndexOf"].forEach((key) => { + instrumentations[key] = function(...args) { + const arr = toRaw2(this); + for (let i = 0, l = this.length; i < l; i++) { + track2(arr, "get", i + ""); + } + const res = arr[key](...args); + if (res === -1 || res === false) { + return arr[key](...args.map(toRaw2)); + } else { + return res; + } + }; + }); + ["push", "pop", "shift", "unshift", "splice"].forEach((key) => { + instrumentations[key] = function(...args) { + pauseTracking(); + const res = toRaw2(this)[key].apply(this, args); + resetTracking(); + return res; + }; + }); + return instrumentations; + } + function createGetter(isReadonly2 = false, shallow = false) { + return function get3(target, key, receiver) { + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_raw" && receiver === (isReadonly2 ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) { + return target; + } + const targetIsArray = shared.isArray(target); + if (!isReadonly2 && targetIsArray && shared.hasOwn(arrayInstrumentations, key)) { + return Reflect.get(arrayInstrumentations, key, receiver); + } + const res = Reflect.get(target, key, receiver); + if (shared.isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { + return res; + } + if (!isReadonly2) { + track2(target, "get", key); + } + if (shallow) { + return res; + } + if (isRef(res)) { + const shouldUnwrap = !targetIsArray || !shared.isIntegerKey(key); + return shouldUnwrap ? res.value : res; + } + if (shared.isObject(res)) { + return isReadonly2 ? readonly(res) : reactive3(res); + } + return res; + }; + } + var set2 = /* @__PURE__ */ createSetter(); + var shallowSet = /* @__PURE__ */ createSetter(true); + function createSetter(shallow = false) { + return function set3(target, key, value, receiver) { + let oldValue = target[key]; + if (!shallow) { + value = toRaw2(value); + oldValue = toRaw2(oldValue); + if (!shared.isArray(target) && isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + return true; + } + } + const hadKey = shared.isArray(target) && shared.isIntegerKey(key) ? Number(key) < target.length : shared.hasOwn(target, key); + const result = Reflect.set(target, key, value, receiver); + if (target === toRaw2(receiver)) { + if (!hadKey) { + trigger2(target, "add", key, value); + } else if (shared.hasChanged(value, oldValue)) { + trigger2(target, "set", key, value, oldValue); + } + } + return result; + }; + } + function deleteProperty(target, key) { + const hadKey = shared.hasOwn(target, key); + const oldValue = target[key]; + const result = Reflect.deleteProperty(target, key); + if (result && hadKey) { + trigger2(target, "delete", key, void 0, oldValue); + } + return result; + } + function has(target, key) { + const result = Reflect.has(target, key); + if (!shared.isSymbol(key) || !builtInSymbols.has(key)) { + track2(target, "has", key); + } + return result; + } + function ownKeys(target) { + track2(target, "iterate", shared.isArray(target) ? "length" : ITERATE_KEY); + return Reflect.ownKeys(target); + } + var mutableHandlers = { + get: get2, + set: set2, + deleteProperty, + has, + ownKeys + }; + var readonlyHandlers = { + get: readonlyGet, + set(target, key) { + { + console.warn(`Set operation on key "${String(key)}" failed: target is readonly.`, target); + } + return true; + }, + deleteProperty(target, key) { + { + console.warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target); + } + return true; + } + }; + var shallowReactiveHandlers = /* @__PURE__ */ shared.extend({}, mutableHandlers, { + get: shallowGet, + set: shallowSet + }); + var shallowReadonlyHandlers = /* @__PURE__ */ shared.extend({}, readonlyHandlers, { + get: shallowReadonlyGet + }); + var toReactive = (value) => shared.isObject(value) ? reactive3(value) : value; + var toReadonly = (value) => shared.isObject(value) ? readonly(value) : value; + var toShallow = (value) => value; + var getProto = (v) => Reflect.getPrototypeOf(v); + function get$1(target, key, isReadonly2 = false, isShallow = false) { + target = target["__v_raw"]; + const rawTarget = toRaw2(target); + const rawKey = toRaw2(key); + if (key !== rawKey) { + !isReadonly2 && track2(rawTarget, "get", key); + } + !isReadonly2 && track2(rawTarget, "get", rawKey); + const { has: has2 } = getProto(rawTarget); + const wrap = isShallow ? toShallow : isReadonly2 ? toReadonly : toReactive; + if (has2.call(rawTarget, key)) { + return wrap(target.get(key)); + } else if (has2.call(rawTarget, rawKey)) { + return wrap(target.get(rawKey)); + } else if (target !== rawTarget) { + target.get(key); + } + } + function has$1(key, isReadonly2 = false) { + const target = this["__v_raw"]; + const rawTarget = toRaw2(target); + const rawKey = toRaw2(key); + if (key !== rawKey) { + !isReadonly2 && track2(rawTarget, "has", key); + } + !isReadonly2 && track2(rawTarget, "has", rawKey); + return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); + } + function size(target, isReadonly2 = false) { + target = target["__v_raw"]; + !isReadonly2 && track2(toRaw2(target), "iterate", ITERATE_KEY); + return Reflect.get(target, "size", target); + } + function add(value) { + value = toRaw2(value); + const target = toRaw2(this); + const proto = getProto(target); + const hadKey = proto.has.call(target, value); + if (!hadKey) { + target.add(value); + trigger2(target, "add", value, value); + } + return this; + } + function set$1(key, value) { + value = toRaw2(value); + const target = toRaw2(this); + const { has: has2, get: get3 } = getProto(target); + let hadKey = has2.call(target, key); + if (!hadKey) { + key = toRaw2(key); + hadKey = has2.call(target, key); + } else { + checkIdentityKeys(target, has2, key); + } + const oldValue = get3.call(target, key); + target.set(key, value); + if (!hadKey) { + trigger2(target, "add", key, value); + } else if (shared.hasChanged(value, oldValue)) { + trigger2(target, "set", key, value, oldValue); + } + return this; + } + function deleteEntry(key) { + const target = toRaw2(this); + const { has: has2, get: get3 } = getProto(target); + let hadKey = has2.call(target, key); + if (!hadKey) { + key = toRaw2(key); + hadKey = has2.call(target, key); + } else { + checkIdentityKeys(target, has2, key); + } + const oldValue = get3 ? get3.call(target, key) : void 0; + const result = target.delete(key); + if (hadKey) { + trigger2(target, "delete", key, void 0, oldValue); + } + return result; + } + function clear() { + const target = toRaw2(this); + const hadItems = target.size !== 0; + const oldTarget = shared.isMap(target) ? new Map(target) : new Set(target); + const result = target.clear(); + if (hadItems) { + trigger2(target, "clear", void 0, void 0, oldTarget); + } + return result; + } + function createForEach(isReadonly2, isShallow) { + return function forEach(callback, thisArg) { + const observed = this; + const target = observed["__v_raw"]; + const rawTarget = toRaw2(target); + const wrap = isShallow ? toShallow : isReadonly2 ? toReadonly : toReactive; + !isReadonly2 && track2(rawTarget, "iterate", ITERATE_KEY); + return target.forEach((value, key) => { + return callback.call(thisArg, wrap(value), wrap(key), observed); + }); + }; + } + function createIterableMethod(method, isReadonly2, isShallow) { + return function(...args) { + const target = this["__v_raw"]; + const rawTarget = toRaw2(target); + const targetIsMap = shared.isMap(rawTarget); + const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; + const isKeyOnly = method === "keys" && targetIsMap; + const innerIterator = target[method](...args); + const wrap = isShallow ? toShallow : isReadonly2 ? toReadonly : toReactive; + !isReadonly2 && track2(rawTarget, "iterate", isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY); + return { + next() { + const { value, done } = innerIterator.next(); + return done ? { value, done } : { + value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), + done + }; + }, + [Symbol.iterator]() { + return this; + } + }; + }; + } + function createReadonlyMethod(type) { + return function(...args) { + { + const key = args[0] ? `on key "${args[0]}" ` : ``; + console.warn(`${shared.capitalize(type)} operation ${key}failed: target is readonly.`, toRaw2(this)); + } + return type === "delete" ? false : this; + }; + } + function createInstrumentations() { + const mutableInstrumentations2 = { + get(key) { + return get$1(this, key); + }, + get size() { + return size(this); + }, + has: has$1, + add, + set: set$1, + delete: deleteEntry, + clear, + forEach: createForEach(false, false) + }; + const shallowInstrumentations2 = { + get(key) { + return get$1(this, key, false, true); + }, + get size() { + return size(this); + }, + has: has$1, + add, + set: set$1, + delete: deleteEntry, + clear, + forEach: createForEach(false, true) + }; + const readonlyInstrumentations2 = { + get(key) { + return get$1(this, key, true); + }, + get size() { + return size(this, true); + }, + has(key) { + return has$1.call(this, key, true); + }, + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear"), + forEach: createForEach(true, false) + }; + const shallowReadonlyInstrumentations2 = { + get(key) { + return get$1(this, key, true, true); + }, + get size() { + return size(this, true); + }, + has(key) { + return has$1.call(this, key, true); + }, + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear"), + forEach: createForEach(true, true) + }; + const iteratorMethods = ["keys", "values", "entries", Symbol.iterator]; + iteratorMethods.forEach((method) => { + mutableInstrumentations2[method] = createIterableMethod(method, false, false); + readonlyInstrumentations2[method] = createIterableMethod(method, true, false); + shallowInstrumentations2[method] = createIterableMethod(method, false, true); + shallowReadonlyInstrumentations2[method] = createIterableMethod(method, true, true); + }); + return [ + mutableInstrumentations2, + readonlyInstrumentations2, + shallowInstrumentations2, + shallowReadonlyInstrumentations2 + ]; + } + var [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* @__PURE__ */ createInstrumentations(); + function createInstrumentationGetter(isReadonly2, shallow) { + const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations; + return (target, key, receiver) => { + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_raw") { + return target; + } + return Reflect.get(shared.hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver); + }; + } + var mutableCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(false, false) + }; + var shallowCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(false, true) + }; + var readonlyCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(true, false) + }; + var shallowReadonlyCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(true, true) + }; + function checkIdentityKeys(target, has2, key) { + const rawKey = toRaw2(key); + if (rawKey !== key && has2.call(target, rawKey)) { + const type = shared.toRawType(target); + console.warn(`Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`); + } + } + var reactiveMap = /* @__PURE__ */ new WeakMap(); + var shallowReactiveMap = /* @__PURE__ */ new WeakMap(); + var readonlyMap = /* @__PURE__ */ new WeakMap(); + var shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); + function targetTypeMap(rawType) { + switch (rawType) { + case "Object": + case "Array": + return 1; + case "Map": + case "Set": + case "WeakMap": + case "WeakSet": + return 2; + default: + return 0; + } + } + function getTargetType(value) { + return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(shared.toRawType(value)); + } + function reactive3(target) { + if (target && target["__v_isReadonly"]) { + return target; + } + return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap); + } + function shallowReactive(target) { + return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap); + } + function readonly(target) { + return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap); + } + function shallowReadonly(target) { + return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap); + } + function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { + if (!shared.isObject(target)) { + { + console.warn(`value cannot be made reactive: ${String(target)}`); + } + return target; + } + if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { + return target; + } + const existingProxy = proxyMap.get(target); + if (existingProxy) { + return existingProxy; + } + const targetType = getTargetType(target); + if (targetType === 0) { + return target; + } + const proxy = new Proxy(target, targetType === 2 ? collectionHandlers : baseHandlers); + proxyMap.set(target, proxy); + return proxy; + } + function isReactive2(value) { + if (isReadonly(value)) { + return isReactive2(value["__v_raw"]); + } + return !!(value && value["__v_isReactive"]); + } + function isReadonly(value) { + return !!(value && value["__v_isReadonly"]); + } + function isProxy(value) { + return isReactive2(value) || isReadonly(value); + } + function toRaw2(observed) { + return observed && toRaw2(observed["__v_raw"]) || observed; + } + function markRaw(value) { + shared.def(value, "__v_skip", true); + return value; + } + var convert = (val) => shared.isObject(val) ? reactive3(val) : val; + function isRef(r) { + return Boolean(r && r.__v_isRef === true); + } + function ref(value) { + return createRef(value); + } + function shallowRef(value) { + return createRef(value, true); + } + var RefImpl = class { + constructor(value, _shallow = false) { + this._shallow = _shallow; + this.__v_isRef = true; + this._rawValue = _shallow ? value : toRaw2(value); + this._value = _shallow ? value : convert(value); + } + get value() { + track2(toRaw2(this), "get", "value"); + return this._value; + } + set value(newVal) { + newVal = this._shallow ? newVal : toRaw2(newVal); + if (shared.hasChanged(newVal, this._rawValue)) { + this._rawValue = newVal; + this._value = this._shallow ? newVal : convert(newVal); + trigger2(toRaw2(this), "set", "value", newVal); + } + } + }; + function createRef(rawValue, shallow = false) { + if (isRef(rawValue)) { + return rawValue; + } + return new RefImpl(rawValue, shallow); + } + function triggerRef(ref2) { + trigger2(toRaw2(ref2), "set", "value", ref2.value); + } + function unref(ref2) { + return isRef(ref2) ? ref2.value : ref2; + } + var shallowUnwrapHandlers = { + get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)), + set: (target, key, value, receiver) => { + const oldValue = target[key]; + if (isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + return true; + } else { + return Reflect.set(target, key, value, receiver); + } + } + }; + function proxyRefs(objectWithRefs) { + return isReactive2(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); + } + var CustomRefImpl = class { + constructor(factory) { + this.__v_isRef = true; + const { get: get3, set: set3 } = factory(() => track2(this, "get", "value"), () => trigger2(this, "set", "value")); + this._get = get3; + this._set = set3; + } + get value() { + return this._get(); + } + set value(newVal) { + this._set(newVal); + } + }; + function customRef(factory) { + return new CustomRefImpl(factory); + } + function toRefs(object) { + if (!isProxy(object)) { + console.warn(`toRefs() expects a reactive object but received a plain one.`); + } + const ret = shared.isArray(object) ? new Array(object.length) : {}; + for (const key in object) { + ret[key] = toRef(object, key); + } + return ret; + } + var ObjectRefImpl = class { + constructor(_object, _key) { + this._object = _object; + this._key = _key; + this.__v_isRef = true; + } + get value() { + return this._object[this._key]; + } + set value(newVal) { + this._object[this._key] = newVal; + } + }; + function toRef(object, key) { + return isRef(object[key]) ? object[key] : new ObjectRefImpl(object, key); + } + var ComputedRefImpl = class { + constructor(getter, _setter, isReadonly2) { + this._setter = _setter; + this._dirty = true; + this.__v_isRef = true; + this.effect = effect3(getter, { + lazy: true, + scheduler: () => { + if (!this._dirty) { + this._dirty = true; + trigger2(toRaw2(this), "set", "value"); + } + } + }); + this["__v_isReadonly"] = isReadonly2; + } + get value() { + const self2 = toRaw2(this); + if (self2._dirty) { + self2._value = this.effect(); + self2._dirty = false; + } + track2(self2, "get", "value"); + return self2._value; + } + set value(newValue) { + this._setter(newValue); + } + }; + function computed(getterOrOptions) { + let getter; + let setter; + if (shared.isFunction(getterOrOptions)) { + getter = getterOrOptions; + setter = () => { + console.warn("Write operation failed: computed value is readonly"); + }; + } else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; + } + return new ComputedRefImpl(getter, setter, shared.isFunction(getterOrOptions) || !getterOrOptions.set); + } + exports2.ITERATE_KEY = ITERATE_KEY; + exports2.computed = computed; + exports2.customRef = customRef; + exports2.effect = effect3; + exports2.enableTracking = enableTracking; + exports2.isProxy = isProxy; + exports2.isReactive = isReactive2; + exports2.isReadonly = isReadonly; + exports2.isRef = isRef; + exports2.markRaw = markRaw; + exports2.pauseTracking = pauseTracking; + exports2.proxyRefs = proxyRefs; + exports2.reactive = reactive3; + exports2.readonly = readonly; + exports2.ref = ref; + exports2.resetTracking = resetTracking; + exports2.shallowReactive = shallowReactive; + exports2.shallowReadonly = shallowReadonly; + exports2.shallowRef = shallowRef; + exports2.stop = stop2; + exports2.toRaw = toRaw2; + exports2.toRef = toRef; + exports2.toRefs = toRefs; + exports2.track = track2; + exports2.trigger = trigger2; + exports2.triggerRef = triggerRef; + exports2.unref = unref; + } + }); + var require_reactivity = __commonJS2({ + "node_modules/@vue/reactivity/index.js"(exports2, module2) { + "use strict"; + if (false) { + module2.exports = null; + } else { + module2.exports = require_reactivity_cjs(); + } + } + }); + var module_exports = {}; + __export(module_exports, { + Alpine: () => src_default, + default: () => module_default + }); + module.exports = __toCommonJS(module_exports); + var flushPending = false; + var flushing = false; + var queue = []; + var lastFlushedIndex = -1; + function scheduler(callback) { + queueJob(callback); + } + function queueJob(job) { + if (!queue.includes(job)) + queue.push(job); + queueFlush(); + } + function dequeueJob(job) { + let index = queue.indexOf(job); + if (index !== -1 && index > lastFlushedIndex) + queue.splice(index, 1); + } + function queueFlush() { + if (!flushing && !flushPending) { + flushPending = true; + queueMicrotask(flushJobs); + } + } + function flushJobs() { + flushPending = false; + flushing = true; + for (let i = 0; i < queue.length; i++) { + queue[i](); + lastFlushedIndex = i; + } + queue.length = 0; + lastFlushedIndex = -1; + flushing = false; + } + var reactive; + var effect; + var release; + var raw; + var shouldSchedule = true; + function disableEffectScheduling(callback) { + shouldSchedule = false; + callback(); + shouldSchedule = true; + } + function setReactivityEngine(engine) { + reactive = engine.reactive; + release = engine.release; + effect = (callback) => engine.effect(callback, { scheduler: (task) => { + if (shouldSchedule) { + scheduler(task); + } else { + task(); + } + } }); + raw = engine.raw; + } + function overrideEffect(override) { + effect = override; + } + function elementBoundEffect(el) { + let cleanup = () => { + }; + let wrappedEffect = (callback) => { + let effectReference = effect(callback); + if (!el._x_effects) { + el._x_effects = /* @__PURE__ */ new Set(); + el._x_runEffects = () => { + el._x_effects.forEach((i) => i()); + }; + } + el._x_effects.add(effectReference); + cleanup = () => { + if (effectReference === void 0) + return; + el._x_effects.delete(effectReference); + release(effectReference); + }; + return effectReference; + }; + return [wrappedEffect, () => { + cleanup(); + }]; + } + function watch(getter, callback) { + let firstTime = true; + let oldValue; + let effectReference = effect(() => { + let value = getter(); + JSON.stringify(value); + if (!firstTime) { + queueMicrotask(() => { + callback(value, oldValue); + oldValue = value; + }); + } else { + oldValue = value; + } + firstTime = false; + }); + return () => release(effectReference); + } + var onAttributeAddeds = []; + var onElRemoveds = []; + var onElAddeds = []; + function onElAdded(callback) { + onElAddeds.push(callback); + } + function onElRemoved(el, callback) { + if (typeof callback === "function") { + if (!el._x_cleanups) + el._x_cleanups = []; + el._x_cleanups.push(callback); + } else { + callback = el; + onElRemoveds.push(callback); + } + } + function onAttributesAdded(callback) { + onAttributeAddeds.push(callback); + } + function onAttributeRemoved(el, name, callback) { + if (!el._x_attributeCleanups) + el._x_attributeCleanups = {}; + if (!el._x_attributeCleanups[name]) + el._x_attributeCleanups[name] = []; + el._x_attributeCleanups[name].push(callback); + } + function cleanupAttributes(el, names) { + if (!el._x_attributeCleanups) + return; + Object.entries(el._x_attributeCleanups).forEach(([name, value]) => { + if (names === void 0 || names.includes(name)) { + value.forEach((i) => i()); + delete el._x_attributeCleanups[name]; + } + }); + } + function cleanupElement(el) { + var _a, _b; + (_a = el._x_effects) == null ? void 0 : _a.forEach(dequeueJob); + while ((_b = el._x_cleanups) == null ? void 0 : _b.length) + el._x_cleanups.pop()(); + } + var observer = new MutationObserver(onMutate); + var currentlyObserving = false; + function startObservingMutations() { + observer.observe(document, { subtree: true, childList: true, attributes: true, attributeOldValue: true }); + currentlyObserving = true; + } + function stopObservingMutations() { + flushObserver(); + observer.disconnect(); + currentlyObserving = false; + } + var queuedMutations = []; + function flushObserver() { + let records = observer.takeRecords(); + queuedMutations.push(() => records.length > 0 && onMutate(records)); + let queueLengthWhenTriggered = queuedMutations.length; + queueMicrotask(() => { + if (queuedMutations.length === queueLengthWhenTriggered) { + while (queuedMutations.length > 0) + queuedMutations.shift()(); + } + }); + } + function mutateDom(callback) { + if (!currentlyObserving) + return callback(); + stopObservingMutations(); + let result = callback(); + startObservingMutations(); + return result; + } + var isCollecting = false; + var deferredMutations = []; + function deferMutations() { + isCollecting = true; + } + function flushAndStopDeferringMutations() { + isCollecting = false; + onMutate(deferredMutations); + deferredMutations = []; + } + function onMutate(mutations) { + if (isCollecting) { + deferredMutations = deferredMutations.concat(mutations); + return; + } + let addedNodes = /* @__PURE__ */ new Set(); + let removedNodes = /* @__PURE__ */ new Set(); + let addedAttributes = /* @__PURE__ */ new Map(); + let removedAttributes = /* @__PURE__ */ new Map(); + for (let i = 0; i < mutations.length; i++) { + if (mutations[i].target._x_ignoreMutationObserver) + continue; + if (mutations[i].type === "childList") { + mutations[i].addedNodes.forEach((node) => node.nodeType === 1 && addedNodes.add(node)); + mutations[i].removedNodes.forEach((node) => node.nodeType === 1 && removedNodes.add(node)); + } + if (mutations[i].type === "attributes") { + let el = mutations[i].target; + let name = mutations[i].attributeName; + let oldValue = mutations[i].oldValue; + let add = () => { + if (!addedAttributes.has(el)) + addedAttributes.set(el, []); + addedAttributes.get(el).push({ name, value: el.getAttribute(name) }); + }; + let remove = () => { + if (!removedAttributes.has(el)) + removedAttributes.set(el, []); + removedAttributes.get(el).push(name); + }; + if (el.hasAttribute(name) && oldValue === null) { + add(); + } else if (el.hasAttribute(name)) { + remove(); + add(); + } else { + remove(); + } + } + } + removedAttributes.forEach((attrs, el) => { + cleanupAttributes(el, attrs); + }); + addedAttributes.forEach((attrs, el) => { + onAttributeAddeds.forEach((i) => i(el, attrs)); + }); + for (let node of removedNodes) { + if (addedNodes.has(node)) + continue; + onElRemoveds.forEach((i) => i(node)); + } + addedNodes.forEach((node) => { + node._x_ignoreSelf = true; + node._x_ignore = true; + }); + for (let node of addedNodes) { + if (removedNodes.has(node)) + continue; + if (!node.isConnected) + continue; + delete node._x_ignoreSelf; + delete node._x_ignore; + onElAddeds.forEach((i) => i(node)); + node._x_ignore = true; + node._x_ignoreSelf = true; + } + addedNodes.forEach((node) => { + delete node._x_ignoreSelf; + delete node._x_ignore; + }); + addedNodes = null; + removedNodes = null; + addedAttributes = null; + removedAttributes = null; + } + function scope(node) { + return mergeProxies(closestDataStack(node)); + } + function addScopeToNode(node, data2, referenceNode) { + node._x_dataStack = [data2, ...closestDataStack(referenceNode || node)]; + return () => { + node._x_dataStack = node._x_dataStack.filter((i) => i !== data2); + }; + } + function closestDataStack(node) { + if (node._x_dataStack) + return node._x_dataStack; + if (typeof ShadowRoot === "function" && node instanceof ShadowRoot) { + return closestDataStack(node.host); + } + if (!node.parentNode) { + return []; + } + return closestDataStack(node.parentNode); + } + function mergeProxies(objects) { + return new Proxy({ objects }, mergeProxyTrap); + } + var mergeProxyTrap = { + ownKeys({ objects }) { + return Array.from(new Set(objects.flatMap((i) => Object.keys(i)))); + }, + has({ objects }, name) { + if (name == Symbol.unscopables) + return false; + return objects.some((obj) => Object.prototype.hasOwnProperty.call(obj, name) || Reflect.has(obj, name)); + }, + get({ objects }, name, thisProxy) { + if (name == "toJSON") + return collapseProxies; + return Reflect.get(objects.find((obj) => Reflect.has(obj, name)) || {}, name, thisProxy); + }, + set({ objects }, name, value, thisProxy) { + const target = objects.find((obj) => Object.prototype.hasOwnProperty.call(obj, name)) || objects[objects.length - 1]; + const descriptor = Object.getOwnPropertyDescriptor(target, name); + if ((descriptor == null ? void 0 : descriptor.set) && (descriptor == null ? void 0 : descriptor.get)) + return descriptor.set.call(thisProxy, value) || true; + return Reflect.set(target, name, value); + } + }; + function collapseProxies() { + let keys = Reflect.ownKeys(this); + return keys.reduce((acc, key) => { + acc[key] = Reflect.get(this, key); + return acc; + }, {}); + } + function initInterceptors(data2) { + let isObject2 = (val) => typeof val === "object" && !Array.isArray(val) && val !== null; + let recurse = (obj, basePath = "") => { + Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key, { value, enumerable }]) => { + if (enumerable === false || value === void 0) + return; + if (typeof value === "object" && value !== null && value.__v_skip) + return; + let path = basePath === "" ? key : `${basePath}.${key}`; + if (typeof value === "object" && value !== null && value._x_interceptor) { + obj[key] = value.initialize(data2, path, key); + } else { + if (isObject2(value) && value !== obj && !(value instanceof Element)) { + recurse(value, path); + } + } + }); + }; + return recurse(data2); + } + function interceptor(callback, mutateObj = () => { + }) { + let obj = { + initialValue: void 0, + _x_interceptor: true, + initialize(data2, path, key) { + return callback(this.initialValue, () => get(data2, path), (value) => set(data2, path, value), path, key); + } + }; + mutateObj(obj); + return (initialValue) => { + if (typeof initialValue === "object" && initialValue !== null && initialValue._x_interceptor) { + let initialize = obj.initialize.bind(obj); + obj.initialize = (data2, path, key) => { + let innerValue = initialValue.initialize(data2, path, key); + obj.initialValue = innerValue; + return initialize(data2, path, key); + }; + } else { + obj.initialValue = initialValue; + } + return obj; + }; + } + function get(obj, path) { + return path.split(".").reduce((carry, segment) => carry[segment], obj); + } + function set(obj, path, value) { + if (typeof path === "string") + path = path.split("."); + if (path.length === 1) + obj[path[0]] = value; + else if (path.length === 0) + throw error; + else { + if (obj[path[0]]) + return set(obj[path[0]], path.slice(1), value); + else { + obj[path[0]] = {}; + return set(obj[path[0]], path.slice(1), value); + } + } + } + var magics = {}; + function magic(name, callback) { + magics[name] = callback; + } + function injectMagics(obj, el) { + let memoizedUtilities = getUtilities(el); + Object.entries(magics).forEach(([name, callback]) => { + Object.defineProperty(obj, `$${name}`, { + get() { + return callback(el, memoizedUtilities); + }, + enumerable: false + }); + }); + return obj; + } + function getUtilities(el) { + let [utilities, cleanup] = getElementBoundUtilities(el); + let utils = { interceptor, ...utilities }; + onElRemoved(el, cleanup); + return utils; + } + function tryCatch(el, expression, callback, ...args) { + try { + return callback(...args); + } catch (e) { + handleError(e, el, expression); + } + } + function handleError(error2, el, expression = void 0) { + error2 = Object.assign(error2 != null ? error2 : { message: "No error message given." }, { el, expression }); + console.warn(`Alpine Expression Error: ${error2.message} + +${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); + setTimeout(() => { + throw error2; + }, 0); + } + var shouldAutoEvaluateFunctions = true; + function dontAutoEvaluateFunctions(callback) { + let cache = shouldAutoEvaluateFunctions; + shouldAutoEvaluateFunctions = false; + let result = callback(); + shouldAutoEvaluateFunctions = cache; + return result; + } + function evaluate(el, expression, extras = {}) { + let result; + evaluateLater(el, expression)((value) => result = value, extras); + return result; + } + function evaluateLater(...args) { + return theEvaluatorFunction(...args); + } + var theEvaluatorFunction = normalEvaluator; + function setEvaluator(newEvaluator) { + theEvaluatorFunction = newEvaluator; + } + function normalEvaluator(el, expression) { + let overriddenMagics = {}; + injectMagics(overriddenMagics, el); + let dataStack = [overriddenMagics, ...closestDataStack(el)]; + let evaluator = typeof expression === "function" ? generateEvaluatorFromFunction(dataStack, expression) : generateEvaluatorFromString(dataStack, expression, el); + return tryCatch.bind(null, el, expression, evaluator); + } + function generateEvaluatorFromFunction(dataStack, func) { + return (receiver = () => { + }, { scope: scope2 = {}, params = [] } = {}) => { + let result = func.apply(mergeProxies([scope2, ...dataStack]), params); + runIfTypeOfFunction(receiver, result); + }; + } + var evaluatorMemo = {}; + function generateFunctionFromString(expression, el) { + if (evaluatorMemo[expression]) { + return evaluatorMemo[expression]; + } + let AsyncFunction = Object.getPrototypeOf(async function() { + }).constructor; + let rightSideSafeExpression = /^[\n\s]*if.*\(.*\)/.test(expression.trim()) || /^(let|const)\s/.test(expression.trim()) ? `(async()=>{ ${expression} })()` : expression; + const safeAsyncFunction = () => { + try { + let func2 = new AsyncFunction(["__self", "scope"], `with (scope) { __self.result = ${rightSideSafeExpression} }; __self.finished = true; return __self.result;`); + Object.defineProperty(func2, "name", { + value: `[Alpine] ${expression}` + }); + return func2; + } catch (error2) { + handleError(error2, el, expression); + return Promise.resolve(); + } + }; + let func = safeAsyncFunction(); + evaluatorMemo[expression] = func; + return func; + } + function generateEvaluatorFromString(dataStack, expression, el) { + let func = generateFunctionFromString(expression, el); + return (receiver = () => { + }, { scope: scope2 = {}, params = [] } = {}) => { + func.result = void 0; + func.finished = false; + let completeScope = mergeProxies([scope2, ...dataStack]); + if (typeof func === "function") { + let promise = func(func, completeScope).catch((error2) => handleError(error2, el, expression)); + if (func.finished) { + runIfTypeOfFunction(receiver, func.result, completeScope, params, el); + func.result = void 0; + } else { + promise.then((result) => { + runIfTypeOfFunction(receiver, result, completeScope, params, el); + }).catch((error2) => handleError(error2, el, expression)).finally(() => func.result = void 0); + } + } + }; + } + function runIfTypeOfFunction(receiver, value, scope2, params, el) { + if (shouldAutoEvaluateFunctions && typeof value === "function") { + let result = value.apply(scope2, params); + if (result instanceof Promise) { + result.then((i) => runIfTypeOfFunction(receiver, i, scope2, params)).catch((error2) => handleError(error2, el, value)); + } else { + receiver(result); + } + } else if (typeof value === "object" && value instanceof Promise) { + value.then((i) => receiver(i)); + } else { + receiver(value); + } + } + var prefixAsString = "x-"; + function prefix(subject = "") { + return prefixAsString + subject; + } + function setPrefix(newPrefix) { + prefixAsString = newPrefix; + } + var directiveHandlers = {}; + function directive2(name, callback) { + directiveHandlers[name] = callback; + return { + before(directive22) { + if (!directiveHandlers[directive22]) { + console.warn(String.raw`Cannot find directive \`${directive22}\`. \`${name}\` will use the default order of execution`); + return; + } + const pos = directiveOrder.indexOf(directive22); + directiveOrder.splice(pos >= 0 ? pos : directiveOrder.indexOf("DEFAULT"), 0, name); + } + }; + } + function directiveExists(name) { + return Object.keys(directiveHandlers).includes(name); + } + function directives(el, attributes, originalAttributeOverride) { + attributes = Array.from(attributes); + if (el._x_virtualDirectives) { + let vAttributes = Object.entries(el._x_virtualDirectives).map(([name, value]) => ({ name, value })); + let staticAttributes = attributesOnly(vAttributes); + vAttributes = vAttributes.map((attribute) => { + if (staticAttributes.find((attr) => attr.name === attribute.name)) { + return { + name: `x-bind:${attribute.name}`, + value: `"${attribute.value}"` + }; + } + return attribute; + }); + attributes = attributes.concat(vAttributes); + } + let transformedAttributeMap = {}; + let directives2 = attributes.map(toTransformedAttributes((newName, oldName) => transformedAttributeMap[newName] = oldName)).filter(outNonAlpineAttributes).map(toParsedDirectives(transformedAttributeMap, originalAttributeOverride)).sort(byPriority); + return directives2.map((directive22) => { + return getDirectiveHandler(el, directive22); + }); + } + function attributesOnly(attributes) { + return Array.from(attributes).map(toTransformedAttributes()).filter((attr) => !outNonAlpineAttributes(attr)); + } + var isDeferringHandlers = false; + var directiveHandlerStacks = /* @__PURE__ */ new Map(); + var currentHandlerStackKey = Symbol(); + function deferHandlingDirectives(callback) { + isDeferringHandlers = true; + let key = Symbol(); + currentHandlerStackKey = key; + directiveHandlerStacks.set(key, []); + let flushHandlers = () => { + while (directiveHandlerStacks.get(key).length) + directiveHandlerStacks.get(key).shift()(); + directiveHandlerStacks.delete(key); + }; + let stopDeferring = () => { + isDeferringHandlers = false; + flushHandlers(); + }; + callback(flushHandlers); + stopDeferring(); + } + function getElementBoundUtilities(el) { + let cleanups2 = []; + let cleanup = (callback) => cleanups2.push(callback); + let [effect3, cleanupEffect] = elementBoundEffect(el); + cleanups2.push(cleanupEffect); + let utilities = { + Alpine: alpine_default, + effect: effect3, + cleanup, + evaluateLater: evaluateLater.bind(evaluateLater, el), + evaluate: evaluate.bind(evaluate, el) + }; + let doCleanup = () => cleanups2.forEach((i) => i()); + return [utilities, doCleanup]; + } + function getDirectiveHandler(el, directive22) { + let noop = () => { + }; + let handler4 = directiveHandlers[directive22.type] || noop; + let [utilities, cleanup] = getElementBoundUtilities(el); + onAttributeRemoved(el, directive22.original, cleanup); + let fullHandler = () => { + if (el._x_ignore || el._x_ignoreSelf) + return; + handler4.inline && handler4.inline(el, directive22, utilities); + handler4 = handler4.bind(handler4, el, directive22, utilities); + isDeferringHandlers ? directiveHandlerStacks.get(currentHandlerStackKey).push(handler4) : handler4(); + }; + fullHandler.runCleanups = cleanup; + return fullHandler; + } + var startingWith = (subject, replacement) => ({ name, value }) => { + if (name.startsWith(subject)) + name = name.replace(subject, replacement); + return { name, value }; + }; + var into = (i) => i; + function toTransformedAttributes(callback = () => { + }) { + return ({ name, value }) => { + let { name: newName, value: newValue } = attributeTransformers.reduce((carry, transform) => { + return transform(carry); + }, { name, value }); + if (newName !== name) + callback(newName, name); + return { name: newName, value: newValue }; + }; + } + var attributeTransformers = []; + function mapAttributes(callback) { + attributeTransformers.push(callback); + } + function outNonAlpineAttributes({ name }) { + return alpineAttributeRegex().test(name); + } + var alpineAttributeRegex = () => new RegExp(`^${prefixAsString}([^:^.]+)\\b`); + function toParsedDirectives(transformedAttributeMap, originalAttributeOverride) { + return ({ name, value }) => { + let typeMatch = name.match(alpineAttributeRegex()); + let valueMatch = name.match(/:([a-zA-Z0-9\-_:]+)/); + let modifiers = name.match(/\.[^.\]]+(?=[^\]]*$)/g) || []; + let original = originalAttributeOverride || transformedAttributeMap[name] || name; + return { + type: typeMatch ? typeMatch[1] : null, + value: valueMatch ? valueMatch[1] : null, + modifiers: modifiers.map((i) => i.replace(".", "")), + expression: value, + original + }; + }; + } + var DEFAULT = "DEFAULT"; + var directiveOrder = [ + "ignore", + "ref", + "data", + "id", + "anchor", + "bind", + "init", + "for", + "model", + "modelable", + "transition", + "show", + "if", + DEFAULT, + "teleport" + ]; + function byPriority(a, b) { + let typeA = directiveOrder.indexOf(a.type) === -1 ? DEFAULT : a.type; + let typeB = directiveOrder.indexOf(b.type) === -1 ? DEFAULT : b.type; + return directiveOrder.indexOf(typeA) - directiveOrder.indexOf(typeB); + } + function dispatch3(el, name, detail = {}) { + el.dispatchEvent(new CustomEvent(name, { + detail, + bubbles: true, + composed: true, + cancelable: true + })); + } + function walk(el, callback) { + if (typeof ShadowRoot === "function" && el instanceof ShadowRoot) { + Array.from(el.children).forEach((el2) => walk(el2, callback)); + return; + } + let skip = false; + callback(el, () => skip = true); + if (skip) + return; + let node = el.firstElementChild; + while (node) { + walk(node, callback, false); + node = node.nextElementSibling; + } + } + function warn(message, ...args) { + console.warn(`Alpine Warning: ${message}`, ...args); + } + var started = false; + function start2() { + if (started) + warn("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."); + started = true; + if (!document.body) + warn("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's ` diff --git a/resources/js/componentss/shared/builder/pageBuilder/skeletons/PageSkeleton.vue b/resources/js/componentss/shared/builder/pageBuilder/skeletons/PageSkeleton.vue index 2b0312b..ab1b6b1 100644 --- a/resources/js/componentss/shared/builder/pageBuilder/skeletons/PageSkeleton.vue +++ b/resources/js/componentss/shared/builder/pageBuilder/skeletons/PageSkeleton.vue @@ -1,5 +1,5 @@